当前位置: 首页 > news >正文

基于单片机的两路PWM信号输出及频率占空比相位差调节系统

基于单片机的两路PWM信号输出及频率占空比相位差调节系统设计

点击链接下载资料:https://download.csdn.net/download/m0_51061483/92081465


1. 系统功能介绍

本系统基于51单片机设计,旨在实现两路PWM信号的独立输出,并可通过按键实时调节其频率、占空比及相位差。PWM(Pulse Width Modulation,脉宽调制)信号广泛应用于电机控制、信号调制、功率控制以及信号仿真等领域,因此本系统不仅具有实验教学价值,还可作为通用信号源模块应用于各类嵌入式开发场景。

系统主要功能如下:

  1. 双路PWM信号输出:通过定时器实现两路可调PWM波形输出,信号频率和占空比均可独立调节。
  2. 频率可调:系统支持通过按键切换不同频率档位,输出频率可在数百Hz到数十kHz范围内调节。
  3. 占空比可调:用户可通过按键调节PWM波形的高电平占比,实现信号强度或功率控制。
  4. 相位差可调:两路PWM信号之间的相位差可手动设置,适用于相移控制、电机驱动及逆变实验等应用。
  5. LCD1602实时显示:液晶屏实时显示当前PWM信号的频率、占空比及相位差值,方便用户观察与调整。
  6. 按键人机交互:设置四个按键,分别用于频率加减、占空比加减和相位差调节,操作简便直观。
  7. 稳定可靠:系统采用定时器精确计时、软件延时微调、抗抖处理等技术,保证输出波形的稳定性与可重复性。

该系统可广泛应用于信号仿真、电机调速实验、电子教学平台及PWM控制相关领域。


2. 系统电路设计

本系统电路设计以STC89C52单片机为核心,外围包括LCD1602液晶显示模块、按键输入模块、PWM输出电路及电源管理模块。各模块相互协作,实现PWM信号的精确生成与参数调节。


2.1 单片机控制模块

系统采用 STC89C52 单片机 作为核心控制单元。该芯片基于8051内核,内置8KB Flash存储器和256B RAM,具备丰富的I/O端口和3个16位定时器,可满足多路PWM信号的生成需求。

在本系统中,单片机承担以下任务:

  • 利用定时器产生周期性PWM信号;
  • 根据按键输入调整频率、占空比及相位差;
  • 实时更新LCD1602显示内容;
  • 实现两路PWM信号的同步与相移输出。

主控引脚分配如下:

  • P1.0:PWM1信号输出;
  • P1.1:PWM2信号输出;
  • P2口:LCD1602数据总线;
  • P3.0~P3.3:按键输入端;
  • P2.6、P2.7:LCD1602控制端RS、EN。

单片机系统采用12MHz晶振电路,保证内部时钟稳定,配合上电复位电路实现可靠启动。


2.2 LCD1602液晶显示模块

LCD1602是一种常用的字符型液晶显示器,可显示两行共16个字符,适合用于显示PWM参数。
在本系统中,LCD用于显示以下信息:

  • 第一行:显示当前PWM信号的频率;
  • 第二行:显示占空比与相位差。

例如:

FREQ:1.00kHz
DUTY:50% PHASE:90°

LCD采用4位数据总线方式与单片机通信,以节省I/O资源。控制线RS、EN分别连接至P2.6、P2.7,RW接地以简化控制逻辑。LCD通过标准指令初始化与显示更新,单片机通过函数调用完成显示刷新。


2.3 按键输入模块

系统设置四个独立按键,用于用户输入调节指令:

  • K1:增加频率;
  • K2:减少频率;
  • K3:增加占空比;
  • K4:增加相位差。

按键采用独立下拉电阻结构,按下时输入端为高电平。每个按键均配有软件防抖逻辑,确保输入信号的稳定与准确。

每次按键操作后,单片机立即更新内部参数表,并重新计算PWM输出参数,刷新LCD显示结果。


