版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/PIC16F72單片機(jī)控制的電動(dòng)自行車C源程序,原理圖及設(shè)計(jì)說/PIC16F72單片機(jī)控制的電動(dòng)自行車驅(qū)動(dòng)系統(tǒng)C程序#include <pic.h>/電動(dòng)車雙閉環(huán)程序,采用雙閉環(huán)方式控制電機(jī),以得到最好的zh 轉(zhuǎn)速性能,并且可以/限制電機(jī)的最大電流。本應(yīng)用程序用到兩個(gè)CCP 部件,其中CCP1 用于PWM 輸出,以控/制電機(jī)電壓;CCP2 用于觸發(fā)AD,定時(shí)器TMR2、TMR1,INT 中斷,RB 口電平變化中斷,/看門狗以及6 個(gè)通用I/O 口#define AND 0xe0 /狀態(tài)采集5,6,7 位#define CURA 0X0a /電流環(huán)比例和積分系數(shù)之和#define
2、CURB 0X09 /電流環(huán)比例系數(shù)#define THL 0X6400 /電流環(huán)最大輸出#define FULLDUTY 0X0FF /占空比為1 時(shí)的高電平時(shí)間#define SPEA 0X1d /轉(zhuǎn)速環(huán)比例和積分系數(shù)之和#define SPEB 0X1c /轉(zhuǎn)速環(huán)比例系數(shù)#define GCURHILO 0X0330 /轉(zhuǎn)速環(huán)最大輸出#define GCURH 0X33 /最大給定電流#define GSPEH 0X67 /最大轉(zhuǎn)速給定#define TSON 0X38 /手柄開啟電壓1.1 V,TSON*2 為剎車后手柄開啟電壓,即/2.2 V#define VOLON 0X4c /低
3、電壓保護(hù)重開電壓3.0 V 即33 V#define VOLOFF 0X49 /低電壓保護(hù)關(guān)斷電壓2.86 V 即31.5 Vvolatile unsigned char DELAYH,DELAYL,oldstate,speed,speedcount,tsh,count_ts,count_vol,gcur,currenth,voltage; /寄存器定義static bit sp1,spe,ts,volflag,spepid,lowpower,off,shutdown,curpid; /標(biāo)志位定義static volatile unsigned char new10=0xaf,0xbe,0xf
4、f,0x7e,0xcf,0xff,0xd7,0x77,0xff,0xff; /狀態(tài)寄存器表/-PIC16F877 初始化子程序-void INIT877()PORTC=0X0FF; /關(guān)斷所有MOSFETTRISC=0X02; /設(shè)置C 口輸出PIE1=0X00; /中斷寄存器初始化,關(guān)斷所有中斷TRISA=0XCF; /設(shè)置RA4,RA5 輸出TRISB=0XEF; /RB 口高三位輸入,采集電機(jī)三相的霍爾信號(hào)PORTC=new(PORTB&AND)>>5; /采集第一次霍爾信號(hào),并輸出相應(yīng)的信號(hào),導(dǎo)通/兩個(gè)MOS 管T2CON=0X01; /TMR2 4 分頻CCPR1
5、L=0X0FF; /初始時(shí)PWM 輸出全高CCP1CON=0X0FF; /CCP1 設(shè)置為PWM 方式CCP2CON=0X0B; /CCP2 設(shè)置為特殊方式,以觸發(fā)ADADCON0=0X81; /AD 時(shí)鐘為32 分頻,且AD 使能,選擇AN0 通道采集手/柄電壓TMR2=0X00; /TMR2 寄存器初始化TMR1H=0X00; /TMR1 寄存器初始化TMR1L=0X00;T1CON=0X00; /TMR1 為1 分頻CCPR2H=0X08;CCPR2L=0X00; /電流采樣周期設(shè)置為TAD=512 sPR2=0XC7; /PWM 頻率設(shè)置為5 kHzADCON1=0X02; /AD 結(jié)
6、果左移OPTION=0XFB; /INT 上升沿觸發(fā)TMR2ON=1; /PWM 開始工作INTCON=0XD8; /中斷設(shè)置GIE=1,PEIE=1,RBIE=1ADIE=1; /AD中斷使能speedcount=0x00; /轉(zhuǎn)速計(jì)數(shù)寄存器speed=0x7f; /轉(zhuǎn)速保持寄存器spe=1; /低速標(biāo)志位sp1=1; /低速標(biāo)志位oldstate=0x0ff; /初始狀態(tài)設(shè)置,區(qū)別于其他狀態(tài)count_ts=0x08; /電流采樣8 次,采集1 次手柄count_vol=0x00; /采樣256 次手柄,采集1 次電池電壓ts=1; /可以采集手柄值的標(biāo)志位ADGO=1; /AD采樣使能T
7、MR1ON=1; /CCP2 部件開始工作/-延時(shí)子程序-#pragma interrupt_level 1void DELAY1(x)char x;DELAYH=x; /延時(shí)參數(shù)設(shè)置#asmDELAY2 MOVLW 0X06MOVWF _DELAYLDELAY1 DECFSZ _DELAYLGOTO DELAY1DECFSZ _DELAYHGOTO DELAY2#endasm/-狀態(tài)采集子程序-void sample()char state1,state2,state3,x;do x=1;state1=(PORTB&AND); /霍爾信號(hào)采集DELAY1(x);state2=(POR
8、TB&AND);while(state1-state2); /當(dāng)三次采樣結(jié)果不相同時(shí)繼續(xù)采集狀態(tài)if(state1-oldstate!=0) /看本次采樣結(jié)果是否與上次相同,不同/則執(zhí)行oldstate=state1; /將本次狀態(tài)設(shè)置為舊狀態(tài)state1=(oldstate>>5);PORTC=newstate1; /C 口輸出相應(yīng)的信號(hào)觸發(fā)兩個(gè)MOS 管if(sp1=1)spe=1;sp1=0;else /如果轉(zhuǎn)速很低,則spe 置1spe=0;sp1=0;speedcount<<=1;state3=(TMR1H>>2); /否則,spe=0,計(jì)
9、轉(zhuǎn)速speed=speedcount+state3; /speed 寄存器為每256 s 加1speedcount=0;/-AD 采樣子程序-void AD()char x;ADIF=0; /清AD 中斷標(biāo)志位if(ts=1) /如果為手柄采樣,則采樣手柄值CHS0=1; /選擇電流采樣通道count_vol=count_vol+1; /電池采樣計(jì)數(shù)寄存器spepid=1; /置轉(zhuǎn)速閉環(huán)運(yùn)算標(biāo)志ts=0;tsh=ADRESH; /存手柄值if(count_vol=0) /如果電池采樣時(shí)間到,則選擇AN2 通道,采集電池電壓CHS0=0;CHS1=1;volflag=1;x=1;DELAY1(x
10、);ADGO=1;else if(volflag=1) /電池采樣完畢,進(jìn)行相應(yīng)的處理CHS1=0;CHS0=1;volflag=0;voltage=ADRESH;lowpower=1;else /否則,中斷為采樣電流中斷speedcount=speedcount+1; /speedcount 寄存器加1,作為測(cè)量轉(zhuǎn)速用if(speedcount>0x3d) sp1=1; /如果轉(zhuǎn)速低于1 000 000 s/(512 s*3eh*3)/ 則認(rèn)為為低速狀態(tài)currenth=ADRESH;curpid=1;count_ts=count_ts-1;if(count_ts=0) /如果手柄時(shí)間
11、到,則轉(zhuǎn)入手柄采樣通道CHS0=0;count_ts=0x08;ts=1;x=1;DELAY1(x);ADGO=1;/-剎車處理子程序-void BREAKON()char x;off=0; /off清零,如果是干擾則不復(fù)位shutdown=0;if(RB0=1) /如果剎車信號(hào)為真,則停止輸出電壓ADIE=0; /關(guān)AD 中斷INTE=0; /關(guān)剎車中斷CCPR1L=FULLDUTY; /輸出電壓0TMR1ON=0; /關(guān)CCP2,不再觸發(fā)ADfor(;ADGO=1;) continue;/如正在采樣,則等待采樣結(jié)束ADIF=0; /ADIF 位清零CHS0=0; /選擇通道0 采樣手柄CH
12、S1=0;x=1;DELAY1(x);do ADGO=1;for(;ADIF=0;)continue;ADIF=0;CCPR1L=FULLDUTY;asm("CLRWDT");tsh=(ADRESH>>1);while(tsh>TSON|RB0=1); /當(dāng)手柄值大于2.2 V 或剎車仍舊繼續(xù)時(shí),執(zhí)行以/上語句off=1; /置復(fù)位標(biāo)志/-欠保護(hù)子程序-void POWER()char x;lowpower=0;voltage>>=1; /電壓值換為7 位,以利于單字節(jié)運(yùn)算if(voltage<VOLOFF) /電池電壓小于3*k(V)時(shí)
13、保護(hù)ADIE=0;INTE=0;TMR1ON=0;CCPR1L=FULLDUTY;for(;ADGO=1;)continue;ADIF=0;CHS0=0;CHS1=1;x=1;DELAY1(x);doADGO=1;for(;ADIF=0;)continue;ADIF=0;voltage=(ADRESH>>1);CCPR1L=FULLDUTY;asm("CLRWDT");while(voltage<VOLON); /電池電壓小于35 V 時(shí)繼續(xù)保護(hù)off=1; /置復(fù)位標(biāo)志/-電流環(huán)運(yùn)算子程序-void CURPI() static int curep=0x
14、00,curek=0x00,curuk=0x00;union dataint pwm;char a2;b; /定義電流環(huán)運(yùn)算寄存器curpid=0; /清電流運(yùn)算標(biāo)志curep=curek*CURB; /計(jì)算上一次偏差與比例系數(shù)的積if(currenth<2)currenth=2; /如果采樣電流為零,則認(rèn)為有一個(gè)小電流以利于/使轉(zhuǎn)速下降currenth>>=1;curek=gcur-currenth; /計(jì)算本次偏差curuk=curuk+curek*CURA-curep; /按閉環(huán)PI 運(yùn)算方式得到本次輸出結(jié)果,下/面對(duì)結(jié)果進(jìn)行處理if(curuk<0x00) /如
15、果輸出小于零,則認(rèn)為輸出為零curuk=0;CCPR1L=FULLDUTY;CCP1X=0;CCP1Y=0;else if(curuk-THL>=0) /如果輸出大于限幅值,則輸出最大電壓curuk=THL;CCPR1L=0;CCP1X=0;CCP1Y=0;else /否則,按比例輸出相應(yīng)的高電平時(shí)間到CCPR1 寄存器b.pwm=THL-curuk;b.pwm<<=1;CCPR1L=b.a1; /CCPR1L=(b.pwm>>8)&0x0ff;將PWM 寄存器的高半字節(jié)if(b.pwm&0x80!=0) CCP1X=1;else CCP1X=0;
16、if(b.pwm&0x40!=0) CCP1Y=1;else CCP1Y=0;/-轉(zhuǎn)速環(huán)運(yùn)算子程序-void SPEPI() static int speep=0x00,speek=0x00,speuk=0x00;int tsh1,speed1; /轉(zhuǎn)速寄存器定義spepid=0; /清轉(zhuǎn)速運(yùn)算標(biāo)志if(spe=1) speed1=0x00; /若轉(zhuǎn)速太低,則認(rèn)為轉(zhuǎn)速為零else speed1=0x7f-speed; /否則計(jì)算實(shí)際轉(zhuǎn)速if(speed1<0) speed1=0;speep=speek*SPEB;tsh1=tsh-0x38; /得到計(jì)算用的手柄值speek=tsh
17、1-speed1;if(tsh1<0) speuk=0;gcur=0; /當(dāng)手柄值低于1.1 V 時(shí),則認(rèn)為手柄給定為零else /否則,計(jì)算相應(yīng)的轉(zhuǎn)速環(huán)輸出if(tsh1>=GSPEH) /限制最大轉(zhuǎn)速tsh1=GSPEH;speuk=speuk+speek*SPEA-speep; /計(jì)算得轉(zhuǎn)速環(huán)輸出if(speuk<=0X00) speuk=0x00;gcur=0x00;/轉(zhuǎn)速環(huán)輸出處理else if(speuk>GCURHILO) /轉(zhuǎn)速環(huán)輸出限制,即限制最大電流約12 Aspeuk=GCURHILO;gcur=GCURH;else /調(diào)速狀態(tài)時(shí)的輸出gcur=(
18、speuk>>4)&0x0ff;/-主程序-main()for(;)INIT877(); /單片機(jī)復(fù)位后,先對(duì)其進(jìn)行初始化off=0; /清復(fù)位標(biāo)志for(;off=0;) /復(fù)位標(biāo)志為零,則執(zhí)行下面程序,否則復(fù)位if(curpid=1) CURPI(); /電流PI 運(yùn)算else if(spepid=1) SPEPI(); /轉(zhuǎn)速PI 運(yùn)算else if(lowpower=1) POWER();else if(shutdown=1) BREAKON();asm("CLRWDT");/-中斷服務(wù)子程序-#pragma interrupt_level 1v
19、oid interrupt INTS(void)if(RBIF=1) RBIF=0;sample();else if(ADIF=1) AD();else if(INTF=1) shutdown=1;INTF=0; /剎車中斷來,置剎車標(biāo)志設(shè)計(jì)思路:目 的目前電動(dòng)車市場(chǎng)各種功能無刷控制器琳瑯滿目,種類繁多。普通模擬專用芯片已是窮途末路,而利用單片機(jī)控制則能做到“只有想不到,不怕做不到”地步,五花八門的單片機(jī)紛紛推向電動(dòng)車這個(gè)新興的行業(yè)。我公司根據(jù)電動(dòng)車市場(chǎng)的流行趨勢(shì),制定了無刷控制器的設(shè)計(jì)方案。功能概述目前電動(dòng)車市場(chǎng)上的控制器分有刷控制器和無刷控制器兩大類,由于有刷電機(jī)輸出扭距小,效率低,需要定
20、期更換炭刷等諸多缺點(diǎn)而逐步被輸出扭距大、效率高、使用壽命長(zhǎng)的無刷電機(jī)取代。根據(jù)電動(dòng)車車型分簡(jiǎn)易車和豪華車型以及電動(dòng)摩托車,簡(jiǎn)易車功率一般在250W以下,而豪華車都在350W以上,設(shè)計(jì)時(shí)必須考慮。簡(jiǎn)易車的常用功能有1:1助力、巡航、電量及工作狀態(tài)顯示。工作模式有自動(dòng)和手動(dòng)切換兩種。豪華車型根據(jù)客戶的隨意性有很多功能,主要有飛車保護(hù)、軟ABS剎車、反充電、雙動(dòng)力(檔位切換)、電機(jī)鎖(關(guān)閉電源電機(jī)鎖定)等。為方便調(diào)試和防止非法解密,設(shè)計(jì)采用專用調(diào)試工具,外接一個(gè)帶有鍵盤和顯示器(數(shù)碼管)的工具來設(shè)定一些基本參數(shù),如欠壓値、限流、相位選擇和工作電壓選擇等??梢岳脝纹瑱C(jī)內(nèi)部或外接EEPROM保存設(shè)置參
21、數(shù)。通過該調(diào)試工具達(dá)到系列產(chǎn)品的通用性。主要技術(shù)參數(shù)1 基本功能1.1 工作電壓±0.5V,低于該值關(guān)閉輸出。由于取樣電壓有相應(yīng)的誤差,用鍵盤應(yīng)可以微調(diào)。欠壓工作方式:當(dāng)電源電壓低于設(shè)定值時(shí),關(guān)閉輸出,當(dāng)電源電壓滯回到大于設(shè)定值2V時(shí),開啟輸出。另一種方式為當(dāng)電源電壓低于電池容量的50時(shí),相應(yīng)縮減輸出脈寬,以10個(gè)百分點(diǎn)逐減,到設(shè)定值時(shí)減為零即關(guān)閉輸出,滯回則相反。 1.2 調(diào)速電壓調(diào)速把輸出電壓范圍為14.2V,控制器起點(diǎn)電壓應(yīng)高于1V,控制器的脈寬調(diào)制范圍應(yīng)設(shè)定為1.383.8V,大于3.8V輸出為全打開。1.3 剎車斷電分高電平、低電平和ABS三種方式,高、低電平控制方式由鍵盤設(shè)定,ABS單獨(dú)引腳控制,該功能如不用時(shí),I/O口可以指定其它功能。1.4 限流當(dāng)取樣信號(hào)到達(dá)設(shè)定點(diǎn)時(shí),采用對(duì)PWM進(jìn)行遞減的方法,來減小電機(jī)電流,使輸出電流不超過設(shè)定值。即最大輸出電流恒定在設(shè)定點(diǎn)。設(shè)定值由鍵盤設(shè)定,以便調(diào)試。1.5 過流保護(hù):由于MCU單片機(jī)A/D采樣速度的因素造成輸出電流大于設(shè)定值,在這種情況下,設(shè)定一個(gè)保護(hù)值,關(guān)閉輸出,一般設(shè)定為大于限流值23A。此值應(yīng)由鍵盤設(shè)定。1.6 堵轉(zhuǎn)保護(hù)限流值保持13秒后,關(guān)閉輸出。1.7 相角選擇60度/120度選擇,鍵盤設(shè)定。1.8 1:1助力輸入
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集人事管理篇十篇
- 《證券交易流程》課件
- 《企業(yè)戰(zhàn)略管理》課件
- 新生引航共筑未來
- 學(xué)校三年級(jí)班主任工作總結(jié)5篇
- 2023年-2024年新員工入職安全教育培訓(xùn)試題附答案(突破訓(xùn)練)
- 大學(xué)畢業(yè)晚會(huì)策劃書合集15篇
- 2023年-2024年新入職員工安全教育培訓(xùn)試題附下載答案可打印
- 2024員工三級(jí)安全培訓(xùn)考試題(原創(chuàng)題)
- 保護(hù)環(huán)境的建議書(合集15篇)
- 英語-湖南省天一大聯(lián)考暨郴州市2025屆高考高三第二次教學(xué)質(zhì)量檢測(cè)(郴州二檢懷化統(tǒng)考)試題和答案
- 【MOOC期末】《形勢(shì)與政策》(北京科技大學(xué))期末慕課答案
- 營銷專業(yè)安全培訓(xùn)
- 2024年度五星級(jí)酒店廚師團(tuán)隊(duì)管理與服務(wù)合同3篇
- 廣東省廣州市花都區(qū)2024年七年級(jí)上學(xué)期期末數(shù)學(xué)試題【附答案】
- 期末測(cè)試模擬練習(xí) (含答案) 江蘇省蘇州市2024-2025學(xué)年統(tǒng)編版語文七年級(jí)上冊(cè)
- 上海市徐匯區(qū)2024-2025學(xué)年高一語文下學(xué)期期末試題含解析
- 安全風(fēng)險(xiǎn)隱患舉報(bào)獎(jiǎng)勵(lì)制度
- 江蘇省蘇州市2023-2024學(xué)年高三上學(xué)期期末考試 數(shù)學(xué) 含答案
- 線性代數(shù)知到智慧樹章節(jié)測(cè)試課后答案2024年秋貴州理工學(xué)院
- 建筑幕墻工程檢測(cè)知識(shí)考試題庫500題(含答案)
評(píng)論
0/150
提交評(píng)論