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

基于51单片机的双档交流电压表设计与实现

8小时前
176
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

1. 系统概述

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

随着电子测量技术的不断发展,电压测量仪表在工业控制、电子实验、设备检测以及教学科研领域得到了广泛应用。传统模拟电压表虽然结构简单,但存在读数误差大、量程切换不方便以及测量精度有限等问题。为了提高电压测量的自动化程度和测量精度,设计一种基于51单片机的双档交流电压表系统具有重要的现实意义。

本系统以STC89C52单片机作为核心控制器,结合交流信号调理电路、自动量程切换电路、A/D数据采集电路、串口通信模块以及上位机监控软件,实现交流电压的高精度测量。系统设置两个测量档位,分别为1mV~100mV低压档和100mV~10V高压档。单片机根据输入信号大小自动选择合适的测量档位,保证测量结果具有较高分辨率和测量精度。

由于交流信号存在波动和噪声干扰,系统采用多次采样平均滤波算法,对同一交流电压进行多次连续采样,通过数据处理获得稳定可靠的测量结果。为了进一步提高系统的智能化水平,系统通过串口与上位机建立通信连接,用户可在上位机软件中完成测量启动、测量停止以及数据显示等操作。

由于51单片机运算能力有限,在执行多次采样、平方运算、均方根计算以及数字滤波算法时需要消耗较长时间,因此系统每次完整测量周期约为3~5秒。虽然测量速度相对较慢,但能够有效保证测量精度和数据稳定性,适用于实验室测量、教学演示以及低速高精度交流电压检测场景。


2. 系统功能设计

2.1 双档交流电压测量功能

系统设置两个独立测量量程:

第一档

1mV~100mV

用于测量微弱交流信号。

第二档

100mV~10V

用于测量较高幅值交流电压。

通过双档设计能够兼顾:

  • 高灵敏度测量
  • 宽量程测量
  • 提高分辨率
  • 提高测量精度

测量范围覆盖绝大多数实验室交流信号检测需求。


2.2 自动量程切换功能

系统具备自动换档功能。

工作过程如下:

检测输入信号
      ↓
低于100mV
      ↓
选择低压档
检测输入信号
      ↓
高于100mV
      ↓
选择高压档

自动换档具有以下优点:

  • 无需人工切换
  • 防止量程选择错误
  • 提高测量效率
  • 提高测量精度

系统能够根据实时电压值自动完成档位切换。


2.3 多次平均测量功能

交流电压在实际环境中容易受到噪声干扰。

系统采用:

连续采样
      ↓
多组数据
      ↓
数字滤波
      ↓
平均计算

例如:

第1次:5.01V
第2次:4.99V
第3次:5.02V
第4次:5.00V
第5次:4.98V

平均值:

5.00V

通过多次平均处理能够有效降低:

提高测量稳定性。


2.4 上位机控制功能

系统通过串口与计算机通信

用户能够通过上位机完成:

  • 启动测量
  • 停止测量
  • 查看结果
  • 数据保存

控制流程如下:

上位机发送命令
        ↓
串口通信
        ↓
单片机接收
        ↓
执行对应功能

提高系统智能化程度。


2.5 高精度测量功能

系统采用:

  • 自动量程切换
  • 多次采样
  • 数字滤波
  • 均方根运算

实现高精度交流测量。

测量过程如下:

交流信号输入
       ↓
采样
       ↓
平方运算
       ↓
平均运算
       ↓
开方运算
       ↓
获得有效值

提高测量准确度。


2.6 测量状态管理功能

系统支持测量状态控制。

主要状态包括:

等待状态
测量状态
计算状态
显示状态
停止状态

便于系统管理和控制。


3. 系统总体设计方案

3.1 系统组成结构

整个系统主要由以下模块组成:

  1. STC89C52单片机最小系统
  2. 交流信号输入模块
  3. 自动量程切换模块
  4. 信号调理模块
  5. A/D采样模块
  6. 串口通信模块
  7. 上位机软件模块
  8. 显示模块
  9. 电源模块

系统结构如下:

交流输入
    ↓
信号调理
    ↓
量程切换
    ↓
A/D转换
    ↓
单片机处理
 ┌───┴────┐
 ↓        ↓
显示模块  串口通信
           ↓
         上位机

3.2 系统工作流程

系统工作流程如下:

系统启动
    ↓
初始化
    ↓
等待上位机命令
    ↓
开始测量
    ↓
自动选择档位
    ↓
多次采样
    ↓
滤波计算
    ↓
输出结果

完成一次完整测量。


4. 系统电路设计

4.1 单片机最小系统设计

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

主要任务包括:

  • ADC数据处理
  • 自动换档控制
  • 通信控制
  • 滤波运算
  • 数据显示

最小系统包括:

4.1.1 晶振电路

采用:

11.0592MHz晶振

作用:

  • 提供系统时钟
  • 保证串口波特率准确
  • 提高运行稳定性

4.1.2 复位电路

系统采用RC上电复位。

工作过程:

上电
 ↓
复位
 ↓
