- 相關推薦
基于VC++串行通信的無刷直流電機監控系統
摘要:本文重點介紹了基于PC機和MSP430單片機串行通信的具體實現過程。硬件部分解決了通信電平不一致的問題,軟件部分給出了PC機和單片機的通信程序,解決了通信過程中數據傳輸的格式問題。實驗結果表明,該方案操作性強,能成功運用于電機的監控系統。
關鍵詞:無刷直流電機 VC++ MSP430 串行通信
1、引言
[1]無刷直流電機調速性能好,利用單片機MSP430專門的PWM功能、豐富的I/O口、快速運算等優點,實現對無刷直流電機的邏輯控制,由于作為下位機的人機交互性不強,難以對電機運行時的關鍵信息有效處理,本文通過編寫VC++上位機程序,采用PC機和單片機串行通信的主從式結構,實現了對電機的監控。
2、電機原理及系統硬件組成
2.1 無刷直流電機運行原理
無刷直流電機的電力電子開關代替有刷電機的換向片,減少了機械磨損及因換向產生的一些危險,系統由電動機本體、位置檢測器、逆變器和控制器組成[2]。
電機本體同軸上的位置傳感器,根據轉子的不同位置,發出邏輯信號,根據實驗所得的邏輯表,控制輸出回路發出的信號,經MOSFET驅動放大,控制電機電樞電流的導通,以實現“換向”。
2.2 下位機控制系統硬件構成
下位機以MSP430系列的F2274單片機為控制核心,通過檢測電機轉子信號,單片機I/O口發出相應邏輯信號,與控制轉速的PWM信號相“與”,經信號隔離,到電機專用驅動芯片IR2130中,繼而導通橋式電路,實現MOSFET的導通。
同時, MSP430單片機的捕獲比較模塊,捕獲三相傳感器信號輸入的時間,本文試驗采用的無刷直流電機為一個機械周期(20個電周期),通過計算得到電機的轉速公式為[3]:
;
表示檢測到第一次位置信號時的時鐘數,表示檢測到第二次位置信號時的時鐘數,為定時器的時鐘主頻,*3則表示轉過一個電周期所用的時間。通過串行通信,可將轉速、電壓、電流這些參數傳至上位機。
2.3 串行通信的硬件實現
本文采用異步通信模式[4],設定好波特率及數據位和停止位的個數;將PC機的RXD腳與下位機的TXD相連,并共地;利用MAX232芯片實現電壓轉換,即通過串口線連到PC機上,加上5個1的電容把RS232電平轉化為標準TTL電平,再用兩個電阻分壓,以達到MSP430單片機的電壓標準。
3、串行通信軟件設計
3.1 上位機串行通信設計
[5]本文上位機通信模塊采用MFC的編程方式,界面如圖1所示。加入MSComm控件,自動生成CMSComm的類,訪問其內部函數,可對PC機串行通信進行控制。
在上位機進行通信之前,在MSComm中,設置通信參數,程序在界面上采用可視化的串口設置方式,提高了軟件的通用性和移植性。[論文網]
setting=m_botelv+",";
if (m_testbit == "None")
parity = "n";
else if (m_testbit == "Odd")
parity = "o";
else if (m_testbit == "Even")
parity = "e";
else if (m_testbit == "Mark")
parity = "m";
else if (m_testbit == "Space")
parity = "s";
setting += parity + ",";
setting += m_sbitbit + ",";
setting += m_stopbit;
if (m_comkou == "COM1")
m_com.SetCommPort(1);
else if (m_comkou == "COM2")
m_com.SetCommPort(2);
m_com.SetSettings(setting);
m_com.SetInputMode(1); //1:表示以二進制方式檢取數據
m_com.SetRThreshold(1); //為1表示有一個字符引發一個事件
m_com.SetSThreshold(1); //參數1表示每當串口接收緩沖區中有
//多于或等于1個字符時將引發一個接收數據的OnComm事件
m_com.SetInputLen(0); //設置當前接收區數據長度為0
在查詢到CommEvent的值等于2時,表明接收緩存里有了數據。數據是VARIANT型的,首先轉化為ColeSafeArray形式,然后再將數組元素分離轉化為BYTE型數組,最后再將BYTE里的字符轉化為數字。當上位機按下按鈕發送數據時,也應通過函數COleVariant()進行強制類型轉換,以VARINT的形式傳送出去。
當下位機將電機轉速的數據上傳后,本軟件加入了圖形顯示和數據存儲功能。在繪圖子對話框中,首先通過GetParent函數調用父對話框指針,將父對話框中的數值傳進子對話框,然后通過定時器,以一定頻率繪制網格線并將傳進來的數據點在圖上顯示。再次更新時,則重新繪制新曲線,覆蓋原有圖形,并將新點和舊點以直線相連,從而實現圖2所示的速度曲線。
在數據傳到子對話框時,基于VC++的操作,本文采取二進制格式存儲數據。首先定義一個fstream的類對象,該類支持從本流類所對應的磁盤文件中讀入和寫入數據的雙向操作。當主對話框設置為“采集數據”時,對定義的二進制文件進行“寫”操作;當設置“顯示數據”時,則不斷調用二進制文件里的數據,并傳遞給圖像控件,顯示存儲的數據。關鍵代碼如下:
fstream iobin("ob.bin",ios::binary|ios::out |ios::in);//定義類對象,ob為目標數據文件
…
if(((CQuxian1Dlg*)GetParent())->showmode==0)//0表示采集1表示顯示已有數據
{
data=((CQuxian1Dlg*)GetParent())->data;//取得父對話框的速度數據
iobin.write((char*)(&data),sizeof(data));//寫人二進制文件
}
else
iobin.read((char*)(&data),sizeof(data));//顯示已有數據
…
iobin.close();//關閉二進制文件
3.2 下位機串行通信設計
在下位機控制系統中,采用MSP430系列單片機,其內置的USCI模塊通過UCAXRXD和UCAXTXD兩個外部引腳連到單片機外部,實現串行通信[5]。
首先設定好系統時鐘,并進行UCAXRXD和UCAXTXD的引腳設置。然后通過UCA0CTL1選擇串行通信模塊的時鐘源,并通過UCA0BR0、UCA0BR1分頻,從而得到需要的波特率。串行模塊中的控制字UCMSB控制發送和接受移位寄存器從高位還是低位開始接受,應設置為低位,否則會出現數據錯誤。參數設置如下:
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
UCA0CTL1 &= ~UCSWRST;
數據的發送和接收是通過中斷函數進行的。首先開接收中斷,對接收到的數據進行判斷,并根據相應指令對電機的啟動/停止和速度進行控制,當接收到啟動命令后,再開發送中斷,將每次計算得到的轉速數據傳到發送緩存中進行上傳,程序流程如圖3所示。
3.3 通信數據的格式轉化
單片機的接收和發送緩存是8位,本系統傳輸的數據是float型,在傳輸前需進行數據轉換。首先,限定傳輸的數據為0.0001~9999,取4位有效數字;然后將數據擴大10的“倍數”,轉化為整數;再將整數分為高二位和低二位,分別賦到數組的前兩位元素中,第三位元素賦以“倍數”;第四位元素賦以標識位,使每個目標數有唯一的標識符,方便傳輸。
4、結語
本文以MSP430單片機為核心,通過編制上位機可視化程序,采取主從式控制結構,使得無刷直流電機的控制和可觀性得到了明顯的改善,實驗結果表明,該方案能成功用于電機的監控系統。
參考文獻
[1]孫建忠,白鳳仙.特種電機及其控制[M].北京:中國水利水電出版社,2010.87-105.
[2]李先詳,斯燕躍.無刷直流電機的單片機監控系統的研制[J].電氣傳動自動化,2002(3):3-5.
[3]王宏華.新型交流電動機及控制技術系列講座(3)永磁無刷電動機[J].機械制造與自動化,2004(3):105-109.
[4]徐洋.基于MSP430單片機的無刷直流電機實驗測試平臺設計[J].電氣技術與自動化,2010(4):168-171.
[5]張筠,劉書智.Visual C+ +實踐與提高—串口通信與工程應用篇[M].北京:中國鐵道出版社,2006:179-182.
【基于VC++串行通信的無刷直流電機監控系統】相關文章:
基于web的異地并行設計與制造系統研究06-02
基于PLC的斷路器型式試驗系統設計03-10
游戲軟件開發VC++05-13
衛星移動通信系統的論文(通用7篇)07-26
操控系統無線通信論文(精選8篇)07-27