第章單片機控制的電動自行車驅(qū)動系統(tǒng)_第1頁
第章單片機控制的電動自行車驅(qū)動系統(tǒng)_第2頁
第章單片機控制的電動自行車驅(qū)動系統(tǒng)_第3頁
第章單片機控制的電動自行車驅(qū)動系統(tǒng)_第4頁
第章單片機控制的電動自行車驅(qū)動系統(tǒng)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第14章 單片機控制的電動自行車驅(qū)動系統(tǒng)14.4.4 各部分程序LISTP=16F876#INCLUDE P16F876.INC;以下采用塊定義的方法定義單片機內(nèi)部寄存器CBLOCK0X20;自定義寄存器從0X20開始FLAG1;FLAG1作為標志寄存器VOLTAGEH;電池電壓高位寄存器VOLTAGEL;電池電壓低位寄存器TSH;手柄電壓高位寄存器TSL;手柄電壓低位寄存器STATE1;霍爾信號采樣暫存器1STATE2;霍爾信號采樣暫存器2STATE3;霍爾信號采樣暫存器3DELAY;延時計數(shù)器COUNT_VOL;低電壓采樣次數(shù)計數(shù)器ACCaLO ;ACCaACCd為運算用的寄存器ACCaH

2、I ACCbLO ACCbHI ACCcLO ACCcHI ACCdLO ACCdHI TEMP ;臨時寄存器TEMP1 ;臨時寄存器(中斷用)SIGN ;符號寄存器COUNT ;臨時寄存器W_STACK;中斷時用于暫存W寄存器值ST_STACK;中斷時用于暫存STATUS寄存器值ENDC;*標志寄存器位定義以及程序中常數(shù)定義*CONSTANTVOLTAGE=0;采電池電壓標志位CONSTANTPWM=1;輸出下一次PWM信號標志位CONSTANTLOWPOWER=2;低電壓標志位CONSTANTSHUTDOWN=3;剎車標志位CONSTANTOFF=4;復位標志位CONSTANTAND=0X

3、E0;AND用于獲取有效霍爾信號CONSTANTFULLPWM=0XFF;當PWM輸出全高時,輸入CCPR1L中的值CONSTANTVOLOFFH=0X02;當電池電壓低于24AH時, 低壓保護2.86 V/31.5 VCONSTANTVOLOFFL=0X4ACONSTANTVOLONH=0X02;當電池電壓大于266H時,允許電機重開3V/33VCONSTANTVOLONL=0X66CONSTANTTSONH=0X01;剎車后手柄復位值低于133H,則允許電機重新啟動CONSTANTTSONL=0X33;*復位矢量入口(單片機復位時,PC指針指向程序存儲器0X0000單元)*ORG0X000

4、0STARTGOTOMAIN;復位后程序進入主程序;*中斷矢量入口程序(PIC單片機的中斷矢量入口為0X0004)*ORG0X0004;中斷矢量入口BTFSCINTCON,RBIF;是否為RB口電平變化中斷?GOTOSAMPLERB;是,進入RB口電平變化中斷服務(wù)程序BTFSCPIR1,ADIF;是否為AD采樣中斷GOTOAD;是,進入AD中斷服務(wù)程序BTFSCINTCON,INTF;是否為剎車中斷GOTOBRAKE;是,剎車中斷處理RETFIE;如都不是,則中斷返回;*逆變橋輸出控制表*;逆變橋輸出控制表,其輸出對應(yīng)6種狀態(tài),霍爾信號來自B口RB7、RB6、RB5,C口輸出低電平有;效,其中

5、RC1,RC2不作為觸發(fā)電路輸出口,故表中使其為高電平ORG0X0020;表程序從0X0020單元開始存放(也可以不從這開始)OUT_TABLEADDWFPCL,1RETLW0X0AF;如霍爾信號為0、0、0,則使RC4、RC6為低電平RETLW0X0BE;如霍爾信號為0、0、1,則使RC0、RC6為低電平RETLW0X0FF;沒有為0、1、0的霍爾信號對應(yīng)電機狀態(tài)RETLW0X07E;如霍爾信號為0、1、1,則使RC0、RC7為低電平RETLW0X0CF;如霍爾信號為1、0、0,則使RC4、RC5為低電平RETLW0X0FF;沒有為1、0、1的霍爾信號對應(yīng)電機狀態(tài)RETLW0X0D7;如霍爾

6、信號為1、1、0則使RC3、RC5為低電平RETLW0X077;如霍爾信號為1、1、1則使RC3、RC7為低電平;*主程序*ORG0X0100;主程序從0X0100單元開始存儲MAINMOVLW0X0FF;由于C口上電復位值不確定,必須先關(guān)閉所有MOS管MOVWFPORTCBSFSTATUS,RP0;選擇存儲體1MOVLW0X02;設(shè)置RC1為輸入口,其它為輸出口,其中RC2為PWM MOVWFTRISC;輸出口,其它位為觸發(fā)信號輸出BCFSTATUS,RP0;選擇存儲體0CLRFPIR1;清所有中斷標志位CLRFINTCON;禁止所有中斷MOVLW0X01;設(shè)置TMR2預分頻值為4MOVWF

7、T2CONMOVLWFULLPWM;初始化PWM工作循環(huán)寄存器,使PWM占空比為1MOVWFCCPR1L;輸出電壓為零MOVLW0XFF;設(shè)置CCP1工作于PWM方式MOVWFCCP1CONMOVLW0X0B;CCP2工作于特殊事件觸發(fā)方式,用作AD采樣周期寄存MOVWFCCP2CON;器MOVLW0X081;選擇AD轉(zhuǎn)換時鐘為32分頻,選擇AN0通道,并使ADMOVWFADCON0;轉(zhuǎn)換允許CLRFTMR2;TMR2計數(shù)器清零CLRFTMR1H;TMR1計數(shù)器清零CLRFTMR1LCLRFT1CON;TMR1預分頻為1,關(guān)閉振蕩器,工作于定時工作方式MOVLW0X08;初始化AD采樣周期寄存

8、器,T=512 sMOVWFCCPR2HMOVLW0X00MOVWFCCPR2LBSFSTATUS,RP0;選擇存儲體1MOVLW0XEF;RB口高3位用于采樣霍爾信號,RB0為剎車中斷,設(shè)置為MOVWFTRISB;輸入,其它未用MOVLW0XC7;初始化PWM頻率為5 kHzMOVWFPR2MOVLW0X082;AD采樣結(jié)果右移,RA口引腳均為模擬輸入MOVWFADCON1BSFOPTION_REG,INTEDG ;選擇INT在下降沿產(chǎn)生中斷BCFSTATUS,RP0CALLSAMPLE;確定當前轉(zhuǎn)子位置CALLOUTPUT;根據(jù)采得的狀態(tài)值觸發(fā)相應(yīng)的MOSFETMOVLW0X0D8;開總中

9、斷、外圍中斷、INT中斷和RB口電平變化中斷允MOVWFINTCON;許BCFPIE2,CCP2IE;CCP2中斷禁止BSFPIE1,ADIE;打開AD采樣中斷CLRFFLAG1;清標志位寄存器CLRFCOUNT_VOL;清電池電壓采樣計數(shù)器BSFT1CON,TMR1ON;開CCP2,對手柄進行等間隔采樣BSFT2CON,TMR2ON;開CCP1RETESTBTFSSFLAG1,PWM;TS采樣完畢?GOTONEXT1;沒有,轉(zhuǎn)NEXT1CALLOUT_PWM;TS采樣完畢,送出相應(yīng)的PWM信號BCFFLAG1,PWM;清PWM允許標志NEXT1BTFSSFLAG1,LOWPOWER;電壓采樣

10、完畢?GOTONEXT2;沒有轉(zhuǎn)NEXT2CALLPOWER;是,調(diào)用電壓保護子程序處理數(shù)據(jù)BTFSCFLAG1,OFF;是否需要復位?GOTOMAIN;是,單片機復位NEXT2BTFSSFLAG1,SHUTDOWN;剎車中斷到來?GOTORETEST;否,回轉(zhuǎn)RETESTCALLBRAKEON;是,調(diào)用剎車處理子程序CLRWDTBTFSCFLAG1,OFF;OFF=0?GOTOMAIN;否,單片機復位GOTORETEST;是,回轉(zhuǎn)RETEST;*剎車處理子程序*BRAKEONBCFFLAG1,OFF;清復位標志BCFFLAG1,SHUTDOWN;是,清相應(yīng)標志位BTFSSPORTB,0;IN

11、T引腳仍為1?RETURN;否,中斷是由干擾引起的,返回BSFSTATUS,RP0BCFPIE1,ADIE;禁止AD采樣中斷BCFSTATUS,RP0BCFINTCON,INTE;關(guān)RB0中斷MOVLWFULLPWM;PWM輸出全高MOVWFCCPR1LBCFT1CON,TMR1ON;關(guān)閉手柄采樣BREAK2BTFSCADCON0,GO;正在進行AD采樣?GOTOBREAK2;是,等待AD采樣完畢BCFADCON0,CHS0BCFADCON0,CHS1;選擇0采樣通道,準備采樣手柄電壓BCFPIR1,ADIF;清AD采樣中斷標志位MOVLW0X06;延時MOVWFCOUNTBREAK3DECF

