1. 系统概述
点击链接下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081465
基于单片机的两路PWM信号输出及频率占空比相位差调节系统是一种面向数字信号控制与嵌入式信号生成应用的实验与工程平台。PWM(Pulse Width Modulation,脉宽调制)技术在电机控制、电源调节、信号模拟以及通信系统中具有广泛应用。本系统以51单片机为核心控制器,通过软件定时与硬件计时相结合的方式,实现两路独立PWM信号的生成,并支持对频率、占空比以及相位差的实时调节。
系统不仅具备基础PWM输出能力,还通过按键交互方式实现参数动态修改,同时借助LCD1602液晶显示模块实时显示当前输出状态,使系统具有良好的可视化操作体验与工程实用性。
整体系统结构清晰,控制逻辑明确,适用于嵌入式课程设计、数字电源控制实验以及电机控制基础研究。
2. 系统功能设计
2.1 两路PWM信号输出功能
系统核心功能是输出两路独立PWM信号:
text
PWM1:通道1信号输出
PWM2:通道2信号输出
两路信号可以独立控制,占空比与频率可分别调节。
PWM信号特点:
text
周期性方波
高低电平可调
平均电压可控
适用于模拟控制信号或驱动执行器。
2.2 频率调节功能
系统支持PWM频率调节,用户通过按键改变定时参数。
频率范围设计:
text
1Hz ~ 10kHz(软件可扩展)
频率变化本质:
text
f = 1 / T
通过调整定时器重装值实现频率变化。
2.3 占空比调节功能
占空比表示高电平时间占周期比例:
text
D = Ton / T × 100%
系统支持动态调节:
text
0% ~ 100%
通过改变高电平与低电平时间比例实现控制。
2.4 相位差调节功能
系统支持两路PWM之间的相位差控制。
相位差定义:
text
φ = (Δt / T) × 360°
控制方式:
- 延迟启动第二路PWM
- 调整计时偏移量
实现不同控制波形同步或错位输出。
2.5 按键控制功能
系统通过按键实现参数调整:
text
KEY1:频率增加
KEY2:频率减少
KEY3:占空比增加
KEY4:占空比减少
KEY5:相位差增加
KEY6:相位差减少
实现人机交互控制。
2.6 LCD显示功能
系统通过LCD1602显示实时参数:
text
FREQ: 1000Hz
DUTY: 60%
PHASE: 90°
便于用户观察当前状态。
3. 系统总体设计方案
3.1 系统结构组成
系统主要由以下模块构成:
- STC89C52单片机最小系统
- PWM输出模块(双通道)
- 按键输入模块
- LCD1602显示模块
- 定时器控制模块
- 电源模块
系统结构如下:
text
按键输入
↓
单片机控制核心
┌──┬────┬────┐
↓ ↓ ↓ ↓
PWM1 PWM2 LCD Timer
3.2 系统工作流程
text
系统上电
↓
初始化
↓
参数默认设置
↓
PWM开始输出
↓
按键调节参数
↓
实时更新PWM
↓
LCD显示状态
4. 系统电路设计
4.1 单片机最小系统设计
系统采用STC89C52作为核心控制器。
4.1.1 时钟电路
text
11.0592MHz晶振
作用:
text
提供系统运行时基准时钟
4.1.2 复位电路
采用RC复位电路:
text
上电自动复位
确保系统稳定启动。
4.2 PWM输出电路设计
PWM信号通过单片机IO口输出。
输出特点:
text
TTL电平 0V / 5V
驱动方式:
- 直接IO输出
- 定时器中断控制
适用于外部驱动电路扩展。
4.3 按键输入模块设计
采用独立按键结构。
按键连接方式:
text
上拉电阻 + 低电平触发
软件处理:
text
消抖处理 + 状态检测
4.4 LCD1602显示模块设计
LCD用于显示参数。
接口方式:
text
8位并行通信
RS RW E 数据线
显示内容:
text
PWM频率
占空比
相位差
4.5 定时器模块设计
系统采用定时器生成PWM基准。
工作原理:
text
定时中断 → 翻转IO口 → 生成PWM
通过调整重装值改变频率。
4.6 电源模块设计
系统采用5V直流供电。
供电对象:
- 单片机
- LCD模块
- 按键模块
保证系统稳定运行。
5. 系统程序设计
5.1 软件总体结构
系统采用模块化设计:
text
主程序
PWM生成程序
定时器中断程序
按键扫描程序
LCD显示程序
参数处理程序
5.2 主程序设计
c
void main()
{
System_Init();
while(1)
{
Key_Scan();
PWM_Update();
LCD_Display();
}
}
5.3 系统初始化程序
c
void System_Init()
{
Timer0_Init();
LCD_Init();
Freq = 1000;
Duty = 50;
Phase = 0;
}
5.4 PWM生成程序设计
通道1PWM
c
void PWM1()
{
if(flag1)
PWM1_PIN = 1;
else
PWM1_PIN = 0;
}
通道2PWM(带相位差)
c
void PWM2()
{
Delay(Phase);
if(flag2)
PWM2_PIN = 1;
else
PWM2_PIN = 0;
}
5.5 定时器中断程序设计
c
void Timer0_ISR() interrupt 1
{
counter++;
if(counter >= Period)
{
counter = 0;
PWM_Flip();
}
}
用于生成PWM周期。
5.6 频率调节程序设计
c
void Set_Freq(int f)
{
Period = 1000000 / f;
}
实现频率动态调整。
5.7 占空比调节程序设计
c
void Set_Duty(int duty)
{
High_Time = Period * duty / 100;
Low_Time = Period - High_Time;
}
控制高低电平比例。
5.8 相位差控制程序设计
c
void Set_Phase(int p)
{
Phase = (Period * p) / 360;
}
实现相位偏移。
5.9 按键扫描程序设计
c
void Key_Scan()
{
if(KEY1 == 0)
Freq++;
if(KEY2 == 0)
Freq--;
if(KEY3 == 0)
Duty++;
if(KEY4 == 0)
Duty--;
if(KEY5 == 0)
Phase++;
}
5.10 LCD显示程序设计
c
void LCD_Display()
{
LCD_ShowString(0,0,"F:");
LCD_ShowNum(2,0,Freq);
LCD_ShowString(0,1,"D:");
LCD_ShowNum(2,1,Duty);
}
6. 系统运行过程分析
系统启动后,单片机完成初始化配置,PWM默认输出设定频率与占空比的方波信号。用户通过按键调节频率、占空比及相位差,系统实时响应参数变化,并更新PWM输出信号。定时器中断不断触发PWM翻转逻辑,实现稳定波形输出。同时LCD1602实时显示当前参数,使用户能够直观观察系统状态。两路PWM信号在相位控制下可实现同步或错位输出,适用于电机控制与信号实验应用。
7. 系统总结
本系统基于51单片机实现了双路PWM信号生成与参数可调控制功能,通过定时器中断与软件控制结合的方式实现频率、占空比及相位差的动态调节。系统结构清晰、控制逻辑灵活、扩展性强,适用于嵌入式控制教学、电机驱动实验以及数字信号生成应用场景,具有较高的工程实践价值与学习参考意义。