一.概要
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波高电平时间对应旋转角度
五.STM32单片机驱动SG90舵机180度来回旋转实验
板子与SG90舵机(180度舵机)用杜邦线连接:
板子5V----红色线
板子A6----橙色线
板子G-----棕色线
5V USB线把板子与电脑相连
打开STM32CubeMX软件,新建工程
Part Number处输入STM32F103C8,再双击就创建新的工程
配置下载口引脚
配置外部晶振引脚
配置PWM输出,周期20ms
配置系统主频
配置工程文件名,保存路径,KEIL5工程输出方式
生成工程
用Keil5打开工程
添加代码
主要程序:
extern uint16_t Pluse_Time;
/* USER CODE END 0 */
TIM_HandleTypeDef htim3;
/* TIM3 init function */
void MX_TIM3_Init(void)
{
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = 71;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 19999;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_PWM_Init(&htim3) != HAL_OK)
{
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim3, &sMasterConfig) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = Pluse_Time;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
HAL_TIM_MspPostInit(&htim3);
}
uint16_t Pluse_Time=1000;//1毫秒脉冲,单位是us
/* 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外部晶振,72M系统主频
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();//配置PWM输出,PA6
/* USER CODE BEGIN 2 */
Pluse_Time=500;//0.5ms高电平脉冲,用于控制舵机转到0度
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);//PWM停止输出
MX_TIM3_Init();//重新初始化配置PWM波
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1) != HAL_OK)//PA6脚PWM输出
{
/* PWM generation Error */
while(1);
}
HAL_Delay(300);//等待300ms
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);//PWM停止输出
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//以180度角度伺服为例,那么对应的控制关系是这样的(t为高电平时间):
//t=0.5ms(占空比2.5%)---------0°;
//t=1.0ms(占空比5%)-----------45°;
//t=1.5ms(占空比7.5%)---------90°;
//t=2.0ms(占空比10%)---------135°;
//t=2.5ms(占空比12.5%)-------180°;
Pluse_Time=500;//高电平时间=0.5ms,旋转到0度
MX_TIM3_Init();//重新初始化配置PWM波
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1) != HAL_OK)//PA6脚PWM输出
{
/* PWM generation Error */
while(1);
}
HAL_Delay(1000);
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);//PWM停止输出
Pluse_Time=2500;//高电平时间=2.5ms,旋转到180度
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);//PWM停止输出
MX_TIM3_Init();//重新初始化配置PWM波
if (HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1) != HAL_OK)//PA6脚PWM输出
{
/* PWM generation Error */
while(1);
}
HAL_Delay(1000);
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_1);//PWM停止输出
}
/* USER CODE END 3 */
}
六.CubeMX工程源代码下载
通过百度网盘分享的文件:36.SG90舵机180度旋转实验.rar
链接:https://pan.baidu.com/s/1WLVCu6Nf8-3e9AMOdIU5ag
提取码:0e3u
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
七.小结
SG90舵机目前在高档遥控玩具,如航模、包括飞机模型、潜艇模型、遥控机器人中已经使用得比较普遍。