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