楊 峰,童 軒,李建奇
(湖南文理學(xué)院 電氣與信息工程學(xué)院,湖南 常德 415000)
在某些環(huán)境下,需要對(duì)終端負(fù)載的電流進(jìn)行遠(yuǎn)程監(jiān)控,同時(shí)由于負(fù)載變動(dòng)時(shí)電流會(huì)隨之變動(dòng),因而設(shè)計(jì)該監(jiān)控系統(tǒng),一方面可遠(yuǎn)程監(jiān)控?cái)?shù)據(jù),另一方面使電流在負(fù)載變動(dòng)時(shí)保持設(shè)置恒定。
系統(tǒng)總體方案如圖1所示。STM32經(jīng)過(guò)控制單元電路對(duì)電流實(shí)時(shí)采樣,根據(jù)采樣的結(jié)果與設(shè)定值由PI算法計(jì)算得到輸出PWM的占空比,PWM的占空比決定負(fù)載的電流大小。其值可通過(guò)人機(jī)接口或上位機(jī)設(shè)定。
圖1 系統(tǒng)方案框圖
圖2 控制單元電路
系統(tǒng)中,采樣電阻R1越小,電流最大可設(shè)定范圍越寬,由于LM2596最小電壓大于0,因此過(guò)小的R1可能會(huì)帶來(lái)超調(diào)現(xiàn)象。所謂超調(diào),是指由于系統(tǒng)的滯后使得在單側(cè)逼近設(shè)定值時(shí)出現(xiàn)一種先超過(guò)設(shè)定值后再回到設(shè)定值的現(xiàn)象。圖2中使用了2.8 Ω的采樣電阻,當(dāng)負(fù)載較小時(shí),設(shè)定5 mA以下的電流時(shí)會(huì)出現(xiàn)超調(diào)。為了改善這種現(xiàn)象,系統(tǒng)中加入了恒流偏置電路[7],由恒流器件SM2082輸出固定電流I2,I2的大小約為50 mA,這即是流過(guò)采樣電阻的最小電流,這意味著抬升了采樣點(diǎn)即負(fù)載一端的最小電壓。若要將I1從0 mA調(diào)節(jié)至1 mA,則相當(dāng)于無(wú)偏置情況下將I從0 mA 調(diào)至51 mA,有效地避免了超調(diào)現(xiàn)象的發(fā)生。
控制流程如圖3所示。
圖3 算法流程
圖4 通信電路
通信電路如圖4所示。用STM32的一組串行口與上位機(jī)進(jìn)行通信,通過(guò)RS-485標(biāo)準(zhǔn)實(shí)現(xiàn)遠(yuǎn)距離傳輸[8]。RS-485采用平衡發(fā)送與差分接收的方式,因此具有抑制共模干擾的能力,通信距離最多可達(dá)上千米。 RS-485采用負(fù)邏輯,+2~+6 V表示“0”,-6 ~-2V 表示“1”。為了達(dá)到 RS-485 總線的電氣特性標(biāo)準(zhǔn),必須外接電平轉(zhuǎn)換芯片,圖4中運(yùn)用了SP485,此轉(zhuǎn)換芯片成本小,性能穩(wěn)定。同時(shí)考慮工業(yè)應(yīng)用環(huán)境惡劣等因素,用高速光耦6N137對(duì)總線進(jìn)行了隔離[9],使其具備更出色的抗干擾能力。
通信利用了Modbus協(xié)議,Modbus協(xié)議是工業(yè)電子設(shè)備上的一種通用語(yǔ)言[10],按照此協(xié)議,網(wǎng)路中的每臺(tái)設(shè)備之間可以相互通信。隨著該協(xié)議的廣泛應(yīng)用,其已經(jīng)成為一種通用工業(yè)標(biāo)準(zhǔn)。Modbus實(shí)際上定義了一種能被設(shè)備識(shí)別的消息結(jié)構(gòu),而與這個(gè)消息是通過(guò)何種路徑方式送來(lái)無(wú)關(guān)。它制定了一個(gè)設(shè)備請(qǐng)求訪問(wèn)另一設(shè)備的模式,確定了怎樣響應(yīng)其他設(shè)備發(fā)出的請(qǐng)求,以及如何檢測(cè)錯(cuò)誤。
多臺(tái)設(shè)備在同一網(wǎng)絡(luò)上通信時(shí),Modbus協(xié)議要求每臺(tái)設(shè)備都知道它們的地址,訪問(wèn)者要根據(jù)訪問(wèn)對(duì)象的地址發(fā)送請(qǐng)求,訪問(wèn)對(duì)象以地址識(shí)別并決定是否產(chǎn)生行動(dòng)。若要回應(yīng),設(shè)備將生成反饋信息并用此協(xié)議發(fā)出。在其他網(wǎng)絡(luò)上,使用Modbus協(xié)議的消息可以轉(zhuǎn)換為在當(dāng)前網(wǎng)絡(luò)上使用的幀結(jié)構(gòu)[11]。
Modbus協(xié)議支持包括RS-232、RS-422、RS-485在內(nèi)的許多設(shè)備,PLC、DCS、FCS等也以該協(xié)議作為它們相互間的通信標(biāo)準(zhǔn)。
Modbus協(xié)議是在一根信號(hào)線上進(jìn)行半雙工通信,也就是說(shuō)在一根單獨(dú)的線上信號(hào)沿著兩端傳輸。當(dāng)主機(jī)的信號(hào)尋址到唯一的從機(jī)時(shí),此從機(jī)設(shè)備發(fā)出的響應(yīng)信號(hào)反饋給主機(jī)。 協(xié)議規(guī)定了信息只能在主機(jī)和從機(jī)之間交換,而不能在獨(dú)立的設(shè)備之間交換,這就意味著不會(huì)使它們從一開(kāi)始就占用線路,而只能響應(yīng)本機(jī)接收的查詢(xún)信號(hào)。
在Modbus系統(tǒng)中有2種傳輸模式可選擇,分別是RTU模式和ASCII模式。通常上位機(jī)都內(nèi)置了RTU模式協(xié)議,而STM32沒(méi)有內(nèi)置該協(xié)議,所以文中系統(tǒng)主控是通過(guò)模擬方式來(lái)實(shí)現(xiàn)的。
消息幀發(fā)送要以大于4個(gè)節(jié)拍時(shí)間的停頓間隔開(kāi)始,通信速率大于等于9 600 b/s時(shí)不大于5 ms;一幀消息必須連續(xù)傳輸,如果在一幀傳輸完成之前有超過(guò)4個(gè)節(jié)拍時(shí)間的停頓間隔,接收設(shè)備將認(rèn)為當(dāng)前幀結(jié)束,下一字節(jié)是一個(gè)新幀的開(kāi)始。同理,如果一個(gè)新的消息幀在小于4個(gè)節(jié)拍內(nèi)接著前一幀開(kāi)始,接收設(shè)備將認(rèn)為它是前一消息的延續(xù)。
程序中實(shí)現(xiàn)消息接收的關(guān)鍵片段如下:
TIM3_Int_Init(45,7199);
//每隔4 ms定時(shí)器溢出一次
void USART1_IRQHandler( )
{
u8 res;
TIM_SetCounter(TIM3,0);//每接收一個(gè)字節(jié)都會(huì)將定時(shí)器狀態(tài)重置,9 600 b/s接收一幀消息時(shí),相鄰字節(jié)間隔時(shí)間小于4 ms便不會(huì)發(fā)生溢出中斷
TIM_Cmd(TIM3,DISABLE);
//關(guān)閉定時(shí)器
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
{
}
TIM_Cmd(TIM3,ENABLE);
//開(kāi)啟定時(shí)器
}
void TIM3_IRQHandler( )
// 若超過(guò)4 ms沒(méi)有接收到新
的字節(jié),便認(rèn)為一幀消息接收完畢,進(jìn)入中斷處理
{
INTX_DISABLE( );
//關(guān)閉總中斷
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET&&RS485_RX_CNT>2)
{
Data_anlys(RS485_RX_BUF,address,RS485_RX_CNT);
// 解析消息內(nèi)容
RS485_RX_CNT=0;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
INTX_ENABLE( );
//開(kāi)啟總中斷
}
解析消息時(shí),根據(jù)每一幀內(nèi)容包含的地址碼、功能碼、數(shù)據(jù)碼和校驗(yàn)碼進(jìn)行處理。
地址碼決定了由哪臺(tái)從機(jī)將接收由主機(jī)發(fā)送來(lái)的消息。每個(gè)從機(jī)的地址碼都是唯一的,并且只有相應(yīng)地址碼的從機(jī)才能應(yīng)答。當(dāng)從機(jī)反饋信息時(shí),反饋數(shù)據(jù)中以自身的地址碼開(kāi)始。主機(jī)將按應(yīng)答格式解析從機(jī)的反饋。
功能碼位于信息幀第二個(gè)字節(jié)。協(xié)議最多定義了127種功能。主機(jī)通過(guò)功能碼告訴從機(jī)所要執(zhí)行的任務(wù)。當(dāng)從機(jī)響應(yīng)時(shí),從機(jī)回送的功能碼必須與主機(jī)所發(fā)送來(lái)的功能碼相同,以此表明該從機(jī)已應(yīng)答并且將會(huì)執(zhí)行所指定的任務(wù)。
數(shù)據(jù)碼表明需要由從機(jī)回送什么信息。這些信息可以是開(kāi)關(guān)量輸入/輸出、模擬量輸入/輸出、寄存器、參考地址等。
主機(jī)或從機(jī)用CRC校驗(yàn)碼來(lái)檢查所接收的信息是否正確。由于傳輸路徑存在著一些干擾,所發(fā)送的信息有時(shí)會(huì)發(fā)生錯(cuò)誤,這時(shí)錯(cuò)誤校驗(yàn)碼(CRC)可以檢驗(yàn)主機(jī)或從機(jī)所接收到的信息是否正確,錯(cuò)誤的數(shù)據(jù)可以棄置,從而保證了系統(tǒng)的安全與效率。
CRC碼是一個(gè)字節(jié)長(zhǎng)度為2的十六進(jìn)制數(shù)。主機(jī)和從機(jī)采用相同的CRC算法,主機(jī)將計(jì)算的CRC碼于信息幀的最后發(fā)送,從機(jī)再根據(jù)接收到的信息重新計(jì)算CRC,比較計(jì)算得到的CRC是否與接收到的相符,如果兩者不相符,則表明從機(jī)接收信息與主機(jī)所發(fā)送信息不一致,從機(jī)將不會(huì)作出應(yīng)答,也不執(zhí)行動(dòng)作。
系統(tǒng)中,遠(yuǎn)程監(jiān)控的功能有三個(gè),即數(shù)據(jù)的上傳、設(shè)定數(shù)據(jù)的下傳與啟停指令的下傳,根據(jù)協(xié)議,僅需要模擬其中的功能3(讀取保持寄存器)和功能6(預(yù)置單寄存器)即可實(shí)現(xiàn)上述監(jiān)控任務(wù)。
依照上述原理,實(shí)際制作了裝置,編寫(xiě)了程序。根據(jù)不同負(fù)載,測(cè)得了不同可調(diào)量程,如表1所示。
表1 測(cè)試數(shù)據(jù)
負(fù)載越大,可調(diào)量程越小,偏置電流的存在對(duì)量程也有一定影響。調(diào)整的時(shí)間最長(zhǎng)為8 s,最短為3 s,調(diào)整的時(shí)間與負(fù)載、設(shè)定值和PI算法有關(guān)。系統(tǒng)的誤差不超過(guò)0.9%。
文中所設(shè)計(jì)的系統(tǒng)裝置,實(shí)現(xiàn)了對(duì)一定負(fù)載的電流設(shè)定功能,調(diào)節(jié)的速度快,誤差小,穩(wěn)定性好,同時(shí)具備遠(yuǎn)程通信功能,滿(mǎn)足了某些實(shí)驗(yàn)與工程需要。系統(tǒng)也存在著有待改進(jìn)之處,一是電流可調(diào)范圍還需要更寬一些;二是在不影響穩(wěn)定的前提下,調(diào)整的速度還可以更快一些。
[1] 張金. 模擬信號(hào)調(diào)理技術(shù)[M]. 北京: 電子工業(yè)出版社, 2012.
[2] 遠(yuǎn)扳昭俊. 測(cè)量電子電路設(shè)計(jì)(濾波器篇)[M]. 彭剛,譯. 北京: 科學(xué)出版社, 2006.
[3] 趙智超, 張宇, 吳鐵峰. 基于PWM電源管理芯片的電壓比較器電路設(shè)計(jì)[J]. 數(shù)字技術(shù)與應(yīng)用, 2013(2):137-139.
[4] 王強(qiáng), 蒙軒, 方開(kāi)洪,等. 集成運(yùn)放的線性與非線性應(yīng)用分析[J]. 自動(dòng)化與儀器儀表, 2014(4): 186-188.
[5] 嚴(yán)剛峰. 運(yùn)算放大器應(yīng)用電路設(shè)計(jì)[M]. 北京: 科學(xué)出版社, 2016.
[6] 高金源. 計(jì)算機(jī)控制系統(tǒng)[M]. 北京: 清華大學(xué)出版社,2013.
[7] 榮軍,楊學(xué)海. 基于單片機(jī)的簡(jiǎn)易恒流源系統(tǒng)的設(shè)計(jì)[J]. 電子器件, 2013,36(2): 117-119.
[8] 江賢志,劉華章. 基于C8051F020單片機(jī)的RS-485串行通信設(shè)計(jì)[J].電子測(cè)量技術(shù), 2014,37(3):121-124.
[9] 王戩. 基于光耦的三線串行通信接口電路性能提升的研究[J]. 電子設(shè)計(jì)工程, 2016(2):117-119.
[10] 孟祥劍,黎向陽(yáng). 基于 MODBUS 協(xié)議的人機(jī)界面和單片機(jī)串行通信[J]. 電子設(shè)計(jì)工程, 2014,28(9):87-90.
[11] 李永強(qiáng),單雷平. 基于Modbus協(xié)議的多功能數(shù)據(jù)采集器設(shè)計(jì)[J]. 計(jì)算機(jī)測(cè)量與控制, 2014,22(3):839-842.