More than code

More Than Code
The efficiency of your iteration of reading, practicing and thinking decides your understanding of the world.
  1. 首页
  2. 未分类
  3. 正文

opencat 2 servo

2024年6月23日 244点热度 0人点赞 0条评论

这次单独看看servo的测试

https://www.corvin.cn/3331.html 这里有介绍Servo的文章,感觉讲的不错

  • 对于180度的舵机,是通过固定的频率,然后控制占空比来控制舵机的转动

    这里有一个特殊的点是,舵机的移动是根据脉宽时间来的,所以只要周期大于2.5ms都可以进行控制。这里opencat用的频率是240
  • 对于360度的电机,区别是舵机不是转到特定的角度,而是以一个速度不停的转动。
    • 0.5ms:是正向的最大转速
    • 1.5ms:速度为0,停止转动
    • 2.5ms:反向最大转速

回过头来看看Servo库的逻辑:
* 用opencat中的舵机举例子,他的min max是500/2500,angle是270,然后freq是240
* timer_width,即占空比的精度是16位,即65536
* period即周期长度是 1000 * 1000 / freq = 4166
* ticks为 default_pulse_width * timer_width_ticks / period = 2w多,这个意思是,默认情况下,宽度是1.5ms,然后一个周期这里计算出来是4.1ms,一除就得到了占空比,然后再乘上精度单位65536,就是要发送给电机的占空比
* pwd.attachPin,这里直接就是ledcSetup,设置timer width,以及freq。以及ledcAttachPin
* 后续写入的时候,用目的的角度,和max 270,映射到500~2500这个区间上,就是pulse_width,按照上面的方式就可以算出来需要写入多少tick了
* 读取的话,因为每次写入都记录了上次写入的ticks,这里直接转化一下就得到了,并没有去读取PWM中的数据。一个可能的问题是,如果不读取电机中的角度的话,会导致这个转动没有反馈,可能不能很好的做控制?

Servo的基本读写差不多就是这样,一些动态调整timer width,以及freq什么的暂时就不关注了

标签: 暂无
最后更新:2024年6月23日

sheep

think again

点赞
< 上一篇
下一篇 >

文章评论

取消回复

COPYRIGHT © 2021 heavensheep.xyz. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS