微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 16F876控制的电动自行车驱动系统源程序

16F876控制的电动自行车驱动系统源程序

时间:11-13 来源:互联网 点击:
16F876控制电动自行车驱动系统源程序

LIST P=16F876

#INCLUDE P16F876.INC

;以下采用块定义的方法定义单片机内部寄存器

CBLOCK 0X20 ;自定义寄存器从0X20开始

FLAG1 ;FLAG1作为标志寄存器

VOLTAGEH ;电池电压高位寄存器

VOLTAGEL ;电池电压低位寄存器

TSH ;手柄电压高位寄存器

TSL ;手柄电压低位寄存器

STATE1 ;霍尔信号采样暂存器1

STATE2 ;霍尔信号采样暂存器2

STATE3 ;霍尔信号采样暂存器3

DELAY ;延时计数器

COUNT_VOL ;低电压采样次数计数器

ACCaLO ;ACCa~ACCd为运算用的寄存器

ACCaHI

ACCbLO

ACCbHI

ACCcLO

ACCcHI

ACCdLO

ACCdHI

TEMP ;临时寄存器

TEMP1 ;临时寄存器(中断用)

SIGN ;符号寄存器

COUNT ;临时寄存器

W_STACK ;中断时用于暂存W寄存器值

ST_STACK ;中断时用于暂存STATUS寄存器值

ENDC

;***********标志寄存器位定义以及程序中常数定义***********

CONSTANT VOLTAGE=0 ;采电池电压标志位

CONSTANT PWM=1 ;输出下一次PWM信号标志位

CONSTANT LOWPOWER=2 ;低电压标志位

CONSTANT SHUTDOWN=3 ;刹车标志位

CONSTANT OFF=4 ;复位标志位

CONSTANT AND=0XE0 ;AND用于获取有效霍尔信号

CONSTANT FULLPWM=0XFF ;当PWM输出全高时,输入CCPR1L中的值

CONSTANT VOLOFFH=0X02 ;当电池电压低于24AH时, 低压保护2.86 V/31.5 V

CONSTANT VOLOFFL=0X4A

CONSTANT VOLONH=0X02 ;当电池电压大于266H时,允许电机重开3V/33V

CONSTANT VOLONL=0X66

CONSTANT TSONH=0X01 ;刹车后手柄复位值低于133H,则允许电机重新启动

CONSTANT TSONL=0X33

;***复位矢量入口(单片机复位时,PC指针指向程序存储器0X0000单元)***

ORG 0X0000

START GOTO MAIN ;复位后程序进入主程序

;***中断矢量入口程序(PIC单片机的中断矢量入口为0X0004)***

ORG 0X0004 ;中断矢量入口

BTFSC INTCON,RBIF ;是否为RB口电平变化中断?

GOTO SAMPLERB ;是,进入RB口电平变化中断服务程序

BTFSC PIR1,ADIF ;是否为AD采样中断

GOTO AD ;是,进入AD中断服务程序

BTFSC INTCON,INTF ;是否为刹车中断

GOTO BRAKE ;是,刹车中断处理

RETFIE ;如都不是,则中断返回

;************逆变桥输出控制表*************

;逆变桥输出控制表,其输出对应6种状态,霍尔信号来自B口RB7、RB6、RB5,C口输出低电平有

;效,其中RC1,RC2不作为触发电路输出口,故表中使其为高电平

ORG 0X0020 ;表程序从0X0020单元开始存放(也可以不从这开始)

OUT_TABLE

ADDWF PCL,1

RETLW 0X0AF ;如霍尔信号为0、0、0,则使RC4、RC6为低电平

RETLW 0X0BE ;如霍尔信号为0、0、1,则使RC0、RC6为低电平

RETLW 0X0FF ;没有为0、1、0的霍尔信号对应电机状态

RETLW 0X07E ;如霍尔信号为0、1、1,则使RC0、RC7为低电平

RETLW 0X0CF ;如霍尔信号为1、0、0,则使RC4、RC5为低电平

RETLW 0X0FF ;没有为1、0、1的霍尔信号对应电机状态

RETLW 0X0D7 ;如霍尔信号为1、1、0则使RC3、RC5为低电平

RETLW 0X077 ;如霍尔信号为1、1、1则使RC3、RC7为低电平

;***************主程序*****************

ORG 0X0100 ;主程序从0X0100单元开始存储

MAIN

MOVLW 0X0FF ;由于C口上电复位值不确定,必须先关闭所有MOS管

MOVWF PORTC

BSF STATUS,RP0 ;选择存储体1

MOVLW 0X02 ;设置RC1为输入口,其它为输出口,其中RC2为PWM

MOVWF TRISC ;输出口,其它位为触发信号输出

BCF STATUS,RP0 ;选择存储体0

CLRF PIR1 ;清所有中断标志位

CLRF INTCON ;禁止所有中断

MOVLW 0X01 ;设置TMR2预分频值为4

MOVWF T2CON

MOVLW FULLPWM ;初始化PWM工作循环寄存器,使PWM占空比为1

MOVWF CCPR1L ;输出电压为零

MOVLW 0XFF ;设置CCP1工作于PWM方式

MOVWF CCP1CON

MOVLW 0X0B ;CCP2工作于特殊事件触发方式,用作AD采样周期寄存 MOVWF CCP2CON ;器

MOVLW 0X081 ;选择AD转换时钟为32分频,选择AN0通道,并使AD

MOVWF ADCON0 ;转换允许

CLRF TMR2 ;TMR2计数器清零

CLRF TMR1H ;TMR1计数器清零

CLRF TMR1L

CLRF T1CON ;TMR1预分频为1,关闭振荡器,工作于定时工作方式

MOVLW 0X08 ;初始化AD采样周期寄存器,T=512 μs

MOVWF CCPR2H

MOVLW 0X00

MOVWF CCPR2L

BSF STATUS,RP0 ;选择存储体1

MOVLW 0XEF ;RB口高3位用于采样霍尔信号,RB0为刹车中断,设置为

MOVWF TRISB ;输入,其它未用

MOVLW 0XC7 ;初始化PWM频率为5 kHz

MOVWF PR2

MOVLW 0X082 ;AD采样结果右移,RA口引脚均为模拟输入

MOVWF ADCON1

BSF OPTION_REG,INTEDG ;选择INT在下降沿产生中断

BCF STATUS,RP0

CALL SAMPLE ;确定当前转子位置

CALL OUTP

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top