




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
前 左手定 磁回路分析 新西達2212外轉(zhuǎn)子電機的結(jié) 新西達2212電機的換相分 調(diào) 電流檢 定時器T0的溢出中斷服務程 利用T0延時(毫秒極 利用T0延時(微秒極 過零檢測與換相代碼分 啟動算 通信模 串口通 高級話 附錄 附錄 附錄 附錄 少走了很多彎路。在此要感謝各位前輩大俠和的ourdev。:-)timegate20107月AN885DCMotorsMadeEasy(scalePZ104)Atmel公司的編號為:AVR194、AVR491、AVR492的幾篇文檔,都寫得很不錯,深入淺出,很適合的初學者學習。稍被一些無刷電機一上來那些總總的關(guān)于什么磁路、磁導率、氣隙飽和、去磁曲線等FBILFBILT1-1EvBLEvBLT,B和L的夾角。
1-2的N極。
1-3MicroChip,scaleAtmel三家公司的文檔中,都不約而同地采用了這種方法來說明無刷電機的工作原理,其原理說明見圖1-4:圖1-4(摘自scalePZ104文檔1-4中,當兩頭的線圈通上電流時,根據(jù)右手螺旋定則,會產(chǎn)生方向指向右的外加磁感應強度B(如粗箭頭方向所示,而中間的轉(zhuǎn)子會盡量使自己內(nèi)部的磁力線方向與外磁1-5所示:圖1-5(摘 scalePZ104文檔(comutation圖1-6(修改 scalePZ104文檔A,B,C6種AB,AC,BC,BA,CA,CB1-7(a)~(f)6種情況下每個通電線6次換相后,內(nèi)轉(zhuǎn)子正好旋轉(zhuǎn)一周(即360。再 (b)AC相通電情 (d)BA相通電情(e)CA相通電情形 圖1-7星形繞組兩兩通電的6種情形圖1-8換相前和換相后的情形(摘 scalePZ104文檔 (b)繞組聯(lián)結(jié)方式(摘自5iMX)圖1-9三相9繞組3對極內(nèi)轉(zhuǎn)子無刷直流電機結(jié)構(gòu)6NS極圖1-10給出了一個對齊的運動趨勢的圖例。1-102子的主要質(zhì)量都集中在外殼上KV值在幾百到幾千之1000KV11伏的電壓條件下,最大空載轉(zhuǎn)速即為:11100011000rpm(rpm的含義是:轉(zhuǎn)/分鐘。匝數(shù)多的,KV值低,最高輸出電流小,扭力大;繞線匝數(shù)少的,KV值高,最高輸出電流圖1-11一些常見外轉(zhuǎn)子無刷電機結(jié)構(gòu)(摘 scalePZ104文檔其分析方法也和內(nèi)轉(zhuǎn)子電機類似,這里再一遍吧:轉(zhuǎn)子永磁體的N極與定子繞組S極有對齊的趨勢,轉(zhuǎn)子永磁體的S極與定子繞組的N極有對齊的趨勢。12繞組的線圈是其繞組是怎么繞的,看在損失一個電機的份上,也該給個酷字,呵呵。圖1-14畫出了XXD2212電機的繞組繞法,跟我們都不太一樣,是吧?(注意圓心處三根導線是互 XXD2212電機結(jié)構(gòu)(摘自網(wǎng)友liuliu443所發(fā)帖子1-131-156種兩相通電的情形,可以看出,盡管繞組和磁極的數(shù)量可以有許內(nèi)轉(zhuǎn)子電機,都遵循AB->AC->BC->BA->CA->CB的順序進行通電換相。當然,如果你想兩個繞組,所以電流是分走的。這里為使問題盡量簡單化,下面幾個圖中只畫出了主要講是足夠了,但如果你翻閱的無刷電機的書夠多的話,你會發(fā)現(xiàn),幾乎沒有哪本是采用上面這種結(jié)構(gòu)來說明無刷電機的工作原理的,這些中用的都是類似圖1-17所示的流電機來用也沒問題。真正的工業(yè)用無刷直流電機的定子繞組實物圖見圖1-18。順便說一句,筆者遍查還施水閣中關(guān)于無刷電機的典藏古今中外約十來本(80年代的書應該算古了1-161-17組聯(lián)結(jié)方式為:A’、B’、C’端通過星形聯(lián)結(jié)在一起,A、B、C為電機的三根引出線。其實物外形見圖1-18(注意辨別圖1-18和圖1-12的繞組形式的區(qū)別)圖1-18無刷直流電機定子繞組結(jié)構(gòu)(摘自的楚一件事情,就是在這種繞組結(jié)構(gòu)下,磁感應強度B的分布情況。“目前,國內(nèi)外對無刷直流電機(BrushlessDCmotor,BLDCM)定義一般有兩種:一則被稱為永磁同步電機(permanentmagnetsynchronousmotorPMSM;另一種定義則認為B的分布情況。我們預定義磁感應強度方向向外為正,從圖中可以看出,1-191-2066個中間過程,這是為了轉(zhuǎn)起來了。同理,與AA’的情況類似,BB’也會對轉(zhuǎn)子產(chǎn)生一個逆時針的反作用力。1-20(c)。這樣,每過60°換相通電,轉(zhuǎn)子就可以一直轉(zhuǎn)下去了。 (b)轉(zhuǎn)過 (c)AC相通(d)轉(zhuǎn)過 (e)BC相通 (f)轉(zhuǎn)過BA相通 (h)轉(zhuǎn)過 (i)CA相通(j)轉(zhuǎn)過60° (k)CB相通電 (l)轉(zhuǎn)過60°圖1-20轉(zhuǎn)子位置與換相的關(guān)系(參考自《電動機的單片機控制》著)1-21磁力線分布(摘自《IndustralBrushlessServomotorsBrushlessServomotors》的書中提到結(jié)論的。也就是說,我們現(xiàn)在可以放心地用左手定則和想更全面研究無刷電機的朋友。(老樣子,沒有,館借的)為了方便說明問題,每個繞組的N匝線圈現(xiàn)都簡化成了一個,而且我們對所有繞組和磁極都做一了個編號,見圖1-22。即同時施加給轉(zhuǎn)子一個逆時針方向的反作用力。同時,A1-2導線處于S極下,但電流方向A1-1相反,所以還是會施加給轉(zhuǎn)子一個逆時針方向的作用力。與此類似,A2-1,A2-2,B3-1,B3-2,B4-1,B4-2都會施加給轉(zhuǎn)子一個逆時針方向的作用力,讀者可自行分析。至 新西達2212電機AB相通電時情1-20,先看圖(a)和圖(b)ABCC’C邊在圖(a)N極的磁力線并產(chǎn)生一個正向的感生電動勢,在圖(b)S極的磁力線而定義。這說明,在AB相通電期間,如果我們?nèi)y量線圈CC’上的電壓,會發(fā)現(xiàn)其間有一圖1-24所示(圖在下頁。以叫“反向感生電動勢”(BEMF1-25。1-241-25AA’BB’上產(chǎn)生的反電動勢是很大的,兩個加起來幾12V。為什么呢,因為線圈繞組本身的等效電阻很?。?.1歐左右,如果反電AA’BB’5.7V的反電動勢,那么它們串聯(lián)起來就產(chǎn)生11.4V的反電動勢,結(jié)合圖1-25看,那么加載在等效電阻上的電壓就為1211.40.6VAB的電流就是0.620.1)3A,看來這個假設還是比較,為AB相通電快結(jié)束時的情況,CC’產(chǎn)生的感生電動勢的等效電路圖如圖1-26(b)所示。(a)t0時刻的等效電路圖 圖1-26AB相通電期間CC’的感生電動勢如果我們?nèi)y量C點的電壓,其值應為65.711.7V;在t1時刻,C點的電壓值應為65.70.3V。ABC引線的電壓,一旦發(fā)現(xiàn)它低于6V30t0t130°就可以換相了。如AD6V。這時候模擬比較器的作用就來了,它天生就是干這個活的料。比較器的聯(lián)結(jié)電路圖見圖1-27。一旦C6V,比較器馬上可以感知并在輸出端給出一個下降沿。同理,當電機處于繼續(xù)往前,當電機開始進入BA相通電時,C相輸出電壓一開始會處于一個較低的狀態(tài)(0.3V一個上跳沿。接下來的CA,CB相通電情況也類似,不再贅述。1-27C相輸出6V6V,這個留待第二章再這剩下的30°究竟要花多少時間?0°~60°的小范圍區(qū)間內(nèi)基本是恒定的:ABC相過零的前半段時間,基本等于后半段的時間。所以只要記錄下前半段的時間間隔T1,等過零出現(xiàn)后再等待相同的時間,就可以換相了。事實上德國MK項目的BL-Ctrl電調(diào)程序就是這么干的。我們來看看這樣做會有什么:1-28(a)1-20(a)AB剛開始通電時的情況。轉(zhuǎn)過30°后,到達圖(b)的位置時,CAC導通,將成為圖(c)的狀態(tài)。這時,CC’線圈還處NSCC’的磁感應強度為零,CC’上將不產(chǎn)生電磁力。也就是說此時只有線圈AA’在出力,CC’處于出工不出力的狀態(tài)。不過這個情況只是瞬時的,只要轉(zhuǎn)子稍微向前再轉(zhuǎn)一點,穿過C’和C的磁感應強度就會開始增加,CC’就會開始出力?;貞浺幌聢D1-19,如果梯形波電機工藝做得比較好,磁感應強度上升和下降直線比較陡峭的話,CC’接著往下看,當轉(zhuǎn)子繼續(xù)轉(zhuǎn)過30°到達圖(d)的位置時,一切,相安無事。當轉(zhuǎn)子再轉(zhuǎn)過30°到達圖(e)的位置時,會檢測到B相的過零,此時如果立刻換相成BC相通電,30606次相。如果有時間的 (b)轉(zhuǎn)過 (c)AC相通(d)轉(zhuǎn)過30° (e)轉(zhuǎn)過30° 圖1-28換相時各情景的分析新西達2212電機的換相過程。不過在此之前,先要介紹一個概念:電角度。A2-1S2A1-2A2-1一個完整周期,期間應該完成全部的6次換相。(a)A1-2,A2-1繞組邊處于S2下 圖1-29新西達2212電機的一個電周期360/751.436步換相狀態(tài),每步所轉(zhuǎn)過的機械角為51.43/68.57度。由于S2S336060°1-30(a)中,N2S2A1-2繞組邊,AB相開始導通。由于其B3-2,B4-1,B4-2都會對轉(zhuǎn)子產(chǎn)生一個逆時針方向的電磁力。且每個繞組邊產(chǎn)生的反電動勢為:略小于12/81.5V。其等效電路圖見圖1-30(b)。比較麻煩的是分析此時C相的感生電動勢電動勢,第二路電流路徑中的每個繞相抵消,C1-1C1-2的互相抵消,C2-1C2-2的互相抵消,C3-1C3-2的互相抵消。B2-1,B2-2,C4-1,C4-21-30(c)。值約為8V,大于繞組中點電壓6V。情況同圖1-30(a),這里就不重復了。要分析的是第二路電流中的反電動勢情況:從圖中可以看出,A4-1A4-2的反電動勢相互抵消,B1-1B1-2的相互抵消,B2-1B2-2的相互抵消,C2-1C2-2的相互抵消,C3-1C3-2的相互抵消,C4-1C4-2的相互抵消,A3-1,A3-2,C1-1,C1-2能產(chǎn)生有效的反向感生電動勢,其等效電路圖見圖1-31(b)。AB相通電期間,C6V的中點;也就是說,期間發(fā)生了一次見其定量分析之復雜,怪不得鮮有對這種電機結(jié)構(gòu)做詳細講解。AC1-15(b),第二路就自己分析啦,偶實()方式來控制電機的輸入電壓。占空比越高,等效電壓就越高,占空比越低, 足以驅(qū)動無刷直流電機,所以必須要再接一個功率管來驅(qū)動電機。功率管可以是MicroKopterV1.2版本的電調(diào)電路,完整的電路原理圖附錄二中還給出了一個商業(yè)電調(diào)的電路(鳳凰25A電調(diào),雖然主控一個用的是下面分模塊地一部分一部分地分析其功能電路。GND接電源鋰電池負極,U_BATMEGA8ADC7C17用來消除電源中的一些高頻波紋的影響。一節(jié)標準鋰電池的電壓為3.7V,一般航模用鋰電池都是三節(jié)串聯(lián),也就是11.1V。若電池即將用盡,VCC會下降,相應的U_BAT測得的電壓也會下降。不過在MK項目的電調(diào)程序V0.41版本中,作者把電壓的工作放在了主控板上,所以在整個電調(diào)程序中沒有任何測量ADC7通道的代碼,本模塊基本屬于雞肋。:)換相控制電路主要由6個功率場效應管和一些電阻和三極管構(gòu)成,雖然原理不2-2Q1Q6ABQ1Q4管,而使其他管保持截止。此時,電流的流經(jīng)途徑為:正極→Q1AB→Q4→負極。這樣,六種相位導通模式:AB,AC,BC,BA,CA,CBQ1Q4,Q2Q2,常開的一種驅(qū)動方式。比如在AB相導通時,單片機給Q1的柵極是信號,而給Q4圈由于自身電感的作用產(chǎn)生極高的瞬時反電動勢(回憶一下:ULdi)以這時候二極管的作用就來啦,在2-4所示的箭頭2-3各相電壓波形(lijieamd實驗結(jié)果有什么影響。當處于高電平期間,A12V6V,根據(jù)我們在第一章的分析,CC點產(chǎn)生接近于CC點的電壓就C線圈本身的感生電動勢不過零,比較器輸出就不會產(chǎn)生跳變。有人也AB點的電壓值估計出來的,這個放到下面的“反電勢2-52-3CC端電壓如果負得太厲害,Q2的二極管就會導通,而將C端電位鉗制在-1V左右。C點理想的電壓波形應該是這樣的: C點電壓波形(想象圖用的。為什么呢?問題于N型場效應管的門限開啟電壓VGS。Q1Q1的柵極必須至少加載12315V的電壓,這個已經(jīng)超解決的方法有兩個:一是采用自舉升壓電路,“hn_ny_dxs”同學給出了一個完整圖有,在那個帖子的26樓還有他對升壓電路的工作原理的說明。另法就是采用3個N型場效應管和3個P型場效應管,這樣可避開驅(qū)動電壓的MK項目的電調(diào)采用的方案。PPNP三極管(7(b)值電壓都會在-3~-20V之間。NMOSFETSTEUER_A5VNA-就會導通,I/OFDD6637PMOSFET,當STEUER_A+端給出高電平時,三極管導通,F(xiàn)DD6637FDD6637的柵源極之間就會形成一個負電壓,而導致場效應管NA+導通。圖中P管的電阻R2,R3IRIRFR5305(P管)IRFR1205(N管),兩者到底有什么不同?稍后逐個參數(shù)地比較一下兩者的區(qū)別。另外,關(guān)于MOSFET《MatchingMOSFETDriverstoMOSFETs(MicrochipAN799,大家有時間的1.額定參數(shù)(AbsoluteumVDS或VBR3055±20±20 @TC2516144620160I1225 @TC25140107TJ,VDS或VBR-35-55±25±20 @TC25I @TC2557110TJ,-55~-55~個表格中可以看出,V1.2MOSFETV1.1版本,但電流特源極額定電流還和柵源極電壓VGS2-10IRFR1205的VGSID曲線,稱為轉(zhuǎn)移特MOSFETgFSgFSID/VGS,單2-10IRFR1205的轉(zhuǎn)移特性(IR12052.熱傳導特性(Thermal1.051.42.21.4結(jié)-空氣環(huán)境熱阻(PCB貼片散熱405096110溫度就好比是電壓。Junctiontemp(結(jié)溫)即是半導體的溫度。一般來說,結(jié)-殼熱阻來降低溫差。從表中也可以看到,第二行通過PCB散熱后的熱阻要明顯小于第三行。不過3.電氣特性(ElectricalIRLR7843(N管IVDSVGS1VDSVGS25VGSVDSVGSVDSVDSID1.5VDSID2~VGSIDVGSIDIVDSVGS-1VDSVGS-25VGSVDSVGSVDSVDSID-1VDSID-2VGSIDVGSID65gVDSID35VGSID8能會在柵源極導通大電流時產(chǎn)生的熱量(PI2R并且的壓降。另外V1.24.動態(tài)特性(DynamicIRLR7843(N管VDSVGSfVDSVGSfVDSVGSfVDSVGSf響電路性能的主要。從表中數(shù)值中可以看出,一般CissCrss,但由于(Miller)故動態(tài)特性也會優(yōu)于V1.1版本,這可能是其換型的主要原因。2-11MOSFET5.開關(guān)特性(SwichIRLR7843(N管tdVDD15VID12AVGS4.5VRG25VDD28VID25AVGS5VRG7.34269td(off3447t1960ID12AVDSVGS34ID25AVDSVGS659.1121227tdVDDIDVGSRG18VDD28VID16AVGS10VRG141066td(off6239t3663ID14AVDSVGS45ID16AVDSVGS637131029時間ton即為延遲時間td(on與上升時間tr之和。后面的關(guān)斷時間toff的定義也類似。(2-12開關(guān)特性參數(shù)(FDD6637再來看看參數(shù)“總柵極充電量Qg”的作用,Qg的單位是C(可結(jié)合圖2-13和2-12MOSFET開通時,由于有柵源極電容Ciss的存在,在其充電當VGS上升到開啟閾值電壓VGS(th時,ID才明顯上升,同時VDS下降,進入上升時間。在上升時間里,由于VDS下降,使柵極電流向漏極與柵極之間的“傳輸反向電容Crss(Crss先反向臺,這段時間內(nèi)VDS持續(xù)下降而VGS基本保持不變,這就是上面所說的上升時間tr。等到tr后,柵極電流才繼續(xù)向Ciss充電,最后VGS2-13柵極充電波形(FDD66376.二極管特性(Drain-SourceDiodeIRLR7843(N管VGSIS1.0VGSIS1.3IFdi/dt39IFdi/dt6536160VGSIS-0.8VGSIS-1.3IFdi/dt28IFdi/dt7115170已經(jīng)很貼心地幫你在中把二極管集成進去了,并且是穩(wěn)壓二極管,可以保護VDS不至于過大而擊穿MOSFET。2-14電調(diào)A相的上臂和下臂(MKV1.2版本首先要明確一個概念,模擬電路不是軟件編程、非0即1,而是續(xù)變化的過程。無論是電容上的電壓還是電感上的電流,都不能突變,否則將產(chǎn)生性的。上跳沿和可大致計算為:Itd(on)
R17可以讓柵極電容慢慢放電,而不至于使器件擊穿,100歐是比較通用的做法。圍沒啥特別的講究,筆者曾經(jīng)用1.8k180k都仿真過,看不出對輸出波形有明顯影響。從低電平變高電平后,VCCR2BCR2太大會導航算法,在諸位四軸達人中實力不俗。lijieamd寫的關(guān)于調(diào)試無刷電機的兩篇心得帖子都很有分量,在附錄二中給出,大家有的話可以去看一看。R3,是三級管的基極電阻,這個沒啥特別的講究,只要確保三極管能正常工作2-17 電路V1.2版本的成品電調(diào)(購自淘寶西子書店2-17ShuntADC6通道。那作者為什么在原理圖上畫得那么令人費解?目的是為了原理圖生成PCB圖時方便,因為shunt本質(zhì)上是一段地線,而不是個元件。體的電阻率,L是導線長度,S蛇形走線不太好量,筆者用直尺大致量了一下,約為4.5厘米左右,也就是4.5102m。以去問問公司的PCB打板供應商線寬這里我量了一下,大概為2mm左右。R3.51052
程序為證:在電調(diào)程序(V0.41版本)main.h的第26行,有如下宏定義:#define //abca.20A作為最終程序內(nèi)部的電流表示值(35行的作用是數(shù)字濾波,這個我們放待第三章軟shunt20Ashunt上會產(chǎn)生200.0110.22V至于后面的一階RC低通濾波電路,是為了濾去一些偶爾產(chǎn)生的瞬時高頻分量。V1.2注意圖中的頻率單位為rad/s,換算成Hz時還要除以2。2-18(a)V1.1RCBode2-18(b)V1.2RCBode前面,反電動勢檢測,需要不停比較中點電壓和A相B相C相三個端點的電壓,MK電調(diào)的。分別為NULL_A,NULL_B,NULL_C,再連接到單片機的ADC0,ADC1,ADC2引腳。而MIT為估測的變形后的中點電壓,接單片機的AIN0引腳。只要在AB通電期間開通NULL_C和MIT的比較;AC通電期間開通NULL_B和MITTLE的比較;BC通電期間開通NULL_A的比較,就可以成功檢測出各相的過零。無刷電機的上都有照搬,應該也不是MK項目那個德國人的?,F(xiàn)在我們來分PHASE_C12VMIT點電壓值是多少?NULL_C點電壓值又是多少? =4V,NULL_C=5.3V。此時NULL_C點電壓高于MIT 時,PHASE_C端輸出的電壓就是繞組中點電壓6V,此時可以算得:MITTLE=3V,NULL_C=3V,可見此時模擬比較器處于零界狀態(tài)。隨著轉(zhuǎn)子繼續(xù)轉(zhuǎn)動C線圈產(chǎn)生的電動勢PHASE_C端測得的電壓為5V,放到這個電阻網(wǎng)絡里一計算,結(jié)果得:MIT 發(fā)生了一次跳變,過零被檢測到。在2008年前后,那時候的四軸端的熱鬧。一時間,各路高手達人群集于此,紛紛使出解數(shù),重畫原理圖的重畫原理圖、PCB打板的打板、改程序的改程序,豪氣云天,頗有當要專門自畫PCB,淘寶上有很多仿MK項目的電路板,而且價格也還算合理,一般它必關(guān)注硬件問題。不過如果你打算DIY出來賣……呃……還是自己畫板好了。2-20筆者自行焊接的電調(diào)實驗板(shunt導線FDD6637RemarkFDD6637較多,大家注意甄別。最后要強調(diào)的一點是:機電實驗不是電子實驗,是有一定性的!高速旋轉(zhuǎn)的leoli321在測試電機在運行中堵轉(zhuǎn)時,食指醒大家,一定要注意安全,lijieamd網(wǎng)友也曾專門發(fā)帖提醒大家注意安全。另外,玩模型的帶一樣,關(guān)鍵時候能幫你大忙。再次重申一下:DIY時千萬不要忽視安全問題! 防護眼更加清晰,本章將把MK電調(diào)程序中關(guān)于電機驅(qū)動的部分單獨抽出來,分幾個進行講回切換的麻煩:)void這個函數(shù)位于og.c文件的第9行,比較簡單,功能為初始化單片機的ADC模塊。2IntRefV1.2版本電V1.1版本電路的不同設計。對比原理圖你會發(fā)現(xiàn),V1.15VAREFV1.22.56VAREF引腳是懸空于如何判斷是V1.1電路還是V1.2電路,這個我們放到下一章再講。uintMessAD(ucharchannelADMUXADC用的,有可能在調(diào)用本函數(shù)的時候,IntRef57ADC轉(zhuǎn)換結(jié)束的,而59ADC60行恢復AC的管腳復用功能,第61行返回測量值。void本函數(shù)位于og.c文件的第66行,本函數(shù)的功能是快速測量shunt上的電流大小(shunt于歷次所測到的最大Strom值。最后第75,76兩行有點畫蛇添足。void數(shù)中的絕大部分語句和FastADConvert+MessAD是相同的,唯一不同的就是第35行:Strom=(I+Strom*7)/的值(i值)1/8Strom7/8權(quán)重,最后結(jié)果放入Strom。 都用作的發(fā)生器用。T2T2的溢出功能,T2的溢出中斷服務程序只是個空架子。timer0.c20SIGNAL(SIG_OVERFLOW0)MEGA8的數(shù)據(jù)手冊可知,T00255產(chǎn)生中斷,然后再從零開始計數(shù)。故每次溢出中斷產(chǎn)生的I2C_Timeout,PPM_Timeout,SIO_TimeoutI2C、PPM,、串口通信用的,這如果要進行毫秒極的延時,主要是利用uintSetDelay(uintt)和char怎么做呢,下面我們來看一個情景分析。假設我現(xiàn)在要延時100ms,就應該這么寫:unsignedinta=SetDelay(100);=12345SetDelay(100)12345+100-1a中,a123444。然后whileCheckDelay(a),返回值為(12444CountMillseconds&0x80008,CountMillerseconds=123450while里循環(huán)。當時間漸漸過去,CountMillseconds100ms后,CountMillseconds12445-后這時候就會返回非零,退出while循環(huán)。而且由于無符號數(shù)加法的特性,即便在調(diào)用Delay_ms(unsignedintw)函數(shù)幫你把這三句話都集成到一個函數(shù)中了。main.c140voidWait(uchardauer)函數(shù)可以完成微秒極延時。前面曾經(jīng),TCNT0的計數(shù)頻率為1MHz,也就是每過1us會自加1。在Wait這個函數(shù)中時極限為255us。void_Init(void)函數(shù)中完成了T1T2的初始化。在函數(shù)中,_OFF是一個宏,這個宏我們后面會分析,其中的TCCR2=0x41;完”,,CS2[2:0]=1{T2晶振,T2的頻率就為32kHz這個宏中的TCCR1A=0x01;131行的TCCR1B=……;兩句話完成了對T116kHz當這個函數(shù)運行完后,T1T2OC1AOC1BOC2都是0,信號還并未產(chǎn)生。只有當運行voidSet (void)函數(shù)后(main.c文件第84行,MEGA8內(nèi)部才會 SetOC1AOC1BOC2中。變量取值范圍為0~255,00%,255100%,中間的按比例折合。第89~93行判斷將要設定的值是否超過最大值,這里全局變量Max的值為16kHz的25行,#ifFDD_IRLR1,我們從第二章的電路知道else中的內(nèi)容,將全局變量中的值,設置進OCR1A,OCR1BOCR2。中斷時說明過零產(chǎn)生,然后準備換相。在第一章已經(jīng)了,德國MK電調(diào)的換相策些宏都定義在BLMC.h文件中,我們先把這些宏的功能都看一遍(注意要對照電路看。由于筆者用的是16kHz的頻率,故關(guān)于32kHz的定義都會略過,兩者的代碼都是類似 _C_ON{TCCR1A=0xA1;TCCR2=0x61;OC1A引腳(NC+)輸出信號。TCCR1ATCCR2的定義查一下手冊便可,理解起來應該不難,這里T1和T2都采用的是“相位修正模式”。注意最后一句DDRB=0x02;會在STEUER_C+輸出信號的同時將 _B_ON DDRB=0x0E;PORTB&=STEUER_A+,STEUER_B+,STEUER_C+三路信號。而且關(guān)得比較狠,連輸出比較寄存器OCR1A,OCR1B,OCR2都一起了。最后將OC1A,OC1B,OC2三個引腳都變成普通GPIO口,并輸出低電平。#defineSTEUER_A_H #defineSTEUER_A_L{PORTD&=~0x30;#defineSTEUER_OFF #defineSENSE_AADMUX=功能:將ADC0管腳復用為模擬比較器的反向輸入端。其中IntRef已經(jīng)面解釋過了,后面的SENSE_B,SENSE_C也類似。#defineClrSENSE#defineSENSE((ACSRdefineSENSE_L(!(ACSR&NULL_C#defineSENSE_H((ACSR&和剛才的表達式相反,當 電壓高于NULL_X時,表達式的值為真;反之MITNULL_X#defineENABLE_SENSE_INTCompInterruptFreigabe=1;ACSR|=0x0A;}ComInterruptFreigabe是一個全局變量,不過在程#defineSENSE_FALLING_INTACSR&=#defineSENSE_RISING_INTACSR|=#defineSENSE_TOGGLE_INTACSR&=要分析模擬比較器的中斷服務例程:SIGNAL(PARATOR)。80SENSE_H宏的值,此時為真,故局sense=1Switch(Phase)條件判斷語句,Phase是一個全局變量,表示當前通電相位,0~5分別表示:AB,AC,BC,BA,CA,CBAB相通電,Phase的值為0,故進入case0條件。,的值,若為非零,則調(diào)用AdConver()函數(shù)采樣一次電流大小。在第四章我們會看到,在主程序中每隔一定的時間就會將ZeiZumAdWandelen置1,以達到定期電流的目的。然后在第89行和90行將模擬比較器設置成比較B相電壓NULL_B和中點電壓NULL_BBif1-24表示的是理想的電流和感生電動勢,感生電動勢是導體切割磁力線產(chǎn)生的,而(b)B線圈自身的電感產(chǎn)生的(其大小要高于切割磁力線的感生電動勢大小(a)換相前各線圈感生電動勢 (b)換相后各線圈感生電動勢圖3-1從AB到AC換相過程中各線圈的感生電動勢BB相感生電動勢的主要因素,3-2各相感生電動勢的實際波形(dasuantou的實驗結(jié)果 到了這一現(xiàn)象,見圖3-3。 信號驅(qū)動時的消磁波形(摘自網(wǎng)友lijieamd實驗結(jié)果)由于消磁的存在,B端會在AC相通電期間,產(chǎn)生兩次上沖過零(也即模擬比較器會捕捉到兩次下跳沿前一次是,后一次才是真的。由于這第一個上沖的脈沖3-4a點,然后單片機還要做一些保存堆棧指針啊、PC跳轉(zhuǎn)啊之類的亂七八糟的事,等到運行到中斷服務程序的第80行的時候,實際的波形已經(jīng)到圖3-4b點了,這時SENSE_Hsense=1AC相通電,Phase199行的caseelseACbreak186while表SENSE_L0do-whileifsense的存在,這次短暫過零上沖并沒有對換相造成影響。而且對于B相檢測期間其他的瞬時過零干擾脈沖 B相感生電動勢Eb的波do-whileBB相真正過零模擬比較器檢測到過零,但中斷服務程序運行到第80行的時候,實際的波形已到了b點,按照我們剛才的分析,if判斷會把它當成一種干擾而忽略,程序繼續(xù)往下運行到186cwhile的判斷語句,接著就會退出中斷 B相過零時的波MK才能理解的。記得壇子里有位海綿寶寶網(wǎng)友,這些東西只是江湖一層紙,戳穿不值半MKcharAnwerfen(uchar)這個函數(shù)中(main.c文件的第162行,下面分兩步講,前半部分關(guān)注于啟動算法程0~255,按比例折合,00%,255100%。在主程序中,使用的是Awerfen(10)來調(diào)用本函數(shù)的。進入函數(shù)后,首先在166行關(guān)掉模擬比較器中斷,接著先給一個較小的Manuell函數(shù)里看看。ManuellBLMC.c192行。進入ManuellPhase0198AMOS管輸出信BA,CA,CB體分析,這里只要知道是在延時過扯中不斷循環(huán)運行while中的內(nèi)容就可以了。while(1)啟動算法主循環(huán)。0表示不忙,1300for100us30ms,跟這段時間比起191DebugAusgaben函數(shù)的功能是將一些當前信息寫到調(diào)試結(jié)構(gòu)中退出啟動函數(shù),返回值為0,說明啟動失敗。200timer14/151是為Ctimerwhile(1)的主循環(huán)202ManuellAB203~204Phase的值每次自加1,并在0~5之間。205行再測一次電流。206行再設一次(這句好像有點多余。直到207行才把10這個值真正設到Ocxx寄存器中。之后回到上面的while(1)主小循環(huán),開始第二次循環(huán),此時timer的值已變?yōu)?00-(300/15+1)=279for279279*100us=27.9ms。后面的流程也是減小到25以下。tAn1tA14t30ms。這是個指數(shù)函數(shù),下面
在高中物理里我們學過,對于直線運動物體:Fma,如果寫成微分形式就是126,但由于轉(zhuǎn)子是處于加速運動狀態(tài),轉(zhuǎn)過n的時間是逐漸減小的。如果轉(zhuǎn)子是處于勻加速運動狀態(tài)的,那倒好辦了,高中物
MFrnBLIrrnB,LrII等于多少呢?有人說,IURU R是外加電壓,EE又等于多少?根據(jù)右手定則,EnBLVVEnBLr,將這個E代入上面的I再代入上面的M得:2MnBLrU(nBLr) nB,LrUk1
,
R
Mk1 k2 這是一個典型的一階線性非齊次微分方程,再用我們剛才簡寫方法,設
k2Jkk1
kek4dtdtCek4t
kk4C,當t0時0,代入式(3.5)Ck3
k3,則式(3.5)k4 kk 好了,現(xiàn)在3-6中的t1,t2,t3……的關(guān)系了,01t1(k5k5ek4t 02
kek4t
kek4t
1t1(kkekt)dtktt1(k5ekt1
t)k
k5ekt
5k
k5k
4 k (kk
4)dt ktkt5ek4t25ek k (kk
)dt ktkt
5ekt
5ek 4
5 5
4 4 ktk5ektk5ktktk5ek
k5k e 5 5 5 去計算數(shù)值解,進而得到t1,t2 tn之間的關(guān)系,然后比較其曲線形狀和上面MK用的指MOSFET及其驅(qū)動ucharDelayM(uinttimer)T0提供的公用延時函數(shù)無關(guān),下面我們先的編譯器和編譯選項(背景音樂:NobodyNobodybutyou-_-#AVRGCCDelayM函數(shù)的機理基本同Delay函數(shù),只不過在每次while的循環(huán)中調(diào)用一下FastADConvert()測一下電流,看看是否會超過(TEST_STROMGRENZERuheStrom),若超MotorTon273~333334~346試六個MOSFET的短路特性;③第383~426試A+,B+,C+管的導通特性;④第431~463試A-,B-,C-管的導通特性;⑤第467~491行做一些收尾工作。STEURE_OFFDelayM(50)50次電流,其中測Strom_maxRuheStrom=Strom_max,這個此時并未接上位機,故332行t=1000,然后333行將全局變量Strom。NA+管已是擊穿狀態(tài)。然后第有管子損壞,進入死循環(huán),紅燈不停地閃爍anz下。383~426A+,B+,C383396A+VCCA線圈,在中點一分為二,一半經(jīng)B線圈流向地,另一邊經(jīng)C線圈流向地。第397行延時一段時間,第398NULL_A的MosfetOkay01A+A+管損壞而不能導通,A+399~400A+394行重新循A+121次呢,下一小節(jié)我們會看到,這是為了使電機發(fā)出音調(diào)。121次循環(huán)完成后,在402行關(guān)掉所有場效應管。法也是類似,不過這次要被測電壓小于某個值才算正常。若某個管正常,同樣會置位MosfetOkey的相應位;若不正常,則相應位。MOSFET467行開中斷,480行再延時一下下,481~486MosfetOkayanz為相應的值,并通過串口將490行再延時1秒鐘,491行向串口發(fā)送‘.’字符,說明自檢完成。錢了,所以這個實驗還是請閣下自己做一做吧,做完了別忘了把結(jié)果發(fā)到上來噢。不管是定子還是轉(zhuǎn)子,對程序來講都是一樣的,現(xiàn)在我們來看能的程序,循環(huán)。當396行打開了A+管后,硅鋼片就開始往一個方向運動了,之后的Delay(1)和MessAD(0)要花多少時間呢,只能用反匯編看,筆者在-O2編譯條件下粗看了一下,大約為20us左右。接著關(guān)掉A+后,Delay(300)根據(jù)前面的計算,延時約為180us多一點。因知道了原理后,要編一個音樂程序就是易如反掌的事情啦,只要控制好第400行DelayMEGA32MEGA8使用的電調(diào)程序中,自檢圖3-7給出了一個各音調(diào)的頻率表。3-7可以用它們中的任何一個來控制電調(diào)的信號的占空比,它們的代碼分別位于PPM_Deccode.c、twislave.cuart.cMK電調(diào)關(guān)于通信部分uglyMK的代碼的話,通信部分各位就可以大顯身手啦,我相信壇內(nèi)在座的各位高手達人一定有能力寫出比MK更為優(yōu)雅和簡潔PPM先講一下PPM的原理,這是模型中比較通用的一種信號格式,其原理是通過檢測都可以接收PPM的編碼信號。2ms1.5ms就表示50%1ms2ms表示轉(zhuǎn) PPM信號圖在程序中,主要是利用定時器T1的輸入捕捉功能來實現(xiàn)PPM的功能,程序代碼行的中斷服務程序。if先判斷,如果此時是上升沿觸發(fā),則先把全局變量寄存器中。那么根據(jù)一上一下兩次中斷時記錄的不同的ICP1的差值,就可算出其間的時間差。如果期間T1溢出了若干次,則每次溢出,Timer1Overflow全局變量都會自加1(見SIGNAL(SIG_OVERFLOW1)中斷服務程序這樣就不會遺漏了。由于T1工作于“8位相 故其每次的溢出時累計會計數(shù)256*2=512次。明白了這點,第56行:ppm=(ICR1-tim_alt+(int)Timer1Overflow*512)/的分辨率32后,ppm4us58行可以看到,59280220。被收到,ppmPPM_Signal62行再來一次權(quán)重分的值再放入PPM_Signal全局變量。worthSollwertErmittlung函數(shù)時才能明白它的作用。這里只的值就會被置0。ZeitZumAdWadeln1的作用是通知MEGA8I2C_RXBufferI2C_Timeout推到會將Mittlestrom(平均電流)和Max(最大值)發(fā)上去。在uarc編用I2C說看不懂的人太多,筆者還是會考慮將這部分的內(nèi)容解釋一下以補全這份文檔的,不過已是下下策啦。每次令報會以字符‘#’開頭,和‘\r’結(jié)尾。每當成功收到一條報文后,都會則說明已經(jīng)有500ms沒有收到新的串口數(shù)據(jù)了。另一個是當串口收到一個關(guān)于調(diào)節(jié) 空比的指令時,這個指令會被換算成0~255的值,并放入全局變量SIO_Sollwert中。PPM給的;查看的優(yōu)先級為I2C>串口>PPM信號。用的變量535I2C有數(shù)據(jù)進PPM信號。537sollwert的最大值,538行將這個值返回。sollwert--;sollwert是靜態(tài)變量,當本函數(shù)被調(diào)用若干次后,sollwert的值就會慢慢變?yōu)?,并且返回0。505SIO_Sollwert值算出一個對應的值,然后賦到sollwert中,類似,如果若干時間沒有收到串口信號了,sollwert值也會慢慢變0。過來的,anz_ppm_werte這個值自然肯定會大于20,然后會運行if中的語句。前面,PPM_Betrieb514~517PPM_Signal值,使它不要太255]中的對應位置,算出的值就是當前要設定的522行將紅燈關(guān)掉,并在哦,最后差點忘了提醒一下,MEGA8RC作為時鐘的話,需要在程序的一否則串口通訊若報文長了可能出問題,MKBootloader中把這件事做掉了,所以在德國MicroKopter項目BL-Ctrl電調(diào)程序主程序代碼流程分析(V0.41版本)main(void)主函數(shù)了,其他該講的都講了,那這里先扯點別的,再進入正題。IDE軟件,但并不是個很好的閱讀代碼工具,如果要閱讀包含很多個文件的大型代碼LinuxU-boot源代碼的,現(xiàn)在用它來分析SourceInsight這么強大的回溯工具,如果一碰到宏MakefileMakefilesvnpitolan5-1main.c5-2BLMC.c表示當前相位 T1T05-6uart.c備工作,然后進入單片機偉大的while(1)主循環(huán)。1.0MOTORADRESSE1.1PCB板上用跳線動態(tài)設定,這段代碼也比較1.1版本及以上電路,HwVersion變量設為11;若是1.0版本電路,HwVersion則設為10。后面比較有意思的是第578行,不知道大家在看原理圖的時候有沒有注意到那個綠色V1.1V1.2PD7置于輸入設為0xC0,IntRef的作用第三章第一節(jié)就已講過,這里不再贅述。當判斷完電路版本后,579行再將PD7置為輸出模式。602~607MinUpmPulse608~611行的作618~6191。621行再次將MinUpmPulse設為未來10ms的時刻。622行填寫一些調(diào)試信號。623行將PPM_Signal設為0。用MotorTon啟動MOSFET自檢程序,并弄點聲音給你聽聽。一遍PORTB。TEST_MANUELL宏的值為大小來啟動電機,這個只在作者調(diào)試時用,正式程序中TEST_MANUELL只定義成0,故這里的Anwerfen不會運行。12550if里的內(nèi)容。所以運行頻率為:第一段每運內(nèi)容,而不必等加到255翻轉(zhuǎn)了。640行收到的值為0。643PhasealtPhase0if651行,由于此時的值設為0,故等會兒到672行第二段時會先運行一次if中的內(nèi)容。接著看656行,由于MotorGestoppttimerif里的內(nèi)容有可能運行,也有可能不故還是設成0,并在670行寫入MEGA8的寄存器。第674~678行比較簡單,開綠燈,測電流。第681行會看看MitstromTimer定時器時605行MitstromTimer被設成了254ms,這里顯然不會這么快到,故跳過if中內(nèi)容不運行。第698行看看DrehzahlMessTimer定時器到?jīng)]到時間,前面接下來的709~748行if塊中的內(nèi)容都是和電機啟動或關(guān)閉有關(guān)的,我們來看這句話:if((CheckDelay(MinUpmPulse)&&SIO_Drehzahl0||MotorAnwerfen)要進入這段if程序有兩個條件,滿足任何一個都可。①如果MotorAnwerfen面被置1,則會進入本段if塊程序。MinUpmPulse621行被設為延時10ms,等會兒總歸會到下當然為0。后面我們會看到,這其實是電機意外停轉(zhuǎn)的判別條件。故這里在第一次while
714行,由于這里MotorAnwerfen0,故不會進入下面這段啟動算法。跳過這時間繼續(xù)過,到了254ms的時候,第681行的Mit 入if中的語句:在683行再
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論