首页 单片机控制的电动自行车驱动系统部分程序

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

举报
开通vip

单片机控制的电动自行车驱动系统部分程序PAGE 机电之家(中国机电行业门户网) http://www.jdzj.com 单片机控制的电动自行车驱动系统部分程序(CHUNTIAN) 单片机控制的电动自行车驱动系统 14.4.4  各部分程序 LIST P=16F876 #INCLUDE P16F876.INC ;以下采用块定义的方法定义单片机内部寄存器 CBLOCK 0X20 ;自 定义寄存器从0X20开始 FL...

单片机控制的电动自行车驱动系统部分程序
PAGE 机电之家(中国机电行业门户网) http://www.jdzj.com 单片机控制的电动自行车驱动系统部分程序(CHUNTIAN) 单片机控制的电动自行车驱动系统 14.4.4  各部分程序 LIST P=16F876 #INCLUDE P16F876.INC ;以下采用块定义的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 定义单片机内部寄存器 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 ;如 都不是,则中断返回 ;************逆变桥输出控制 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf ************* ;逆变桥输出控制表,其输出对应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? GOTO BREAK5 ;是,重新采样 BTFSC PORTB,0 GOTO BREAK5 BSF FLAG1,OFF ;否,置相应的标 志位 RETURN ;返 回 ;***************开环PWM输出子程序**************** OUT_PWM BCF FLAG1,PWM ;清相应的标志位 MOVF TSH,0 ;将调速手柄采样 值送至被加数 MOVWF ACCaHI MOVF TSL,0 MOVWF ACCaLO MOVLW 0XFF ; FF1F补码为0XE1,即1.1 V MOVWF ACCbHI MOVLW 0X1F MOVWF ACCbLO CALL D_add BTFSS ACCbHI,7 ;TS>1.1V? GOTO PWM1 ;是,转PWM1 MOVLW FULLPWM ;否则输出全高 MOVWF CCPR1L RETURN PWM1 MOVLW 0XFD ;0X27B=3.1V MOVWF ACCbHI MOVLW 0X85 MOVWF ACCbLO CALL D_add BTFSC ACCbHI,7 ;TS>3.1V? GOTO PWM3 PWM2 CLRF CCPR1L BCF CCP1CON,4 BCF CCP1CON,5 RETURN PWM3 MOVLW 0X0FF ;1.1 V对应的采样值补码送 加数 MOVWF ACCbHI MOVLW 0X1F MOVWF ACCbLO CALL D_add ;TS-1.1V CLRF ACCaHI ;系数K=56=38H送 乘数 MOVLW 0X3F MOVWF ACCaLO CALL D_mpy ;得到放大128倍 的低电平时间K*(TS-1.1V) MOVF ACCcHI,0 ;将结果取出 MOVWF ACCaHI MOVF ACCcLO,0 MOVWF ACCaLO MOVLW 0X64 ;PWM 周期T减去低电平时间,得到高电平时间 MOVWF ACCbHI CLRF ACCbLO CALL D_sub BTFSC ACCbHI,7 ;低电平时间是否大于周期? GOTO PWM2 ;是,输出全压 RLF ACCbLO ;否 则,输出与低电平时间对应的高电平时间 RLF ACCbHI MOVF ACCbHI,0 ;D10~D2位送CCPR1L MOVWF CCPR1L BCF CCP1CON,5 ;D0位送CCP1CON5 BTFSC ACCbLO,7 BSF CCP1CON,5 BCF CCP1CON,4 ;D.1位送 CCP1CON4 BTFSC ACCbLO,6 BSF CCP1CON,4 RETURN ;返 回 ;****************刹车中断服务程序*************** BRAKE CALL PUSH ;保存现场 BCF STATUS,RP0 ;回 存储区0 BSF FLAG1,SHUTDOWN;置相应标志位 BCF INTCON,INTF ;清 中断标志位 CALL POP ;恢 复现场 RETFIE ;中 断返回 ;***************低电压保护处理子程序***************** POWER BCF FLAG1,LOWPOWER;清相应的标志位 MOVF VOLTAGEH,0 MOVWF ACCaHI MOVF VOLTAGEL,0 MOVWF ACCaLO MOVLW VOLOFFH MOVWF ACCbHI MOVLW VOLOFFL MOVWF ACCbLO CALL D_sub BTFSC ACCbLO,7 ;判断当前电池电压值是否低 于保护电压(32V) RETURN ;不 是,返回 BCF INTCON,INTE BCF T1CON,TMR1ON ;关闭电流采样 MOVLW FULLPWM MOVWF CCPR1L BSF STATUS,RP0 BCF PIE1,ADIE ;禁止AD采样中断 BCF STATUS,RP0 POWER3 BTFSC ADCON0,GO ;正在进行AD采样? GOTO POWER3 ;是,等待AD采样 完毕 BCF PIR1,ADIF ;清AD采样中断标 志位 BCF ADCON0,CHS0 BSF ADCON0,CHS1 ;选择电压采样通 道 MOVLW 0X06 ;延 时等待通道转换完成 MOVWF COUNT POWER4 DECFSZ COUNT GOTO POWER4 POWER6 BSF ADCON0,GO ;采样电池电压值 POWER5 BTFSS PIR1,ADIF ;采样完毕? GOTO POWER5 BCF PIR1,ADIF ;清AD中断标志位 BCF STATUS,C MOVF ADRESH,0 ;当前电压值送被加数 MOVWF ACCbHI BSF STATUS,RP0 MOVF ADRESL,0 BCF STATUS,RP0 MOVWF ACCbLO MOVLW VOLONH ;35V电压值送被 加数 MOVWF ACCaHI MOVLW VOLONL MOVWF ACCaLO CALL D_sub ;当前电压值减 35,与重开电压进行比较 MOVLW FULLPWM MOVWF CCPR1L CLRWDT BTFSC ACCbHI,7 ;当前电压值大于35? GOTO POWER6 ;否,重新采样 BSF FLAG1,OFF ;是,置相应的标 志位 RETURN ;返 回 ;***电机转子位置采样子程序,状态采样子程序,出口地址:STATE1*** SAMPLE MOVLW AND ;读RB口 ANDWF PORTB,0 ;分离出有效信息 MOVWF STATE1 ;暂存状态值 MOVLW 0X08 MOVWF DELAY DEL1 DECFSZ DELAY ;延时6 μs GOTO DEL1 MOVLW AND ;读 RB口 ANDWF PORTB,0 ;分离出有效信 息,并暂存 MOVWF STATE2 XORWF STATE1,0 ;与上一次状态值 相异或 BTFSC STATUS,Z RETURN ;两 个状态值相等则返回 MOVLW 0X06 ;否 则延时4 μs MOVWF DELAY DEL2 DECFSZ DELAY GOTO DEL2 MOVLW AND ;读 RB口 ANDWF PORTB,0 ;提取有效信息并 暂存 MOVWF STATE3 XORWF STATE1,0 ;与第一次状态相 同吗? BTFSC STATUS,Z RETURN ;相 同则返回 MOVF STATE2,0 ;否则再与第二次 状态相比较 XORWF STATE3,0 BTFSS STATUS,Z GOTO SAMPLE ;三次状态均不相 同则重新采样 MOVF STATE2,0 ;第三次状态与第 二次相同,则将正确状态赋予STATE1并 MOVWF STATE1 ;返回 RETURN ;************** MOSFET触发信号输出子程序************** OUTPUT SWAPF STATE1,1 ;STATE1寄存器高低半字节互 换 BCF STATUS,C ;清C位,并将 STATE1寄存器左移一位 RRF STATE1,0 ;将 采样所得结果放至W低三位 CALL OUT_TABLE ;查表获得输出值 MOVWF PORTC ;将输出值输出至 RC口 RETURN ;*************** RB口电平变化中断服务程序************** SAMPRB CALL PUSH ;现场保护 BCF STATUS,RP0 CALL SAMPLE ;采样RB口状态 CALL OUTPUT ;根据RB口状态触 发相应的MOSFET CALL POP ;恢 复现场 BCF INTCON,RBIF ;清 RB口电平变化中断标志 RETFIE ;中 断返回 ;************ AD采样中断服务程序*************** AD CALL PUSH ;保护现场 BTFSC FLAG1,VOLTAGE ;是电压采样? GOTO SET_VOL ;是,作相应的处 理 SET_TS BCF ADCON0,CHS0 ;AD采样值是TS,则选择1采 样通道 INCF COUNT_VOL ;电压采样周期寄 存器值加1 BTFSS STATUS,Z ;电压采样周期到? GOTO AD4 BCF ADCON0,CHS0 ;是,选择2采样 通道 BSF ADCON0,CHS1 BSF FLAG1,VOLTAGE ;置相应的标志位 AD4 BCF PIR1,ADIF ;清AD中断标志 MOVF ADRESH,0 ;采样值送寄存器暂存 MOVWF TSH BSF STATUS,RP0 MOVF ADRESL,0 BCF STATUS,RP0 MOVWF TSL BSF FLAG1,PWM BTFSS FLAG1,VOLTAGE ;是否需要进行电压采样? GOTO AD6 MOVLW 0X05 ; 是,延时后采样电压 MOVWF TEMP1 AD5 DECFSZ TEMP1 GOTO AD5 BSF ADCON0,GO AD6 CALL POP ;恢 复现场,中断返回 RETFIE SET_VOL BCF ADCON0,CHS1 ;如果采样值为电 压值,则选择0通道 BCF ADCON0,CHS0 BCF PIR1,ADIF ;清中断标志位 BCF FLAG1,VOLTAGE ;清相应标志位 MOVF ADRESH,0 ;将采样结果放入被减数寄存 器 MOVWF VOLTAGEH BSF STATUS,RP0 MOVF ADRESL,0 BCF STATUS,RP0 MOVWF VOLTAGEL BSF FLAG1,LOWPOWER;是,置相应标志位 CALL POP ;中 断返回 RETFIE ;**************中断保护现场子程序****************** PUSH MOVWF W_STACK ;暂存W寄存器 MOVF STATUS,0 ;暂存STATUS寄存器 MOVWF ST_STACK RETURN ;子 程序返回 ;**************中断恢复现场子程序************** POP MOVF ST_STACK,0 ;恢复STATUS寄存 器值 MOVWF STATUS MOVF W_STACK,0 ;恢复W寄存器值 RETURN ;子 程序返回 ;**************初始化子程序**************** SETUP MOVLW  .15 ;初始化TEMP MOVWF  TEMP MOVF  ACCbHI,0 ;ACCb送ACCd MOVWF  ACCdHI MOVF  ACCbLO,0 MOVWF  ACCdLO CLRF  ACCbHI ;清ACCb CLRF  ACCbLO RETLW  0 ;**********乘除法运算确定结果符号子程序********** S_SIGN MOVF  ACCaHI,0 ;ACCaHI异或ACCbHI,结果送SIGN单元 XORWF  ACCbHI,0 MOVWF  SIGN BTFSS  ACCbHI,7 ;ACCb为负? GOTO  CHEK_A ;否,检查ACCa CALL NEG_B CHEK_A BTFSS  ACCaHI,7 ;ACCa为负? RETLW  0 ; ACCa和ACCb均为负,返回 GOTO  NEG_A ;ACCa为负,取补 GOTO MAIN END ;程序结束 13
本文档为【单片机控制的电动自行车驱动系统部分程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_777897
暂无简介~
格式:doc
大小:47KB
软件:Word
页数:13
分类:互联网
上传时间:2012-02-06
浏览量:22