導航:首頁 > 操作系統 > 單片機電表

單片機電表

發布時間:2022-08-23 17:06:26

❶ 怎樣設計一個用ADE7755和用AT89S51的單片機設計出一個電能表

隨著電力的需求越來越大,不同時間段用電量不均衡的現象日趨嚴重。為了合理地調控電力負荷和節約能源,電力公司已開始鼓勵使用多費率電能表。傳統的多費率電能表一般採用機械轉盤式計量方式,計量精度隨機械磨損而降低,時段設置單一,人工抄表勞動強度大,且偶有竊電情況發生等諸多弊端。本文給出基於AT89S52單片機一種新型多費率單相電能表設計,採用AD7755電能計量晶元,電能計量准確。該電能表具有分時段計量,液晶顯示,自動回抄,時段設置靈活,時間校正及時,新穎的防竊電,功耗低的特點。並對該電能表實驗測試數據進行性了誤差分析,指出電能計量中減小與消除誤差的方法。

1硬體電路設計

1.1總體結構

基於AT89S52單片機完成多費率單相電能表的設計,AT89S52有以下功能,8k位元組Flash閃速存儲器,三級加密程序存儲器,256位元組內部RAM,32個可編程I/O口線,3個16位定時/計數器,一個6向量兩級中斷結構,一個全雙工串列通信口,片內振盪器及時鍾電路,兩種低功耗電工作方式。是一個比較適合於以開關量信號輸入檢測的性價比較高的8位單片機。電能表硬體設計主要包括六大模塊,電壓和電流檢測電能計量電路AD7755模塊,串列存儲與看門狗X25045電路模塊,HT1621液晶顯示電路模塊,串列時鍾S3530A電路模塊,

RS485匯流排通訊電路模塊,防竊電檢測電路模塊,總體結構如圖1所示。

圖1:系統總體結構框圖

1.2電能計量

單相電能計量採用美國ADI公司的AD7755低功耗晶元實現。AD7755內部除了ADC和濾波、相乘電路外都採用了數字電路,有效的消除了尖脈沖等干擾信號,使得它在惡劣的環境條件下仍能保持極高的正確度和穩定性。對單相迴路中的電壓、電流信號采樣,計算出功率並積分將其轉換為電能脈沖輸出,CPU對來自AD7755輸出端CF的脈沖進行計量,計算出電能表的累計用電量。電能與脈沖的關系為:W=M/C,式中的W為電能,單位為千瓦時,M為脈沖累計個數,C為電表脈沖常數,選取C=1600,每千瓦時為1600個脈沖。

1.3RS485通訊MAX487晶元實現多費率電能表的RS485通訊控制

MAX487晶元具有RS485通訊協議,可以帶下位機128個、傳輸間隔大於1km、傳輸速率達250kb/s。電能表通過RS485匯流排與用電治理計算機相連,每隻電能表都有一個確定的唯一的八位十六進制的表號,初次安裝,電工需要把用戶信息與表號記錄後輸進用電治理計算機中,完成用戶與治理計算機的連接。治理計算機採用廣播式通訊方式下傳時段設置與校時信息,此時不帶有地址信息,而電能表中斷接收;上位機採用呼喚地址的方式上傳信息,即呼喚誰的地址,那隻電能表便把信息及其校驗碼打包向上傳送給用電治理計算機,實現電能回抄。MAX487的DE為發送器使能端,DE為1時發送器可以工作,DI為輸進端,A、B為輸出端。當DE為0時,停止發送輸出端為高阻。RE為輸進使能端,RE為0時答應接收器工作,A、B為輸進端,RO為輸出端;RE為1時,接收器被禁止,RO為高阻狀態。因此,採用半雙工通訊方式,把DE和RE相連然後接AT89S52的P1.4,通過AT89S52的P1.4引腳來控制收發工作狀態。

1.4串列存儲器

串列存儲器採用美國XICOR公司的X25045低功耗晶元,它具備看門狗定時器WTD、電源電壓監控和具有512位元組的串列E2PROM存儲器三種功能。WTD可以設置為200ms、600ms、1400ms喂狗定時間隔,軟體編程寫進X25045中。在程序正常運行期間,WTD在定時間隔內收到觸發信號,確保程序正常運行,一端WTD在定時間隔內沒有收到觸發信號,X25045便通過RESET引腳輸出一個高電平信號,觸發電能表復位來防止程序跑飛。X25045作為串列存儲晶元,512位元組分別用於存儲電能表編碼,多費率時段設置,上月和當月分時段的峰、平、谷電量和總累計電量等信息,存儲次數可改寫十萬次,數據可保存一百年,它與AT89S52可採用SPI協議匯流排介面相連。

1.5時鍾電路

時鍾電路採用S3530A晶元完成,它是一種支持I2C匯流排的低功耗時鍾晶元,它按照CPU經RS485通訊接收校時的數據來設置時鍾和日歷,靠自身的振盪繼續走時。在S3530A的Xin和Xout引腳之間跨接32.768kHz的晶體器振盪器。它通過兩線式與CPU連接,SDA腳和SCL腳分別接AT89S52的P2.0和P2.1,並有兩個中斷報警引腳可設置為輸出秒或分同步脈沖,向AT89S52提供周期為1秒的中斷信號,單片機系統將根據該信號通過I2C通訊介面讀取當前的時間,計算出該時刻所屬的時段,實現多費率電能表的分時段計量電能。該時鍾電路帶有備用鋰電池,正常工作時有電源Vcc供電,同時給3.6V鋰電池充電;當出現停電時,自動切換鋰電池為時鍾電路供電,即使停電時鍾走時也正確。

1.6液晶顯示

採用HOLTEK公司HT1621的LCD顯示驅動晶元,實現十六位LCD數字顯示。HT1621是具有128段(32×4)內置存儲器的LCD驅動器,它片內包括控制與計時電路、顯示RAM、LCD驅動及偏置、監視定時器等,採用了48腳SSOP封裝,具有體積小和功耗低的優點,非常適合於應用電能表中,其介面電路和外圍電路簡單,它和AT89S52之間採用串列介面,只需三根線。AT89S52的P2.4、P2.5、P2.6分別接到它的CS片選、WR寫答應、DATA串列數據三個引腳上,來控制刷新顯示RAM緩沖區。另外應用中,在VDD、VLCD間接一個20kΩ可調電阻,用來調節LCD顯示對比度,調節電阻,使得VDD=5V,VLCD=4V對比度較好。

1.7防竊電檢測等

記錄電能表接線端子蓋被人為打開的次數而分析是否竊電。電能表被安裝好後將表殼打上鉛封,用戶不能私自打開電能表接線的表蓋破壞鉛封,否則屬於竊電行為。因此我們採用霍爾感測器,檢測接線端子蓋是否被打開。假如接線端子蓋被打開,AT89S52的P1.6引腳的電平變化,就檢測到開蓋一次,記錄表的接線端子蓋被人為打開和破環的次數,判定是否有竊電發生,當發現有竊電現象時,給出報警、斷電並及時上傳到上位治理計算機。實踐證實該新奇的防竊電技術有效的防止竊電情況發生,效果較好。檢測電路框圖如圖2所示。

圖2:防竊電檢測框圖

掉電保護電路,用AT89S52的P1.7輸進引腳檢測掉電信號,當系統正常工作是P1.7位高電平,當忽然發生斷電時,P1.7變成低電平,採用查詢方式檢測到P1.7的變為低電平後,將進進掉電保護程序。電源電路中有個大濾波電容1000uf/25v,當掉電後能維持系統十多秒的工作時間,確保電能表存儲好重要數據。光電隔離電路,在系統中AD775的脈沖輸出端,繼電器控制端,RS485通訊端分別使用了4N35光電隔離器。通過光的耦合作用傳遞電信號,把干擾源和易受干擾的部分隔離開來,進步系統抗干擾的能力。

2軟體程序設計

2.1軟體程序資源分配

多費率單相電能表軟體程序共包括初始化及主程序,X25045讀寫程序,RS485串列通訊處理程序,中斷處理程序,定時器處理程序,HT1621顯示控製程序,電能分時段計量與掉電處理程序,系統自檢與軟體抗干擾處理八大程序模塊。系統的中斷資源分配為INT0中斷用於AD7755脈沖檢測,INT1用於秒同步檢測,定時器T0用於定時100ms,T1未使用,T2用於串列通訊程序波特率發生器,串列口中斷設置為RS485非同步通訊接收中斷。

2.2程序模塊的設計

電能表的工作過程主程序模塊如圖3所示,每次上電要進行初始化,初始化包括對AT89S52單片機定時器、串列口、中斷等工作方式的設定,寫進串列存儲晶元X25045的控制字,串列時鍾晶元S3530A控制字,串列液晶驅動晶元HT1621控制字。新電能表的初次工作要對X25045初始值設定,包括電能表表號的設置,時段的設置,時鍾的設置,存儲地址的分配等。本系統設置了三個時段,單片機每秒從時鍾晶元S3530A中讀取時鍾值,然後根據串列存儲晶元X25045中預先設置好的時段,分析該時刻屬於哪個時段,根據相應的時段把電能存儲AT89S52的RAM存儲器中,然後電能每累計夠1度便寫進到X25045相應的地址中。16位液晶顯示器輪流顯示時段與電能信息。若有通訊請求將採用中斷方式與上位機進行數據通訊。若停電,將執行掉電保護程序。其它程序模塊流程圖略。

圖3:主程序流程圖

測試結果

該電能表在淄博貝林電子有限公司進行了誤差測試和運行試驗,上位計算機完成用電治理時段設置,設置三個費率時段,第一時段00點00分點到06點30分,為谷電量時段,第二時段06點30點到22點30分,為峰電量時段,第三時段22點30點到24點00分,為平電量時段。費率時段設置由電力供電公司根據國家政策規定設定到計算機治理系統中,通過RS485串列通訊傳送到電能表中,並存儲於X25045中。每月峰、平、谷、累計電量存進電能表中,並打包傳送到上位計算機治理系統,通訊波特率設為9600bit/s。用0.1級標准電子式電能表校驗台作為標准表,該多費率電能表為被測表,貝林電子有限公司針對不同負荷的情況下進行測試,限於篇幅僅列出負荷為5KW時的實測數據如表1所示。測試結果表明該復費率電能表誤差小於1%,屬於1.0級標准。經實驗得知減小電能計量誤差方法,一是通過調節AD7755的匹配電阻調整到精確值;二是該匹配電阻阻值要求隨溫度變化阻值變化較小;三是在電能計量過程中,在時間段的切換時,計量電能的尾數部分不足0.01度的電能計進下一個時間段中,避免了不足0.01度的電能丟失而造成累計電量有誤差。

表1:標准表與被測表丈量值符合5KW

結束語

多費率電能表根據不同的時段設置,實現電能分時計量,採用RS485串列通訊,實現電量自動回抄,實時校時。該電能表經淄博貝林電子有限公司生產表明,設計技術新奇,計量正確,走時精確,時段設置靈活,防竊電設計新奇,各項技術指標均達到國家多費率電能表的技術標准,具有廣闊的應用遠景。

本文作者創新點在於採用AD7755電能計量晶元計量正確;串列X25045存儲靈活可靠,串列時鍾S3530A走時精確,RS485匯流排傳輸可靠性高,防竊電新奇設計。採用I2C匯流排結構多費率單相電能表設計更加公道,具有性價比高的特點

❷ 單片機->rs232/rs485轉換器->電能表

1、指示燈只是反應數據線上有數據跳變信息。不一定代表通信成功!(你說的單片機是232介面 ,通過232轉485連接到電表的485抄表通信口,是嗎?)
2、如果換一個電能表或者單片機能通信成功,另當別論。
3、八成是單片機協議不正確。具體表現在:
a)波特率設置不正確
b)通信方式不正確,11位方式還是10位方式?
c)電表地址不正確。
d)協議解析不正確,各信息域處理長度,校驗。
4、調試辦法,PC機上打開串口調試助手,設置成相應波特率。用另一個232轉485,485與電表口並接,監視單片機的命令幀和電能表的應答幀,是否符合協議要求。

❸ 如何用單片機做電壓表

需要用到A/D轉換,原理上就是將被電阻分壓後的待測電壓送入A/D,然後利用單片機計算出A/D轉化後的電壓,在求出待測電壓的值。

❹ 基於單片機的智能電表的設計

基於單片機控制的智能電表抄表系統 摘 要 近年來,隨著單片機成本的降低、通信技術的快速發展以及通信技術的多樣化

❺ 單片機數字電表程序修改

