基于单片机的正弦波与方波峰峰值与频率测量系统设计
基于单片机的正弦波与方波峰峰值与频率测量系统设计
点击链接下载设计资料:https://download.csdn.net/download/m0_51061483/91860308
1. 系统功能概述
本系统基于 51 系列单片机 设计,面向正弦波和方波信号的高精度测量需求,实现 峰峰值测量、频率测量、方波占空比测量及LCD实时显示。通过 A/D 采样和数据处理算法,系统能够在 ±1% 的测量误差范围内准确获取输入信号的电压和频率信息,满足实验室测试、电子设备调试以及 PWM 信号监测等应用需求。
主要功能包括:
-
峰峰值测量功能
对输入正弦波和方波信号进行高精度采样和计算,获取峰峰值(Vpp),并进行电压单位显示。 -
频率测量功能
系统自动测量输入信号周期,计算频率(Hz),可区分正弦波与方波信号类型,并实时显示频率值。 -
方波占空比测量功能
对方波信号高电平持续时间与周期进行比值计算,得到占空比(Duty Cycle),显示单位为百分比(%),适用于 PWM 信号监测。 -
LCD 数据显示功能
LCD1602 液晶屏实时显示信号类型、峰峰值、电压单位、频率及占空比,直观反映测量结果。 -
高精度测量控制
通过优化 A/D 采样和数据处理算法,实现整体测量精度控制在 ±1% 以内,确保测量数据可靠、稳定。
2. 系统电路设计
系统电路采用模块化设计,包括 主控单元、A/D 采样模块、信号调理模块、频率测量模块、占空比测量模块、LCD 显示模块及电源模块,各模块协同工作,实现高精度测量与显示功能。
2.1 主控单元设计
核心采用 STC89C52 单片机,负责信号采样、数据处理、测量计算和显示控制。
-
I/O 分配
- A/D 采样输入:P1.0
- 方波输入计数:P1.1
- LCD 数据口:P2 口,RS、RW、E 控制端口单独占用
-
任务分配
- 接收采样数据并进行峰峰值计算
- 测量信号周期并计算频率
- 对方波信号进行占空比计算
- 更新 LCD 显示内容,实现实时反馈
2.2 A/D 采样模块
采用 ADC0809 或 STM32 内置 ADC 模拟接口 进行高精度采样。
-
信号采样流程
- 将输入信号经过缓冲和限幅电路进入 ADC
- 定时采样以捕获完整波形
- 对采样数据进行峰值和平均值计算,实现峰峰值测量
-
电路特点
- 输入缓冲电路保证高阻抗,防止测量信号失真
- 限幅保护电路避免过压损坏 ADC
- 多通道设计可同时测量不同信号
2.3 信号调理模块
信号调理模块确保输入信号在 ADC 范围内,并滤除高频干扰。
-
调理功能
- 放大或衰减信号幅度,使其适合 ADC 输入范围(0~5V)
- 低通滤波去除高频噪声,提高测量精度
- 可选缓冲放大器提高驱动能力
2.4 频率测量模块
频率测量模块通过单片机外部中断或定时器计数实现。
-
计数方法
- 方波或正弦波信号通过中断触发计数
- 测量两个连续上升沿间隔时间,计算周期 T
- 频率 F = 1/T,单位 Hz
-
波形自动识别
- 根据信号幅值波动判断信号类型
- 方波信号直接计数,占空比测量
- 正弦波信号通过峰值检测和零交叉点计算频率
2.5 方波占空比测量模块
占空比测量采用 高电平计时与周期计时比值计算。
-
测量流程
- 方波信号输入中断口,检测上升沿开始计时
- 高电平持续期间计数器累加,低电平期间计数器停止
- 占空比 = 高电平时间 / 信号周期 × 100%
-
模块特点
- 高精度计数器保证测量误差 <1%
- 支持 1Hz~100kHz 信号范围
2.6 LCD 显示模块
LCD1602 实时显示测量结果,包括信号类型、峰峰值、电压单位、频率和占空比。
-
接口设计
- 数据口 P2,控制口 RS、RW、E 使用单片机 P3 口
- 支持 4 位或 8 位数据总线模式,保证高速刷新
-
显示内容
- 第一行显示信号类型与峰峰值
- 第二行显示频率与方波占空比,单位清晰标注
2.7 电源模块
- 单片机供电:5V 稳压电源
- 模拟电路供电:采用低噪声 5V 或 3.3V 电源
- 滤波设计:采用电容滤波和稳压二极管保护,保证信号稳定采样
3. 程序设计
程序采用模块化 C 语言设计,主要包括 主程序、A/D 采样模块、峰峰值计算模块、频率测量模块、占空比测量模块、LCD 显示模块及辅助函数模块。
3.1 主程序设计
主程序完成系统初始化、信号采样、计算调度和 LCD 更新。
#include <reg52.h>
#include "adc.h"
#include "lcd.h"
#include "frequency.h"
#include "duty.h"float vpp;
float freq;
float duty;
char signal_type;void main()
{LCD_Init();ADC_Init();Frequency_Init();Duty_Init();while(1){signal_type = Detect_Signal_Type();vpp = Measure_Vpp(signal_type);freq = Measure_Frequency(signal_type);if(signal_type == 'P') duty = Measure_Duty();LCD_Display(signal_type, vpp, freq, duty);}
}
3.2 A/D 采样与峰峰值计算模块
float Measure_Vpp(char type)
{unsigned int max_val = 0, min_val = 1023;unsigned int adc_val;int i;for(i=0;i<1000;i++){adc_val = ADC_Read();if(adc_val > max_val) max_val = adc_val;if(adc_val < min_val) min_val = adc_val;}return (max_val - min_val) * (5.0/1023.0); // 转换为电压
}
3.3 频率测量模块
float Measure_Frequency(char type)
{unsigned int t1, t2;t1 = Capture_Clock();t2 = Capture_Clock();return 1000000.0 / (t2 - t1); // 微秒单位转换为 Hz
}
3.4 方波占空比测量模块
float Measure_Duty(void)
{unsigned int high_time, period;high_time = Measure_High_Level();period = Measure_Period();return ((float)high_time / period) * 100; // 百分比
}
3.5 信号类型检测模块
char Detect_Signal_Type(void)
{float sample = ADC_Read();if(sample > 2.0 && sample < 3.0) return 'S'; // Sinusoidelse return 'P'; // Pulse/Square
}
3.6 LCD 显示模块
void LCD_Display(char type, float vpp, float freq, float duty)
{if(type == 'S') LCD_ShowString(0,0,"Sin:");else LCD_ShowString(0,0,"Square:");LCD_ShowNum(0,5,(int)(vpp*100),4); // 峰峰值显示LCD_ShowString(0,9,"V");LCD_ShowNum(1,0,(int)freq,5);LCD_ShowString(1,5,"Hz");if(type == 'P'){LCD_ShowNum(1,8,(int)duty,3);LCD_ShowString(1,11,"%");}
}
4. 系统运行与功能总结
本系统通过 51 单片机实现了正弦波与方波信号的 高精度峰峰值、频率和方波占空比测量,并通过 LCD 实时显示测量结果。系统特点如下:
- 高精度测量:峰峰值及频率测量误差控制在 ±1%
- 多功能测量:同时支持正弦波和方波信号
- 方波占空比计算:适用于 PWM 信号监测和电子实验
- 实时显示:LCD1602 显示信号类型、Vpp、电压单位、频率及占空比
- 模块化设计:采样、计算、显示模块分工明确,便于系统扩展和维护
该系统可广泛应用于电子测量、实验室测试、信号调试以及 PWM 信号分析,为高精度电子测量提供了可靠、稳定的解决方案。
