張松松,盧 剛,李聲晉
(西北工業(yè)大學,陜西西安710072)
無刷直流電動機與電子技術、微電子技術、數字技術、自控技術以及稀土永磁材料的發(fā)展密切相關,因其擁有優(yōu)良的性能使得無刷直流電動機在某些領域取代了有刷電機。本文采用的dsPIC30F4012是由Microchip公司專為電機高速控制而設計的16位數字控制芯片,已有多篇論文對該芯片以及由其做成的無刷直流電動機控制器進行了介紹,于此不做詳述。本文研究基于dsPIC30F4012的無刷直流電動機控制器與上位機之間的數據通訊的實現方式,研究并設計了上位機程序和與上位機程序相對應的電機控制程序,實驗結果驗證了上位機與電機控制器的數據通訊符合本文的設計要求。
上位機與電機控制器之間的數據通訊原理如圖1所示。上位機將要發(fā)送的指令數據等通過數據包的形式發(fā)送到下位機,下位機接收到數據包之后,按照事先規(guī)定好的通訊協(xié)議對其進行解包,由上位機向電機控制器發(fā)送數據完成;下位機將接收到指令數據也通過數據包的形式發(fā)送至上位機,上位機接收到數據包之后對其進行解包,由電機控制器向上位機上傳數據完成,這就是上位機與電機控制器之間的數據通訊原理。本文所指的上位機為計算機,上位機與電機控制器之間是通過UART串行數據通訊實現的。電機控制器通過TTL電平轉換電路轉換成RS232電平與計算機的COM口連接。
圖1 上位機與電機控制器之間的數據通訊原理框架
為確保接收到的數據與發(fā)送的數據一致,在數據通訊的過程中加入了包頭、CRC校驗算法,因此通訊的數據包包含的數據有:包頭soi、命令描述符command、數據高8位 h8、數據低8位l8、CRC校驗值chksum。包頭的作用是開始接收數據的標志,CRC校驗值是為了確保發(fā)送的數據的正確性,包頭和CRC校驗值共同保證了整個數據包發(fā)送與接收的正確性,以避免數據紊亂。命令描述符使可以發(fā)送的數據類型可以有很多種,比如速度、PID計算的系數等,由此可以制定一個上位機與電機控制器之間的通訊協(xié)議。數據高8位、數據低8位為具體的數據,其含義與命令描述符有關,比如命令描述符為速度,數據則為速度值。
上位機的程序是通過LabVIEW8.6編寫,其功能主要實現數據打包發(fā)送至電機控制器與接收電機控制器發(fā)送來的數據并顯示,其程序可分為串口通訊設置、CRC校驗算法、數據打包發(fā)送、接收數據并處理。
(1)串口通訊設置
串口配置程序如圖2所示,使用LabVIEW8.6中內部自帶的VISA配置串口模塊來設置通訊方式。在本文中涉及到的主要包括端口選擇、波特率設定、奇偶校驗選擇、發(fā)送的數據長度以及停止位。
圖2 串口配置程序
(2)CRC校驗算法程序
在發(fā)送與接收過程中均用到了CRC校驗算法,因此將其做成了CRC校驗算法子VI,以方便使用。CRC校驗算法子VI的輸入為命令字符command與數據h8+l8,輸出為產生的 CRC校驗值chksum。CRC校驗算法程序流程如圖3所示。
圖3 CRC校驗算法流程
(3)數據打包發(fā)送
電機轉速由受PMM的占空比控制,控制占空比就相當于控制速度,因此本文在此發(fā)送的數據是占空比值,實現由上位機控制電機速度。在打包發(fā)送數據程序設計時一定要加上延遲,以避免下位機接收紊亂,其程序如圖4所示。發(fā)送的數據包為圖中的打包數據,數據包頭為0x55。
圖4 打包發(fā)送程序
(4)接收電機控制器發(fā)送的數據
因為一次只能接收8位二進制數據,因此整個數據包是通過五次循環(huán)完成的,故在接收時加延遲時間,以避免接收亂碼。其程序如圖5所示,從下位機接收到的數據包放在接收到的數組內,等待后續(xù)處理。
圖5 接收電機控制器發(fā)送的數據程序
本文中接收的數據包是上位機發(fā)送的數據包經下位機即電機控制器解包-打包-上傳之后的數據包,這兩個數據包應該是一致的,因經上位機程序解壓出來的占空比應一致,如不一致則說明上位機程序或者下位機程序錯誤,其解包處理程序如圖6所示。
圖6 解包處理程序
電機控制器中的程序是用C語言編寫的,通過MPLAB ICD2仿真連接器下載至數字控制芯片dsPIC30F4012中。本文主要研究并設計了整個UART接收中斷函數,PWM中斷函數則是參考以往實驗程序稍加修改,整個電機控制程序流程如圖7所示。
圖7 電機控制程序流程
電機控制程序首先要對數字控制芯片dsPIC30F4012進行系統(tǒng)配置,然后對用到的UART、PWM模塊進行初始化配置,編寫PWM中斷函數和UART接收中斷函數,等上位機發(fā)送指令數據引起UART中斷事件,進入UART接收中斷函數,接收數據并解包,將收到的數據再打包上傳,執(zhí)行完UART函數之后改變了程序中占空比的值,引起了PWM中斷事件,從而進入PWM中斷函數,對電機進行換相,實現電機轉速控制,執(zhí)行完各中斷之后,程序進入主函數中的while循環(huán),每隔一段時間,將看門狗清零,以防dsPIC30F4012進行復位。
本文中上位機與電機控制器之間的數據通訊是在UART中斷函數實現的,及數據包接收與發(fā)送均由UART中斷函數完成,UART接收中斷函數程序框架如圖8所示。在接收數據時,由于每次接收到的是8位二進制數,因此需要五次接收,需加延時程序,以免接收錯誤,接收到的數據臨時放在數組A[i]中。接收完數據后,進入數據解包程序,得出所發(fā)送的數據,在本文中為占空比值,將發(fā)送的占空比值賦給控制占空比的變量,改變電機轉速,之后進入數據上傳函數,把剛剛接收到的數據即占空比值打包上傳到上位機,最后清除UART接收中斷標志,退出UART接收中斷函數。
圖8 UART接收中斷函數
數據解包函數框架如圖9所示。首先判斷接收到的數據的包頭是不是預先規(guī)定的0x55,若不是則直接退出此函數。找到包頭后,然后將接收的命令描述符command與數據data送至CRC校驗算法函數,將產生的校驗值與上位機發(fā)送來的校驗值相比較,若一致,則將data值賦給占空比變量以控制電機轉速;若不一致則說明接收的數據有錯,不引起PWM中斷,直接退出。該函數中的CRC校驗算法函數與上位機中的CRC校驗算法流程一致,只是編寫語言不同,故于此不再詳述。
圖9 數據解包函數
數據上傳函數框架如圖10所示,分為數據打包與數據上傳兩部分。數據打包部分與上位機程序中數據打包發(fā)送類似,程序流程是一致的,所不同的是編寫語言。數據打包后放在一個數組B[j]里,分五次將該數據包上傳至上位機,中間的延時一定要與上位機的一致,否則會發(fā)生上位機接收紊亂。
圖10 數據上傳函數
在本文中,UART接收中斷函數為整個電機控制程序的核心設計,而PWM中斷函數則是參考以往程序,對其稍加修改揉進本程序中,已有論文對其進行闡述,在此不做詳細介紹。
通過MPLAB ICD2仿真連接器把電機控制程序下載至數字控制芯片,脫機運行,讓上位機程序也運行,由上位機向電機控制器發(fā)送數據即占空比值,然后再由電機控制器將發(fā)送的占空比值打包之后上傳至上位機,其實驗結果如圖11、圖12所示。
圖11為占空比值從100~300,即占空比從25%~75%由上位機發(fā)送至電機控制器的占空比曲線圖和由電機控制器上傳至上位機的占空比曲線圖。由圖可知,兩條曲線是一致的,放在一個圖中會重合,于是分開顯示。
圖11 發(fā)送與接收的占空比
圖12 占空比為67.5%時上位機顯示結果
圖12(a)是上位機發(fā)送的占空比值為270即占空比為67.5%時的上位機數據顯示結果,發(fā)送的數據包與接收的數據包是一致的,接收的占空比值也與發(fā)送的占空比一致。圖12(b)是上位機發(fā)送值電機控制器占空比為67.5%電機轉動時,由示波器測出的PMW輸出波形,將波形放大幾倍之后,算得其占空比約為68%,在誤差允許的范圍之內,與上位機發(fā)送的占空比是一致的。
圖11與圖12的實驗結果表明,本文實現了上位機與電機控制器的數據通訊,為后續(xù)工作打下了基礎。
本文給出了基于dsPIC30f4012控制的無刷直流電動機控制器與上位機數據通訊的上位機程序設計與電機控制程序中的UART接收中斷函數設計。每一步看似簡單,在實際程序研究設計中需經多次反復修改才能達到所要達到的目的。本文實現的上位機與下位機的數據通訊,為以后的速度計算、上傳以及PID閉環(huán)速度控制提供了基礎。
[1] 吳成東.LabVIEW虛擬儀器程序設計及應用[M].北京:人民郵電出版社,2008.
[2] 陳秀霞.輪式機器人用無刷直流電機控制系統(tǒng)設計[J].微控技術,2010,29(5):55 -59.
[3] 劉鵬.基于dsPIC30F4012的無刷直流電動機控制系統(tǒng)設計[J].微特電機,2009(10):43-45.