引言
無論是在日常生活還是在工業生產中,溫度都是一個非常重要的指標。所以,對溫度數據的采集、測量和傳輸,一直都是研究的重點。傳統的溫度采集系統的實現方法包括專門鋪設有線通信線路傳輸溫度數據(如采用RS485總線結構)和采用無線通信傳輸溫度數據(如藍牙,GPRS等)。傳統的鋪設專有的通信線路的方法設計成本較高、施工麻煩、出現問題時很難排除,已經很難適應高速發展的現代社會的需求。采用無線的方式則具有不用布線、實時性高等優點,但是其設計成本也相應的非常高。而在現代社會中,電力線幾乎無處不在,因此,本文提出了一種基于電力線通信的溫度采集系統,無需專門鋪設通信線路,能夠大大降低設計成本。
1 系統總體設計方案
1.1 溫度檢測模塊總體構架
溫度檢測模塊中,STC12LE5A60S2是主控芯片,由電源模塊、LCD顯示、電力線通信芯片RISE3501、DS18B20溫度傳感器、RS232等電路構成。總體構架如圖1所示。
圖1 溫度檢測模塊總體構架
1.2 系統的拓撲結構
該系統采用主從式的工作模式,在滿足電力線通信距離的檢測區域內,放置一個嵌入式上位機、一個主機模塊和多個溫度檢測模塊,如圖2所示。嵌入式上位機可以發起抄溫度的指令給主機模塊,主機模塊則通過電力線抄寫相應模塊的。
圖2 系統的拓撲結構
溫度,并將溫度數據返回給上位機。例如:在某居民小區,每戶人家放置一個檢測模塊,整個小區設置一個主機模塊和上位機,則可以實現對小區內每戶人家的溫度采集。
本文主要實現溫度檢測模塊和主機模塊的軟硬件設計。在本設計中,可以更改溫度檢測模塊的主控芯片內的程序,從而將其當做主機模塊使用。
2 系統硬件設計
2.1 電源模塊
2.1.1 220V交流電轉16V直流電
變壓器將220V交流電轉換為16V交流電,橋式整流電路將16V交流電轉化為直流電,通過電容電感濾波后得到大約16V直流電。這個16V直流將直接給電力線通信芯片的發送電路的功率放大器供電。如圖3所示。
圖3 220V交流轉16V直流
2.1.2 16V電壓轉化為5V電壓
使用78M05電源芯片將16V直流電轉化為5V直流電。這個5V直流電將給DS18B20溫度傳感器供電。如圖4所示。
圖4 16V電壓轉5V電壓
2.1.2 5V電壓轉3.3V電壓
使用AP1117將5V直流電轉化為VCC3.3V電壓。再通過磁珠F-BEAD分出來VCCA3.3V,VCCA3.3V將給電力線通信芯片的接收電路供電。
圖5 5V電壓轉3.3V電壓
2.2 主控芯片STC12LE5A60S2
本系統采用具有兩個串口的STC12LE5A60S2作為系統的主控單片機。其特點如下:
是單時鐘周期、高速、低功耗、超強抗干擾的新一代8051單片機,指令代碼完全兼容傳統的8051單片機,但速度快8~12倍。片上集成60K Flash存儲器,可用于存儲程序和溫度數據,非常有利于系統的軟件的升級換代。
該單片機具有雙串口,這是選擇這款單片機最主要的原因之一。在系統設計中,使用其中的一個串口和電力線通信芯片進行通信,從而控制電力線通信芯片收發數據。另一個串口則用于下載程序、打印系統調試信息以及和上位機通信(溫度檢測模塊用作主機模塊時)等。
無需專用下載器,無需專用仿真器,可通過串口直接下載用戶程序。從而降低了設計開發的難度,降低了設計成本。
2.3 電力線通信電路
本系統使用RISE3501實現電力線通信。RISE3501是一款智能型電力載波控制芯片,內部集成電力收發模塊,Flash、SRAM以及 8位處理器內核。設計符合EIA-709.1和EIA-709.2標準規范。
RISE3501可以通過串口和主控單片機通信。單片機將滿足645規約的指令和數據通過串口發送給RISE3501,RISE3501則通過電力線將數據發送出去。當RISE3501從電力線上接收到發給自己的數據時,其將數據收下,并將數據通過串口發送給主控單片機。
2.4 LCD顯示模塊
本系統使用6位筆段式LCD EDS826來顯示當前溫度,采用HT1621B 驅動芯片來驅動EDS826的顯示。這里不使用STC12LE5A60S2單片機直接驅動EDS826,這樣可以簡化系統軟硬件設計的復雜度,減輕主控單片機的任務,從而有利用系統的升級與擴展。其電路結構如圖6所示。
圖6 LCD顯示電路
2.5 溫度檢測電路
本系統的溫度傳感器使用DS18B20。DS18B20 數字溫度計以9 位數字量的形式反映器件的溫度值。通過一個單線接口發送或接收信息,因此在主控單片機和DS18B20 之間僅需一條連接線(加上地線)。測溫范圍-55~+125℃,以0.5℃遞增。溫度數字量轉換時間200ms(典型值)。電路結構如圖7所示。
圖7 溫度檢測電路
3 系統軟件設計
在本系統中,主機模塊的硬件和溫度檢測模塊的硬件是完全相同的,但是運行在主機模塊內的程序和運行在溫度檢測模塊內的程序不同。
3.1 主程序設計
3.1.1 主機模塊的主程序流程圖如圖8所示。主要分為以下幾步:
(1) 系統上電復位后,主程序初始化LCD顯示的驅動芯片HT1621B、初始化溫度傳感器DS18B20、初始化串口1和串口2、復位電力線通信芯片RISE3501。
(2) 初始化完成后,單片機檢測和RISE3501的連接狀態,如果沒有連接好,RISE3501將會通過串口2不斷的給單片機發送握手序列,此時單片機給RISE3501回復滿足645規約的指令,將RISE3501置于發送模式。
(3) 接下來是溫度的顯示。在應用中,主程序沒有必要隨時去讀取溫度來顯示,所以,這里設置一個變量來劃分時間,時間間隔大約1000ms,變量減為0時,單片機讀取溫度數據,并將溫度數據發送給HT1621B,HT1621B驅動LCD顯示出來。
(4) 然后,單片機判斷上位機是否給自己發來數據。前面提到,上位機通過串口1和單片機通信。如:當上位機需要抄寫溫度時,通過串口1給單片機發送抄寫溫度的指令。當單片機檢測到串口1有數據時,將數據接收下來,并解析數據包含的指令信息。
(5)接下來,主機模塊的單片機判斷是否需要抄寫從機的溫度。需要抄寫時,單片機執行抄寫溫度的代碼,并將抄寫的溫度數據返回給上位機。
至此,一個主程序流程走完,程序返回到(2)的位置,檢測單片機和RISE3501的狀態。需要再次檢測單片機和RSIE3501的連接狀態的原因是:當RISE3501與單片機握手成功后,其90秒后會再次發送握手指令,以確保與單片機的連接。所以,主程序需要循環檢測單片機與RISE3501的連接狀態。
圖8 主機模塊的主程序流程圖
3.1.2 溫度檢測模塊的主程序
溫度檢測模塊的主程序流程圖如圖9所示。主要分為以下幾步:
(1) 系統初始化(和主機模塊相同)。
(2) 單片機和RISE3501握手,且將RISE3501置于接收模式,隨時準備接收主機模塊發來的數據。
(3) 讀取溫度并顯示(和主機模塊相同)
(4) 如果收到主機模塊的抄溫度請求,則將溫度數據發送給主機模塊。
(5) 返回步驟(2)
圖9 溫度檢測模塊的主程序流程圖
3.2 與電力線通信相關的程序設計
本系統使用RISE3501實現電力線通信。通信的數據格式滿足645規約。可以通過軟件給RISE3501設定唯一的地址,這個地址也就是本模塊的地址。
3.2.1 645規約規定的數據格式
每字節含8 位二進制碼,傳輸時加上一個起始位(0)、一個偶校驗位和一個停止位(1),共11 位。其傳輸序列如圖7。D0 是字節的最低有效位,D7 是字節的最高有效位。先傳低位,后傳高位。
(2) 幀格式
幀是傳送信息的基本單元。幀格式如上表所示。
幀起始符 68H:標識一幀信息的開始,其值為68H=01101000B。
地址域A0~A5:地址域由6 個字節構成,每字節2 位BCD 碼。地址長度可達12 位十進制數,可以為表號、資產號、用戶號、設備號等。具體使用可由用戶自行決定。當使用的地址碼長度不足6 字節時,用十六進制AAH 補足6 字節。低地址位在先,高地址位在后。當地址為999999999999H 時,為廣播地址。
控制碼 C:控制碼的格式如下所示:
D7=0:由主站發出的命令幀
D7=1:由從站發出的應答幀
D6=0:從站正確應答
D6=1:從站對異常信息的應答
D5=0:無后續數據幀
D5=1:有后續數據幀
D4~D0:請求及應答功能碼
00000:保留
00001:讀數據
00010:讀后續數據
00011:重讀數據
00100:寫數據
01000:廣播校時
01010:寫設備地址
01100:更改通信速率
01111:修改密碼
10000:最大需量清零
數據長度L:L 為數據域的字節數。讀數據時L≤200,寫數據時L≤50,L=0 表示無數據域。
數據域DATA:數據域包括數據標識和數據、密碼等,其結構隨控制碼的功能而改變。傳輸時發送方按字節進行加33H 處理,接收方按字節進行減33H 處理。
校驗碼CS:從幀起始符開始到校驗碼之前的所有各字節的模256 的和,即各字節二進制算術和,不計超過256 的溢出值。
結束符 16H:標識一幀信息的結束,其值為16H=00010110B。
在發送幀信息之前,先發送 1~4 個字節FEH,以喚醒接收方。
所以,單片機向RISE3501發送數據前,需要先將要發送的數據打包成滿足以上幀格式的幀,然后再發送。單片機接收收到RISE3501的幀后,也要按上述幀格式解析,得到實際數據。如:
主機向從機發送的抄寫溫度的指令的幀,其實現代碼如下:
void Get_slave_cmd_3501(unsigned char *arr)
{
unsigned char i;
unsigned char tmp=0;
arr[0] = 0xFE;
arr[1] = 0xFE;
arr[2] = 0xFE;
arr[3] = 0xFE;
arr[4] = 0x68;
for(i=0;i<6;i++)
arr[i+5] = SLAVE_ADDR_BUF[i]; //將從機的地址拷貝進來
arr[11] = 0x68;
arr[12] = 0x04; //C控制碼
arr[13] = 0x06; //L 指令的長度
for(i=0;i<6;i++)
arr[i+14] = 0xCC; // 向slave 發送的抄溫度指令
for(i=4;i<20;i++)
tmp = tmp + arr[i]; //計算校驗位CS
arr[20] = tmp;
arr[21] = 0x16;
}
其中,SLAVE_ADDR_BUF[]內是需要抄溫度的從機的地址,0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC 是表示抄寫溫度的指令。
溫度檢測模塊返回的溫度數據的幀,其代碼實現如下:
void Get_TMP_3501(unsigned char *arr)
{
unsigned char i;
unsigned char tmp = 0;
arr[0] = 0xFE;
arr[1] = 0xFE;
arr[2] = 0xFE;
arr[3] = 0xFE;
arr[4] = 0x68;
for(i=0;i<6;i++)
arr[i+5] = HOST_ADDR_BUF[i]; //將主機的地址拷貝進來
arr[11] = 0x68;
arr[12] = 0x04; //C控制碼
arr[13] = 0x06; //L 溫度數據的長度
for(i=0;i<6;i++)
arr[i+14] = TMP[i]; //將溫度數據拷貝過來
for(i=4;i<20;i++)
tmp += arr[i]; //計算校驗位CS
arr[20] = tmp;
arr[21] = 0x16;
}
其中,HOST_ADDR_BUF[]內是主機的地址,TMP[]內是當前的溫度。
3.2.2 單片機與RISE3501握手程序
RISE3501具有發送工作模式和接收工作模式。當處于發送工作模式時,可以將單片機發給自己的數據轉發到電力線上;當處于接收工作模式時,可以接收電力線上的屬于與自己地址相符合的數據,并將數據轉發給單片機。從而實現了在電力線上的數據的收發。
RISE3501復位后,將給單片機發送握手請求:68 AA AA AA AA AA AA 68 13 00 DF 16。
單片機給RISE3501回復:68 A0 A1 A2 A3 A4 A5 68 81 08 65 F3 (A0 +33) (A1+33)(A2 +33)(A3 +33)(A4 +33)(A5+33)CS 16,則將RISE3501置于接收模式,其中A0~A5是本模塊的地址。
單片機給RISE3501回復:68 CC CC CC CC CC CC 68 81 08 65 F3 (A0 +33) (A1+33)(A2 +33)(A3 +33)(A4 +33)(A5+33)CS 16 ,則將RISE3501置于發送模式,其中A0~A5是本模塊的地址。
在應用中,即使握手成功后,RISE3501也需要隨時和單片機保持連接狀態,為此RISE3501隔90秒后將再次給單片機發送握手信號。所以,單片機的主程序需要循環檢測RISE3501發送的握手信號。
3.2.3 溫度數據的抄寫和傳輸程序
主機模塊抄寫溫度檢測模塊的溫度的程序流程圖如圖10所示。
圖10 主機模塊抄寫溫度檢測模塊的溫度的程序流程圖
溫度檢測模塊給主機模塊發送溫度數據流程圖如圖11所示。
圖11 溫度檢測模塊返回溫度數據給主機模塊流程圖
3.3 溫度檢測程序
通過DS18B20檢測溫度的單片機程序如下
void GetTemperature(void)
{
DS18B20_Reset(); //設備復位
DS18B20_WriteByte(0xCC); //跳過ROM命令
DS18B20_WriteByte(0x44); //開始轉換命令
while (!DQ); //等待轉換完成
DS18B20_Reset(); //設備復位
DS18B20_WriteByte(0xCC); //跳過ROM命令
DS18B20_WriteByte(0xBE); //讀暫存存儲器命令
TPL = DS18B20_ReadByte(); //讀溫度低字節
TPH = DS18B20_ReadByte(); //讀溫度高字節
}
讀取到的溫度數據的高字節保存在TPH里、低字節保存在TPL里。此時的溫度數據時十六進制的,為了方便溫度顯示和人們的日常習慣,需要將溫度數據轉化為十進制。
3.4 LCD顯示溫度的程序
EDS826是6位筆段式LCD,溫度顯示為2位小數位、3位整數位、1位符號位和小數點。如:0090.50,表示零上90.5度。-005.50,表示零下5.5度。
符號位 百位 十位 個位 小數點后1位 小數點后2位
單片機通過向HT1621B發送命令來控制LCD的顯示。HT1621B顯示驅動芯片具有兩種命令模式:數據模式和命令模式。數據模式命令包括READ、WRITE和READ-MODIFY-WRITE,它們的識別碼分別為110、101、101。命令模式的命令較多,其識別碼是100。
EDS826顯示一位數據的流程圖如圖12所示。
圖12 EDS826顯示一位數據的流程圖
完整的溫度顯示只需要將每一位的溫度數據顯示出來即可。
4 PCB板設計以及系統實現
本系統使用Cadence公司的原理圖設計工具concept-HDL進行電路原理圖設計,使用Allegro進行PCB板設計。最終模塊的實現如下:
結語
本文設計了一種溫度采集系統,利用電力線通信技術,實現了主機模塊和溫度檢測模塊之間的溫度數據在電力線上傳輸。系統使用STC12LE5A60S2、RISE3501電力線通信芯片、DS18B20溫度傳感器、EDS826筆段式LCD進行設計。具有本地顯示溫度以及遠程抄溫度的功能。可以應用在鋪設有220V交流電的地方,具有很寬的應用范圍和較好的實用價值。
(審核編輯: 智匯張瑜)
分享