① 單片機如何採集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();
}
}
}