资源描述:
《第14章 单片机控制的电动自行车驱动系统.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、第14章单片机控制的电动自行车驱动系统14.4.4C语言程序#include//电动车双闭环程序,采用双闭环方式控制电机,以得到最好的zh转速性能,并且可以//限制电机的最大电流。本应用程序用到两个CCP部件,其中CCP1用于PWM输出,以控//制电机电压;CCP2用于触发AD,定时器TMR2、TMR1,INT中断,RB口电平变化中断,//看门狗以及6个通用I/O口#defineAND0xe0//状态采集5,6,7位#defineCURA0X0a//电流环比例和积分系数之和#defineCURB0X09//电流环比例系数#defi
2、neTHL0X6400//电流环最大输出#defineFULLDUTY0X0FF//占空比为1时的高电平时间#defineSPEA0X1d//转速环比例和积分系数之和#defineSPEB0X1c//转速环比例系数#defineGCURHILO0X0330//转速环最大输出#defineGCURH0X33//最大给定电流#defineGSPEH0X67//最大转速给定#defineTSON0X38//手柄开启电压1.1V,TSON*2为刹车后手柄开启电压,即//2.2V#defineVOLON0X4c//低电压保护重开电压3.0V即33V#de
3、fineVOLOFF0X49//低电压保护关断电压2.86V即31.5VvolatileunsignedcharDELAYH,DELAYL,oldstate,speed,speedcount,tsh,count_ts,count_vol,gcur,currenth,voltage;//寄存器定义staticbitsp1,spe,ts,volflag,spepid,lowpower,off,shutdown,curpid;//标志位定义staticvolatileunsignedcharnew[10]={0xaf,0xbe,0xff,0x7e,0
4、xcf,0xff,0xd7,0x77,0xff,0xff};//状态寄存器表//------------PIC16F877初始化子程序------------voidINIT877(){PORTC=0X0FF;//关断所有MOSFETTRISC=0X02;//设置C口输出PIE1=0X00;//中断寄存器初始化,关断所有中断TRISA=0XCF;//设置RA4,RA5输出TRISB=0XEF;//RB口高三位输入,采集电机三相的霍尔信号PORTC=new[(PORTB&AND)>>5];//采集第一次霍尔信号,并输出相应的信号,导通//两个MO
5、S管T2CON=0X01;//TMR24分频CCPR1L=0X0FF;//初始时PWM输出全高CCP1CON=0X0FF;//CCP1设置为PWM方式CCP2CON=0X0B;//CCP2设置为特殊方式,以触发ADADCON0=0X81;//AD时钟为32分频,且AD使能,选择AN0通道采集手//柄电压TMR2=0X00;//TMR2寄存器初始化TMR1H=0X00;//TMR1寄存器初始化TMR1L=0X00;T1CON=0X00;//TMR1为1分频CCPR2H=0X08;CCPR2L=0X00;//电流采样周期设置为TAD=512μsPR
6、2=0XC7;//PWM频率设置为5kHzADCON1=0X02;//AD结果左移OPTION=0XFB;//INT上升沿触发TMR2ON=1;//PWM开始工作INTCON=0XD8;//中断设置GIE=1,PEIE=1,RBIE=1ADIE=1;//AD中断使能speedcount=0x00;//转速计数寄存器speed=0x7f;//转速保持寄存器spe=1;//低速标志位sp1=1;//低速标志位oldstate=0x0ff;//初始状态设置,区别于其他状态count_ts=0x08;//电流采样8次,采集1次手柄count_vol=0
7、x00;//采样256次手柄,采集1次电池电压ts=1;//可以采集手柄值的标志位ADGO=1;//AD采样使能TMR1ON=1;//CCP2部件开始工作}//------------延时子程序---------------#pragmainterrupt_level1voidDELAY1(x)charx;{DELAYH=x;//延时参数设置#asmDELAY2MOVLW0X06MOVWF_DELAYLDELAY1DECFSZ_DELAYLGOTODELAY1DECFSZ_DELAYHGOTODELAY2#endasm}//----------
8、-状态采集子程序----------------------voidsample(){charstate1,state2,state3,x;do{x=