光电传感器判断转动方向
最近接了一个项目,是做一个绕线机,一般用来绕变压器线圈,已经基本做好了,原理并不难,就是根据你输入的一些参数,比如漆包线的直径以及每一层的圈数还有就是一共要绕多少圈,然后由控制器控制步进电机根据光电传感器的信号来回运动,已达到均匀绕线的目的。 其实这个项目拖了很长时间,因为自己拖延症太严重,而且中间又发生了很多事情,导致项目中间耽搁了很久,还好甲方没有在意,也没有太催我,上周终于下定决心要结束了这个项目,于是就用了一个下午还有晚上的时间完成了这个项目,因为手头没有合适的漆包线,于是就用了直径较细的焊锡丝代替,经过测试效果很好,因为步进电机的转动是通过细分的,所以可以做到很精细的控制,经过测试,精度可以达到0.0035mm,而甲方的要求是0.01mm,也算是完全符合要求了,于是我就把测试视频发给了甲方,甲方首先给予了肯定(那是必然呀,哈哈哈哈),然后给我发了一个红包,我一个疑惑,然后他就提出了一个新的需求,就是希望能够做到反转退线的功能,并且这种情况下能做到减计数。 我思考了一下,觉得是可以做到的,用一个光电传感器是可以判断转动的次数,那用两个光电传感器就可以判断次数和转动方向,原理是根据两个光电传感器被遮挡的先后来判断转动方向,例如光电1先被遮挡,然后光电2又被遮挡,则认为是正转,反之则认为是反转,理论可行,就差一个实践了,于是就修改了一下硬件(因为第一版硬件只留出了一个光电接口,而且少画了一个二极管),又发去打了一次板,板子还没到,所以也还没开始验证,应该是可以的,所以就等之后板子到了再验证下。 板子已经到了,经过验证,完全没问题,算是满足了甲方所有的要求,很开心,也收到了剩下的款项,基本这个项目是告一段落了; 下边是关于这个算法的程序: void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { uint32_t i = 0; if (GPIO_Pin == guangdian_Pin) { i = 65535; while (i--) ; i = 6553; while (i--) ; if (HAL_GPIO_ReadPin(guangdian_GPIO_Port, guangdian_Pin) == 0) { if (flag_stop == 0) { if (cnt_sum == 0) { flag_dir = N0; } if (cnt_sum % N2 == 0) { flag_dir = !flag_dir; } if (time_k1_temp