您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机单片机控制的电动自行车驱动系统 正文
单片机控制的电动自行车驱动系统

单片机控制的电动自行车驱动系统

点击数:7501 次   录入时间:03-04 11:53:39   整理:http://www.55dianzi.com   PIC单片机
#include    <pIC.h>
//电动车双闭环程序,采用双闭环方式控制电机,以得到最好的zh转速性能,并且可以
//限制电机的最大电流。本应用程序用到两个CCP部件,其中CCP1用于PWM输出,以控
//制电机电压;CCP2用于触发AD,定时器TMR2、TMR1,INT中断,RB口电平变化中断,
//看门狗以及6个通用I/O口
#define AND  0xe0         //状态采集5,6,7位     
#define CURA 0X0a        //电流环比例和积分系数之和
#define CURB 0X09        //电流环比例系数
#define THL  0X6400        //电流环最大输出
#define FULLDUTY 0X0FF    //占空比为1时的高电平时间
#define SPEA 0X1d        //转速环比例和积分系数之和
#define SPEB 0X1c        //转速环比例系数
#define    GCURHILO 0X0330    //转速环最大输出
#define GCURH 0X33        //最大给定电流
#define GSPEH 0X67        //最大转速给定
#define TSON 0X38        //手柄开启电压1.1 V,TSON*2为刹车后手柄开启电压,即 
                         //2.2 V
#define VOLON 0X4c        //低电压保护重开电压3.0 V即33 V
#define VOLOFF 0X49        //低电压保护关断电压2.86 V即31.5 V
volatile unsigned char DELAYH,DELAYL,oldstate,speed,
    speedcount,tsh,count_ts,count_vol,gcur,currenth,
    voltage;                    //寄存器定义
static bit sp1,spe,ts,volflag,spepid,lowpower,
    off,shutdown,curpid;        //标志位定义
static volatile unsigned char new[10]={0xaf,0xbe,0xff,0x7e,0xcf,
    0xff,0xd7,0x77,0xff,0xff};    //状态寄存器表
//------------PIC16F877初始化子程序------------
void INIT877()
{    
    PORTC=0X0FF;            //关断所有MOSFET
    TRISC=0X02;            //设置C口输出
    PIE1=0X00;            //中断寄存器初始化,关断所有中断
    TRISA=0XCF;            //设置RA4,RA5 输出
    TRISB=0XEF;            //RB 口高三位输入,采集电机三相的霍尔信号
    PORTC=new[(PORTB&AND)>>5];    //采集第一次霍尔信号,并输出相应的信号,导通
//两个MOS管
    T2CON=0X01;            //TMR2 4分频
    CCPR1L=0X0FF;        //初始时PWM输出全高
    CCP1CON=0X0FF;        //CCP1设置为PWM方式
    CCP2CON=0X0B;        //CCP2设置为特殊方式,以触发AD
    ADCON0=0X81;            //AD时钟为32分频,且AD使能,选择AN0通道采集手
//柄电压    
    TMR2=0X00;            //TMR2寄存器初始化
    TMR1H=0X00;            //TMR1寄存器初始化
    TMR1L=0X00;
    T1CON=0X00;            //TMR1为1分频
    CCPR2H=0X08;
    CCPR2L=0X00;            //电流采样周期设置为TAD=512 μs
    PR2=0XC7;            //PWM频率设置为5 kHz
    ADCON1=0X02;            //AD结果左移
    OPTION=0XFB;            //INT上升沿触发
    TMR2ON=1;            //PWM开始工作
    INTCON=0XD8;            //中断设置GIE=1,PEIE=1,RBIE=1
    ADIE=1;                //AD中断使能
    speedcount=0x00;        //转速计数寄存器
    speed=0x7f;            //转速保持寄存器
    spe=1;                //低速标志位
    sp1=1;                //低速标志位
    oldstate=0x0ff;        //初始状态设置,区别于其他状态
    count_ts=0x08;        //电流采样8次,采集1次手柄
    count_vol=0x00;        //采样256次手柄,采集1次电池电压
    ts=1;                //可以采集手柄值的标志位
    ADGO=1;                //AD采样使能
    TMR1ON=1;            //CCP2部件开始工作
}
//------------延时子程序---------------
#pragma interrupt_level 1
void DELAY1(x)
char x;
{
    DELAYH=x;            //延时参数设置
#asm
DELAY2    MOVLW    0X06
    MOVWF    _DELAYL
DELAY1    DECFSZ    _DELAYL
    GOTO    DELAY1
    DECFSZ    _DELAYH
    GOTO    DELAY2
#endasm
}
//-----------状态采集子程序----------------------
void sample()
{
    char state1,state2,state3,x;
    do    {
        x=1;

[1] [2] [3] [4]  下一页


本文关键字:单片机  电动自行车  PIC单片机单片机-工控设备 - PIC单片机