2.4 PWM输出电路

PWM输出信号通过单片机I/O口直接输出,若用于高功率场合(如电机控制),可通过MOSFET或达林顿管扩流。

系统设计两路独立PWM输出端:

  • PWM1信号用于基准通道;
  • PWM2信号可调相位差。

输出信号可直接接入示波器观察波形变化,用于验证频率、占空比与相位差调节的正确性。

PWM信号的生成基于 定时器中断机制:定时器按照设定周期溢出,在中断服务函数中改变输出引脚电平,实现周期性方波输出。两路PWM可分别使用定时器0与定时器1生成。


2.5 电源与稳定模块

系统工作电源为5V直流电压,采用7805稳压芯片提供稳定电源。LCD1602与单片机共用电源,按键模块与PWM输出端均连接电源地,以避免地电位差造成误触发。


3. 系统程序设计

系统软件采用 C语言 编写,开发环境为Keil uVision。整个程序结构采用模块化设计,主要分为:

  • 主控制程序;
  • 定时器PWM控制程序;
  • 按键扫描与参数调节模块;
  • LCD显示驱动模块;
  • 相位差控制模块。

系统通过中断方式实现PWM信号的实时刷新,主循环则处理参数更新与LCD显示。


3.1 主程序设计

主程序主要实现系统初始化、按键检测和参数刷新逻辑。初始化阶段完成定时器、LCD与中断的配置,随后进入循环检测用户输入,根据按键更新频率、占空比与相位差。

主程序框架如下:

