SG90舵机驱动简介
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在摄像头云台中,我们使用了两个SG90舵机。
舵机的工作原理是:控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服(SG90)为例,那么对应的控制关系是这样的:
0.5ms-------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
SG90接线:红 - 正、棕 - 负、橙 - 信号
STM32CubeMX配置
使用TIM33的通道1、2进行控制。
PWM配置
PWM周期为19.8ms,当设置通道Pulse值在45-225之间时产生的脉冲范围为0.5ms~2.5ms,而且Pulse宽度刚好为180,方便调值。
源码
#include "pwm.h"
#include "oled.h"
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
void Change_Pulse(uint16_t left,uint16_t right)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, left);
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, right);
uint8_t speed[3]={32,32,'%'};
speed[0]=left/100+'0';
speed[1]=(left%100)/10+'0';
OLED_ShowStr(48,5,speed,2);
speed[0]=right/100+'0';
speed[1]=(right%100)/10+'0';
OLED_ShowStr(80,5,speed,2);
}
void Change_Pulse_Left(uint16_t left)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_2, left);
uint8_t speed[3]={32,32,'%'};
speed[0]=left/100+'0';
speed[1]=(left%100)/10+'0';
OLED_ShowStr(48,5,speed,2);
}
void Change_Pulse_Right(uint16_t right)
{
__HAL_TIM_SetCompare(&htim2, TIM_CHANNEL_4, right);
uint8_t speed[3]={32,32,'%'};
speed[0]=right/100+'0';
speed[1]=(right%100)/10+'0';
OLED_ShowStr(80,5,speed,2);
}
void Change_Pulse_Rudder1(uint16_t angle)
{
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_1, angle);
}
void Change_Pulse_Rudder2(uint16_t angle)
{
__HAL_TIM_SetCompare(&htim3, TIM_CHANNEL_2, angle);
}
Copyright © 2004-2024 华清远见教育科技集团 版权所有
京ICP备16055225号-5,京公海网安备11010802025203号