谁能告诉我直流

核心提示如果是仅仅为了知道或直接读出电流电压参数,前面的朋友已经回答的很好了。但是如果是为了采集后提供给电脑进行数据处理,采集电压信号可以在待测两端接两条线(注意极性),直接将电压信号提供给AD转换电路。如果待测信号电压较高,可以并联一只较大的电位

如果是仅仅为了知道或直接读出电流电压参数,前面的朋友已经回答的很好了。但是如果是为了采集后提供给电脑进行数据处理,采集电压信号可以在待测两端接两条线(注意极性),直接将电压信号提供给AD转换电路。如果待测信号电压较高,可以并联一只较大的电位器分压后取出(如V端)。如果是需要采集电流信号,就在输出回路中串联一只较小的电阻,在电阻两端接两条线,提供给AD转换电路(如A端)。(我怎么看不到我上传的呢)

用数据采集卡采集电流互感器的初级电压信号和次级电流信号,该怎么做?

1、方案1

用电压、电流传感器或变送器先将电压和电流信号变换为标准信号,PC机安装采集卡,标准信号与采集卡相连,在PC程序的控制下,控制采集卡AD变换器对输入信号进行AD变化,得到与输入电压、电流成函数关系(一般是正比或一元线性关系)的数字量。

2、方案2

采用AnyWay的DT系列数字变送器,通过以太网可直接与数字变送器通讯,获取采集结果,且能保证采集数据的准确度,电压、电流基本准确度可达005级以上。

单片机怎么采集电压表的信号

数据采集卡一般只接受诸如±5V、±10V、0~20mA、4~20mA之类的标准信号,且必须与强电隔离。

电流互感器二次电流可通过低值取样电阻取样,再通过调理电路将信号处理为采集卡能接受的,与采集卡量程相符的电压或电流信号,即可接入采集卡。

一般情况下,测量了二次电流后,一次电流可根据互感器变比直接换算,而不需要直接测量。

如果你是需要通过测量互感器一次和二次的电流用于互感器,那么,应该采用一个精度更高的互感器作为标准互感器,一次线路同时穿过两个互感器,通过测量标准互感器的二次电流计算出被检互感器的一次电流。

我才用的单片机为STC89C52RC,晶振12M。模数转换器为ADC0832。代码如下:

/

程序功能: 模数转换器实现数字电压表

程序测试: 程序下载成功后,通过调节小系统左上方的

精密电位器,模拟电压的变化,数码管将显

示出当前的电压值

硬件说明: 用跳线帽把AD转换器左侧J13的AIN和CH0管脚

短接,用螺丝刀调节精密电位器VR2可以看到

当前电压值的改变

/

#include<reg52h>

#include<intrinsh>

#define uchar unsigned char

#define uint unsigned int

sbit CS = P1^0; //片选信号

sbit CLK = P1^1; //时钟线

sbit DI = P1^2; //数据写入

sbit DO = P1^2; //数据读出,因为没有同时使用所以复用P12管脚

uchar aa,bb,cc,dd,ee;

uchar idata ram[1]; //定义一个存储空间来存储转化好的数字量

uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,

0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳数码管编码

uchar code table2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,

0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};//共阳数码管带小数点编码

void delay(uint z)//延时子函数

{

uint x,y;

for(x = z;x >0;x--)

for(y = 110;y > 0;y--);

}

uchar Adc0832(bit polarity,bit channel); //待调用子函数声明

void Display(uchar data1,uchar data2,uchar data3,uchar data4,uchar data5);

void Data_Process();

void main()

{

while(1)//死循环,程序反复执行

{

Data_Process(); //AD转化,数据处理

Display(aa,bb,cc,dd,ee);//数码管显示当前电压值

}

}

/

函数名称:Adc0832

功 能:实现AD转换

参 数:AD转换通道选择,输入信号极性选择

返回值 :AD转换后电压值

/

uchar Adc0832(bit polarity,bit channel)// AD转换子程序

{

uchar i,get_data1 = 0,get_data2 = 0;

CLK = 0;

DI = 1; //第一个时钟上升沿,DI=1,发出起始信号

CS = 0;

CLK = 1;

CLK = 0;

DI = polarity; //第二个时钟上升沿,极性选择

CLK = 1;

CLK = 0;

DI = channel; //第三个时钟上升沿,通道选择

CLK = 1;

CLK = 0;

DI = 1; //DI置1,防止干扰输入数据(输入、输出管脚复用)

for(i = 0;i < 8;i++)//分八次,从高到低的顺序把八位数据读出

{

CLK = 1;

CLK = 0;

if(DO) //在时钟的上升沿来临之前读走数据

{

get_data1 |= 0x80 >> i;

}

}

for(i = 0;i < 8;i++)//分八次,从低到高的顺序再读取一次数据

{

if(DO)

{

get_data2 |= 0x01 << i;

}

CLK = 1;

CLK = 0;

}

CS = 1; //数据读写完后释放总线: CS DI CLK 置1

DI = 1;

CLK = 1;

if(get_data1 ==get_data2)//如果两个值相等,则数据传输正确

{

ram[0] = get_data1; //把正确的的数字量存在RAM[0]中

}

return(ram[0]);//把AD转换值返回

}

/

函数名称:Display

功 能:数码管动态显示

参 数:五位数码管对应显示值

返回值 :无

/

void Display(uchar data1,uchar data2,uchar data3,uchar data4,uchar data5)

{

P0 = table2[data1];

P2 = 0xfe; //

delay(1);

P0 = 0xff;

P0 = table[data2];

P2 = 0xfd;

delay(1);

P0 = 0xff;

P0 = table[data3];

P2 = 0xfb;

delay(1);

P0 = 0xff;

P0 = table[data4];

P2 = 0xf7;

delay(1);

P0 = 0xff;

P0 = table[data5];

P2 = 0xef;

delay(1);

P0 = 0xff;

}

/

函数名称:Data_Process

功 能:数据处理子函数,实现转化后的数据各位值

的分离

参 数:无

返回值 :无

/

void Data_Process()

{

uchar get_data;

uint data_temp;

get_data = Adc0832(1,0);//调用AD转换子程序,单极性信号,通道0

data_temp = get_data 196;//AD转换后的数据乘以分辨率,为便于处理分辨率放大10000倍

aa = data_temp / 10000;

bb = data_temp % 10000 / 1000;

cc = data_temp % 10000 % 1000 / 100;

dd = data_temp % 10000 % 1000 % 100 / 10;

ee = data_temp % 10000 % 1000 % 100 % 10;

}

 
友情链接
鄂ICP备19019357号-22