软件模拟PWM驱动舵机(MG90S)出现抖动问题——确保充足的工作电压很关键

一、本次主要分享控制18个舵机时出现的抖动问题:

起初的时候,18个舵机的VCC(5V)都接到了一起,并没有察觉电压不足导致,一直都觉得是程序的问题,后面也借鉴了其他人的经验,然后测了实际工作电压只有大概3V,所以我把舵机分开供电并且实测电压约5V,舵机都老实了。

二、总结:

控制多个舵机的时候注意电压被分压的情况而导致舵机供电不足出现抖动的问题。

确保充足的工作电压也很关键!!!!!!!!

  • 13
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是使用STM32控制MG995和MG90S舵机的示例代码: ``` #include "stm32f10x.h" #include "delay.h" void TIM3_PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); //使能定时器3时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能GPIOB时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //TIM3_CH3、TIM3_CH4 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置时钟预分频的值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高 TIM_OC3Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC3 TIM_OC4Init(TIM3, &TIM_OCInitStructure); //根据T指定的参数初始化外设TIM3 OC4 TIM_Cmd(TIM3, ENABLE); //使能定时器3 TIM_SetCompare3(TIM3,1500); //MG995中位 TIM_SetCompare4(TIM3,1500); //MG90S中位 } void MG995_SetAngle(u16 angle) { u16 value = (u16)(angle*(2000.0/180.0) + 500); //根据角度计算占空比 TIM_SetCompare3(TIM3,value); } void MG90S_SetAngle(u16 angle) { u16 value = (u16)(angle*(1000.0/180.0) + 500); //根据角度计算占空比 TIM_SetCompare4(TIM3,value); } int main(void) { u16 i; delay_init(); //延时初始化 TIM3_PWM_Init(20000,71); //PWM频率为50Hz while(1) { for(i=0;i<=180;i++) //MG995舵机旋转0~180度 { MG995_SetAngle(i); delay_ms(20); } delay_ms(1000); for(i=0;i<=180;i++) //MG90S舵机旋转0~180度 { MG90S_SetAngle(i); delay_ms(20); } delay_ms(1000); } } ``` 在代码中,TIM3_PWM_Init()函数用于初始化定时器3和GPIO口,其中arr和psc参数用于设置PWM的频率,MG995_SetAngle()和MG90S_SetAngle()函数用于设置舵机的转动角度,delay_ms()函数用于延时。在main()函数中,通过调用MG995_SetAngle()和MG90S_SetAngle()函数,可以控制舵机旋转到指定的角度。 注意:以上代码仅供参考,具体实现可能需要根据舵机和控制器的型号进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小F

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值