您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机单片机PICl6F72电瓶车控制器程序 正文
单片机PICl6F72电瓶车控制器程序

单片机PICl6F72电瓶车控制器程序

点击数:7287 次   录入时间:03-04 11:54:00   整理:http://www.55dianzi.com   PIC单片机
      单片机 PICl6F72是目前电瓶车控制器主流控制芯片,配合2只74HC27(3输入或非门电路);1只74HC04D(反相器);1只74HC08D(双输入与门)和一片LM358(双运放),组成一款比较典型的无刷电瓶车控制器,具有60°和120°驱动模式自动切换功能,其基本组成框图见图l。实物测绘原理图见图2(图中数据除注明外,均为开锁停车状态数据)。 

一、 电路简介与自检

开通电门锁,48V电瓶直流电经电门锁线输入到控制器,一路经R3、R13、R4等送入U6的③脚作电瓶欠压检测用,另一路送入U13、U14、U15输出+15V和+5V给IC和末级驱动供电。 单片机 PICl6F72的⑨、⑩脚外接16MHz晶体,①脚外接R13、C25组成复位电路,电门锁开锁,单片机得电工作后即进入初始化自检状态,它主要检测:

1.由R3、R73、R4、R11、C2l等组成的电池欠压检测电路(典型值U6的③脚输入3.8V)。

2.由R5、R6、U1等组成的末级电流检测和过流保护电路(正常值Ul的⑦脚输出0V,①脚输出约3.6V)。

3.转把复位信号(正常值U6的⑥脚输入约0.8V的低电平)。

4.刹车复位信号(正常值U6的⑦脚输入4.8V高电平)。

5.电机霍尔元件检测到的无刷电机相位信号(正常时至少有一根霍尔线输入为4.1V,其他为0V)。

自检后的状态由LED2显示结果,以下是参照值(具体显示与 单片机 的程序设计有关)。

闪l停l--自检正常通过 

闪2停l--欠压

闪3停l--LM358故障

闪4停1--电机霍尔信号故障

闪5停l--下管故障

闪6停l--上管故障

闪7停1--过流保护

闪8停l--刹车保护

闪9停1--手把地线断开

闪10停1--手把信号和手把电源线短路 

闪l停11--上电时手把信号未复位

若自检正常通过,当转动转把时,U6根据转把输出电压的大小,将相应脉冲宽度的载波信号与三路驱动上下管的换相导通信号混合,从而达到控制无刷电机速度的目的,不同的速度对应不同的电机电流,同时行驶速度与电机换相频率成正比。

电路中,末级功率管V1和V2,V3和V4分别为无刷电机U相的上、下路驱动管;V5和V6,V7和V8分别为无刷电机V相的上、下路驱动管;V9和V10,Vll和V12分别为无刷电机W相的上、下路驱动管。U2为下管驱动IC,U4为上管驱动IC;U3、U5为上、下管R55、R56(康铜丝)串接在末级功率管的地线上,因而末级功率管的电流变化会在R55、R56上产生压降,所以由R5、R6和Ul等组成的电流检测电路可以随时检测无刷电机电流的大小,避免过流损坏电机。由R3、R73、R4、R11、C21、U6等组成欠压保护电路,当蓄电池电压下降到设定值时,U6即停止输出,避免电池过度放电。此外U6分别为模拟三相交流电的6组上下功率管输入预先设定的换相信号,这6组上、下功率管必须按严格顺序依次导通和关闭,其次U6处理转把的调速电压并输出PWM(即脉冲宽度调制)信号和U6输出的换相信号在后级电路中混合叠加输出控制电压,去分别控制3路上、下功率管的导通和截止。

二、 故障检修

在检修时,首先要排除短路故障,特别是末级功率管。在电门锁一侧,可以断开电门锁插接件测电流,若为正常的约65mA则说明控制器前级无短路。

其次当无短路而电机不转时,要先检查初始化自检条件是否正常(如前面所述)。

检查电机霍尔元件好坏的一种简单方法:打开电门锁,用不带阻尼的指针式(下同)万用表交流10V挡分别测U6的?、?和?脚即电机霍尔的w、V和u相的输入端,用手慢慢转动电机轮,如果看见表上的指针在0~4V左右摆动,则说明电机霍尔元件基本正常。

检查控制器前级是否正常的方法,先要控制器自检通过,观察LED2即自检灯看出正常与否,若LED2闪一次停一次,说明自检通过,否则应检查自检灯指示的相关故障电路,自检正常通过后,月万用表交流10V挡测试U6的○26、○27和○28脚(即下管换相信号),转动转把使电机轮尽量旋转慢一点,若表针在O~4V左右摆动,再测U6的23、24和⑤脚(即上管换相信号),表针应在O~2V左右摆动。然后测U6的13脚(即PWM输出脚),此点电压随转把的转动而变化若为0V~4.8V,说明 单片机 U6输出基本正常 。

电机电流检测和保护电路由电流取样电咀R5、R6和U1等组成,当无刷电机电流增大到使Ul的②脚电压大于③脚约O.23V时,U1的①脚电压跳变至低电平,U6的21脚变为低电平, 单片机 进入过流保护状态。

PIC 单片机 控制的电动自行车驱动系统C程序

#include 
//电动车双闭环程序,采用双闭环方式控制电机,以得到最好的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  MOV LW 0X06
MOV WF _DELAYL
DELAY1 DECFSZ _DELAYL
GOTO DELAY1
DECFSZ _DELAYH
GOTO DELAY2
#endasm
}
//-----------状态采集子程序----------------------
void sample()
{
char state1,state2,state3,x;
do {
x=1;
state1=(PORTB&AND); //霍尔信号采集
DELAY1(x);
state2=(PORTB&AND);
}while(state1-state2); //当三次采样结果不相同时继续采集状态
if(state1-oldstate!=0) //看本次采样结果是否与上次相同,不同
//则执行
{oldstate=state1; //将本次状态设置为旧状态
state1=(oldstate>>5);
PORTC=new[state1]; //C 口输出相应的信号触发两个MOS 管

[1] [2]  下一页


本文关键字:单片机  控制器  程序  电瓶车  PIC单片机单片机-工控设备 - PIC单片机