• 方案介绍
  • 相关推荐
申请入驻 产业图谱

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

11/12 16:20
2203
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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

点击下载protues仿真设计资料:https://download.csdn.net/download/m0_51061483/92081465


1. 系统功能概述

本系统基于 51 系列单片机 设计,实现 两路 PWM 信号输出,并支持对 频率、占空比以及两路信号相位差 的实时调节。通过按键进行参数设置,并将当前参数在 LCD1602 液晶屏 上实时显示,方便用户进行监控和操作。该系统广泛适用于电机控制、功率调节、信号调制以及实验室模拟测试等场景。

系统主要功能包括:

  1. 两路独立 PWM 输出
    支持两路独立信号输出,可设置不同频率、占空比以及相位差,满足多样化控制需求。
  2. 频率调节
    用户通过按键设定 PWM 信号的输出频率,实现高精度调速或信号匹配。
  3. 占空比调节
    系统支持占空比动态调整,可实现 0~100% 范围内连续可调,便于控制负载功率。
  4. 相位差调节
    两路 PWM 信号可设置任意相位差,实现多种同步或异步控制效果。
  5. 实时显示功能
    LCD1602 显示当前频率、占空比及两路信号相位差,便于用户直观监控与调整。

2. 系统电路设计

系统电路采用模块化设计,包括 主控单元、PWM 输出模块、按键输入模块、LCD 显示模块、相位调整模块及电源模块,各模块协同实现系统功能。

2.1 主控单元设计

核心采用 STC89C52 单片机,负责对按键输入进行扫描、参数计算、PWM 信号输出控制及液晶显示驱动。

  • I/O 接口分配
    • PWM 输出端口分别连接到 P1.0 与 P1.1;
    • 按键输入连接 P3 端口,采用内部上拉电阻
    • LCD1602 数据口连接 P2 口,控制信号 RS、RW、E 接口单独占用。
  • 任务分配
    • 扫描按键,检测频率、占空比、相位差设置命令;
    • 根据设置参数计算计数器值,生成对应 PWM 信号;
    • 更新 LCD 显示内容,实现实时参数反馈。

2.2 PWM 输出模块

PWM 输出模块通过 单片机定时器(Timer0、Timer1) 生成占空比可调、频率可调的脉冲信号

  • Timer0:控制 PWM1 输出
  • Timer1:控制 PWM2 输出
  • 频率调节方法:通过修改定时器初值改变 PWM 周期,实现频率调节
  • 占空比调节方法:通过定时器溢出中断改变高电平时间长度
  • 相位差调节方法:对第二路 PWM 设置延时启动,形成任意相位差

2.3 按键输入模块

系统设有若干按键,用于参数调节:

  • 频率增加/减少键:实现 PWM 频率精确调节
  • 占空比增加/减少键:调整 PWM 高电平占比
  • 相位差调整键:调节两路 PWM 信号的相位关系

设计特点:

  • 按键采用消抖电路,避免抖动误操作
  • 单片机通过轮询方式或中断方式读取按键状态
  • 支持连续按压自动增减功能,提高操作便捷性

2.4 LCD 显示模块

采用 LCD1602 液晶屏 实时显示两路 PWM 的参数信息:

  • 显示内容:PWM1 频率、占空比,PWM2 频率、占空比,信号相位差
  • 显示刷新:定时更新 LCD 内容,保证实时性
  • 接口设计:数据口 P2,控制端口 RS、RW、E 单独占用,便于高速数据传输

2.5 相位调整模块

相位差通过软件延时或计数器偏移实现:

  • PWM2 输出延时启动:在 PWM1 周期开始时触发延时,形成所需相位差
  • 软件控制精度:通过定时器中断精确控制延时,精度可达微秒级
  • 可调范围:0~360°,用户可通过按键逐步调节

2.6 电源模块

  • 单片机供电:5V 稳压电源
  • PWM 驱动输出:可驱动低功率负载,若需大功率负载,可外接 MOSFET继电器驱动
  • 电源滤波:使用电容滤波,保证 PWM 信号稳定,减少干扰

3. 程序设计

