狗狗的脊椎神经-PCA9685(六)

    胖胖狗有两个功能模块一个是PCA9685舵机控制板,,一个是MPU6050陀螺仪。这次分析PCA9685是怎么工作的,舵机又是如何听从指挥转动,代码都在PA_SERVO.py里面。里面有两个类,一个是Servos舵机总控。一个是PCA9685通讯模块。

这是初始化舵机总控,

i2c是引脚接口,上一篇讲到了是对接ESP32的GPIO18,19口。

这是采用了SoftI2C而不是I2C,我想可能是为了更加灵活吧,加上实际控制要求不高,问题也不大。

    freq是舵机的频率50Hz,min_us和max_us是舵机的最小最大微秒值,每个舵机都有自己的值,换舵机的时候,这几个要更新一下。这个微秒值是什么原理呢?舵机的角度是通过占空比来控制的,当高电平等于0.5ms,也就是500us的时候,舵机角度为0,为啥不是0?因为0.5以下可能有各种杂波信号,很难准确,所以舵机一般都有最小时间,当高电频是2.1ms的时候是180度。通过调整不同的占空比,就可以控制舵机角度。那么还有个50Hz频率,这个是舵机的响应周期,换算过来是20ms一次。通俗来讲,每个舵机一秒可以变化50次,每次间隔20ms。但是这个周期内只能响应一次PWM脉冲频宽。范围是0.5-2.1ms之间,其余的时间就是低电平。  注意一下min_duty和max_duty是把时间转换成了PWM分辨率范围(4096),使用的_us2duty()函数。

   下面要把舵机的50Hz频率,传递个PCA9685舵机板,为啥呢?因为舵机板的频率可有25MHz,远远高出舵机本身。为了保证舵机板知道舵机要用什么频率响应信号,就得告诉舵机控制板这个舵机是个啥节奏。所以最后有一句self.pca9685.freq(freq)代码。这个后面在讲里面怎么回事。

  知道了舵机是怎么控制角度的了,因为舵机采用占空比来调整角度,所以我们用角度来设置舵机的时候,需要个函数进行转换: 

 看看position函数里面,pca9685不是有16个接口嘛,index是第几个的位置,参数degress是角度,radians是弧度,us是微秒时间,duty是直接设置占空比,这些类型可以任意选一个。如果都不选,就读取当前通道的占空比。

  函数内容中,第一个变量span,记得占空比最少的高电平时间,起码是0.5ms吧,那么最大时间2.1ms刨去前面的最小时间,就得到了实际有占空值范围是多少。后面self.degress是舵机最大控制角度,这里是180度的舵机。角度/180就是比例,把这个比例套在span上,就知道了占空比时间是多少了。不过这个地方不是时间,而是按照时间比例计算出来的PWM分辨率的范围值,倒数第二行是保护代码,因为舵机本身无法控制角度最大最小值,如果数值小于0.5就会无效,大于2.1ms就可能烧坏舵机,所以要对最后的占空比做个检测,防止超过0.5-2.1ms的范围。

再来看PCA9685这个类,其他的就是基本的地址访问通讯,照着抄就行了。主要看下面几个地方:

频率转换,上面降到了舵机频率要转换到控制板的频率上去,让控制板按照舵机频率工作,就需要设置舵机控制板的频率,做过嵌入式开发的都知道,而一般的时钟信号发生器,都是通过预分频系数来完成的,不明白的先百度,不了解也没关系,只要知道他需要做个转换就行,公式很简单  分频系数= 控制板频率 /PWM分辨率 /舵机频率  + 0.5,其中0.5是为了向上取整,分频系数必须是整数。 当然如果不理解算法就跳过,记得这里为什么要有这个转换步骤就行了。

下一个函数是

先看duty,记得吧,这个是Servos那边最后会调用的这个函数,传进来的就是根据角度计算出来的占空比, inver设置True表示反过来,value表示非占空比。函数里面调用了pwm(),这个函数是:

把设定的占空比通过i2c传递给舵机。on表示PWM高电平起始时间,off是结束时间,他的分辨率是4096,也就是不管什么占空比都是在这个范围内分配,因为前面都已经完成了时间到分辨率的转换,所以这里直接就是转换过的分辨率值。如:

50%的占空比,分辨率就是 4096*0.5=2048, on就是0,off就是2048.

最后个release函数,不知道注意到了没有,很有意思。来看一下:

遍历16个舵机,每个舵机都设置占空比时间0.

当值为0的时候,占空比结束时间是4096.你想啊,要释放占空比,不应该是0吗?为啥是4096.原来PWM的范围是0-4095.当 超过最大范围的时候,4096就是个特别的操作,表示释放掉所有舵机,处于低电平状态,和0有类似的效果。区别是0表示高电平持续为0,而4096表示没有高电平。弄了好久,还是万能的deepseek牛逼。讲解的很详细了。

中枢神经系传导过程就讲完了。怎么选购和配置舵机,软件如何通过PCA9685控制,大概就是这回事了,不理解就多看几遍。细节问题问问AI,下一篇讲感觉器官陀螺仪了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值