楊 峰,童 軒,李建奇
(湖南文理學院 電氣與信息工程學院,湖南 常德 415000)
在某些環境下,需要對終端負載的電流進行遠程監控,同時由于負載變動時電流會隨之變動,因而設計該監控系統,一方面可遠程監控數據,另一方面使電流在負載變動時保持設置恒定。
系統總體方案如圖1所示。STM32經過控制單元電路對電流實時采樣,根據采樣的結果與設定值由PI算法計算得到輸出PWM的占空比,PWM的占空比決定負載的電流大小。其值可通過人機接口或上位機設定。

圖1 系統方案框圖


圖2 控制單元電路
系統中,采樣電阻R1越小,電流最大可設定范圍越寬,由于LM2596最小電壓大于0,因此過小的R1可能會帶來超調現象。所謂超調,是指由于系統的滯后使得在單側逼近設定值時出現一種先超過設定值后再回到設定值的現象。圖2中使用了2.8 Ω的采樣電阻,當負載較小時,設定5 mA以下的電流時會出現超調。為了改善這種現象,系統中加入了恒流偏置電路[7],由恒流器件SM2082輸出固定電流I2,I2的大小約為50 mA,這即是流過采樣電阻的最小電流,這意味著抬升了采樣點即負載一端的最小電壓。若要將I1從0 mA調節至1 mA,則相當于無偏置情況下將I從0 mA 調至51 mA,有效地避免了超調現象的發生。
控制流程如圖3所示。

圖3 算法流程

圖4 通信電路
通信電路如圖4所示。用STM32的一組串行口與上位機進行通信,通過RS-485標準實現遠距離傳輸[8]。RS-485采用平衡發送與差分接收的方式,因此具有抑制共模干擾的能力,通信距離最多可達上千米。 RS-485采用負邏輯,+2~+6 V表示“0”,-6 ~-2V 表示“1”。為了達到 RS-485 總線的電氣特性標準,必須外接電平轉換芯片,圖4中運用了SP485,此轉換芯片成本小,性能穩定。同時考慮工業應用環境惡劣等因素,用高速光耦6N137對總線進行了隔離[9],使其具備更出色的抗干擾能力。
通信利用了Modbus協議,Modbus協議是工業電子設備上的一種通用語言[10],按照此協議,網路中的每臺設備之間可以相互通信。隨著該協議的廣泛應用,其已經成為一種通用工業標準。Modbus實際上定義了一種能被設備識別的消息結構,而與這個消息是通過何種路徑方式送來無關。它制定了一個設備請求訪問另一設備的模式,確定了怎樣響應其他設備發出的請求,以及如何檢測錯誤。
多臺設備在同一網絡上通信時,Modbus協議要求每臺設備都知道它們的地址,訪問者要根據訪問對象的地址發送請求,訪問對象以地址識別并決定是否產生行動。若要回應,設備將生成反饋信息并用此協議發出。在其他網絡上,使用Modbus協議的消息可以轉換為在當前網絡上使用的幀結構[11]。
Modbus協議支持包括RS-232、RS-422、RS-485在內的許多設備,PLC、DCS、FCS等也以該協議作為它們相互間的通信標準。
Modbus協議是在一根信號線上進行半雙工通信,也就是說在一根單獨的線上信號沿著兩端傳輸。當主機的信號尋址到唯一的從機時,此從機設備發出的響應信號反饋給主機。 協議規定了信息只能在主機和從機之間交換,而不能在獨立的設備之間交換,這就意味著不會使它們從一開始就占用線路,而只能響應本機接收的查詢信號。
在Modbus系統中有2種傳輸模式可選擇,分別是RTU模式和ASCII模式。通常上位機都內置了RTU模式協議,而STM32沒有內置該協議,所以文中系統主控是通過模擬方式來實現的。
消息幀發送要以大于4個節拍時間的停頓間隔開始,通信速率大于等于9 600 b/s時不大于5 ms;一幀消息必須連續傳輸,如果在一幀傳輸完成之前有超過4個節拍時間的停頓間隔,接收設備將認為當前幀結束,下一字節是一個新幀的開始。同理,如果一個新的消息幀在小于4個節拍內接著前一幀開始,接收設備將認為它是前一消息的延續。
程序中實現消息接收的關鍵片段如下:
TIM3_Int_Init(45,7199);
//每隔4 ms定時器溢出一次
void USART1_IRQHandler( )
{
u8 res;
TIM_SetCounter(TIM3,0);//每接收一個字節都會將定時器狀態重置,9 600 b/s接收一幀消息時,相鄰字節間隔時間小于4 ms便不會發生溢出中斷
TIM_Cmd(TIM3,DISABLE);
//關閉定時器
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
{
}
TIM_Cmd(TIM3,ENABLE);
//開啟定時器
}
void TIM3_IRQHandler( )
// 若超過4 ms沒有接收到新
的字節,便認為一幀消息接收完畢,進入中斷處理
{
INTX_DISABLE( );
//關閉總中斷
if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET&&RS485_RX_CNT>2)
{
Data_anlys(RS485_RX_BUF,address,RS485_RX_CNT);
// 解析消息內容
RS485_RX_CNT=0;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
INTX_ENABLE( );
//開啟總中斷
}
解析消息時,根據每一幀內容包含的地址碼、功能碼、數據碼和校驗碼進行處理。
地址碼決定了由哪臺從機將接收由主機發送來的消息。每個從機的地址碼都是唯一的,并且只有相應地址碼的從機才能應答。當從機反饋信息時,反饋數據中以自身的地址碼開始。主機將按應答格式解析從機的反饋。
功能碼位于信息幀第二個字節。協議最多定義了127種功能。主機通過功能碼告訴從機所要執行的任務。當從機響應時,從機回送的功能碼必須與主機所發送來的功能碼相同,以此表明該從機已應答并且將會執行所指定的任務。
數據碼表明需要由從機回送什么信息。這些信息可以是開關量輸入/輸出、模擬量輸入/輸出、寄存器、參考地址等。
主機或從機用CRC校驗碼來檢查所接收的信息是否正確。由于傳輸路徑存在著一些干擾,所發送的信息有時會發生錯誤,這時錯誤校驗碼(CRC)可以檢驗主機或從機所接收到的信息是否正確,錯誤的數據可以棄置,從而保證了系統的安全與效率。
CRC碼是一個字節長度為2的十六進制數。主機和從機采用相同的CRC算法,主機將計算的CRC碼于信息幀的最后發送,從機再根據接收到的信息重新計算CRC,比較計算得到的CRC是否與接收到的相符,如果兩者不相符,則表明從機接收信息與主機所發送信息不一致,從機將不會作出應答,也不執行動作。
系統中,遠程監控的功能有三個,即數據的上傳、設定數據的下傳與啟停指令的下傳,根據協議,僅需要模擬其中的功能3(讀取保持寄存器)和功能6(預置單寄存器)即可實現上述監控任務。
依照上述原理,實際制作了裝置,編寫了程序。根據不同負載,測得了不同可調量程,如表1所示。