12、SZCOUNTGOTOBREAK3BREAK5BSFADCON0,GO;采樣TS值BREAK4BTFSSPIR1,ADIF;采樣完畢?GOTOBREAK4BCFPIR1,ADIFBCFSTATUS,CMOVFADRESH,0;當前TS值送被減數(shù)MOVWFACCbHIBSFSTATUS,RP0MOVFADRESL,0BCFSTATUS,RP0MOVWFACCbLOMOVLWTSONH;1.5 V所對應(yīng)的采樣值送減數(shù)MOVWFACCaHIMOVLWTSONLMOVWFACCaLOCALLD_sub;當前TS值減1.5VMOVLWFULLPWMMOVWFCCPR1LCLRWDTBTFSSACCbHI

13、,7;當前電壓值大于1.5V?GOTOBREAK5;是,重新采樣BTFSCPORTB,0GOTOBREAK5BSFFLAG1,OFF;否,置相應(yīng)的標志位RETURN;返回;*開環(huán)PWM輸出子程序*OUT_PWMBCFFLAG1,PWM;清相應(yīng)的標志位MOVFTSH,0;將調(diào)速手柄采樣值送至被加數(shù)MOVWFACCaHIMOVFTSL,0MOVWFACCaLOMOVLW0XFF;FF1F補碼為0XE1,即1.1 VMOVWFACCbHIMOVLW0X1FMOVWFACCbLOCALLD_addBTFSSACCbHI,7;TS1.1V?GOTOPWM1;是,轉(zhuǎn)PWM1MOVLWFULLPWM;否則輸

14、出全高MOVWFCCPR1LRETURNPWM1MOVLW0XFD;0X27B=3.1VMOVWFACCbHIMOVLW0X85MOVWFACCbLOCALLD_addBTFSCACCbHI,7;TS3.1V?GOTOPWM3PWM2CLRFCCPR1LBCFCCP1CON,4BCFCCP1CON,5RETURNPWM3MOVLW0X0FF;1.1 V對應(yīng)的采樣值補碼送加數(shù)MOVWFACCbHIMOVLW0X1FMOVWFACCbLOCALLD_add;TS-1.1VCLRFACCaHI;系數(shù)K=56=38H送乘數(shù)MOVLW0X3FMOVWFACCaLOCALLD_mpy;得到放大128倍的低

15、電平時間K*(TS-1.1V)MOVFACCcHI,0;將結(jié)果取出MOVWFACCaHIMOVFACCcLO,0MOVWFACCaLOMOVLW0X64;PWM周期T減去低電平時間,得到高電平時間MOVWFACCbHICLRFACCbLO CALLD_subBTFSCACCbHI,7;低電平時間是否大于周期?GOTOPWM2;是,輸出全壓RLFACCbLO;否則,輸出與低電平時間對應(yīng)的高電平時間RLFACCbHIMOVFACCbHI,0;D10D2位送CCPR1LMOVWFCCPR1LBCFCCP1CON,5;D0位送CCP1CON5BTFSCACCbLO,7BSFCCP1CON,5BCFCC

16、P1CON,4;D.1位送CCP1CON4BTFSCACCbLO,6BSFCCP1CON,4RETURN;返回;*剎車中斷服務(wù)程序*BRAKECALLPUSH;保存現(xiàn)場BCFSTATUS,RP0;回存儲區(qū)0BSFFLAG1,SHUTDOWN;置相應(yīng)標志位BCFINTCON,INTF;清中斷標志位CALLPOP;恢復現(xiàn)場RETFIE;中斷返回;*低電壓保護處理子程序*POWERBCFFLAG1,LOWPOWER;清相應(yīng)的標志位MOVFVOLTAGEH,0MOVWFACCaHIMOVFVOLTAGEL,0MOVWFACCaLOMOVLWVOLOFFHMOVWFACCbHIMOVLWVOLOFFLM

17、OVWFACCbLOCALLD_subBTFSCACCbLO,7;判斷當前電池電壓值是否低于保護電壓(32V)RETURN;不是,返回BCFINTCON,INTEBCFT1CON,TMR1ON;關(guān)閉電流采樣MOVLWFULLPWMMOVWFCCPR1LBSFSTATUS,RP0BCFPIE1,ADIE;禁止AD采樣中斷BCFSTATUS,RP0POWER3BTFSCADCON0,GO;正在進行AD采樣?GOTOPOWER3;是,等待AD采樣完畢BCFPIR1,ADIF;清AD采樣中斷標志位BCFADCON0,CHS0BSFADCON0,CHS1;選擇電壓采樣通道MOVLW0X06;延時等待通道

