news 2026/2/11 4:29:38

基于STM32F103实现两路PWM输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32F103实现两路PWM输出

一、硬件连接方案

1. 引脚分配(以TIM3为例)
通道默认引脚重映射引脚适用场景
CH1PA6PB4电机控制/LED调光
CH2PA7PB5伺服电机/呼吸灯
2. 电路设计要点
  • 电机驱动:需外接H桥电路(如TB6612)保护GPIO

  • LED限流:串联220Ω电阻防止烧毁

  • 滤波电路:在电源端添加0.1μF陶瓷电容


二、软件实现代码

1. 定时器初始化(TIM3双通道PWM)
#include"stm32f10x.h"voidTIM3_PWM_Init(u16 arr,u16 psc){GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;// 使能时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);// 引脚重映射配置GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);// PA6→PB4, PA7→PB5// GPIO初始化GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;// 复用推挽输出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);// 定时器基础配置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);// PWM模式配置TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;// PWM模式1TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;// 通道1配置TIM_OCInitStructure.TIM_Pulse=0;// 初始占空比0%TIM_OC1Init(TIM3,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);// 通道2配置TIM_OCInitStructure.TIM_Pulse=0;TIM_OC2Init(TIM3,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);// 使能定时器TIM_Cmd(TIM3,ENABLE);}
2. 占空比动态调整
// 设置通道1占空比(0-100%)voidSet_PWM1_DutyCycle(u8 percent){u16 compare_val=(arr+1)*percent/100;TIM_SetCompare1(TIM3,compare_val);}// 设置通道2占空比(0-100%)voidSet_PWM2_DutyCycle(u8 percent){u16 compare_val=(arr+1)*percent/100;TIM_SetCompare2(TIM3,compare_val);}
3. 主函数示例
intmain(void){// 初始化PWM(周期20ms,频率50Hz)TIM3_PWM_Init(19999,71);// 72MHz/(72)=1MHz → 1MHz/(19999+1)=50Hzwhile(1){// 通道1从0%到100%渐变for(u8 i=0;i<=100;i++){Set_PWM1_DutyCycle(i);Delay_ms(10);}// 通道2从100%到0%渐变for(u8 i=100;i>=0;i--){Set_PWM2_DutyCycle(i);Delay_ms(10);}}}

三、关键参数计算

1. PWM频率公式
频率=72MHz/(预分频系数+1)/(自动重装载值+1)
  • 示例:psc=71, arr=19999 → 72/(72)/(20000)=50Hz
2. 占空比计算
占空比(%)=(CCR值/(ARR+1))×100

四、调试技巧

1. 示波器观察要点
  • 上升沿对齐:确保两路PWM上升沿同步

  • 占空比精度:检查实际值与设定值偏差(应<1%)

  • 死区时间:电机控制需添加死区(建议0.1-0.5μs)

2. 常见问题解决
现象原因解决方案
无输出GPIO未正确映射检查AFIO时钟和重映射配置
占空比失真中断干扰关闭相关中断或提高优先级
频率漂移系统时钟异常验证PLL配置和外部晶振

五、扩展功能实现

1. 输入捕获同步
// 配置TIM3_CH1为输入捕获(用于编码器)TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICInitStructure.TIM_Channel=TIM_Channel_1;TIM_ICInitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;TIM_ICInitStructure.TIM_ICFilter=10;TIM_ICInit(TIM3,&TIM_ICInitStructure);
2. 硬件PWM刹车
// 紧急停止时强制输出低电平voidPWM_Brake(){GPIO_ResetBits(GPIOB,GPIO_Pin_4|GPIO_Pin_5);}

参考代码 STM32F103控制的两路PWM输出www.youwenfan.com/contentcnr/103639.html

六、完整工程配置

  1. CubeMX配置流程

    • 选择STM32F103C8T6

    • 启用TIM3定时器

    • 配置通道1和2为PWM模式

    • 设置时钟树(HSE=8MHz, PLL=9倍频)

  2. Keil工程结构

    Project/ ├── Core/ │ ├── Inc/(头文件)│ └── Src/(源文件)├── Drivers/ │ ├── CMSIS/ │ └── STM32F1xx_HAL_Driver/ └── Middlewares/ └── USB_Device/
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/11 3:44:58

【MySQL】SQL 调优

文章目录SQL 调优压测工具执行计划 Explain关键参数讲解select_typekey_lenrefrowsfilteredpossible_keys 和 key 关系Type 列详解对于 ref ref_or_nullconstExtra 列文章讲解思路&#xff1a;先讲解 SQL 调优依靠的字段和 sql 指令&#xff0c;然后 MySQL 优化文章讲解 MySQL …

作者头像 李华
网站建设 2026/2/11 3:13:27

CANN Runtime:Ascend AI 处理器上的 AI 应用执行引擎

CANN 组织链接&#xff1a; https://atomgit.com/cann runtime 仓库链接&#xff1a; https://atomgit.com/cann/runtime 在人工智能的浪潮中&#xff0c;AI 模型从训练到部署&#xff0c;每一步都离不开高效的基础设施支持。尤其是当模型需要部署到专用 AI 处理器上时&#xf…

作者头像 李华
网站建设 2026/2/11 3:13:20

CANN Catlass:AI 处理器高性能计算的核心引擎

CANN 组织链接&#xff1a; https://atomgit.com/cann catlass 仓库链接&#xff1a; https://atomgit.com/cann/catlass 在人工智能芯片领域&#xff0c;硬件的强大算力需要一套同样强大的软件栈来充分释放。CANN Catlass 正是这样一套扮演着核心角色的高性能基础库。作为 CAN…

作者头像 李华
网站建设 2026/2/11 2:51:32

基于Springboot智慧养老管理系统【附源码+文档】

&#x1f495;&#x1f495;作者&#xff1a; 米罗学长 &#x1f495;&#x1f495;个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 &#x1f495;&#x1f495;各类成品Java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot等项目&#…

作者头像 李华