#include <reg52.h>
#include "lcd1602.h"
#include "key.h"
#include "pwm.h"unsigned int freq = 1000;  // 初始频率 1kHz
unsigned char duty = 50;   // 初始占空比 50%
unsigned char phase = 0;   // 初始相位差 0°void main()
{LCD_Init();PWM_Init();Key_Init();LCD_Show(freq, duty, phase);while(1){Key_Scan(&freq, &duty, &phase);  // 按键检测与参数调整LCD_Show(freq, duty, phase);     // 刷新显示}
}

该程序结构简洁,主循环主要负责用户交互和显示更新,而PWM信号生成在中断中完成,互不干扰,系统运行稳定。


3.2 PWM信号控制程序设计

PWM信号由定时器中断实现。定时器溢出周期由频率参数计算得到,占空比通过比较计数器值与阈值关系决定输出高低电平。

PWM程序示例如下:

#include <reg52.h>sbit PWM1 = P1^0;
sbit PWM2 = P1^1;unsigned int pwm_period = 1000;
unsigned int pwm_high1 = 500;
unsigned int pwm_high2 = 500;
unsigned int phase_delay = 0;void PWM_Init()
{TMOD = 0x11;  // 定时器0、1均为模式1(16位)TH0 = (65536 - pwm_period) / 256;TL0 = (65536 - pwm_period) % 256;ET0 = 1;TR0 = 1;TH1 = (65536 - pwm_period) / 256;TL1 = (65536 - pwm_period) % 256;ET1 = 1;TR1 = 1;EA = 1;
}void Timer0_ISR(void) interrupt 1
{static unsigned int cnt1 = 0;cnt1++;if(cnt1 < pwm_high1)PWM1 = 1;elsePWM1 = 0;if(cnt1 >= pwm_period) cnt1 = 0;
}void Timer1_ISR(void) interrupt 3
{static unsigned int cnt2 = 0;cnt2++;if(cnt2 < pwm_high2)PWM2 = 1;elsePWM2 = 0;if(cnt2 >= pwm_period) cnt2 = 0;
}

通过修改 pwm_periodpwm_high1pwm_high2,即可实时调整PWM频率与占空比;而相位差则通过控制 Timer1 启动延时来实现。


3.3 相位差调节模块

两路PWM信号之间的相位差由时间延迟决定。假设周期为T,相位差φ(度)对应时间延迟为:

[
t_{delay} = \frac{T \times \phi}{360}
]

通过软件延时控制 Timer1 的启动时刻,可实现任意相位差输出。

示例代码:

void Set_Phase(unsigned char phase)
{unsigned int delay_time;delay_time = (pwm_period * phase) / 360;Delay_us(delay_time);  // 精确延时启动TR1 = 1;  // 启动第二路PWM定时器
}

3.4 按键扫描与参数调节程序设计

按键扫描模块检测用户输入,根据按键动作改变PWM参数,并进行上下限保护。

void Key_Scan(unsigned int *freq, unsigned char *duty, unsigned char *phase)
{if(K1 == 0) { *freq += 100; Delay_ms(200); }if(K2 == 0 && *freq > 100) { *freq -= 100; Delay_ms(200); }if(K3 == 0 && *duty < 100) { *duty += 5; Delay_ms(200); }if(K4 == 0 && *phase < 180) { *phase += 10; Delay_ms(200); }
}

3.5 LCD显示程序设计

LCD模块通过简单函数调用实时刷新显示内容:

void LCD_Show(unsigned int freq, unsigned char duty, unsigned char phase)
{char buf[16];LCD_SetCursor(0,0);sprintf(buf,"FREQ:%4dHz",freq);LCD_WriteString(buf);LCD_SetCursor(1,0);sprintf(buf,"D:%3d%% P:%3d",duty,phase);LCD_WriteString(buf);
}

4. 系统总结

本设计实现了一个基于51单片机的两路PWM信号输出与参数调节系统,具有如下优点:

  • 结构简单,控制灵活:采用双定时器独立控制,信号互不干扰;
  • 参数可视化调节:通过LCD实时显示频率、占空比与相位差;
  • 稳定性强,易于扩展:系统可拓展至多路PWM输出或加入通信接口;
  • 应用广泛:可用于PWM教学实验、电机控制、电源逆变及信号仿真等领域。

通过该系统,用户可直观地理解PWM波形的调制原理,掌握定时器中断、相位差控制与信号合成技术,为进一步学习数字控制与信号处理奠定坚实基础。

http://www.dtcms.com/a/520864.html

相关文章:

  • uniapp三端影视源码苹果cms自动采集电影视频网站源码前端源码带VIP
  • 算法学习笔记-贪心算法总结
  • 山东省建设工程招标中心网站旅游网站前台怎么做
  • 常见神经网络
  • 公司网站ICP怎么备案呢网站维护界面
  • 建一个在线商城网站重庆做学校网站公司
  • HNSW算法实战:用分层图索引替换k-NN暴力搜索
  • 做公司网站的费用计入什么科目做三网站
  • 优秀集团网站部署个人网站
  • 大模型命名标识全解析:系统梳理与深度解读
  • 网站做关键词库的作用软件开发流程图名称
  • 无锡新区建设局网站温州专业营销网站费用
  • 数据结构——红黑树
  • 找北京赛车网站开发东营市做网站的公司
  • Agentic 组织-人和智能体协作的组织形态
  • 扩散模型与PINN融合的六大创新方向
  • pyside中多线程编程案例模型
  • 怎么做整蛊网站wordpress注册rest
  • 网站开通微信支付收费免费的ppt模板下载软件
  • 快速开发工具网站长沙网页制作设计
  • wordpress 搬站长沙企业seo服务
  • [人工智能-大模型-54]:模型层技术 - 数据结构+算法 = 程序
  • PHP调试,宝塔xdebug+vscode
  • 直接做的视频网站制作网站品牌公司
  • 【TypeScript】TypeScript 内置的工具类型(十四)
  • 烟台建设集团招聘信息网站自然堂网站建设情况
  • 网站开发文档的示例上海广告公司联系方式
  • Java(方法引用)
  • 让类支持比较操作:Python魔法方法详解与实践指南
  • 国产化Excel开发组件Spire.XLS教程:在Python中将Pandas DataFrame导出到Excel的详细教程