SG90舵机控制STM32(附视频讲解)
目录。
前言:
一、硬件准备与接线。
1.1 硬件清单。
1.2 接线。
二、 SG90舵机简介。
1.1 外观。
1.2 基本参数。
1.3 引脚说明 。
1.4 控制原理。
1.5 特点。
1.6 常见问题。
三、 简介单片机。
四、 程序设计 。
4.1 定时器配置。
4.2 角度控制函数。
4.3 调用主函数。
五、 总结。
前言:
STM32F103C8T6。 是一款性价比极高的ARM Cortex-M3内核微控制器嵌入式开发应用广泛。SG90舵机。 是小型舵机的代表,常用于机器人、智能家居等场景。本文将通过硬件连接、PWM信号配置、代码实现等步骤,详细说明如何用STM32F103C8T6控制SG90舵机。
视频解释链接:
SG90舵机教学STM32#xff08;#xff09附件代码;
一、硬件准备与接线。
1.1 硬件清单。
器件。 | 数量。 | 备注。 |
---|---|---|
STM32F103C8T6最小系统板。 | 1。 | 核心控制器。 |
SG90舵机。 | 1。 | 工作电压4.8-6V,信号线需要PWM。 |
5V电源模块。 | 1。 | 独立供电避免板载电流不足。 |
杜邦线。 | 若干。 | 连接电路。 |
1.2 接线。
SG90舵机 STM32F103CT6 外部电源。
棕色线(GND) → GND引脚 → GND。
红线(VCC) → 连外部5V → 5V。
橙色线(信号) → PB0(TIM3_CH3)
注意。:若需要驱动多个舵机,建议使用独立电源供电,避免STM32板载电源过载。
二、 SG90舵机简介。
1.1 外观。
1.2 基本参数。
参数。 | 数值。 |
---|---|
工作电压。 | 4.8V - 6V(典型的5V) |
电流消耗。 | 100ma(空闲),250ma(运行) |
扭矩。 | 1.2kg·cm(4.8V),1.6kg·cm(6V) |
转速。 | 0.12秒/60°(4.8V),0.10秒/60°(6V) |
重量。 | 9克。 |
尺寸。 | 22.2mm × 11.8mm × 31mm。 |
转动角度。 | 180°(支持360的部分型号°) |
齿轮材质。 | 塑料(部分型号为金属齿轮) |
接口类型。 | 3针(信号、电源、地面) |
1.3 引脚说明 。
SG90舵机通常有三条线。
棕色线(GND):接地。
红线(VCC):接收电源(4.8V-6V)。
橙色线(#xff09信号线:接收PWM信号控制角度。
1.4 控制原理。
PWM信号控制。:
信号周期:20ms(50Hz)。
脉冲宽度:0.5ms - 2.5ms,对应角度0° - 180°。
1.5 特点。
优点。:
体积小,重量轻。:适用于空间有限的项目。
价格低廉。:低成本,适合批量使用。
易于控制。:标准PWM信号接口,兼容性强。
缺点。:
扭矩较小。:仅适用于轻载场景。
塑料齿轮易磨损。:长期高负荷工作可能会导致损坏。
1.6 常见问题。
1)舵机抖动或不旋转。:
检查电源电压是否足够。
检查PWM信号是否正确。
2) 。舵机发热严重。:
检查是否超载运行。
确保转动范围内无机械阻塞。
3) 。角度不准确。:
PWM信号脉冲宽度的校准。
检查舵机齿轮是否磨损。
三、 简介单片机。
STM32F103C8T6最小系统板:
本文使用的开发板是STM32F103C8T6最小系统板,SG90舵机使用的引脚是PB0引脚。 。
四、 程序设计 。
4.1 定时器配置。
使用 。TIM3。通道3(PB0)PWM生成c;步骤如下::
1) 。时钟配置。:
72MHz(系统时钟;默认配置)#xff0;。
APB1总线预分频率系数为2。
TIM3时钟源于APB1总线(36*2=72MHz。
2) 。计算定时器参数。:
PWM频率。:50Hz → 周期20ms 。
预分频值(PSC):72MHz / (719 + 1) = 1MHz → 每个计数周期为10μs。
自动重装载值(ARR):20,000μs / 10μs = 2000 → 。
ARR = 1999。
(0计数)。
3) 。脉冲宽度计算。(以90°例如):
1.5ms = 1500μs → 。占空比。 = 1500 / 20000 = 7.5%。
比较寄存器(CCR):2000 * 7.5% = 150 → 。
CCR = 150 - 1 = 149。
。
定时器的初始化代码如下:
void SG90_PWM_Init(u16 arr, u16 psc){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 使定时器TIM3时钟,请注意,TIM3时钟为APB1而非APB2 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // PWM输出GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PWM输出通道3定时器TIM3c;TIM3_CH3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // GPIO初始化 TIM_TimeBaseStructure.TIM_Period = arr;///自动重装值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //时钟预分频率 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;///// TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); ///初始化TIM3 /////初始化TIM3_CH3PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC3Init(TIM3, &TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);////使能通道的预装载寄存器 TIM_ARRPreloadConfig(TIM3, ENABLE); //使能量重新装载寄存器 TIM_Cmd(TIM3, ENABLE);//使能定时器TIM3准备工作 }。
初始化参数如下: 。
初始化参数如下: 。
SG90_PWM_Init(1999,719); ///初始化舵机。
4.2 角度控制函数。
将角度转换为相应的空比,角度最大为180° 。
void SG90_Set_Angle(uint8__t angle){ if (angle > 180) angle = 180; uint16_t duty = 10 * (angle + 45) / 9; // 角度转化为占空比 TIM_SetCompare3(TIM3) duty); // 设置占空比 }。
4.3 调用主函数。
SG90_Set_Angle(0); //占空比2.5%,0度delay__0度delay_ms(1000);SG90_Set_Angle(90); //占空比7.5%90度delay__0度delay_ms(1000);
五、 总结。
PWM功能通过STM32F103C8T6定时器c;SG90舵机角度可精确控制。关键是正确配置定时器的预分频值和自动重装载值,从脉宽合理映射角度。该方案成本低,可靠性高,适用于机器人、智能家居等应用场景。