① 单片机如何采集4-20mA电流信号,是不是要转换成0-5V的电压信号,怎么转换
串入一个适来当的电阻,一段接地源,另一端接4-20ma电流信号,然后在4-20ma电流信号端引出一条线,如果电流过小就加一个射极跟随器,之后可以测量电流了。射极跟随器其主要作用是将交流电流放大,以提高整个放大电路的带负载能力。
因为单片机采集的,都是电压值,电流值不能直接采集。串联一个电阻,即可把电流变成电压(欧姆定律),然后再采集电压。
(1)单片机课程设计电压采集装置6扩展阅读:
单片机电压信号采集原理就是先把直流电压用电阻或电压传感器分压,然后用ADc采集小信号,然后通过数码管或液晶等显示器件显示出来。
像多通道直流电压采集模块采用的是变压器隔离,脉冲反馈测量方式,可以实现任意直流电压多通道独立测量,再通过RS485 MODBUS RTU为外部设备提供实时的直流电压测量数据,这个模块采用了拨码开关了设置节点地址,预报直观的指示灯,显示模块的工作状态。
② 51单片机怎样做AD电压采集
这个需来要外扩ram 但一片51应该实源现不了连续采集两小时然后读出数据
至于电压采集 外扩一片ad 输入前端电压互感器传过来的模拟信号 转换为数字信号即可。 可以采用内部带有eeprom的单片机 实现掉电不易失功能。
比如stc51之类的即可
③ 单片机课程设计:检测与报警系统的设计(数据采集系统)
并分
④ 单片机课设:模拟电压比较器
教材通常都落后于科技,很多单片机具备ADC,如STC12C5A60系列单片机与试验单片机使用相似,且集成ADC等多种功能,若不拘泥于形式,可做个比教材更好的设计。
⑤ 单片机采集交流电压
互感器输出的是交流电,应该整流为直流电压。
比较好是采用峰值检波(跟整流是一个意思,输出的是稳定的交流电的峰值)
⑥ 单片机八路电压采集系统
现在已经没有人用ADC0809这类单片机来采集数据了,可以参考STC12C5A60S2,这个单片机和MCS51兼容,并且自带10位ADC,8路够了。在STC的网站上有ADC采集例子可以参考。
⑦ 用单片机做一个数据采集系统来采集电压(5V以下),请问硬件如何连接单片机的I/O口如何和电压信号导线连接
用带AD口的单片机,开AD中断,AD完了产生中断,读取ADC寄存器数值。当然被测电压要转换为内0~5V的电压,通常用两个电阻容分压,自己按被测电压最高电压换算。注意ADC分辨率,如果不够要换16~32位的ADC。
⑧ 单片机电压采集与显示
主要是0809的程序段,有个资料不完全一样但是能参考,里面有调试好的0809程序段,(淘)(宝)搜:51单片机火灾报警器(MQ2+DS18B20)proteus仿真和C程序资料
⑨ 谁能帮我设计一款基于AT89C51单片机电压数据采集系统
那个电压测量可以改变它的测量范围的。并且实现了对上下限电压的报警等功能。希望对你有用。
#include"reg51.h"
#include"absacc.h"
#include"intrins.h"
#defineucharunsignedchar
#defineuintunsignedint
#defineSEG_OUTP2//段码输入端口
#defineBIT_OUTP1//扫描口
sbitRED_LED=P3^6;
sbitYED_LED=P3^5;
sbitSPER=P3^7;
sbitdot=P2^7;
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLE=P3^4;
uintdatagetdata;
uinttemp;
ucharts50ms=0;
uchardatadis_buff[4]={0,0,0,0};
unsignedcharcodediaput[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf};
/////////////////////////////////////////////
voiddelayd(ucharn)
{
ucharL,j;
for(L=0;L<n;L++)
for(j=0;j<125;j++)
;
}
/////////////////////////////////////////////
voiddelay(void)
{
uchari;
while(i--);
}
//////////////////////////
voidinitiation(void)
{
TH0=-400/256;
TL0=-400%256;
TMOD=0X01;
TR0=1;
ET0=1;
EA=1;
}
///////////////////////////////////////
voiddiaplay(void)//数码管显示
{
chark;
charm=0xfe;
for(k=0;k<4;k++)
{
BIT_OUT=0xff;
SEG_OUT=diaput[dis_buff[k]];
if(k==1)
dot=0;
BIT_OUT=m;
delayd(3);
m=(m<<1)|0x01;
}
//temp=getdata*1.0/255*500;//测5V
temp=getdata*100.0/255.0*12.0;//测12v
temp=getdata*200.0/255.0*12.0;//测24v
dis_buff[0]=temp/1000;
dis_buff[1]=(temp%1000/100);
dis_buff[2]=(temp%100)/10;
dis_buff[3]=temp%10;
}
voidtime0(void)interrupt1
{
TH0=-400/256;//200us
TL0=-400%256;
CLE=~CLE;//产生200ms的脉冲
ts50ms=0;
if(getdata<20)
SPER=~SPER;
}
////////////////////////////////
voidpanan_LED(void)
{
if(getdata<20)
{
RED_LED=0;
YED_LED=1;
}
elseif(getdata>253)
{
RED_LED=1;
YED_LED=0;
}
else
{
RED_LED=1;
YED_LED=1;
}
}
////////////////////////////////////////////////
voidLED(void)
{
if(getdata>253)
SPER=~SPER;
delay();
}
main()
{
initiation();
while(1)
{
panan_LED();
LED();
ST=1;
ST=0;
while(EOC==0);
{
OE=1;
getdata=P0;
OE=0;
diaplay();
}
}
}