基于单片机的PWM信号发生器设计与实现
本文设计了一款基于STM32单片机的多通道PWM信号发生器,支持1-4路独立输出,频率1Hz-100kHz可调,占空比0-100%可调。系统采用STM32F103C8T6作为主控,配备12864OLED显示屏和功能按键实现人机交互,通过定时器配置实现标准PWM、互补PWM、方波和三角波输出。硬件设计包括核心控制、信号输出、交互输入和电源存储模块;软件采用模块化设计,实现参数调节、波形切换和数据存储
第一章 设计背景与功能需求
PWM(脉冲宽度调制)信号在电机调速、灯光调光、电源稳压等领域应用广泛。传统PWM发生器多采用专用芯片(如SG3525),存在频率与占空比调节范围有限、参数设置不直观、功能扩展困难等问题。以单片机为核心设计的PWM信号发生器,可通过软件编程灵活调整输出参数,支持多通道独立控制与数字化交互,满足复杂场景下的脉冲调制需求。
本系统核心功能需求明确:一是输出1-4路独立PWM信号,频率范围1Hz-100kHz(步进1Hz可调),占空比0-100%(步进1%可调);二是支持多种波形模式,包括标准PWM、互补PWM(带死区时间0-100μs可调)、三角波、方波;三是具备参数存储功能(保存10组常用参数),支持掉电记忆;四是通过按键与LCD实现人机交互,实时显示当前频率、占空比、通道状态,操作响应时间≤100ms。
第二章 系统硬件设计与选型
系统以STM32F103C8T6单片机为控制核心(相比8位单片机,其定时器资源更丰富,支持高级PWM功能),构建“核心控制-信号输出-参数输入-显示交互”的硬件架构,核心模块如下:
2.1 核心控制与时钟模块
- 主控制器:选用STM32F103C8T6,内置3个16位通用定时器(TIM2-TIM4)和1个高级定时器(TIM1),支持PWM输出、死区控制、互补输出等功能,可同时生成4路独立PWM信号,工作频率72MHz,确保高频信号输出精度。
- 时钟电路:外部8MHz晶振提供基准时钟,经PLL倍频至72MHz,定时器时钟频率72MHz,使PWM频率调节精度可达1Hz(通过预分频器与自动重载寄存器组合实现)。
2.2 PWM输出模块
- 基础输出通道:4路标准PWM信号从TIM1_CH1(PA8)、TIM2_CH1(PA0)、TIM3_CH1(PA6)、TIM4_CH1(PB6)输出,经74HC244缓冲器增强驱动能力,输出电平3.3V,可通过跳线选择是否经三极管(8050)转换为5V输出,适应不同负载需求。
- 互补输出通道:利用TIM1的高级定时器功能,从TIM1_CH1N(PB13)输出与PA8互补的PWM信号,死区时间通过寄存器设置(范围0-100μs,步进1μs),适合电机驱动等需要上下桥臂控制的场景。
- 信号隔离:(可选)对高频输出通道增加光耦(TLP521)隔离,避免负载干扰单片机系统,隔离后输出电流可达50mA,满足小型继电器、MOS管驱动需求。
2.3 输入与交互模块
- 按键输入:6个功能按键,包括“通道切换”“频率+”“频率-”“占空比+”“占空比-”“模式/保存”,连接至STM32的GPIO(PA1-PA5、PB0),采用外部中断触发方式,软件消抖(20ms延迟判断),支持长按快速调节(长按“频率+”时每100ms加10Hz)。
- 显示模块:12864OLED液晶屏(SPI接口,连接PB12-SCK、PB15-MOSI),分辨率128×64,实时显示:当前通道(1-4)、频率(单位Hz/kHz)、占空比(%)、波形模式、死区时间(仅互补模式),界面分区域展示,信息清晰直观。
2.4 电源与存储模块
- 电源模块:输入5V直流(USB或外接电源),经AMS1117-3.3V稳压至3.3V为单片机、OLED供电,电路中加入10μF电解电容与104陶瓷电容滤波,确保电源纹波≤50mV。
- 参数存储:采用AT24C02 EEPROM芯片(I2C接口,连接PB10-SCL、PB11-SDA),容量2KB,可存储10组参数(每组含4通道的频率、占空比、模式),掉电后数据保存≥10年。
第三章 系统软件设计与实现
软件基于Keil MDK5开发,采用模块化设计,核心模块包括PWM参数配置、定时器驱动、按键处理、显示控制、数据存储,程序流程如下:
3.1 PWM信号生成原理
STM32的定时器通过“预分频器(PSC)+自动重载寄存器(ARR)+比较寄存器(CCR)”实现PWM输出:
- 频率计算:PWM频率 = 定时器时钟频率 / [(PSC+1)×(ARR+1)],例如定时器时钟72MHz,PSC=71,ARR=999时,频率=72e6/(72×1000)=1000Hz(1kHz)。
- 占空比计算:占空比 = (CCR+1)/(ARR+1)×100%,例如ARR=999,CCR=499时,占空比=50%。
- 死区控制:高级定时器TIM1的死区发生器(BDTR寄存器)可设置死区时间,计算公式:死区时间=DTG[7:0]×Tck_int,其中Tck_int为定时器时钟周期(72MHz时约13.89ns),通过配置DTG值实现0-100μs可调。
3.2 核心功能模块实现
- 多通道独立控制:为4个通道分别分配定时器通道(TIM1_CH1、TIM2_CH1、TIM3_CH1、TIM4_CH1),通过结构体数组存储各通道参数(频率、占空比、模式),切换通道时仅修改对应定时器的寄存器配置,不影响其他通道输出。
- 波形模式切换:
- 标准PWM:配置定时器为PWM模式1(CCR≤CNT时输出高电平);
- 互补PWM:使能TIM1的互补输出,配置死区时间,适合半桥/全桥电路;
- 方波(占空比固定50%):强制CCR=ARR/2,仅调节频率;
- 三角波:通过定时器更新中断切换PWM极性,模拟三角波输出(频率≤1kHz)。
- 参数调节逻辑:按键输入触发中断后,根据当前通道修改对应参数,频率调节时同步更新PSC与ARR(优先保证ARR为最大值以提高精度),占空比调节时更新CCR,参数修改后立即刷新定时器配置,实现实时输出变化。
3.3 人机交互与数据存储
- OLED显示界面:主界面分为状态栏(通道号、模式)、参数区(频率、占空比、死区时间)、操作提示区(短按/长按功能说明),每100ms刷新一次显示,参数变化时立即更新。
- 参数存储与调用:长按“模式/保存”键2秒进入存储模式,通过“频率+/–”选择存储位置(0-9),短按确认保存;调用时按“模式/保存”键切换至调用模式,选择位置后加载参数至当前通道。
3.4 抗干扰与精度优化
- 频率精度校准:通过示波器测量实际输出频率,计算误差补偿值存储于EEPROM,初始化时加载补偿值修正ARR参数,使1kHz时误差≤0.1%。
- 输出信号滤波:在PWM输出端串联100Ω电阻与100nF电容组成RC低通滤波,减少高频毛刺,使输出波形更平滑(适合模拟电压输出场景)。
第四章 系统测试与优化方向
4.1 性能测试
通过示波器(带宽100MHz)与频率计测试,结果如下:
- 参数范围:频率1Hz-100kHz连续可调(1Hz步进),100kHz时占空比调节范围1%-99%,1Hz时占空比0%-100%可调;
- 精度指标:1kHz-10kHz频率误差≤0.05%,占空比误差≤1%,死区时间设置误差≤2μs;
- 通道独立性:4路同时输出不同频率(如1kHz、10kHz、50kHz、100kHz)时,相互无干扰,波形稳定;
- 响应速度:按键调节后,输出信号参数更新时间≤50ms,满足实时性需求。
4.2 优化方向
- 扩展输出通道:通过增加锁相环芯片(如CD4046)扩展至8路输出,或改用STM32F4系列单片机(含更多定时器);
- 增加DA转换:将PWM信号经RC滤波后通过ADC采集反馈,实现闭环调节,使输出模拟电压精度≤0.5%;
- 上位机通信:增加USB转串口模块(CH340),通过PC软件设置参数并生成波形时序图,适合复杂脉冲序列生成;
- 触摸交互:替换按键为2.4英寸触摸屏,实现滑动调节参数与图形化设置界面,提升操作便捷性。
该PWM信号发生器硬件成本约60元,频率与占空比调节范围宽,支持多种波形模式,可用于电机驱动、开关电源调试、传感器激励等场景,兼具实用性与扩展性。





更多推荐



所有评论(0)