STM32控制舵机的方法及实例

在这篇博客中,我讲解的是SG90的180°型号的舵机。其它型号的舵机也可以参考。
首先,舵机的控制方式是采用PWM方式进行控制的。在使用STM32对舵机进行控制时就需要STM32的引脚输出PWM信号,PWM信号可以通过定时器,delay延时函数等方式产生。 STM32控制SG90舵机其次,舵机的PWM控制信号是有一定的规律的。例如下图的SG90的180°舵机的0°和180°控制信号。STM32控制舵机的方法及实例
图中所示,当STM32引脚输入0.5ms的高电平和19.5ms的低电平时,舵机就可以转到0°位置。相应当输入2.5ms的高电平和17.5ms的低电平时,舵机就会转到180°位置。
如果要想控制舵机转到其它的位置,就需要配置好高电平和低电平在一个周期中的比例。(注意:高低电平需要连续发送)

实例:
我通过STM32F103C8T6来控制SG90的180°型号舵机。我使用的是delay延时函数产生PWM信号。
部分程序如下:
case’1’:
{
delay_us(100);
printf(“左转”);
for(int i=0;i<2;i++)
{
c+=b;
GPIO_SetBits(STEERPORT,STEER);
delay_us(500+c);
GPIO_ResetBits(STEERPORT,STEER);
delay_us(19500-c);
if(c==200)
{
printf(“停止”);
GPIO_ResetBits(STEERPORT,STEER);
break;
}
}
break;
}

case’2’:
{
delay_us(100);
printf(“右转”);
for(int j=0;j<2;j++)
{
c-=b;
GPIO_SetBits(STEERPORT,STEER);
delay_us(500+c);
GPIO_ResetBits(STEERPORT,STEER);
delay_us(19500-c);
if(c==0)
{
printf(“停止¹”);
GPIO_ResetBits(STEERPORT,STEER);
break;
}
}
break;
}

在程序中,我用到了static静态变量(就是程序中的变量c)。
可以通过串口发送’1’(控制舵机左转),‘2’(控制舵机右转)。(注意:每发送一次舵机只会转动一定的角度,如果想让舵机转动较大的角度可以通过多次发送指令完成(在串口的上位机软件中一般都有定时发送功能,可借助该功能完成多次发送))

实例STM32控制舵机的程序下载链接如下: