3. 系统板上硬件连线
a) 把“单片机系统”区域中的P1.0-P1.7与“动态数码显示”区域中的ABCDEFGH端口用8芯排线连接。
b) 把“单片机系统”区域中的P2.0-P2.7与“动态数码显示”区域中的S1S2S3S4S5S6S7S8端口用8芯排线连接。
c) 把“单片机系统”区域中的P3.0与“模数转换模块”区域中的ST端子用导线相连接。
d) 把“单片机系统”区域中的P3.1与“模数转换模块”区域中的OE端子用导线相连接。
e) 把“单片机系统”区域中的P3.2与“模数转换模块”区域中的EOC端子用导线相连接。
f) 把“单片机系统”区域中的P3.3与“模数转换模块”区域中的CLK端子用导线相连接。
g) 把“模数转换模块”区域中的A2A1A0端子用导线连接到“把其他形式的能转换成电能的装置叫做电源"电源模块”区域中的GND端子上。
h) 把“模数转换模块”区域中的IN0端子用导线连接到“三路可调电压"电压模块”区域中的VR1端子上。
i) 把“单片机系统”区域中的P0.0-P0.7用8芯排线连接到“模数转换模块”区域中的D0D1D2D3D4D5D6D7端子上。
4. 程序设计内容
i. 由于ADC0809在进行转换为相应的数宇量的电路"A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在AT89S51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了。
ii. 由于ADC0809的参考电压VREF=VCC"CC,所以转换之后的数据要经过数据处理,在数码管"数码管上显示出电压值。实际显示的电压值 (D/256*VREF)
5. 汇编源程序
(略)
6. C语言源程序
#include AT89X52.H
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,0,0,0,0};
unsigned char dispcount;
unsigned char getdata;
unsigned int temp;
unsigned char i;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
void main(void)
{
ST=0;
OE=0;
ET0=1;
ET1=1;
EA=1;
TMOD=0x12;
TH0=216;
TL0=216;
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
TR1=1;
TR0=1;
ST=1;
ST=0;
while(1)
{
if(EOC==1)
{
OE=1;
getdata=P0;
OE=0;
temp=getdata*235;
temp=temp/128;
i=5;
dispbuf[0]=10;
dispbuf=10;
dispbuf=10;
dispbuf=10;
dispbuf[4]=10;
dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
while(temp/10)
{
dispbuf[i]=temp%10;
temp=temp/10;
i++;
}
dispbuf[i]=temp;
ST=1;
ST=0;
}
}
}
void t0(void) interrupt 1 using 0
{
CLK=~CLK;
}
void t1(void) interrupt 3 using 0
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
if(dispcount==7)
{
P1=P1 | 0x80;
}
dispcount++;
if(dispcount==8)
{
dispcount=0;
}
}
可以使用一个内部带A/D的单片机来完成这个检测。如果你对51单片机很熟,可以使用STC12C52XXAD系列单片机,它内部带一个8位的AD转换器,检测电压范围0~5V,最多可以有8个通道,而且该芯片价格也不算贵,只要几块钱而已。
主芯片确定下来了,其它的就很简单了,自己外围搭个显示电压电路,再写个AD采集及显示的程序就OK了。
实时输出高低电平实际很简单,
你现在的问题就是检测模块输出极时被拉低的问题。
有两个办法,
1. 模块输出高电平时,其内部仅仅是虚电压,可以认为是只能提供电压,不能提供电流,而在其输出低电平时,内部可以接受比较大的灌电流(即负电平时可以吸收比较大的MA级电流),那么,就可以在CPU口与模块联接的地方上拉一电阻,
能够解决这种办法.
2. 模块不管输出高电压或低电压,都是虚电压,不能负担较大的拉电流和灌电流,
这种情况下,最好采用三极管,因为三极管可以理解为是电压驱动型的,当模块输出高电压时,让这个电压驱动三极管,三极管集电极接电源,发射极接CPU口的同时,再接一电阻接地,这样,就可以通过检测三极管的状态来确定模块的输出状态了.
希望对你会有用
串入一个适当的电阻,一段接地,另一端接4-20ma电流信号,然后在4-20ma电流信号端引出一条线,如果电流过小就加一个射极跟随器,之后可以测量电流了。射极跟随器其主要作用是将交流电流放大,以提高整个放大电路的带负载能力。
因为单片机采集的,都是电压值,电流值不能直接采集。串联一个电阻,即可把电流变成电压(欧姆定律),然后再采集电压。
扩展资料:
单片机电压信号采集原理就是先把直流电压用电阻或电压传感器分压,然后用ADc采集小信号,然后通过数码管或液晶等显示器件显示出来。
像多通道直流电压采集模块采用的是变压器隔离,脉冲反馈测量方式,可以实现任意直流电压多通道独立测量,再通过RS485 MODBUS RTU为外部设备提供实时的直流电压测量数据,这个模块采用了拨码开关了设置节点地址,预报直观的指示灯,显示模块的工作状态。
参考资料:百度百科-射极跟随器
参考资料:百度百科-单片机
你这个,我还真没什么特别好的办法,不过有以下几点说明的,会提供给你有用的建议:
一 通常,我们从220V取电的时候,用的是RC降压,外加一个稳压管,关于RC降压,你去百度文库里找,有的是资料,但是,这样取出来的电,一般也就在0.2W左右,主要是电阻功率和体积的限制,而你要从两个火线上取电,两个火线的电压是380V,相要达到0.5W,你得用很大功率的电阻才能满足,这要占用很大的体积,不太好实现,因为你说了,你的模块体积限定了。
二 建议你,如果有零线参与的话,可以从任何一个火线加零线取电,这样电压变成220V,相对来说,RC降压能达到的功率要大一些。
三 建议你,采用低功耗的单片机,比如430单片机,或者普通的单片机,但是把主频率降到最低水平上,不然的话,你的功耗还是比较大的。
四 如果你只是检测三相的相序,缺相正常与否,而不需要明确的指示出到底是反相,还是缺相,那么,其实完全不用单片机,可以用边沿饮品代替,这样功耗就比较低了,即使你RC从380取电,也可以满足,具体电路,看我的文库里,我上传过一篇文章,那是我设计的三相检测器,完全可用的。
单片机电压测量模块的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机电压测量模块