




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電動車控制器C語言源代碼. #define _E_BIKE_W79E83X_C_ #include intrins.h #include E_BIKE_W79E83X.H #includeW79E834.h /* * 主函數 */ void main(void) Init(); / 初始化 Init_IO(); / 初始化端口 H_Sample(); / 霍爾信號采樣 Phase_Change(); / 相位變換 AutoHelpEN(1,0x1AA,200); /* 第一個參數設定助力功能允許不否,1為允許,0為禁止 第二個參數設定助力力量(PWM占空比),數值范圍:00x355,數值越大,
2、力量越大 第三個參數設定助力時間,數值越大,時間越長 */ Keep_SpeedEN(1,0x20,6); /* 第一個參數設定定速巡航功能允許不否,1為允許,0為禁止 第二個參數設定定速巡航最低速設置 . . 第三個參數設定在巡航點保持多長時間后才進入巡航 */ Current_Lim(0xB48); /* 過流保護上限值設定 0xB00對應限電流最大大約為2.6A 0xB80對應限流值最大大約為3.8A */ LowVoltage_Lim(0x9B0); /* 欠壓保護下限值設定 電池電壓為47.9V時ADC采樣值為0xB6 = 0xB60 推算電池電壓為41V時的采樣值為0x9B = 0
3、x9B0 推算電池電壓為40V時的采樣值為0x98 = 0x980 */ EABS_Set(1,1); /* 第一個參數為滑行充電功能使能,1為允許,0為禁止 第二個參數為電剎車功能使能,1為允許,0為禁止 */ Speed_LimHW(0,0,0,1); /* 硬件控制最大速度 參數只能有一個為1。 第一個參數對應15km/h 第二個參數對應20km/h . . 第三個參數對應30km/h 第四個參數對應40km/h */ Speed_LimSW(0x01); /* 軟件控制最大速度 參數數值由0x000x20,數值越小速度越大,反之則越小 */ while(1) _nop_(); /Aut
4、oHelpEN(0,0x1AA,100); /Keep_SpeedEN(1,0x20,6); /Current_Lim(0xB50); /LowVoltage_Lim(0x9B0); /EABS_Set(0,0); /Speed_LimHW(0,0,0,1); /* * I/O端口初始化 */ void Init_IO(void) /-P0端口設置-/ P0M1=0xBE; . . P0M2=0x01; /* P0M1.Y P0M2.Y=00 設置I/O端口為普通雙向模式 P0M1.Y P0M2.Y=01 設置I/O端口為推拉模式 P0M1.Y P0M2.Y=10 設置I/O端口為輸入,高阻,
5、模式 P0M1.Y P0M2.Y=11 設置I/O端口為開漏模式 */ /P0ID=0x78; / 設置四個AD端口0數字輸入禁止 P0=0xFF; /-P1端口設置-/ P1M1=0x1C; P1M2=0xC0; P1=0xFF; /-P2端口設置-/ P2M1=0x01; P2M2=0x1E; P2=0xFF; /* * 初始化程序 */ void Init(void) unsigned char i; /-PWM設置-/ . . / PWMP PWMn 高電平,反之低電平 PWMPH=0X03; PWMPL=0X55; PWM0H=0X00; PWM0L=0X00; PWM1H=0X00
6、; PWM1L=0X00; PWM2H=0X00; PWM2L=0X00; PWMCON1=0XC7; / 打開PWM電路,三個PWM口反相輸出 PWMCON3=0xF0; /-飛車保護-/ EA=1; /*do ADCCON=1; ADCCON&=0xef; ADCCON|=0x08; ADC_Ready=0; while(ADC_Ready); while (ADCH0x60);*/ /-相位檢測-/ while(P02=0) H_Sample(); Phase_Detect(); . . /-變量初始化-/ for (i=0;i32;i+) Current_Bufferi=0; for
7、(i=0;i20;i+) Speed_Bufferi=0; for (i=0;iCurrent_BufferCurrent_P) Current_SUM -= Current_BufferCurrent_P; Current_BufferCurrent_P=ADCH; Current_SUM += ADCH; Current_P+; if(Current_P31) Current_P=0; if(Speed_REQ) / 轉把電壓采樣 Speed_REQ=0; if(Speed_SUMSpeed_BufferSpeed_P) Speed_SUM-=Speed_BufferSpeed_P; Sp
8、eed_BufferSpeed_P=ADCH; Speed_SUM+=ADCH; Speed_P+; . . if(Speed_P = 14) Speed_P=0; if(Voltage_REQ) / 電源電壓采樣 Voltage_REQ=0; if(Voltage_SUMVoltage_BufferVoltage_P) Voltage_SUM -= Voltage_BufferVoltage_P; Voltage_BufferVoltage_P=ADCH; Voltage_SUM += ADCH; Voltage_P+; if(Voltage_P15) Voltage_P=0; /PWM_A
9、DJ(); /UB=UB; /* * 定時器0中斷處理函數 */ / = Interrupt Cycle: 100uS = void T0M1_ISR(void) interrupt 1 /UB=UB; /UB=UB; ADC_Ready=0; Current_REQ=1; . . Speed_REQ=0; Voltage_REQ=0; ADCCON=2; Count_Speed+; KS_CNT+; AH_Count+; if(Count_Speed5)/17 ADCCON=4; Current_REQ=0; Speed_REQ=1; Count_Speed=0; Count_Voltage
10、+; if( Count_Voltage5)/50 ADCCON=3; Speed_REQ=0; Voltage_REQ=1; Count_Voltage=0; /* Keep Speed Setting */ KS_Finish(); /*Function Set*/ if(AH_Count = 100) AutoHelp(); / 自助力 AH_Count = 0; . . if(KS_CNT = 3000) KS_CNT = 0; Keep_Speed(); / 巡航定速 Volt_Low(); / 欠壓保護 if(P02=0) Brake_Setting(); / 剎車 ADCCON&
11、=0xef;ADCCON|=0x08; EADC=1; PWM_ADJ(); /* * 定時器1中斷處理函數 */ void T1M1_ISR(void) interrupt 3 _nop_(); /* * 定時器2捕獲模式中斷處理函數 */ void Timer2_ISR() interrupt 13 using 2 . . /*Motor Speed*/ Motor_Speed = TH2; TH2 = 0; TL2 = 0; H_Sample(); / 霍爾信號采集 Phase_Change(); / 相位變換 /* * 定時器2溢出中斷處理函數 */ void T2_ISR() int
12、errupt 8 TF2 = 0; Motor_Speed = 0x50; Block_Detect(); / 堵轉保護 /* * 外部中斷處理函數,過流中斷 */ void INT1_ISR() interrupt 2 CurrentOver_Count+; if(CurrentOver_Count = 5) / 防抖處理 . . PWM_Duty_min = 1; CurrentOver_Count = 0; /* * 定時器3中斷處理函數,采叏捕獲模式 */ void H_Sample(void) CAPCON1 &= 0xF8; H1=P12; H2=P07; H3=P20; do S
13、tate1=H12; State1+=H21; State1+=H3; _nop_(); _nop_(); State2=H12; State2+=H21; State2+=H3; while(State1!=State2); / 狀態(tài)去抖 H_State=State1; . . /* * 根據電機霍爾換向信號給出相應控制信號 * 上橋臂:VT,UT,WT * 下橋臂:VB,UB,WB */ void Phase_Change(void) if(EABS_Flag) if(!AutoHelp_Flag) UB = 1; VB = 1; WB = 1; _nop_(); UT = 1; VT =
14、 1; WT = 1; else if(PWM_Duty_min) UT=0;VT=0;WT=0; UB=1;VB=1;WB=1; / 電機停轉 else . . switch(H_State) case 6: / 110,V3,V4 VT=0;UT=0;VB=1;WB=1; _nop_(); WT=1;UB=0; break; case 2: / 010,V4,V5 case 7: UT=0;WB=0;VB=1;WB=1; _nop_(); VT=1;UB=0; break; case 3: / 011,V5,V6 UT=0;WT=0;UB=1;VB=1; _nop_(); VT=1;WB=
15、0; break; case 1: / 001,V6,V1 WT=0;VT=0;UB=1;VB=1; _nop_(); UT=1;WB=0; break; case 5: / 101,V1,V2 case 0: WT=0;VT=0;UB=1;WB=1; _nop_(); VB=0;UT=1; break; . . case 4: / 100,V2,V3 UT=0;VT=0;UB=1;WB=1; _nop_(); WT=1;VB=0; break; case 9: UT=0;VT=0;WT=0; UB=1;VB=1;WB=1; break; default:break; /*if(PWM_Dut
16、y_min) UT=0;VT=0;WT=0; UB=1;VB=1;WB=1; / 電機停轉 */ /* * 相位檢測程序 * 上橋臂:VT,UT,WT * 下橋臂:VB,UB,WB */ void Phase_Detect(void) WT=0;UT=0;VT=0; switch(H_State) . . case 6: / 110,V3,V4 UB=0;VB=1;WB=1; break; case 2: / 010,V4,V5 case 7: UB=0;VB=1;WB=1; break; case 3: / 011,V5,V6 UB=1;VB=1;WB=0; break; case 1: /
17、 001,V6,V1 UB=1;VB=1;WB=0; break; case 5: / 101,V1,V2 case 0: UB=1;VB=0;WB=1; break; case 4: / 100,V2,V3 UB=1;VB=0;WB=1; break; default:break; /* * PWM值轉換程序 * 在限流允許下,將轉把電壓ADC值轉換為PWMn的值 * 電流超過限流值時,做限流處理 . . */ void PWM_ADJ(void) /=沒有超過限流最大值的情冴=/ if(Current_SUM Current_Max) if(Speed_SUM Speed_Low) /-沒
18、有轉把電壓,由Speed_Low的值決定轉把電壓最小值-/ if(!KeepSpeed_Flag) if(!AutoHelp_Flag) / 定速,助力功能下電機正常轉動,否則電機停轉 /PWM_Duty=0; /PWM_Duty_min=1; / 停轉標志 /PWM_Duty_Max = 0; if(Motor_Speed 0x010) if(P02=1) if(EABS_SlipEN) EABS_Flag = 1; if(PWM_Duty_Max0x06F0) PWM_Duty_Max = 0x06E8; / 最大值限制 PWM_Duty_Max=PWM_Duty_Max1; / 由轉把電
19、壓轉換為PWMn的值 if(AutoHelp_Flag) PWM_Duty_Max=AH_Duty; / 助力下為PWMn賦值 EABS_Flag = 0; if(KeepSpeed_Flag) PWM_Duty_Max=KS_PWM_Duty; / 定速模式下為PWMn賦值 AutoHelp_Flag = 0; / 定速巡航狀態(tài)時無助力 if(PWM_Duty SP_Lim) PWM_Duty+; / 轉把電壓相對應的PWMn值緩慢增加 . . else if(PWM_Duty 3) PWM_Duty-; / 轉把電壓相對應的PWMn值緩慢減小 else PWM_Duty = 0; /=超過
20、限流最大值的情冴=/ else if(PWM_Duty 0x02) PWM_Duty-; / PWMn值減小 else PWM_Duty=0; PWM_Duty_H = PWM_Duty8; PWM_Duty_L = (PWM_Duty & 0x0FF); / 對應PWMn的值,高、低位, if (Power_Off) PWM_Duty_min = 1; / 欠壓保護 /PWM_Duty_H = 0x01; . . /PWM_Duty_L = 0x20; /測試之用 PWM_Setting(); /* * 過流保護上限值設定 * 0x1600對應限電流最大大約為2.6A * 0x1700對應限
21、流值最大大約為3.8A */ void Current_Lim(unsigned int CM) Current_Max = CM; /* * 欠壓保護程序 */ void Volt_Low(void) if(Voltage_SUM 200) Power_Off=1; else . . Power_Off=0; Voltage_Count = 0; /* * 欠壓保護下限值設定 * 電池電壓為47.9V時ADC采樣值為0xB6 = 0xB60 * 推算電池電壓為41V時的采樣值為0x9B = 0x9B0 * 推算電池電壓為40V時的采樣值為0x98 = 0x980 */ void LowVol
22、tage_Lim(unsigned int CM) Voltage_Min = CM; /* * 軟件控制最大速度 * 分為四個檔位1,2,3,4分別對應15km/h,20km/h,30km/h,40km/h */ void Speed_LimSW(unsigned char SG) SP_Lim = SG; . . /* * 硬件控制最大速度 * 分為四個檔位SG1,SG2,SG3,SG4分別對應15km/h,20km/h,30km/h,40km/h */ void Speed_LimHW(bit SG1,bit SG2,bit SG3,bit SG4) SP_Lim = 0x01; if(
23、SG4) SP_Lim = 0x01; else if(SG3) SP_Lim = 0x03; else if(SG2) SP_Lim = 0x05; else if(SG1) SP_Lim = 0x08; /* * 堵轉保護程序 */ void Block_Detect(void) if(Current_SUM Current_Max - 0x80) Block_CNT+; . . else Block_CNT = 0; if(Block_CNT = 20) PWM_Duty_min = 1; Block_Flag = 1; AutoHelp_Flag = 0; KeepSpeed_Flag
24、 = 0; UT=0;VT=0;WT=0; UB=1;VB=1;WB=1; / 電機停轉 /* * 剎車功能 */ void Brake_Setting(void) unsigned char i; KeepSpeed_Flag = 0; AutoHelp_Flag = 0; PWM_Duty_min = 1; Block_Flag = 0; UB = 1; VB = 1; WB = 1; Speed_SUM = 0; for(i=0;i20;i+) . . Speed_Bufferi = 0; if(EABS_BrakeEN) / 電子剎車 if(Speed_SUM Speed_Low) P
25、WM_Duty_H = 0x01; PWM_Duty_L = 0x00; EABS_Flag = 1; UT = 1; VT = 1; WT = 1; else UT = 0; VT = 0; WT = 0; PWM_Setting(); /* * 滑行充電功能 */ /*void Slip_Setting(void) . . if(EABS_SlipEN) UB = 1; VB = 1; WB = 1; _nop_(); EABS_Flag = 1; UT = 1; VT = 1; WT = 1; /* * 電剎車功能使能 * EBS_EN:滑行充電功能使能 * EBB_EN:電剎車功能使能
26、 */ void EABS_Set(bit EBS_EN,bit EBB_EN) EABS_SlipEN = EBS_EN; EABS_BrakeEN = EBB_EN; /* * 1:1自動程序助力 * 電動車中軸速度傳感器(單開關霍爾信號),當轉動中軸時產生高低電平信號。 * 當芯片連續(xù)接收到6個占空比大于50%的方波信號時輸出驅動信號, . . * PWM打開為50% */ void AutoHelp(void) if(!Block_Flag) PWM_Duty_min = 0; /-設定轉把不轉時才有助力功能-/ if(Speed_SUM 40) / 低電平超過一定值后認為沒有助力 A
27、H_CNTH=0; / 高電平計數值清零 AH_CNTL=0; / 低電平計數值清零 AH_CT=0; / 占空比大于50%的方波,脈沖,計數值清零 else / 狀態(tài)改變 if(AH_CNTHAH_CNTL) AH_CT+; / 占空比大于50%的方波,脈沖,計數值贈加 . . else AH_CT=0; / 不是連續(xù)大于50%的方波 AH_CNTL=0; SenBak=P01; / 保存狀態(tài) if(AH_CT=6) / 連續(xù)3個占空比大于50%的方波,脈沖, AutoHelp_Flag=1; / 啟動助力標志 AH_CT=0; / 占空比大于50%的方波,脈沖,計數值清零 AH_CNTL=
28、0; / 低電平計數值清零 AH_CNTH=0; / 高電平計數值清零 AH_KT=AH_Time; / 只有一定的助力時間 /助力端口為高電平/ else if(P01=SenBak) AH_CNTH+; / 高電平計數 if(AH_CNTH60) / 持續(xù)高電平時間過長則認為同樣沒有助力 AH_CNTH=0; AH_CNTH=0; . . AH_CT=0; else SenBak=P01; AH_CNTH=0; / 高電平計數值清零 /-有轉把信號則關閉助力功能-/ else AH_CNTL=0; AH_CNTH=0; AH_CT=0; AutoHelp_Flag=0; if(AutoHelp_Flag=1) / 有助力存在 AH_KT-; if(AH_KT (Speed_Low + KS_LowSpeed) / 轉速在一定值之上時才可定速 if(Speed_SUM+0x4
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 6 A Day in the Life Section A 1a-Pronunciation教學設計2024-2025學年人教版英語七年級上冊
- 2《丁香結》教學設計2024-2025學年統(tǒng)編版語文六年級上冊
- 陜西電子信息職業(yè)技術學院《寒區(qū)水力計算》2023-2024學年第二學期期末試卷
- 山東司法警官職業(yè)學院《紀錄片創(chuàng)作與欣賞》2023-2024學年第二學期期末試卷
- 遼寧工業(yè)大學《成本管理》2023-2024學年第二學期期末試卷
- 集美大學《儲層沉積學》2023-2024學年第二學期期末試卷
- 廊坊職業(yè)技術學院《兒科護理學》2023-2024學年第二學期期末試卷
- 甘肅有色冶金職業(yè)技術學院《運動康復推拿》2023-2024學年第二學期期末試卷
- 河南開封科技傳媒學院《酒店質量管理》2023-2024學年第二學期期末試卷
- 江西工商職業(yè)技術學院《材料科學基礎應用研究》2023-2024學年第二學期期末試卷
- 《公平競爭審查條例》微課
- 《肺部疾病 案例分析-原發(fā)性肺癌》課件
- (高清版)WST 402-2024 臨床實驗室定量檢驗項目參考區(qū)間的制定
- 中英對照版-中文版-The-Dead-By-James-Joyces死者-詹姆斯-喬伊斯
- 清水河儲能電站施工方案設計
- 低溫絕熱液氧瓶充裝操作規(guī)程模版(2篇)
- (正式版)JBT 11517-2024 刮板取料機
- 大眾汽車使用說明書
- 小學科學湘科版五年級下冊全冊教案2023春
- 【冠心病探究文獻綜述2000字】
- 2024年學校法制副校長工作職責 法制副校長聘任書(5篇)
評論
0/150
提交評論