基于单片机的正弦波与方波峰峰值与频率测量系统设计

1. 系统总体设计

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

1.1 设计背景

在电子测量与信号分析领域中,信号的幅值、频率以及占空比是最基本且最重要的参数。传统示波器虽然功能强大,但成本较高、体积较大,不适合嵌入式或便携式应用。因此,基于单片机设计一套具备峰峰值、频率及占空比测量功能的系统,具有重要的工程意义与应用价值。

本系统针对正弦波与方波信号,利用A/D采样与定时测量相结合的方法,实现对信号特征参数的高精度测量。通过合理的电路设计与软件算法优化,系统能够将测量误差控制在±1%以内,满足一般电子测量需求。


1.2 系统功能设计

本系统主要实现以下功能:

  1. 峰峰值测量:通过A/D采样获取信号最大值与最小值,计算峰峰值;
  2. 频率测量:通过测量信号周期,计算信号频率;
  3. 占空比测量:针对方波信号,测量高电平时间与周期比值;
  4. 波形识别:自动识别输入信号为正弦波或方波;
  5. LCD显示:显示信号类型、峰峰值、电压单位、频率及占空比;
  6. 高精度测量:整体误差控制在±1%以内。

2. 系统电路设计

2.1 单片机最小系统电路设计

本系统采用STC89C52单片机作为核心控制单元。

最小系统包括:

  1. 晶振电路:采用11.0592MHz晶振,提高计时精度;
  2. 复位电路:RC复位电路保证系统稳定启动;
  3. 电源电路:提供稳定5V电压。

2.2 信号调理电路设计

输入信号可能存在幅值过大或带有负电压的情况,需要进行调理。

设计方案:

  1. 使用运算放大器进行电压跟随或放大;
  2. 加入偏置电路,将信号抬升至0~5V范围;
  3. 设置限幅电路保护ADC输入端;
  4. 加入滤波电路降低噪声干扰。

2.3 A/D采样电路设计

采用ADC0808进行模数转换。

设计要点:

  1. 输入信号接入ADC通道;
  2. 分辨率为8位;
  3. 支持多通道扩展;
  4. 数据输出连接单片机P0口。

2.4 零交叉检测电路设计

用于频率测量与波形识别。

设计方法:

  1. 使用比较器(如LM393)检测信号过零点;
  2. 输出方波信号供单片机捕获;
  3. 提供稳定的周期测量基础。

2.5 定时器与计数电路设计

利用单片机内部定时器实现时间测量。

功能:

  1. 计量周期时间;
  2. 测量高电平持续时间;
  3. 提供频率与占空比计算基础。

2.6 LCD1602显示电路设计

用于显示测量结果。

显示内容包括:

  1. 波形类型(SIN/SQR);
  2. 峰峰值;
  3. 频率;
  4. 占空比。

3. 系统程序设计

3.1 程序总体结构设计

系统程序采用模块化设计,包括采样模块、计算模块、显示模块与测量模块。

主程序如下:

c 复制代码
void main()
{
    System_Init();
    while(1)
    {
        Sample_Data();
        Calculate_Vpp();
        Measure_Frequency();
        Measure_Duty();
        Wave_Identify();
        LCD_Display();
    }
}

3.2 A/D采样程序设计

c 复制代码
unsigned char Read_ADC()
{
    START = 1;
    ALE = 1;
    delay_us(5);
    START = 0;
    ALE = 0;
    
    while(EOC == 0);
    
    OE = 1;
    return P0;
}

用于采集信号电压。


3.3 峰峰值计算程序设计

c 复制代码
void Calculate_Vpp()
{
    max_val = 0;
    min_val = 255;

    for(i=0;i<100;i++)
    {
        val = Read_ADC();
        if(val > max_val) max_val = val;
        if(val < min_val) min_val = val;
    }

    Vpp = (max_val - min_val) * 5.0 / 255.0;
}

实现峰峰值测量。


3.4 频率测量程序设计

c 复制代码
void Measure_Frequency()
{
    TH0 = 0;
    TL0 = 0;
    TR0 = 1;

    while(Zero_Cross == 0);
    while(Zero_Cross == 1);
    while(Zero_Cross == 0);

    TR0 = 0;
    period = (TH0<<8) | TL0;

    freq = 1.0 / period;
}

实现周期测量。


3.5 占空比测量程序设计

c 复制代码
void Measure_Duty()
{
    while(Signal == 0);
    TH0 = TL0 = 0;
    TR0 = 1;

    while(Signal == 1);
    high_time = (TH0<<8) | TL0;

    while(Signal == 0);
    total_time = (TH0<<8) | TL0;

    TR0 = 0;

    duty = (float)high_time / total_time * 100;
}

用于方波占空比测量。


3.6 波形识别程序设计

c 复制代码
void Wave_Identify()
{
    if(duty > 40 && duty < 60)
        wave_type = SQUARE;
    else
        wave_type = SINE;
}

简单判断波形类型。


3.7 LCD显示程序设计

c 复制代码
void LCD_Display()
{
    LCD_ShowString(0,0,"Type:");
    LCD_ShowString(5,0,wave_type);

    LCD_ShowString(0,1,"Vpp:");
    LCD_ShowNum(4,1,Vpp,2);

    LCD_ShowString(9,1,"F:");
    LCD_ShowNum(11,1,freq,2);
}

实现数据显示。


4. 系统总结

本系统基于单片机实现了正弦波与方波的峰峰值、频率及占空比测量功能。通过信号调理、电压采样及定时测量相结合,实现了高精度测量。

在电路设计方面,各模块结构合理,抗干扰能力强;在程序设计方面,采用高效算法与模块化设计,使系统具有良好的实时性与稳定性。

系统能够满足一般电子测量需求,具有较高的应用价值和推广意义。

相关推荐
gihigo19982 小时前
基于51单片机的TB6600步进电机驱动程序
stm32·单片机·51单片机
搁浅小泽2 小时前
变频空调检修完整流程(通用版)
单片机·嵌入式硬件·可靠性工程师
q_35488851532 小时前
计算机毕业设计:Python居民出行规律可视化分析系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·数据分析·车载系统·django·汽车·课程设计
vx_biyesheji00012 小时前
计算机毕业设计:Python城市交通出行模式挖掘系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·深度学习·数据分析·django·汽车·课程设计
yuanmazhiwu2 小时前
计算机毕业设计:Python智慧出行数据分析与模式识别系统 Django框架 可视化 数据分析 PyEcharts 交通 深度学习(建议收藏)✅
人工智能·python·算法·数据分析·django·flask·课程设计
openallzzz2 小时前
毕业项目技术辅导:前后端与数据分析模块协作
经验分享·毕业设计·课程设计·大作业
笨笨饿11 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
xiangw@GZ11 小时前
低功耗应用:BUCK的输入与输出环路
嵌入式硬件
张同学0312 小时前
220V 转 12V/5V 电源输入电路设计笔记
笔记·嵌入式硬件·硬件工程