您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机电动单车主板源代码和电路图 (PIC16F876制作) 正文
电动单车主板源代码和电路图 (PIC16F876制作)

电动单车主板源代码和电路图 (PIC16F876制作)

点击数:7544 次   录入时间:03-04 12:01:58   整理:http://www.55dianzi.com   PIC单片机
电动单车主板源代码和电路图 (PIC16F876制作)

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 OUTPUT ;根据采得的状态值触发相应的MOSFET
MOVLW 0X0D8 ;开总中断、外围中断、INT中断和RB口电平变化中断允
MOVWF INTCON ;许
BCF PIE2,CCP2IE ;CCP2中断禁止
BSF PIE1,ADIE ;打开AD采样中断
CLRF FLAG1 ;清标志位寄存器
CLRF COUNT_VOL ;清电池电压采样计数器
BSF T1CON,TMR1ON ;开CCP2,对手柄进行等间隔采样
BSF T2CON,TMR2ON ;开CCP1
RETEST BTFSS FLAG1,PWM ;TS采样完毕?
GOTO NEXT1 ;没有,转NEXT1
CALL OUT_PWM ;TS采样完毕,送出相应的PWM信号
BCF FLAG1,PWM ;清PWM允许标志
NEXT1 BTFSS FLAG1,LOWPOWER;电压采样完毕?
GOTO NEXT2 ;没有转NEXT2
CALL POWER ;是,调用电压保护子程序处理数据
BTFSC FLAG1,OFF ;是否需要复位?
GOTO MAIN ;是, 单片机 复位
NEXT2 BTFSS FLAG1,SHUTDOWN;刹车中断到来?
GOTO RETEST ;否,回转RETEST
CALL BRAKEON ;是,调用刹车处理子程序
CLRWDT
BTFSC FLAG1,OFF ;OFF=0?
GOTO MAIN ;否, 单片机 复位
GOTO RETEST ;是,回转RETEST
;***************刹车处理子程序******************
BRAKEON BCF FLAG1,OFF ;清复位标志
BCF FLAG1,SHUTDOWN;是,清相应标志位
BTFSS PORTB,0 ;INT引脚仍为1?
RETURN ;否,中断是由干扰引起的,返回
BSF STATUS,RP0
BCF PIE1,ADIE ;禁止AD采样中断
BCF STATUS,RP0
BCF INTCON,INTE ;关RB0中断
MOVLW FULLPWM ;PWM输出全高
MOVWF CCPR1L
BCF T1CON,TMR1ON ;关闭手柄采样
BREAK2 BTFSC ADCON0,GO ;正在进行AD采样?
GOTO BREAK2 ;是,等待AD采样完毕
BCF ADCON0,CHS0
BCF ADCON0,CHS1 ;选择0采样通道,准备采样手柄电压
BCF PIR1,ADIF ;清AD采样中断标志位
MOVLW 0X06 ;延时
MOVWF COUNT
BREAK3 DECFSZ COUNT
GOTO BREAK3
BREAK5 BSF ADCON0,GO ;采样TS值
BREAK4 BTFSS PIR1,ADIF ;采样完毕?
GOTO BREAK4
BCF PIR1,ADIF
BCF STATUS,C 
MOVF ADRESH,0 ;当前TS值送被减数
MOVWF ACCbHI
BSF STATUS,RP0
MOVF ADRESL,0
BCF STATUS,RP0
MOVWF ACCbLO
MOVLW TSONH ;1.5 V所对应的采样值送减数
MOVWF ACCaHI
MOVLW TSONL
MOVWF ACCaLO
CALL D_sub ;当前TS值减1.5V
MOVLW FULLPWM
MOVWF CCPR1L
CLRWDT
BTFSS ACCbHI,7 ;当前电压值大于1.5V?

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


本文关键字:制作  电路图  源代码  PIC单片机单片机-工控设备 - PIC单片机

《电动单车主板源代码和电路图 (PIC16F876制作)》相关文章>>>