Widora-NEO: pwm控制舵机和电机

!

1. pwm驱动

pwm驱动基于qianrushizaixian编写的OLD模式,详细参见:http://blog.csdn.net/qianrushizaixian/article/details/46536005 . 我把它直接编译成ko文件,放在 widora-openwrt的/lib/modules/3.18.29 目录下,再在/etc/modules.d目录下照样编写一个加载文件,这样就可以在开机的时候自动加载这个pwm驱动模块了.

2. 舵机

采用最普通的SG90型,PWM控制信号周期为20ms, 脉冲宽度从0.5~2.5ms,相对应的舵盘位置从0~180度,这里实际上有个偏差,需要试验调整。 考虑到舵机内部是用电阻片的阻值来反馈转角的,因此这个偏差实际上也不太稳定。驱动电源用6v,用一片7806从7.5v转取。

3. 直流电机

用的是 nidec24H 12V无刷直流伺服电机,实际驱动电源用7.5v。 电机内置驱动,可以输入PWM信号来调速,设有正反转,急停控制线,并带信号输出,一转6个脉冲。 PWM控制信号周期为40us, 脉冲宽度从0~40us,相对应的速度从最快~静止。
!1510798527710-nidec24h.jpg

4. 与Widora-NEO的连线方式

pwm0 接应电机的pwm控制线
pwm1接舵机pwm控制线
GPIO14 接电机正反转控制线
GPIO15 接电机急停控制线
!

5. 试验程序结构

!

pwm_motor.c

一个线程负责创建IPC Sock, 并监听是否有client连接, 有的话加入到socket文件列表中。
另一线程负责扫描socket文件集合,如果有可读数据则读取并更新到共享数据中。
main线程如果发现共享数据有更新则配置对应的PWM和GPIO电平,然后将马达的pwm配置转换成舵机pwm配置用来指示速度,并通过IPC消息队列发送。

mouse_motorctl.c

main线程读取鼠标数据并更新共享数据。
一个IPC socket 客户线程将更新的共享数据发送给IPC socket 服务端.

pwm_actuator.c

main线程读取IPC消息队列中的数据,并对pwm1配置做更新,以控制舵机的偏转。