18、轉(zhuǎn)換完成MOVWFCOUNTPOWER4DECFSZCOUNTGOTOPOWER4POWER6BSFADCON0,GO;采樣電池電壓值POWER5BTFSSPIR1,ADIF;采樣完畢?GOTOPOWER5BCFPIR1,ADIF;清AD中斷標志位BCFSTATUS,CMOVFADRESH,0;當前電壓值送被加數(shù)MOVWFACCbHIBSFSTATUS,RP0MOVFADRESL,0BCFSTATUS,RP0MOVWFACCbLOMOVLWVOLONH;35V電壓值送被加數(shù)MOVWFACCaHIMOVLWVOLONLMOVWFACCaLOCALLD_sub;當前電壓值減35,與重開電壓進行比較

19、MOVLWFULLPWMMOVWFCCPR1LCLRWDTBTFSCACCbHI,7;當前電壓值大于35?GOTOPOWER6;否,重新采樣BSFFLAG1,OFF;是,置相應(yīng)的標志位RETURN;返回;*電機轉(zhuǎn)子位置采樣子程序,狀態(tài)采樣子程序,出口地址:STATE1*SAMPLEMOVLWAND;讀RB口ANDWFPORTB,0;分離出有效信息MOVWFSTATE1;暫存狀態(tài)值MOVLW0X08MOVWFDELAYDEL1DECFSZDELAY;延時6 sGOTODEL1MOVLWAND;讀RB口ANDWFPORTB,0;分離出有效信息,并暫存MOVWFSTATE2XORWFSTATE1,0

20、;與上一次狀態(tài)值相異或BTFSCSTATUS,ZRETURN;兩個狀態(tài)值相等則返回MOVLW0X06;否則延時4 sMOVWFDELAYDEL2DECFSZDELAYGOTODEL2MOVLWAND;讀RB口ANDWFPORTB,0;提取有效信息并暫存MOVWFSTATE3XORWFSTATE1,0;與第一次狀態(tài)相同嗎?BTFSCSTATUS,ZRETURN;相同則返回MOVFSTATE2,0;否則再與第二次狀態(tài)相比較XORWFSTATE3,0BTFSSSTATUS,ZGOTOSAMPLE;三次狀態(tài)均不相同則重新采樣MOVFSTATE2,0;第三次狀態(tài)與第二次相同,則將正確狀態(tài)賦予STATE1

21、并MOVWFSTATE1;返回RETURN;* MOSFET觸發(fā)信號輸出子程序*OUTPUTSWAPFSTATE1,1;STATE1寄存器高低半字節(jié)互換BCFSTATUS,C;清C位,并將STATE1寄存器左移一位RRFSTATE1,0;將采樣所得結(jié)果放至W低三位CALLOUT_TABLE;查表獲得輸出值MOVWFPORTC;將輸出值輸出至RC口RETURN;* RB口電平變化中斷服務(wù)程序*SAMPRBCALLPUSH;現(xiàn)場保護 BCFSTATUS,RP0CALLSAMPLE;采樣RB口狀態(tài)CALLOUTPUT;根據(jù)RB口狀態(tài)觸發(fā)相應(yīng)的MOSFETCALLPOP;恢復現(xiàn)場BCFINTCON,R

22、BIF;清RB口電平變化中斷標志RETFIE;中斷返回;* AD采樣中斷服務(wù)程序*ADCALLPUSH;保護現(xiàn)場BTFSCFLAG1,VOLTAGE;是電壓采樣?GOTOSET_VOL;是,作相應(yīng)的處理SET_TSBCFADCON0,CHS0;AD采樣值是TS,則選擇1采樣通道INCFCOUNT_VOL;電壓采樣周期寄存器值加1BTFSSSTATUS,Z;電壓采樣周期到?GOTOAD4BCFADCON0,CHS0;是,選擇2采樣通道BSFADCON0,CHS1BSFFLAG1,VOLTAGE;置相應(yīng)的標志位AD4BCFPIR1,ADIF;清AD中斷標志MOVFADRESH,0;采樣值送寄存器暫存MOVWFTSHBSFSTATUS,RP0MOVFADRESL,0BCFSTATUS,RP0MOVWFTSLBSFFLAG1,PWMBTFSSFLAG1,VOLTAGE;是否需要進行電壓采樣?GOTOAD6MOVLW0X05;是,延時后采樣電壓MOVWFTEMP1AD5DECFSZTEMP1GOTOAD5BSFADCON0,GOAD6CALLPOP;恢復現(xiàn)場,中斷返回RETFIESET

溫馨提示

  • 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

提交評論