ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:26.27KB ,
资源ID:9179358      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9179358.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(电动车控制器C语言源代码.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

电动车控制器C语言源代码.docx

1、电动车控制器C语言源代码电动车控制器C语言源代码#defi ne _E_BIKE_W79E83X_C_ #i nclude intrin s.h#in clude E_BIKE_W79E83X.H #i ncludeW79E834.h/*主函数*/void ma in (void)Init(); /初始化In it_IO(); / 初始化端口H_Sample(); /霍尔信号采样Phase_Cha nge(); / 相位变换AutoHelpEN(1,0x1AA,200);/*第一个参数设定助力功能允许不否,1为允许,0为禁止第二个参数设定助力力量(PWM占空比),数值围:00x355,数值越大

2、力量 越大第三个参数设定助力时间,数值越大,时间越长*/Keep_SpeedEN(1,0x20,6);/*第一个参数设定定速巡航功能允许不否,1为允许,0为禁止 第二个参数设定定速巡航最低速设置第三个参数设定在巡航点保持多长时间后才进入巡航*/Curre nt_Lim(0xB48);/*过流保护上限值设定0xB00对应限电流最大大约为2.6A0xB80对应限流值最大大约为3.8A*/LowVoltage_Lim(0x9B0);/*欠压保护下限值设定电池电压为47.9V时ADC采样值为0xB6 = 0xB60推算电池电压为41V时的采样值为0x9B = 0x9B0推算电池电压为40V时的采样值为

3、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_();AutoHelpEN(0,0x1AA,100);Keep_SpeedEN(1,0x20,6);/Curr

4、e nt_Lim(0xB50);LowVoltage_Lim(0x9B0);EABS_Set(O,O);Speed_LimHW(0,0,0,1);/* I/O端口初始化*/void In it_IO(void)/P0 端口设置/P0M 仁 0xBE;P0M2=0x01;/*P0M1.Y P0M2.Y=00设置I/O端口为普通双向模式P0M1.Y P0M2.Y=01设置I/O端口为推拉模式P0M1.Y P0M2.Y=10设置I/O端口为输入,高阻,模式P0M1.Y P0M2.Y=11设置I/O端口为开漏模式*/P0ID=0x78; /设置四个AD端口 0数字输入禁止P0=0xFF;/P1 端口设

5、置/P1M 1=0x1C;P1M2=0xC0;P1=0xFF;/P2 端口设置/P2M1= 0x01;P2M2=0x1E;P2=0xFF;/*初始化程序*/void In it(void)un sig ned char i;/PWM 设置/ PWMP PWMn 高电平,反之低电平PWMPH=0X03;PWMPL=0X55;PWM0H=0X00;PWMOL=OXOO;PWM1H=0X00;PWM1L=0X00;PWM2H=0X00;PWM2L=0X00;PWMCON仁0XC7; /打开PWM电路,三个PWM 口反相输出PWMCON3=0xF0;/- 飞车保护 /EA=1;/*do ADCCON=

6、1;ADCCO N&=0xef;ADCCON|=0x08;ADC_Ready=0;while(ADC_Ready);while (ADCH0x60);*/- 相位检测/while(P02=0)H_Sample();Phase_Detect();.for (i=0;i32;i+)Curre nt_Bufferi=0;for (i=0;i20;i+)Speed_Bufferi=0;for (i=0;iCurre nt_BufferCurre nt_P)Current_SUM -= Current_BufferCurrent_P;Curre nt_BufferCurre nt_P=ADCH;Curr

7、e nt_SUM += ADCH;Curre nt_P+;if(Curre nt_P31)Curren t_P=0; if(Speed_REQ) /转把电压采样Speed_REQ=0;if(Speed_SUMSpeed_BufferSpeed_P) Speed_SUM-=Speed_BufferSpeed_P; Speed_BufferSpeed_P=ADCH;Speed_SUM+=ADCH;Speed_P+;if(Speed_P = 14)Speed_P=0;if(Voltage_REQ) /电源电压采样Voltage_REQ=0;if(Voltage_SUMVoltage_BufferVo

8、ltage_P)Voltage_SUM -= Voltage_BufferVoltage_P;Voltage_BufferVoltage_P=ADCH;Voltage_SUM += ADCH;Voltage_P+;if(Voltage_P15)Voltage_P=0;PWM_ADJ();UB=UB;/*定时器0中断处理函数*/ = In terrupt Cycle: 100uS =void T0M1_ISR(void) interrupt 1UB=UB;UB=UB;ADC_Ready=0;Curre nt_REQ=1;Speed_REQ=0;Voltage_REQ=0;ADCCON=2;Cou

9、n t_Speed+;KS_CNT+;AH_C oun t+;if(Cou nt_Speed5)/17ADCCON=4;Curre nt_REQ=0;Speed_REQ=1;Coun t_Speed=0;Coun t_Voltage+;if( Cou nt_Voltage5)/50ADCCON=3;Speed_REQ=0;Voltage_REQ=1;Cou nt_Voltage=0;/* Keep Speed Setti ng */KS_Fi nish();/*Fu nction Set*/if(AH_Cou nt = 100)AutoHelp(); / 自助力AH_C ount = 0;if

10、(KS_CNT = 3000)KS_CNT = 0;Keep_Speed(); / 巡航定速Volt_Low(); / 欠压保护if(P02=0)Brake_Sett in g(); / 杀V车ADCCO N&=0xef;ADCCON|=0x08;EADC=1;PWM_ADJ();/*定时器1中断处理函数*/void T1M1_ISR(void) interrupt 3 _nop_();*定时器2捕获模式中断处理函数*/void Timer2_ISR() in terrupt 13 us ing 2 .*Motor Speed*/Motor_Speed = TH2;TH2 = 0;TL2 =

11、0;H_Sample(); /霍尔信号采集Phase_Cha nge(); / 相位变换/*定时器2溢出中断处理函数*/void T2_ISR() in terrupt 8 TF2 = 0;Motor_Speed = 0x50;Block_Detect(); / 堵转保护*外部中断处理函数,过流中断*/void INT1_ISR() in terrupt 2 Curren tOver_C oun t+;if(Curre ntOver_Cou nt = 5) / 防抖处理PWM_Duty_min = 1;Curre ntOver_Cou nt = 0;/*定时器3中断处理函数,采叏捕获模式*/v

12、oid H_Sample(void) CAPCON1 &= 0xF8;H1= P12;H2=P07;H3=P20;doState 1= H12;State1+=H21;State1+=H3;_nop_();_nop_();State2=H12;State2+=H21;State2+=H3;while(State1!=State2); / 状态去抖H_State=State1;./*根据电机霍尔换向信号给出相应控制信号 *上桥臂:VT,UT,WT* 下桥臂:VB,UB,WB*/void Phase_Cha nge(void) if(EABS_Flag)if(!AutoHelp_Flag)UB =

13、 1;VB = 1;WB = 1;_nop_();UT = 1;VT = 1;WT = 1;else if(PWM_Duty_mi n)UT=O;VT=O;WT=O;UB=1;VB=1;WB=1; / 电机停转elseswitch(H_State)case 6: / 110,V3,V4VT=0;UT=0;VB=1;WB=1;_nop_();WT=1;UB=0;break;case 2: / ,V4,V5case 7:UT=0;WB=0;VB=1;WB=1;_nop_();VT=1;UB=0;break;case 3: / 011,V5,V6UT=0;WT=0;UB=1;VB=1;_nop_()

14、;VT=1;WB=0;break;case 1: / 001,V6,V1WT=0;VT=0;UB=1;VB=1;_nop_();UT=1;WB=0;break;case 5: / 101,V1,V2case 0:WT=0;VT=0;UB=1;WB=1;_nop_();VB=0;UT=1;break;case 4: / 100,V2,V3UT=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_Duty_m in)UT=0;VT=0;W

15、T=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,V4UB=0;VB=1;WB=1;break;case 2: / ,V4,V5case 7:UB=0;VB=1;WB=1;break;case 3: / 011,V5,V6UB=1;VB=1;WB=0;break;case 1: / 001,V6,V1UB=1;VB=1;WB=0;break;case 5: / 101,V1,V2c

16、ase 0:UB=1;VB=0;WB=1;break;case 4: / 100,V2,V3UB=1;VB=0;WB=1;break;default:break;/* PWM值转换程序*在限流允许下,将转把电压ADC值转换为PWMn的值*电流超过限流值时,做限流处理*/void PWM_ADJ(void)/=没有超过限流最大值的情冴=/if(Curre nt_SUM Curre nt_Max)if(Speed_SUM Speed_Low) /-没有转把电压,由Speed_Low的值决定转把电压最小值-/ if(!KeepSpeed_Flag)if(!AutoHelp_Flag) /定速,助力功能下电机正常转动,否则电机停转PWM_Duty=O;PWM_Duty_m in=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_Max

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1