這個程序一看就知道是菜鳥級的人,很多地方都會出問題,

有時候會正常,有時候會不正常

工作起來相當不穩定

高手們給改改吧!

❻ 電表用什麼單片機

用51單片機。

SST-300智能型電力表,以採用16位單片機為主,與傳統電能表相比,基本上採用全數字方式計算電能。元器件為微型貼片元件和專用高精度集成電路為主。電容和電阻均為貼片方式生產。是一款高性能電力表產品。

簡介

單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。

❼ 單片機設計製作數字電壓表

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>

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,

0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,0,0,0,0};

unsignedchardispcount;

unsignedchargetdata;

unsignedinttemp;

unsignedchari;

sbitST=P3^0;

sbitOE=P3^1;

sbitEOC=P3^2;

sbitCLK=P3^3;

voidmain(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;

}

}

}

voidt0(void)interrupt1using0

{

CLK=~CLK;

}

voidt1(void)interrupt3using0

{

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;

}

}

❽ 51單片機做數字電表

這是用數碼顯示的程序
#include<reg51.h>
unsigned char code dispbitcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char dispbuf[4];
unsigned int i;
unsigned int j;
unsigned char getdata;
unsigned int temp;
sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;
sbit a=P3^4;
sbit b=P3^5;
sbit c=P3^6;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P17=P1^7;
void display();
void timeinitial();
void delay(unsigned int i);
void timeinitial()
{
TMOD=0x10;
TH1=(65536-200)/256;
TL1=(65536-200)%256;
EA=1;
ET1=1;
TR1=1;
}
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
{
for(j=0;j<50;j++)
{;}
}
}
void display()
{
if(dispbuf[3]!=0)
P1=dispbitcode[dispbuf[0]];
P20=0;
P21=1;
P22=1;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[1]];
P17=1;
P20=1;
P21=0;
P22=1;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[2]];
P20=1;
P21=1;
P22=0;
P23=1;
delay(10);
P1=0x00;
P1=dispbitcode[dispbuf[3]];
P20=1;
P21=1;
P22=1;
P23=0;
delay(10);
P1=0x00;
}
void main()
{
timeinitial();
while(1)
{
ST=0;
OE=0;
ST=1;
ST=0;
a=1;
b=1;
c=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
temp=getdata*1.0/255*500;
dispbuf[3]=temp%10;
dispbuf[2]=temp/10%10;
dispbuf[1]=temp/100%10;
dispbuf[0]=temp/1000;
display();
}
}
void t1(void)interrupt 3 using 0
{
TH1=(65536-200)/256;
TL1=(65536-200)%256;
CLK=~CLK;
}

❾ 如何利用51單片機來採集485電表的數據

用TTL轉485模塊接到電表A\B兩端,通過單片機串口發送電表讀取電量規約格式(數據格式哼重要,仔細看DL645-1997通訊協議),等待數據返回,再通過串口2或液晶顯示出來。

❿ 如何用單片機製作電流表和電壓表

一般測試電流,需要毫歐級的采樣電阻和差分輸入的AD。另外考慮電流可能雙向(電池充電和放電),最好AD的負電源略低於地電平。

閱讀全文

與單片機電表相關的資料

熱點內容
php正則class 瀏覽:731
怎麼在文件夾查找一堆文件 瀏覽:536
核酸報告用什麼app 瀏覽:785
u8怎麼ping通伺服器地址 瀏覽:990
安卓什麼手機支持背部輕敲調出健康碼 瀏覽:868
程序員抽獎排行 瀏覽:738
扭蛋人生安卓如何下載 瀏覽:722
什麼app文檔資源多好 瀏覽:922
黑馬程序員APP 瀏覽:146
掌閱小說是哪個app 瀏覽:45
如何把u盤的軟體安裝到安卓機 瀏覽:998
php跑在什麼伺服器 瀏覽:122
編譯器怎麼跳轉到下一行 瀏覽:450
嵌入式py編譯器 瀏覽:324
rplayer下載安卓哪個文件夾 瀏覽:298
安卓手機里的電子狗怎麼用 瀏覽:748
pythonspyder入門 瀏覽:764
趣質貓app是什麼 瀏覽:60
皮帶壓縮機經常吸不上 瀏覽:205
西部隨行版怎樣加密 瀏覽:996