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