当前位置:首页 > SG90舵机控制STM32(附视频讲解) >

SG90舵机控制STM32(附视频讲解)

来源 德薄能鲜网
2025-06-24 12:52:56

目录。

前言:

一、硬件准备与接线。

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舵机角度可精确控制。关键是正确配置定时器的预分频值和自动重装载值,从脉宽合理映射角度。该方案成本低,可靠性高,适用于机器人、智能家居等应用场景。