電動車充電器、無刷電機控制器軟件應用設計詳細解剖
本文以MICROCHIP 公司所生產的PIC16F72為基礎說明軟件編程方面所涉及的要點,此文所涉及的源程序均以PIC的匯編語言為例。因電動車充電器涉及電池管理方面的一些知識,本文先不做電動車充電器的講解運用,先初步對控制器進行剖析:
我們先列一下電動車無刷馬達控制器的基本要求:
功能性要求:
1.電子換相
2.無級調速
3.剎車斷電
4.附加功能
a.限速
b.1+1助力
c.EBS柔性電磁剎車
d.定速巡航
e.其(qi)它功能(neng)(消除換相噪音,倒(dao)車等(deng))
安全性要求:
1.限流驅動
2.過流保護
3.堵轉保護
3.電池欠壓保護
4.節能和降低溫升
5.附加功能(防盜鎖死,溫升限制等)
6.附加故障檢測功能
從上面的要求來看,功能性要求和安全性要求的前三項用專用的無刷馬達驅動芯片加上適當的外圍電路均不難解決,代表芯片是摩托羅拉的MC33035,早期的控制器方案均用該集成塊解決。但后來隨著競爭加劇,很多廠商都增加了不少附加功能,一些附加功能用硬件來實現就比較困難,所以使用單片機來做控制的控制器迅速取代了硬件電路芯片。
但(dan)是(shi)硬(ying)件(jian)(jian)控(kong)制(zhi)(zhi)(zhi)和(he)軟(ruan)件(jian)(jian)控(kong)制(zhi)(zhi)(zhi)有(you)很(hen)大的(de)(de)(de)區別,硬(ying)件(jian)(jian)控(kong)制(zhi)(zhi)(zhi)的(de)(de)(de)反(fan)應速度僅僅受限于邏輯門(men)的(de)(de)(de)開關速度,而軟(ruan)件(jian)(jian)的(de)(de)(de)運行(xing)則需(xu)要(yao)時間。要(yao)使軟(ruan)件(jian)(jian)跟(gen)得(de)上電機(ji)控(kong)制(zhi)(zhi)(zhi)的(de)(de)(de)需(xu)求,就(jiu)必須(xu)要(yao)求軟(ruan)件(jian)(jian)在最短的(de)(de)(de)時間內能夠(gou)正確處(chu)(chu)理換(huan)相,電流限制(zhi)(zhi)(zhi)等各種復雜動作,這就(jiu)涉及到一(yi)個對外(wai)部(bu)(bu)信號的(de)(de)(de)采(cai)樣頻率,采(cai)樣時機(ji),信號的(de)(de)(de)內部(bu)(bu)處(chu)(chu)理判斷及處(chu)(chu)理結果的(de)(de)(de)輸出,還有(you)一(yi)些(xie)抗(kang)干擾措施等,這些(xie)都(dou)是(shi)軟(ruan)件(jian)(jian)設計中需(xu)要(yao)再三(san)仔(zi)細考慮的(de)(de)(de)東西(xi)。
PIC16F72是(shi)一款哈佛結構,精簡指令(ling)集的MCU,由于其數據總(zong)線(xian)和指令(ling)總(zong)線(xian)分開,總(zong)共35條單字指令(ling),0-20M的時(shi)鐘速度,所以其運(yun)算速度和抗干擾性能(neng)都非(fei)常出色,2K字長的FLASH程(cheng)序(xu)空(kong)間,22個(ge)(ge)(ge)可用的IO口(kou),同時(shi)又附加了3個(ge)(ge)(ge)定時(shi)/計數器(qi),5個(ge)(ge)(ge)8位AD口(kou),1個(ge)(ge)(ge)比(bi)較/捕捉/脈寬調(diao)制(zhi)器(qi),8個(ge)(ge)(ge)中斷源,這些優異的性能(neng)為電動車控制(zhi)器(qi)控制(zhi)提(ti)供(gong)了良好的硬(ying)件環境和軟件基礎(chu),一經推出就贏得眾多設計人員的熱捧。
那么(me)如何使用PIC16F72來設(she)計一個電動車控(kong)制器呢?我(wo)們下(xia)面以目前市面流行的(de)硬(ying)件設(she)計為基礎,盡量通俗(su)易懂地介紹(shao)一下(xia)程序設(she)計思(si)路和(he)注意點。
要使(shi)無(wu)刷電(dian)機轉(zhuan)起來,并且聽從駕駛者的(de)調(diao)速、剎(cha)車等基本指揮,最基本的(de)要求(qiu)就(jiu)是要實(shi)(shi)現硬件所(suo)能實(shi)(shi)現的(de)電(dian)子換向和(he)調(diao)速,剎(cha)車等功(gong)能。實(shi)(shi)際上(shang)軟件的(de)整體設計也和(he)硬件一(yi)(yi)樣,也是一(yi)(yi)個模(mo)(mo)塊(kuai)(kuai)化堆(dui)砌(qi)的(de)過程,問題在于模(mo)(mo)塊(kuai)(kuai)的(de)合理化堆(dui)砌(qi),使(shi)堆(dui)砌(qi)后形成(cheng)的(de)整體能夠堅固,協調(diao)、高效率運作。我(wo)們(men)先(xian)說一(yi)(yi)說各種模(mo)(mo)塊(kuai)(kuai)功(gong)能的(de)簡(jian)單(dan)實(shi)(shi)現,然(ran)后再來討(tao)論(lun)如何(he)使(shi)這些(xie)模(mo)(mo)塊(kuai)(kuai)協調(diao)運轉(zhuan)。
1.首先說說電子換相模塊
我們知道,直流永磁電機在運轉時需要一對電刷和與線圈相對應的換向整流子來使線圈中的電流方向根據磁場方向來不斷改變,從而轉子持續向一個方向運轉,我們稱這種電機為有刷電機,在電動車剛剛面世時一般均使用這種電機,但有刷電機有一個致命的缺陷,就是用作電刷的碳刷非常容易磨損,換向整流子也非常容易被油污,碳刷碎屑填滿空隙而漏電,而且功率越大,這種毛病越嚴重,導致有刷電機維護量和故障率急劇上升,嚴重影響其推廣,因此在較大功率的場合,無刷電機應運而生。
無刷電機,顧名思義就是沒有了電刷,不能自動換向,因此要依靠傳感器檢測轉子的位置、用電子開關來改變線圈中電流的方向,所以其控制器要對轉子永磁體位置進行精確檢測,并用電子開關切換不同繞組通電以獲得持續向前的動力。轉子位置檢測傳感器有很多,比如光傳感器,磁感應傳感器等,電子開關可以用大功率三極管、功率型場效應管、IGBT等制作,在目前的絕大多數電動車三相無刷電機中均使用三個開關式的霍爾傳感器檢測永磁體相對于定子線圈的位置,控制器跟據三個霍爾傳感器輸出的六種不同信號輸出相應的控制信號驅動功率型場效應管(MOSFET)組成的電子開關向馬達供電。這就是所謂六步換相法。從電機原理可以看出,這種電機是一種特殊的同步電機,因此換相必須及時,否則會導致電機失步,從而使電機噪音增大,效率降低,嚴重的還會導致控制器,電機燒毀。
鑒于以上要求,我們先必須測一下市面上普通的無刷馬達在最高轉速時(考慮到順風和下坡的情況)的換向情況,這個比較簡單,用示波器測量之后得到在最高速時每相霍爾傳感器輸出的頻率大概在140HZ左右,折合到換向的最小時間,那么應該是1.2mS左右換相一次,根據際的使用效果,軟件的反應時間必須在0.12mS左右,也就是說在檢測到換相信號的改變并且輸出換相驅動信號時的過程必須在0.1-0.2mS之內完成。
另一個需要考慮的是,電機驅動是一個大電流驅動,又是一個電感性負載,控制器在運行時不可避免有干擾引入,因此除了在硬件布局,布線上注意外,軟件上也要做相應的抗干擾措施以避免錯誤的換向動作。考慮到輸入到單片機的換相信號容易受干擾,加上線路上濾波電容的影響,單片機程序在讀取換相信號時應至少連續讀取3次,以3次信號完全一致時才采用該值作為換相信號的真值,如果其中一次不對,那么干脆就重新再讀3次,這就是一個有抗干擾措施的鑒相過程。取得換相信號后,我們將其與上次讀到的值做對比,如果相同,則表示沒有換相,如果不同,則要跟據這個值去取得一個相對應的驅動信號,從而驅動電子開關動作。這個過程可以使用逐項比較法,查表法等來實現。鑒于查表法比較快捷,一般使用查表法。其中需要考慮的是,一旦獲得的信號與所有的六個信號都不相同,可能表示電機中霍爾元件或者其連接線路出現故障,此時我們應該讓電機斷電以避免誤操作。
市面上有兩種電機,即所謂的120°和60°霍爾信號,這個角度代表三個霍爾器件輸出的三相電信號其相位角相差的角度,其實這里面的區別僅僅是電平的不一樣,在馬達內部的安裝上,位置沒什么不同,只是中間一相的相位相反,所以仍然是六種信號對應六種驅動,軟件上將表稍作調整即可。需要提一下的是,在120°的霍爾信號中,不可能出現二進制0B000和0B111的編碼,所以在一定程度上避免了因霍爾零件故障而導致的誤操作。因為霍爾元件是開路輸出,高電平依靠電路上的上拉電阻提供,一旦霍爾零件斷電,霍爾信號輸出就是0B111。一旦霍爾零件短路,霍爾信號輸出就是0B000,而60°的霍爾信號在正常工作時這兩種信號均會出現,所以一定程度上影響了軟件判斷故障的準確率。目前市面馬達已經逐漸舍棄60°相位的霍爾排列。
編程提示:
在程序上,我們綜合考慮單片機的處理速度,采用定時中斷去檢測相位變化,中斷周期采用128μS,中斷源可使用TMR0,或者PWM本身的TMR2中斷。在同一個中斷中,我們還將安排其它更重要的工作,這個在后面的電流控制中再說明。
編程技巧:
從硬件電路圖中我們看到,位置霍爾信號在PORTC口的RC4、RC5、RC6三個口輸入,以120°相位為例,如果直接讀出來,對應十六進制值是0X10-0X60,考慮到霍爾出錯的可能,那么對應的值是0X00-0X70,顯然這個值對今后的查表處理造成非常大的麻煩,我們不可能去弄一個0X70這么大的表格而其中只放僅僅8個元素,所以有必要考慮編程時的優化,且看下面一個例程:
讀取相位值的例程:
READHALL:
SWAPF PORTC,W ;將PORTC的高,低半字節交換后讀至W
ANDLW 0X07 ;屏蔽掉不必要的位(wei),
MOVWF HALLTEMP ;存人暫存器
SWAPF PORTC,W ;再次讀
ANDLW 0X07
SUBWF HALLTEMP,W ;與舊值比較
BTFSS STATUS,Z
GOTO READHALL ;如果與第一次讀取的不一樣,則從頭再來
SWAPF PORTC,W ;第三次讀
ANDLW 0X07
SUBWF HALLTEMP,W ;再次比較
BTFSS STATUS,Z
GOTO READHALL ;不一樣則從頭再來
RETURN ;三次讀取值一致,返回。
這個程序中,最關鍵是 SWAPF PORTC,W 這句,這句語句一方面讀取了霍爾值,另一方面與下句語句結合還將此值變為0-7的最小值,這樣使得我們后面的查表只需要8個空間的元素。
以上程序,也有人認為有可能會導致程序陷入死循環,但不必擔心,因為要導致這個程序進入死循環的信號頻率必須非常高,有興趣的讀者可計算一下。
有了上面的霍爾讀取程序,我們下面的查表讀取相應驅動值就會變的比較方便,但查表也有很多種,在PIC16F72中,查表可以用RETLW在程序空間查,也可以用專用的讀取FLASH空間的指令去讀,考慮到我們這個表格一共只有8個元素,我們可以將器放在內存寄存器中,利用用FSR去讀取表內容。這樣做有好處,就是查表時不用去考慮查表偏移量造成程序計數器溢出,另一方面是120°和60°可以使用同一個表格而不用切換。這個表格,我們可以放在寄存器空間不太方便使用的BANK1,在程序初始化時預先寫入正確的換向對應值。這個程序在時間上并不比其它兩種查表法顯得快多少,而且程序空間也不節省,在這里只是作為一個方法示例,可以讓我們看到實現同一個功能可以走不同的路。
使用內存查表法的驅動值獲取例程:
;
HALLSTART EQU 0XA1 ;定義霍爾-驅動表格的起始地址在BANK1的0XA1開始處
;
HALL_DRIVER: ;由霍爾值取得對應驅動值的內存查表例程
MOVF HALLTEMP,W ;取得HALL的真值
ADDLW HALLSTART ;加上表格的起始地址
MOVWF FSR ;放到間接讀內存的指針中。
MOVF INDF,W ;讀出驅動值
MOVWF PORTB ;不管返回值如何,先寫入驅動端口,
SUBLW STOP_D ;與電機停止值相比較,
BTFSC STATUS,Z
GOTO HALL_ERR ;如果獲得停止電機值,那么表示霍爾信號有問題
RETURN
無級調速模塊部分:
由于使用直流電源,電機的速度得依靠調節加在電機兩端的電壓來調整,較簡單的辦法是使用PWM脈寬調制來調節加到電機兩端的電壓。PWM的工作周期根據電機的使用環境,采用64μS,折算成頻率大約15.625KHz,頻率太低了會產生人耳能明顯感覺到的高頻噪聲,電流也不容易控制;太高了又增加電子開關的開關損耗;PWM脈沖的寬度是調節加到電機兩端有效電壓高低的手段,直接影響到電機的輸出功率,我們可以根據手柄輸出的電壓決定最終應該分配給電機多高的電壓。
手柄(bing)電壓(ya)(ya)檢(jian)測(ce)(ce)比較簡單,人對速度(du)的(de)感覺(jue)很(hen)遲(chi)鈍(dun),所以(yi)手柄(bing)的(de)檢(jian)測(ce)(ce)不需要(yao)很(hen)頻繁,這(zhe)個AD檢(jian)測(ce)(ce)與(yu)電源電壓(ya)(ya)AD等(deng)檢(jian)測(ce)(ce)均不需要(yao)很(hen)快的(de)速度(du),所以(yi)每隔10mS-50mS輪番檢(jian)測(ce)(ce)一次便(bian)足夠,AD的(de)檢(jian)測(ce)(ce)在定(ding)時(shi)中斷中做,而結(jie)果則放在中斷外做,這(zhe)樣不會占用中斷太多的(de)時(shi)間(jian)。
編程提示:
由于現在大多采用線性霍爾作為手柄調節速度方案,優點是無觸電,故障率極低。缺點是在5V供電的情況下,電壓只能在1.1V-4.3V的范圍內變化,因此軟件的處理相對復雜一點。這只需要我們做一點簡單的運算,或者采用查表的方法,將這期間的AD數值轉換成PWM占空比的值即可。雖然講是無級調速,實際上分32級時人已經感覺不出速度的細微變化了。但是有一點,根據手柄得出的PWM脈沖寬度不能直接用來控制PWM占空比,需要在電流允許的情況下才能讓占空比達到設定值。
程序中所用關鍵控制寄存器及其作用:
PR2:決定PWM的工作周期,也就是PWM的調制頻率,工作中其值不斷地與TMR2中的值相比較,當TMR2的值等于PR2時TMR2歸零重新開始另一個周期,由于用到TMR2,所以TMR2的預分頻器也同樣影響到PWM的工作周期。具體計算公式在數據手冊上可以找到,下同。
CCPR1L及CCP1CON的第4,5位:決定PWM的占空比,單片機在運行時TMR2的值不斷與CCPR1L中的值比較,當TMR2=CCPR1L時,PWM輸出腳輸出低電平。當CCPR1L中的值大于PR2時,PWM輸出腳持續輸出高電平。注意:CCP1CON中的第4,5位在這里并非無用,在后面的電流調節中可以用來微調PWM的占空比。
T2CON:決定TMR2的(de)(de)預(yu)分(fen)(fen)頻器和(he)后分(fen)(fen)頻器的(de)(de)分(fen)(fen)頻比,預(yu)分(fen)(fen)頻器和(he)前面講過的(de)(de)PR2共同決定PWM頻率(lv),后分(fen)(fen)頻器決定TMR2的(de)(de)中斷周期(qi)。
剎車斷電模塊:
電動(dong)車(che)(che)在(zai)(zai)剎(cha)(cha)車(che)(che)手柄(bing)附近裝了(le)一個(ge)微動(dong)開(kai)關,一方(fang)(fang)面在(zai)(zai)剎(cha)(cha)車(che)(che)時點亮剎(cha)(cha)車(che)(che)燈,一方(fang)(fang)面給(gei)控制器提供一個(ge)剎(cha)(cha)車(che)(che)高或低(di)電平信(xin)號(hao),各(ge)廠家(jia)不一定,在(zai)(zai)電路上作一些電平轉換很容易就可(ke)(ke)以提供給(gei)單片機一個(ge)準確的(de)信(xin)號(hao),我們可(ke)(ke)以采用(yong)數(shu)字測量的(de)方(fang)(fang)法測量這個(ge)電平是(shi)高還是(shi)低(di),也可(ke)(ke)以使用(yong)AD去(qu)測量有(you)幾伏,總之監測到這個(ge)信(xin)號(hao)后必須(xu)關閉所有(you)的(de)驅動(dong)輸出和PWM輸出,這樣就可(ke)(ke)以實現剎(cha)(cha)車(che)(che)斷電。編(bian)程(cheng)方(fang)(fang)面我就不多說了(le)。至于(yu)如何(he)實現EBS電子剎(cha)(cha)車(che)(che),我們后面在(zai)(zai)附加(jia)功(gong)能(neng)再講。
4。限流驅動
這是整個控制器的靈魂,如果限流驅動沒做好,其他功能再好還是一個字:燒!。
電動車控制器的電子開關均使用功率MOSFET控制,MOSFET的最大允許電流,最大允許功耗都有其限制,如果沒有電流控制,或者電流控制不好,均會導致功率MOSFET的燒毀,從而導致整個控制器報廢,因此電流控制是本程序的重中之重,這個做不好,其它功能一概免談。
說起來嚴重,其實做起來,摸到竅門也是很簡單的,其秘訣也只有四個字:準確,及時
電(dian)流信號經康銅絲(si)采樣之(zhi)后分(fen)兩路(lu)(lu),一路(lu)(lu)送(song)至放大(da)器(qi),一路(lu)(lu)送(song)至比(bi)較器(qi)。具(ju)體電(dian)路(lu)(lu)見硬件部分(fen)。放大(da)器(qi)用來實時(shi)放大(da)電(dian)流信號,放大(da)倍數大(da)約(yue)6.5倍,放大(da)后的(de)信號提供給單片機進(jin)行AD采樣轉(zhuan)換(huan)(huan),轉(zhuan)換(huan)(huan)所得(de)數字(zi)用來控制電(dian)流不(bu)超過我們所允許的(de)值(zhi)(zhi)。另一路(lu)(lu)信號送(song)至比(bi)較器(qi), 當電(dian)流突然(ran)由于(yu)某種原因(yin)大(da)大(da)超過允許值(zhi)(zhi),比(bi)如一只MOSFET擊穿(chuan)或誤(wu)導(dao)通時(shi),比(bi)較器(qi)翻轉(zhuan)送(song)出低(di)電(dian)平,觸發單片機的(de)INT0外部中斷,使單片機能夠快速關斷驅(qu)動,從而保護MOSFET避免更(geng)大(da)傷害。我們這里所要講述的(de)準(zhun)確,及時(shi)兩個要素,主(zhu)要是(shi)針對放大(da)器(qi)放大(da)之(zhi)后的(de)信號處理(li)過程來表述的(de)。
