一、项目原理说明
1.PWM 基础
PWM:定时器输出频率固定,通过修改占空比 (CCR 捕获比较值),改变高电平时间。
ARR:自动重装载值,决定 PWM 频率
CCR:捕获比较寄存器,决定占空比
2. 舵机 SG90 参数
- 信号周期:20ms(50Hz)
- 0°:高电平 0.5ms → CCR=500
- 90°:高电平 1.5ms → CCR=1500
- 180°:高电平 2.5ms → CCR=2500
系统时钟 72M,预分频 PSC=71,ARR=19999,得到 50Hz PWM。
3. 直流电机调速
电机只关心占空比大小,频率一般 1‑20KHz;占空比越大转速越快。电机方向需要外接 L298N/L293D 驱动板,PWM 只负责调速。
注意:STM32 IO 不能直接驱动电机、舵机!舵机需要外部 5V 供电,单片机只输出控制信号。
二、硬件资源分配(STM32F103)
- TIM1_CH1 (PA8):SG90 舵机 PWM 输出,50Hz
- TIM3_CH1 (PA6):直流电机调速 PWM 输出,10KHz
- PB0、PB1:L298N 方向控制 GPIO
舵机:外部 5V 供电,GND 必须和单片机共地,否则舵机剧烈抖动。
三、模块化代码 标准库
pwm.h 底层 PWM 驱动头文件
#ifndef __PWM_H
#define __PWM_H
#include “stm32f10x.h”
void TIM1_PWM_SG90_Init(void); //舵机50Hz PWM
void TIM3_PWM_Motor_Init(void); //电机10KHz调速PWM
void SG90_SetAngle(uint8_t angle); //设置舵机角度0~180
void Motor_SetDuty(uint16_t duty); //电机占空比 0~999
#endif
pwm.c
#include “pwm.h”
/**
-
@brief TIM1 CH1 PA8 SG


5万+

被折叠的 条评论
为什么被折叠?



