TM32 标准库 PWM 输出实战:舵机角度控制、直流电机调速模块化驱动

一、项目原理说明

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周洲0830

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值