初始化

确保程序正确启动。


4.2 交流输入信号调理模块设计

交流信号不能直接进入ADC。

需要经过调理处理。

主要功能:

  • 电压衰减
  • 信号限幅
  • 偏置处理
  • 保护ADC

工作流程:

交流输入
    ↓
衰减
    ↓
偏置
    ↓
ADC采样

保证采样安全。


4.3 自动量程切换模块设计

系统采用继电器模拟开关实现量程切换。

低压档:

1mV~100mV

高压档:

100mV~10V

切换逻辑:

电压过大
   ↓
切换高档
电压较小
   ↓
切换低档

提高测量分辨率。


4.4 A/D转换模块设计

由于51单片机内部无ADC,因此采用外部ADC芯片

常用器件:

ADC0804
ADC0832
ADC0809

主要作用:

模拟信号数字信号

提供测量数据。


4.5 串口通信模块设计

采用UART串口通信。

实现:

  • 数据上传
  • 命令接收
  • 状态反馈

通信流程:

上位机
   ↓
串口
   ↓
单片机

完成远程控制


4.6 显示模块设计

显示内容包括:

当前档位
测量电压
测量状态

方便用户查看测量结果。


4.7 电源模块设计

系统采用:

+5V稳压供电

为以下模块供电:

  • 单片机
  • ADC模块
  • 通信模块
  • 显示模块

保证系统稳定运行。


5. 系统程序设计

5.1 主程序设计

系统主程序负责整体控制。

void main()
{
    System_Init();

    while(1)
    {
        UART_Process();

        if(Start_Flag)
        {
            Auto_Range();

            Measure_AC();

            Display_Data();
        }
    }
}

实现系统循环运行。


5.2 系统初始化程序设计

初始化硬件资源。

void System_Init()
{
    UART_Init();

    ADC_Init();

    LCD_Init();

    Timer0_Init();
}

完成硬件配置。


5.3 自动换档程序设计

判断当前量程。

void Auto_Range()
{
    if(Voltage < 100)
    {
        Range = LOW_RANGE;
    }
    else
    {
        Range = HIGH_RANGE;
    }
}

自动选择档位。


5.4 ADC采样程序设计

读取ADC数据。

unsigned int ADC_Read()
{
    unsigned int value;

    Start_ADC();

    while(!ADC_Finish());

    value = Get_ADC_Data();

    return value;
}

获取模拟输入值。


5.5 多次平均滤波程序设计

连续采样求平均。

float Average_Filter()
{
    unsigned char i;

    float sum = 0;

    for(i=0;i<64;i++)
    {
        sum += ADC_Read();
    }

    return sum/64;
}

提高测量稳定性。


5.6 有效值计算程序设计

计算交流电压有效值。

float RMS_Calc()
{
    unsigned int i;

    float sum = 0;

    for(i=0;i<128;i++)
    {
        float x;

        x = ADC_Read();

        sum += x * x;
    }

    return sqrt(sum/128);
}

获得交流有效值。


5.7 串口接收程序设计

接收上位机指令。

void UART_ISR() interrupt 4
{
    if(RI)
    {
        Command = SBUF;

        RI = 0;
    }
}

实现通信功能。


5.8 测量启动程序设计

启动测量任务。

void Start_Measure()
{
    Start_Flag = 1;
}

开始数据采集。


5.9 测量停止程序设计

停止测量任务。

void Stop_Measure()
{
    Start_Flag = 0;
}

结束测量过程。


5.10 数据发送程序设计

上传测量结果。

void Send_Data(float value)
{
    printf("Voltage=%.3fVrn",value);
}

发送至上位机显示。


6. 测量原理分析

本系统测量交流电压时首先通过信号调理电路对输入交流信号进行衰减和偏置处理,然后利用ADC模块进行连续采样。单片机获取大量采样数据后执行数字滤波算法,去除噪声影响。随后通过均方根算法计算交流电压有效值。由于需要进行大量乘法运算、平方运算以及开方运算,而51单片机本身处理能力有限,因此整个计算过程耗时较长。

一次完整测量过程如下:

开始测量
    ↓
自动换档
    ↓
128次采样
    ↓
数字滤波
    ↓
均方根计算
    ↓
上传结果

整个测量周期通常需要:

3~5秒

虽然速度较慢,但能够获得较高测量精度和稳定性。


7. 系统总结

基于51单片机的双档交流电压表系统利用自动量程切换技术、A/D采样技术、多次平均滤波算法以及均方根计算方法,实现了1mV~100mV和100mV~10V两个量程范围内交流电压的高精度测量。系统能够根据输入信号大小自动选择最佳测量档位,通过多次采样平均和数字滤波技术有效降低噪声干扰,提高测量精度。同时结合串口通信与上位机控制功能,实现测量过程的远程启动与停止控制。虽然受限于51单片机运算能力,单次测量需要约3~5秒时间,但系统具有结构简单、成本低、测量准确、稳定性高等优点,适用于实验教学、电子测量以及科研测试等应用场景。

相关推荐