STM32G474单片机开发入门(二十三)180度SG90舵机详解及实战
SG90舵机目前在航模、遥控机器人中已经使用的比较普遍。本文介绍了180度SG90舵机原理,角度旋转控制,用STM32G474RET6单片机进行舵机180度旋转实验
文章目录
一.概要
SG90舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易驱动起来。

二.SG90舵机介绍
尺寸:21.5mmX11.8mmX22.7mm
重量:9克(1kg=1公斤=2斤)
无负载速度:0.12秒/60度(4.8V)0.002s/度
堵转扭矩:1.2-1.4公斤/厘米(4.8V)
使用温度:-30~~+60摄氏度
死区设定:7us(7MHZ)
工作电压:4.8V-6V
位置等级:1024级
脉冲控制精度为2us
舵机一般可以在0-180度或0-360度转动任意角度,经常用于小车小船转向控制和机械臂的关节等。舵机的转动角度范围不是固定的,一般我们选用0-180度旋转的舵机,简称180度舵机。
三.SG90舵机的原理
舵机的工作原理主要由电机、电子控制板和位置反馈器三部分组成。当系统通过SG90 PWM信号控制电子控制板,电机内部的电机轴向上旋转或下旋转,以此产生转动机械上的输出轴,输出一定的转角位置。位置反馈器会读取输出轴的角度位置信息,并将该信息反馈给电子控制板,从而实现闭环控制。
四.SG90舵机的的角度控制
SG90舵机,首先,控制引脚都是三根线,分别是GND(棕色)、VCC(红色)、PWM(黄色),控制方式也是一样的PWM时序,具体的方法如下:
(1)采用PWM控制的方式来进行舵机的旋转
(2)舵机的控制需要MCU产生一个20ms的脉冲信号,以0.5ms到2.5ms的高电平来控制舵机的角度。
(3)高电平时间跟舵机旋转的角度对应关系:
0.5ms-------------0度;对应函数中占空比为2.5%
1.0ms------------45度;对应函数中占空比为5.0%
1.5ms------------90度;对应函数中占空比为7.5%
2.0ms-----------135度;对应函数中占空比为10.0%
2.5ms-----------180度;对应函数中占空比为12.5%
180舵机是根据接收到的PWM波高电平时间进行旋转,到了指定角度就不旋转了,再发同样的PWM波也不会旋转了,除非换高电平时间不同的PWM波。
视频演示
180度SG90舵机不同PWM波高电平时间对应旋转角度
五.STM32G474单片机驱动SG90舵机180度来回旋转实验
1.硬件准备
STLINK接STM32G474RET6开发板,STLINK接电脑USB口, 板子接5V USB线供电,用3根杜邦线把开发板5V与舵机红色线,开发板GND与舵机棕色线,开发板PB1脚与舵机黄色线相连。

2.创建CubeMX工程
如下图所示,打开STM32CubeMX软件,新建工程。
如下图所示,Part Number处输入STM32G474RE,再双击就创建新的工程。
如下图所示,配置下载口引脚,PA13为SWD的SWDIO脚,PA14为SWD的SWCLK脚。
如下图所示,单片机PWM输出引脚,PB1引脚为TIM3的通道4输出引脚,周期为20ms。
如下图所示,配置系统主频170Mhz,使用外部8MHZ晶振。

配置工程文件名,保存路径,KEIL5工程输出方式,生成工程。

如下图所示,工程中添加舵机控制。
PWM波占空比控制,改变变量值从而控制占空比,Pluse_Time变量的单位是us,如果值为500,就是0.5ms。
主要代码如下
uint16_t Pluse_Time=500;//0.5毫秒脉冲,旋转到0度,MX_TIM3_Init函数里会调用
/* USER CODE END PFP */
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();//8M外部晶振,170MHZ系统主频
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();//定时器3初始化,周期20ms,高电平时间0.5ms
/* USER CODE BEGIN 2 */
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4) != HAL_OK)//PB1脚PWM输出
{
/* PWM generation Error */
while(1);
}
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if(Pluse_Time==500)//如果原先是0.5ms的脉冲,改成2.5ms
{
Pluse_Time=2500;//2.5毫秒脉冲,旋转到180度
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);//PWM停止输出
MX_TIM3_Init();//重新初始化配置PWM波
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4) != HAL_OK)//PB1脚PWM输出
{
/* PWM generation Error */
while(1);
}
HAL_Delay(5000);//等待5秒
}
if(Pluse_Time==2500)//如果原先是2.5ms的脉冲,改成0.5ms
{
Pluse_Time=500;//0.5毫秒脉冲,旋转到0度
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_4);//PWM停止输出
MX_TIM3_Init();//重新初始化配置PWM波
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_4) != HAL_OK)//PB1脚PWM输出
{
/* PWM generation Error */
while(1);
}
HAL_Delay(5000);//等待5秒
}
}
/* USER CODE END 3 */
}
3.实验结果
板子按下复位键,可以看到舵机先旋转到0度,5秒之后又旋转到180度,反复循环。
六.小结
SG90舵机目前在高档遥控玩具,如航模、包括飞机模型、潜艇模型、遥控机器人中已经使用得比较普遍。
更多推荐



所有评论(0)