树莓派+停不下来的MG996r舵机(360度)

朋友们,离谱啊,离谱啊

事情是这样:我是个搞艺术的,做装置要用树莓派驱动舵机,能360度转还得说停就停;用的是树莓派4+python3+微雪的Servo Driver HAT扩展板+MG996r舵机。

因为我在这方面完全是菜鸡,基本上做作品要用啥技术就学啥,所以一开始看着我的舵机跟嗑药一样死活不停,结束程序没用,break也没用,去掉while true也没用,重启也没用...唯有断电才能停下时...我很绝望

然后仔细研究了360度舵机的工作原理和运作机制。发现应该是程序结束时没有把pwm输出停在基准脉宽,也就是死区造成的。

360度舵机的标准死区是1500也就是1.5ms,但是每个舵机都有点偏差;我看到有外网的朋友5微秒5微秒的调试...好吧我也试试

然后我试到1480的时候,累了,每次结束了程序还是在微微反转。

于是我很自暴自弃地试了1400,我觉得这下你该正转停不下来了吧(这里有点想排除基准死区偏差的意思,如果还是微微反转我就觉得应该是其他问题了)

结果他停了...

然后我试了四个舵机,全是1400就停了。

就,离谱,虽然开心,但还是暗觉离谱。

舵机MG996R是一款常见的微电机,常用于机器人、无人机等项目中的精确控制。360旋转意味着它可以转动整个圆周,通常用于需要全方位移动的应用。与STM32这样的微控制器配合使用,可以实现精确的步进控制或者PWM信号驱动。 以下是一个简单的教程步骤概述: 1. **硬件连接**: - 将MG996R电源线连接到STM32的VCC(5V)和GND(地)。 - 数据线(一般棕色或黑色)连接到STM32的数字IO口,如PA8或PB5,并设置为推挽输出模式。 2. **初始化GPIO**: 使用STM32的GPIO库函数,配置连接的数据口为输出模式。 3. **编写控制代码**: - 创建一个函数,通过计算并发送脉冲宽调制(PWM)信号,指定舵机的角。例如,一个完整的行程大约需要1.5ms~2ms的脉冲,每个12%的幅对应约1.5°的角变化。 4. **角控制**: - 用户通过程序设定目标角,将角转换为对应的PWM占空比值。 - 发送PWM信号,持续调整占空比直到达到目标角。 5. **处理中断** (可选): 如果需要支持连续旋转,可以添加中断功能检测到达极限位置,然后反转方向。 ```c // 示例代码片段 void servoControl(float angle) { uint16_t pulse = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); STM32_GPIO_SetPulseOut(GPIO_PORT, GPIO_PIN, pulse); } int main(void) { // ...其他初始化步骤... servoControl(90); // 设置初始角 while (1) { // ...处理用户输入,更新角需求... servoControl(newAngle); } } ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值