前言
最近博主在尝试驱动SG90舵机的时候,发现网上教程都是通过定时器的方式,还要进行各种配置,太麻烦了,于是自己用延时简单写了一下,也能用。
舵机的控制
舵机控制就是需要一个20ms的脉冲信号,通过高电平的持续时间来转动不同的角度,很多人都说通过定时器来产生这个脉冲,但是如果只是简单的处理,直接用延时处理就行了
代码
/*
* 函数内容:初始化舵机引脚
* 函数参数:无
* 返回值: 无
*/
void Init_SG90(void)
{
GPIO_InitTypeDef temp;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
temp.GPIO_Mode=GPIO_Mode_Out_PP;
temp.GPIO_Pin=GPIO_Pin_8;
temp.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&temp);
}
/*
* 函数内容:控制舵机转动
* 函数参数:高电平持续时间-us,
500us,0°
1000us,45°
1500us,90°
2000us,145°
2500us,180°
就是一个pwm信号,在20ms的周期内,控制高电平持续的时间对应转动不同的角度
循环10次是为了给他提供一个周期信号,防止舵机没有反应
* 返回值:无
*/
void Control_SG90(uint32_t us)
{
int i=0;
for(i=0;i<10;i++)
{
if(us<=20000)
{
PBout(8)=1;
delay_us(us);
PBout(8)=0;
delay_us(20000-us);
}
}
}
直接通过延时模拟就行,注意不要直接使用delay_ms,参数都说uint类型的,2.5这种浮点数会被隐式转换掉然后导致转动角度不符合。