1.简述
本文介绍了以单片机为核心。其中有以 -05 芯片作为电流检测电路,还有串联分压电路作为电压检测电路。通过数模转换芯片来采集和转换电压信号,接着把这些信号传输给单片机进行处理。最后,将处理后的电压值和电流值在显示屏上显示出来。
2.硬件设计
本设计的硬件主要包含 5 个部分。其一为单片机最小系统;其二是电流信号采样电路;其三为电压信号采集电路;其四是 ADC 转换电路;其五是显示屏电路。硬件框图呈现如下:
(1)电流信号采集电路
电流信号采集电路采用了 -05 芯片。此芯片完全基于霍尔感应原理设计。它由一个精确的低偏移线性霍尔传感器电路以及位于接近 IC 表面的铜箔组成。当电流流过铜箔时,会产生一个磁场。霍尔元件能根据该磁场感应出一个线性的电压信号。这个信号经过内部的放大、滤波、斩波与修正电路后,会输出一个电压信号。该输出的电压信号从芯片的第七脚输出,直接反映出流经铜箔电流的大小。具体电路如图:
量程依据尾缀的不同分为三个规格,分别是±5A、±20A、±30A。此次使用的量程是±5A。因为 ADC 转换芯片只能识别正压信号,所以电流的量程是 0 到 5A。05 电流电压对应关系如下,当 Ip = 0A 也就是没有输入电流时,对应的输出电压为 2.5V。精确度为 1/A,也就是图中斜线的斜率。若取 VCC = 5V,其计算公式为:
Vout = 2.5 + 0.185*Ip
(2)电压信号采集电路
电压信号采集电路较为简单。它主要运用了两个电阻来构成串联分压电路,该分压电路的分压比是 3。例如,当检测表笔检测到 15V 的电压时,因为分压比为 3,所以 R3 端的电压是 5V。倘若需要提升测试电压的测量精度,就可以更改分压比。在选用分压电阻时,应尽量挑选阻值较大的电阻。若电阻过小,就会致使输入电流过大。此电路仅适用于在测试输入阻抗较大的电路上的电压,倘若用于其他情况,测试出来的误差会较大。电路如图:
(3)ADC转换电路
本次 ADC 转换电路采用了某芯片。此芯片是单电源低功耗的 8 位 CMOS 数据采集器件,其分辨率为 256。该芯片具有 4 路模拟输入、1 路模拟输出以及一个串行 I2C 总线接口,用于与单片机进行通信。此电路会把电流信号和电压信号进行转换,然后传送给单片机。电路如图:
(4)总体电路
3.软件设计
软件流程较为简单。单片机上电之后,程序会对各个模块进行初始化操作。初始化完成后,程序进入循环状态。在循环过程中,会定时检测电流及电压值。并且会将最新的数据显示在显示屏上。程序流程如图:
(1)主函数
void main (void)
{
定义了两个无符号字符型变量 midvolt 和 midcur,这两个变量用于存储电压和电流的中间变量值。
初始化定时器 0 。
UART_Init(); //串口初始化
LCD_Init(); //初始化液晶
延时 20 毫秒;延时能够起到稳定的作用。
LCD_Clear();
通过 sprintf 函数的调用,将 "My Designer!! " 格式化后存储在 dis0 中,实现了打印的功能。
LCD_Write_String 函数在坐标 (0,0) 处显示 dis0 ,即显示第一行。
使用 sprintf 函数将电压值和电流值格式化为字符串并存储在 dis0 中,格式为“V:%3.2fv A:%3.2fA”,其中 Volt 表示电压,Acurrent 表示电流,用于打印电压电流值。
LCD_Write_String 函数在坐标 (0,1) 处显示内容 dis0 ,用于显示第二行的内容。
uartSendStr("reday ok!!",10);
while (1) //主循环
{
midvolt 是从 ReadADC(1)读取到的电压值。
DelayMs 为 50 ;延时这个行为有助于保持稳定。
读取电流转化后的电压值,将其赋值给 midcur,即 midcur = ReadADC(0);
Volt 等于 midvolt 乘以 5.13 再除以 255 然后乘以 3;这是在计算出电压,其中乘以 3 表示分压值。
计算出电流,将 midcur 乘以 5.13 后再除以 255,得到的结果赋值给 Acurrent,Acurrent 为浮点数类型。
如果电流转换后的电压值比 2.62 大。 //如果电流转换后的电压值超过 2.62 可以改写为如果电流转换后的电压值比 2.62 大,这样既避免了使用原文词语,又保留了原意。
{
Acurrent 等于 (Acurrent 减去 2.62) 再除以 0.185 ;这是关于电流模块的电压转换计算。
}
else
{
Acurrent=0;
}
使用 sprintf 函数将电压值和电流值格式化为字符串并存储在 dis0 中,格式为“V:%3.2fv A:%3.2fA”,其中 Volt 表示电压值,Acurrent 表示电流值,用于打印电压电流值。
LCD_Write_String 函数在坐标 (0,1) 处显示 dis0 内容,用于显示第二行的信息。
uartSendStr 函数被用于向 dis0 发送 16 个字符的数据,这是一种串口上报的操作。
uartSendStr 发送一个换行符,参数为 1 。
DelayMs 500;延时的作用是有助于保持稳定。
}
}
详细完整的程序,可下载源码。
工作时间:8:00-18:00
电子邮件
扫码二维码
获取最新动态