一.背景
在上篇,博主给大家介绍了关于舵机的相关知识以及PWM的控制原理,并且根据410c的特点写了个GPIO口模拟PWM的驱动,但是尽管输出的波形图还算稳定,但相对来讲,PWM作为稳定的硬件通讯信号,是需要时刻保持信号的输出,换言之,假如一个周期20ms,脉宽50%的波形,CPU平均在10ms内调度GPIO进行实时电平改变。上篇博客的stree.c驱动里,我们采用在工作队列里udelay的方式来实现(具体参考http://blog.csdn.net/ad3600/article/details/59484467这篇博客),这在linux这种分时调度系统里是相当消耗CPU资源的做法(CPU占用率:android系统里占25%+,纯linux系统占80%+),但如果换成usleep,或者干脆采用软件定时器来做延时控制,这种方式虽然能极大地降低CPU的占用率,但在linux的这类分时系统里无法保证及时的硬件操作的实时响应,实测波形如下:
图1 PWM波形1
图2 PWM波形2
图3 PWM波形3

本文主要介绍了如何通过PCA9685驱动模块来解决DragonBoard 410c在软件模拟PWM驱动舵机时CPU占用率高的问题。PCA9685是一款I2C总线接口的16位LED控制器,可转换为PWM信号控制舵机。文中详细阐述了PCA9685的实物连接、Linux下的驱动加载及测试过程,通过设置PWM周期和脉宽实现对舵机的角度控制。
最低0.47元/天 解锁文章
7899

被折叠的 条评论
为什么被折叠?



