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



  • 0_1510798236120_widora鼠标控.JPG
    <iframe height=498 width=510 src='http://player.youku.com/embed/XMzE2MTQ0NjE2NA==' frameborder=0 'allowfullscreen'></iframe>

    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,相对应的速度从最快~静止。
    0_1510798566444_nidec24H.JPG

    4. 与Widora-NEO的连线方式

    pwm0 接应电机的pwm控制线
    pwm1接舵机pwm控制线
    GPIO14 接电机正反转控制线
    GPIO15 接电机急停控制线
    0_1510827941857_widora-pwm接线.JPG

    5. 试验程序结构

    0_1510885125543_motor_c.JPG

    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配置做更新,以控制舵机的偏转。