程序采用 C 语言模块化开发,主要包括 主程序、PWM 输出模块、按键扫描模块、LCD 显示模块、相位控制模块及延时控制模块

3.1 主程序设计

主程序完成系统初始化、按键扫描、PWM 输出调度及 LCD 更新。

#include <reg52.h>
#include "pwm.h"
#include "key.h"
#include "lcd.h"

unsigned int pwm1_freq = 1000; // PWM1 频率
unsigned int pwm2_freq = 1000; // PWM2 频率
unsigned char pwm1_duty = 50;  // PWM1 占空比%
unsigned char pwm2_duty = 50;  // PWM2 占空比%
unsigned int phase_diff = 0;    // 相位差, 0~360度

void main()
{
    LCD_Init();
    PWM_Init();
    Key_Init();

    while(1)
    {
        Key_Scan();
        Update_PWM();
        Update_LCD();
    }
}

3.2 PWM 输出程序

通过定时器控制高低电平,实现频率、占空比及相位调节。

void PWM_Init(void)
{
    TMOD = 0x11; // Timer0, Timer1 工作模式1
    TH0 = 0; TL0 = 0;
    TH1 = 0; TL1 = 0;
    ET0 = 1; ET1 = 1;
    EA = 1;
    TR0 = 1; TR1 = 1;
}

void Update_PWM(void)
{
    Set_PWM1(pwm1_freq, pwm1_duty);
    Set_PWM2(pwm2_freq, pwm2_duty, phase_diff);
}

3.3 按键扫描程序

检测频率、占空比和相位差按键输入。

void Key_Scan(void)
{
    if(Freq1_Up_Pressed()) pwm1_freq += 10;
    if(Freq1_Down_Pressed()) pwm1_freq -= 10;
    if(Duty1_Up_Pressed()) pwm1_duty += 1;
    if(Duty1_Down_Pressed()) pwm1_duty -= 1;

    if(Freq2_Up_Pressed()) pwm2_freq += 10;
    if(Freq2_Down_Pressed()) pwm2_freq -= 10;
    if(Duty2_Up_Pressed()) pwm2_duty += 1;
    if(Duty2_Down_Pressed()) pwm2_duty -= 1;

    if(Phase_Up_Pressed()) phase_diff += 5;
    if(Phase_Down_Pressed()) phase_diff -= 5;
}

3.4 LCD 显示程序

实时显示两路 PWM 参数及相位差信息。

void Update_LCD(void)
{
    LCD_ShowString(0,0,"PWM1 F:");
    LCD_ShowNum(0,7,pwm1_freq,4);
    LCD_ShowString(0,12,"D:");
    LCD_ShowNum(0,14,pwm1_duty,2);

    LCD_ShowString(1,0,"PWM2 F:");
    LCD_ShowNum(1,7,pwm2_freq,4);
    LCD_ShowString(1,12,"D:");
    LCD_ShowNum(1,14,pwm2_duty,2);

    LCD_ShowString(1,10,"P:");
    LCD_ShowNum(1,12,phase_diff,3);
}

3.5 相位控制程序

控制第二路 PWM 输出延时启动,实现相位差。

void Set_PWM2(unsigned int freq, unsigned char duty, unsigned int phase)
{
    unsigned int delay_counts = phase * freq / 360;
    Delay_us(delay_counts);
    Set_PWM_Output(freq, duty, 2); // 输出 PWM2
}

4. 系统运行与功能总结

该两路 PWM 信号输出系统充分利用 51 单片机的定时器与 I/O 控制能力,实现了高精度频率、占空比及相位差调节功能。系统特点如下:

  • 两路独立 PWM 输出:可同时输出不同频率、占空比信号,实现复杂控制需求
  • 可调频率与占空比:通过按键动态调整,方便实验和应用
  • 相位差调节功能:支持 0~360° 范围内任意相位差设置
  • 实时显示参数:LCD1602 显示系统状态及参数,操作直观
  • 模块化设计:主控、PWM 输出、按键输入、LCD 显示及相位控制分工明确,便于扩展和维护

该系统适用于实验室教学、PWM 信号仿真、驱动控制及智能电路开发,为用户提供了一套灵活、可调、可靠的双路 PWM 信号输出方案。

相关推荐