表1 測試數據
負載越大,可調量程越小,偏置電流的存在對量程也有一定影響。調整的時間最長為8 s,最短為3 s,調整的時間與負載、設定值和PI算法有關。系統的誤差不超過0.9%。
文中所設計的系統裝置,實現了對一定負載的電流設定功能,調節的速度快,誤差小,穩定性好,同時具備遠程通信功能,滿足了某些實驗與工程需要。系統也存在著有待改進之處,一是電流可調范圍還需要更寬一些;二是在不影響穩定的前提下,調整的速度還可以更快一些。
[1] 張金. 模擬信號調理技術[M]. 北京: 電子工業出版社, 2012.
[2] 遠扳昭俊. 測量電子電路設計(濾波器篇)[M]. 彭剛,譯. 北京: 科學出版社, 2006.
[3] 趙智超, 張宇, 吳鐵峰. 基于PWM電源管理芯片的電壓比較器電路設計[J]. 數字技術與應用, 2013(2):137-139.
[4] 王強, 蒙軒, 方開洪,等. 集成運放的線性與非線性應用分析[J]. 自動化與儀器儀表, 2014(4): 186-188.
[5] 嚴剛峰. 運算放大器應用電路設計[M]. 北京: 科學出版社, 2016.
[6] 高金源. 計算機控制系統[M]. 北京: 清華大學出版社,2013.
[7] 榮軍,楊學海. 基于單片機的簡易恒流源系統的設計[J]. 電子器件, 2013,36(2): 117-119.
[8] 江賢志,劉華章. 基于C8051F020單片機的RS-485串行通信設計[J].電子測量技術, 2014,37(3):121-124.
[9] 王戩. 基于光耦的三線串行通信接口電路性能提升的研究[J]. 電子設計工程, 2016(2):117-119.
[10] 孟祥劍,黎向陽. 基于 MODBUS 協議的人機界面和單片機串行通信[J]. 電子設計工程, 2014,28(9):87-90.
[11] 李永強,單雷平. 基于Modbus協議的多功能數據采集器設計[J]. 計算機測量與控制, 2014,22(3):839-842.