
电动车控制器C语言源代码..doc
36页define _E_BIKE_W79E83X_C_#include "intrins.h"#include "E_BIKE_W79E83X.H"#include"W79E834.h"/****************************************************************************** 主函数******************************************************************************/void main(void){ Init(); // 初始化 Init_IO(); // 初始化端口 H_Sample(); // 霍尔信号采样 Phase_Change(); // 相位变换 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端口初始化******************************************************************************/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端口为输入(高阻)模式 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; 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) { H_Sample(); Phase_Detect(); } //------变量初始化------// for (i=0;i<32;i++) { Current_Buffer[i]=0; } for (i=0;i<20;i++) { Speed_Buffer[i]=0; } for (i=0;i<16;i++) { 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;// PWM_MAX=0; Count_Current=0; Count_Speed=0; Count_Voltage=0; Speed_REQ=0; Current_REQ=0; Voltage_REQ=0; ADC_Ready=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;// Settings of Timer2 capture mode CKCON=0x60; CAPCON0=0xA8; CAPCON1=0x00; T2MOD=0xF0; IE1 |= 0x80; // enable capture mode interrupt RCAP2L = 0x00; //自动重装载低位 RCAP2H = 0x00; //自动重装载高位 IE1 |= 0x40; //EA=1; // enable interrupt T2CON |= 0x04;//enable timer2 //***************************// KS_EN = 1; KS_Time = 8; //***************************//}/******************************************************************************* ADC中断处理程序******************************************************************************/void ADC_ISR。
