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

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. 系统总结

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

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

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

相关推荐
阿森_dev1 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
爱编程的小白L1 小时前
2027 计算机毕业设计选题汇总|深度学习专项(2027最新)
人工智能·深度学习·课程设计
计算机毕业设计杰瑞1 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计
硅基手札2 小时前
【串口技术系列文档 10】低功耗与唤醒机制
驱动开发·stm32·单片机·嵌入式硬件·mcu·计算机外设
专业程序开发源2 小时前
flask家电故障预测系统92491-计算机课程设计/毕业设计
vscode·python·sql·算法·flask·课程设计
yuehuaxin013 小时前
上海贝岭 BL6523GX(D78) 单相计量芯片开发笔记:引脚定义、寄存器配置与校表流程
嵌入式硬件·智能家居·适配器模式·智能硬件
Kuakewei8883 小时前
可调OVP/OCP USB限流保护芯片IC的50μs过流响应测试
嵌入式硬件
HRTOS3 小时前
HRTOS 官网内容调整记录:首页、系统架构与文档页面优化
单片机·系统架构·51单片机
雨田言炎4 小时前
STM32之SysTick--系统定时器(内容简单但重要,附件有程序源码)
stm32·单片机·嵌入式硬件
计算机毕业编程指导师4 小时前
【计算机大数据毕业设计选题】基于Hadoop+Spark的人工智能社交媒体情绪数据分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·人工智能·hadoop·计算机·毕业设计·课程设计·社交媒体