电动车控制器C语言源代码Word格式.doc
- 文档编号:15519686
- 上传时间:2022-11-03
- 格式:DOC
- 页数:46
- 大小:77.50KB
电动车控制器C语言源代码Word格式.doc
《电动车控制器C语言源代码Word格式.doc》由会员分享,可在线阅读,更多相关《电动车控制器C语言源代码Word格式.doc(46页珍藏版)》请在冰豆网上搜索。
//相位变换
AutoHelpEN(1,0x1AA,200);
/*
第一个参数设定助力功能允许不否,1为允许,0为禁止
第二个参数设定助力力量(PWM占空比),数值范围:
0~0x355,数值越大,力量
越大
第三个参数设定助力时间,数值越大,时间越长
*/
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==>
0x9B0
推算电池电压为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);
软件控制最大速度
参数数值由0x00~0x20,数值越小速度越大,反之则越小
while
(1)
_nop_();
//AutoHelpEN(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端口初始化
voidInit_IO(void)
//------P0端口设置------//
P0M1=0xBE;
P0M2=0x01;
P0M1.YP0M2.Y=00设置I/O端口为普通双向模式
P0M1.YP0M2.Y=01设置I/O端口为推拉模式
P0M1.YP0M2.Y=10设置I/O端口为输入,高阻,模式
P0M1.YP0M2.Y=11设置I/O端口为开漏模式
//P0ID=0x78;
//设置四个AD端口0数字输入禁止
P0=0xFF;
//------P1端口设置------//
P1M1=0x1C;
P1M2=0xC0;
P1=0xFF;
//------P2端口设置------//
P2M1=0x01;
P2M2=0x1E;
P2=0xFF;
*初始化程序
voidInit(void)
unsignedchari;
//------PWM设置------//
//PWMP>
PWMn高电平,反之低电平
PWMPH=0X03;
PWMPL=0X55;
PWM0H=0X00;
PWM0L=0X00;
PWM1H=0X00;
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(ADCH>
0x60);
//-----相位检测-------//
while(P02==0)
Phase_Detect();
.
//------变量初始化------//
for(i=0;
i<
32;
i++)
Current_Buffer[i]=0;
20;
Speed_Buffer[i]=0;
16;
Voltage_Buffer[i]=0;
Current_P=0;
Speed_P=0;
Voltage_P=0;
;
Speed_SUM=0;
//PWM_MAX=0;
Current_SUM=0;
Voltage_SUM=0;
H_State=0;
Old_State=0;
PWM_Duty=0;
Count_Current=0;
Count_Speed=0;
Count_Voltage=0;
Speed_REQ=0;
Current_REQ=0;
Voltage_REQ=0;
//PWM_Duty=0;
PWM_Duty_min=0;
//*********************
KeepSpeed_Flag=0;
KS_Z1=0;
KS_Z2=0;
Motor_Speed=0x50;
AutoHelp_Flag=0;
Current_Max=0xcffe;
Speed_Low=0x0500;
//Speed_High=0x1c37;
//Speed_MAX=0x1c00;
//-----定时器的设置-----//
TH0=0x50;
TL0=0x50;
//设定定时器的初值
TH1=0xE0;
TL1=0xE0;
TMOD=0x22;
//T0选为定时器,八位,模式2,TL0自动加载TH0中的初值
CKCON&
=0X00;
//定时器选择为1/12系统时钟
ET0=1;
//允许定时器中断
TR0=1;
//启动定时器
ET1=1;
TR1=1;
//-----外部中断设定-----//
EX1=1;
//允许外部中断1
IT1=0;
//电平触収中断1
AUXR1|=0x04;
//打开ADC电路
EADC=1;
//允许ADC中断
ADCCON&
=0xE7;
//SettingsofTimer2capturemode
CKCON=0x60;
CAPCON0=0xA8;
CAPCON1=0x00;
T2MOD=0xF0;
IE1|=0x80;
//enablecapturemodeinterrupt
RCAP2L=0x00;
//自动重装载低位
RCAP2H=0x00;
//自动重装载高位
IE1|=0x40;
//EA=1;
//enableinterrupt
T2CON|=0x04;
//enabletimer2
//***************************//
KS_EN=1;
KS_Time=8;
//***************************//}
*ADC中断处理程序
voidADC_ISR(void)interrupt11
//UB=~UB;
UB=~UB;
//EADC=0;
ADC_Ready=1;
if(Current_REQ)//电流采样
if(Current_SUM>
Current_Buffer[Current_P])
Current_SUM-=Current_Buffer[Current_P];
Current_Buffer[Current_P]=ADCH;
Current_SUM+=ADCH;
Current_P++;
if(Current_P>
31)
if(Speed_REQ)//转把电压采样
if(Speed_SUM>
Speed_Buffer[Speed_P])
Speed_SUM-=Speed_Buffer[Speed_P];
Speed_Buffer[Speed_P]=ADCH;
Speed_SUM+=ADCH;
Speed_P++;
if(Speed_P==14)
if(Voltage_REQ)//电源电压采样
if(Voltage_SUM>
Voltage_Buffer[Voltage_P])
Voltage_SUM-=Voltage_Buffer[Voltage_P];
Volta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电动车 控制器 语言 源代码