基于QTE的ARMDSP嵌入式系統的直流電機監控界面的設計與實(shí)現
3 QT圖形界面的設計
3.1 QT/Embedded
大多數的嵌入式系統都需要與人進(jìn)行交流,而且形成了軟硬件完全定制開(kāi)發(fā)的、基于圖形化顯示、觸摸屏控制的人機接口產(chǎn)品。QT/ Embedded是一個(gè)跨平臺應用程序和UI開(kāi)發(fā)框架,支持豐富的圖形控件,提供美觀(guān)的界面開(kāi)發(fā),完全滿(mǎn)足人機交互產(chǎn)品的界面顯示需求。QT/ Embedded的實(shí)現結構框圖如圖3所示。
QT應用程序由C++語(yǔ)言進(jìn)行開(kāi)發(fā)。QT的API分為控件、框架和工具三個(gè)部分,其高效的工作性能與其信號和槽的機制是密不可分的。QT/ Embedded開(kāi)發(fā)流程如圖4所示。
在宿主機上建立QT開(kāi)發(fā)環(huán)境,安裝交叉編譯工具,包括編譯器、鏈接器、庫函數等,應用程序在宿主機上運行,而產(chǎn)生的目標代碼是針對特定的硬件平臺。并且使用QtCreator跨平臺的Qt集成開(kāi)發(fā)環(huán)境,有助于提高開(kāi)發(fā)的效率。QT應用程序的開(kāi)發(fā)是在宿主機上調試通過(guò)后,移植到目標板上。
3.2 串口通信界面
串口通信界面提供串口屬性設置、串口數據通信的接口函數以及DSP反饋給ARM9的電機狀態(tài)信息。串口通信界面如圖5所示。通過(guò)點(diǎn)擊界面中‘Edit Parameter’按鍵實(shí)現對串口各種參數的配置。正確配置好參數,點(diǎn)擊‘ConneCt’按鍵即可連接串口,準備通信。電機狀態(tài)可以點(diǎn)擊‘Receive’獲得?!甅otor’菜單可打開(kāi)電機控制界面,其控制也是通過(guò)生效的串口傳輸。
設計串口配置的界面時(shí),首先定義結構體serial config,具體如下:
在設置好串口參數后,點(diǎn)擊‘Connet’后發(fā)送控件QPushButton信號clicked(),調用自定義槽函數setup_serial(),實(shí)現對QT控件中各個(gè)參數的讀取,并根據參數配置對應的串口。其中,由控件portNameComboBox的成員函數currentText()獲得設置的串口號,由此讀取串口名稱(chēng),并賦值給屬性serial.dev。設置串口名稱(chēng)代碼段如下:
類(lèi)似地讀取串口通信的其他相應參數。接下來(lái),需要打開(kāi)串口,代碼段如下:
其中,使用open函數打開(kāi)串口,獲得串口設備文件的文件描述符fd_serial。
槽函數setup_serial()中,完成參數讀取并打開(kāi)串口操作后,通過(guò)調用自定義的子函數set baudrate(int)用來(lái)設置波特率,而子函數set Parms(int)則是設置其他參數。其中主要使用了針對Linux串口通信的termios數據結構對串口進(jìn)行配置。由于使用串口對電機進(jìn)行讀取或控制,不允許等待,所以對于打開(kāi)的任何串口,都需要將其設置為非阻塞工作方式。程序中通過(guò)fcntl(fd serial,F_SETFL,O_NONBLOCK)實(shí)現把Linux下默認為阻塞讀的緩沖設置為非阻塞讀。
設計電機狀態(tài)讀取部分時(shí),首先定義了結構體motor_status:
當電機處于正常工作狀態(tài)時(shí),點(diǎn)擊界面上‘Receive’,自定義的槽函數receive data()會(huì )響應,實(shí)現對電機狀態(tài)的讀取。制定的DSP反饋給ARM9的數據包的格式如表1所示,數據格式大小為16位的char型數組。在槽函數中,使用read(fd_serial,buff16)函數通過(guò)串口讀取這16位帶有電機狀態(tài)信息的數據,并賦值給數組buff[]。
將字符數組buff[]各個(gè)字段傳遞給對應motor_status屬性,并分別發(fā)送自定義信號。用于顯示電機狀態(tài)的控件QLabel是QWidget的子類(lèi),其槽函數setText(QString)接收信號并將其顯示。比如,顯示電機轉速狀態(tài)的過(guò)程是:發(fā)射自定義信號speed_changed(QString),觸發(fā)QL-abel類(lèi)型控件label_DiskSpced_value的槽函數setText(OString),將當前電機轉速顯示在界面上。該信號和槽函數連接的語(yǔ)句為connect(this,SIGNAL(speed_changed(Qstring)),ui->label DiskSpeed value,SLOT(setText(QString)),實(shí)現了電機轉速的數據顯示。
3.3 電機控制界面
電機控制界面提供了對電機控制指令的配置,電機控制界面如下圖6所示。
點(diǎn)擊‘Edit’鍵可對參數進(jìn)行編輯,之后點(diǎn)擊‘Send’,通過(guò)串口傳輸生效。
先定義了電機參數結構motor config:
點(diǎn)擊‘Send’后發(fā)送控件QPushButton的信號clicked(),它會(huì )觸發(fā)自定義的槽函數send_data(),實(shí)現通過(guò)串口傳遞給DSP控制指令。定義DSP接收的電機控制的數據格式,如表2所示,需要大小為13位的char型數組存儲電機控制信息。槽函數send_data()中,按照格式賦值給
char型buff[]數組,然后通過(guò)函數write(fd_serial,buff,sizeof(buff))將數據寫(xiě)入串口。
3.4 實(shí)驗結果
完成QT應用程序在PC端的Linux下的仿真運行,編譯出在開(kāi)發(fā)板上執行的二進(jìn)制可執行文件,最終在嵌入式ARM板上運行效果如圖7所示,實(shí)現了ARM與DSP的串行通信及對電機的監控。
4 結語(yǔ)
基于QT/Embedded的GUI應用程序運行在嵌入式操作系統Linux上,高效穩定,UI設計提供了良好的用戶(hù)體驗,滿(mǎn)足了嵌入式設備的界面顯示需求。本課題采用ARMDSP+Linux+QT/Embedded的技術(shù)方案,設計與實(shí)現了電機控制界面,顯示了高性能嵌入式處理器、智能化嵌入式操作系統、圖形化應用程序在嵌入式產(chǎn)品應用上的可行性。
評論