• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

利用废控制器做的测速器

春节期间闲来没事,用废控制器(PIC16F72版)做了一个测电机转速的东东.

原理是:检测单位时间内的霍耳换相数,再换算成每分钟转速.因目前市面上有32\40\46\56\70片磁钢的电机,只能用外部切换选择了.

、硬件约定:

RB口对应7段辉光管,BIT0-A……BIT6-G,不用小数点.

 

RC口对应位,动态显示,BIT7-千位……BIT4-个位.

 

RA口对应电机选择:

                  000-32片磁钢

                  001-40片磁钢

                  010-46片磁钢

                  011-56片磁钢

                  100-70片磁钢

RA口之3用来输入霍耳信号,RA口之4用来输出采样周期信号,以调试程序。

下面是用汇编语言做的:

;电动车无刷电机测速程序,动态驱动辉光管4只。
;用中断时间来控制采样周期,0.5--1秒刷新一次,预计精度为千分之一。

    PROCESSOR 16F72
    #INCLUDE
; RAM_VARIABLE
LS_1   EQU  0X25   ;临时寄存器
LS_2   EQU  0X26
LS_3   EQU  0X27
LS_4   EQU  0X28
LS_5   EQU  0X29
LS_6   EQU  0X2A
LS_7   EQU  0X2B
LS_8   EQU  0X2C
LS_9   EQU  0X2D
LJIA_1   EQU  0X2E
LJIA_2   EQU  0X2F
LJIA_3   EQU  0X30
LJIA_4   EQU  0X31      ;数据累加寄存器
XIANS_1   EQU  0X32  
XIANS_2   EQU  0X33  
XIANS_3   EQU  0X34    
XIANS_4   EQU  0X35      ;显示寄存器
DFEN_1    EQU  0X36      ;动态分配寄存器
FLAG      EQU  0X37      ;标旗寄存器
LS_INT1  EQU  0X39    ;中断保护寄存器1
LS_INT2  EQU  0X3A    ;中断保护寄存器2
JS_INT1  EQU  0X3B    ;中断计数器1
JS_INT2  EQU  0X3C    ;中断计数器2
JS_INT3  EQU  0X3D    ;中断计数器3
; =========================================================
        ORG    0X000
        NOP
        GOTO   PROGRAM
       
        ORG    0X4
        GOTO   ZHONGDUAN

        ORG    0X6
PROGRAM    ;程序开始
        CALL   CSH
        CLRWDT
LOOP5   CALL   SHONGX
        CALL   DINPOT_0
        BTFSC  FLAG,0
        GOTO   LOOP5
        CALL   ALLADD
        BTFSC  FLAG,3        ;单\双计数选择
        CALL   ALLADD
LOOP6   CALL   SHONGX
        CALL   DINPOT_1
        BTFSS  FLAG,1
        GOTO   LOOP6
        CALL   ALLADD
        BTFSC  FLAG,3        ;单\双计数选择
        CALL   ALLADD
        GOTO   LOOP5
        ORG    0X20
;===============================================================
CHABIAO     ;查表
        MOVWF  PCL
        RETLW  0X3F          ;00111111
        RETLW  0X6           ;00000110
        RETLW  0X5B          ;01011011
        RETLW  0X4F          ;01001111
        RETLW  0X66          ;01100110
        RETLW  0X6D          ;01101101
        RETLW  0X7D          ;01111101
        RETLW  0X7           ;00000111
        RETLW  0X7F          ;01111111
        RETLW  0X6F          ;01101111
        RETLW  0X79          ;01111001    ,E,表示超出量程
        RETLW  0X79
;==================================================================
CSH  ;初始化
        BCF    STATUS,RP0      ;体0
        CLRF   PORTA
        CLRF   PORTB
        CLRF   PORTC
        CLRF   CCP1CON        ;CCP模块设置(禁用)
        BSF    STATUS,RP0     ;体1
        CLRF   PIE1         ;外设中断禁止
        MOVLW  0XDF
        MOVWF  TRISA
        CLRF   TRISB
        CLRF   TRISC        ;I/O口设置
        MOVLW  0X88
        MOVWF  OPTION_REG         ;分频器设定
        MOVLW  0X7
        MOVWF   ADCON1          ;A口全设为数字口
        BCF    STATUS,RP0      ;体0
        CLRF   T1CON
        CLRF   SSPCON     ;串口禁止
        CLRF   CCPR1L
        MOVLW  0X5C
        MOVWF  0X22
        MOVLW  0X23
        MOVWF  FSR
LOOP1   CLRF   INDF       ;通用寄存器清零
        INCF   FSR,F
        DECFSZ 0X22,F
        GOTO   LOOP8
        BCF    STATUS,RP0
        MOVLW  0X80
        MOVWF  ADCON0     ;AD设置
        CLRF   TMR0
        MOVLW  0XA0
        MOVWF  INTCON    ;中断设置
        RETURN
;================================================================
SHONGX   ;送显
        INCF   DFEN_1,F      ;动态分配寄存器
        MOVLW  0X1
        SUBWF  DFEN_1,W
        BTFSC  STATUS,Z
        GOTO   ZT_1
        MOVLW  0X2
        SUBWF  DFEN_1,W
        BTFSC  STATUS,Z
        GOTO   ZT_2
        MOVLW  0X3
        SUBWF  DFEN_1,W
        BTFSC  STATUS,Z
        GOTO   ZT_3
        GOTO   ZT_4
ZT_1     ;状态1,个位送显
        MOVF   XIANS_1,W
        ADDLW  0X21
        CALL   CHABIAO
        MOVWF  PORTB
        MOVLW  0X10
        MOVWF  PORTC
        RETURN
ZT_2     ;状态2,十位送显
        MOVF   XIANS_2,W
        ADDLW  0X21
        CALL   CHABIAO
        MOVWF  PORTB
        MOVLW  0X20
        MOVWF  PORTC
        RETURN
ZT_3     ;状态3,百位送显
        MOVF   XIANS_3,W
        ADDLW  0X21
        CALL   CHABIAO
        MOVWF  PORTB
        MOVLW  0X40
        MOVWF  PORTC
        RETURN
ZT_4     ;状态4,千位送显
        MOVF   XIANS_4,W
        ADDLW  0X21
        CALL   CHABIAO
        MOVWF  PORTB
        MOVLW  0X80
        MOVWF  PORTC
        CLRF   DFEN_1
        RETURN
;======================================================
DINPOT_0     ;读输入信号,0有效
        MOVLW   0x8           ;连续判断8次                  
        MOVWF   LS_1                            
        CLRF    LS_2   
LOOP_1                         
        BTFSS   PORTA, 3                          
        INCF    LS_2, F                          
        DECFSZ  LS_1, F                        
        GOTO    LOOP_1                            
        MOVLW   0x8                             
        SUBWF   LS_2, W                         
        BTFSS   STATUS, Z                       
        GOTO    LOOP_2
        BCF     FLAG,0        ;表示读入0
        RETURN
LOOP_2
        BSF     FLAG,0        ;表示读入1 
        RETURN
;========================================================
DINPOT_1     ;读输入信号,1有效
        MOVLW   0x8           ;连续判断8次                  
        MOVWF   LS_3                            
        CLRF    LS_4   
LOOP_3                         
        BTFSC   PORTA, 3                          
        INCF    LS_4, F                          
        DECFSZ  LS_3, F                        
        GOTO    LOOP_3                            
        MOVLW   0x8                             
        SUBWF   LS_4, W                         
        BTFSS   STATUS, Z                       
        GOTO    LOOP_4
        BSF     FLAG,1        ;表示读入1
        RETURN
LOOP_4
        BCF     FLAG,1        ;表示读入0 
        RETURN 
;==========================================================
ALLADD      ;信号累集
        INCF    LJIA_1,F
        MOVLW   0XA
        SUBWF   LJIA_1,W
        BTFSS   STATUS,C
        RETURN
        INCF    LJIA_2,F     ;满十进一
        CLRF    LJIA_1
        MOVLW   0XA
        SUBWF   LJIA_2,W
        BTFSS   STATUS,C
        RETURN
        INCF    LJIA_3,F     ;满百进一
        CLRF    LJIA_2
        MOVLW   0XA
        SUBWF   LJIA_3,W
        BTFSS   STATUS,C
        RETURN
        INCF    LJIA_4,F     ;满千进一
        CLRF    LJIA_3
        MOVLW   0XA
        SUBWF   LJIA_4,W
        BTFSS   STATUS,C      ;上万则显示故障
        RETURN
        MOVLW   0XB
        MOVWF   LJIA_4
        RETURN 
;========================================================
ZHONGDUAN       ;中断
        MOVWF  LS_INT1
        SWAPF  STATUS,W
        BCF    STATUS,RP0
        MOVWF  LS_INT2        ;现场保护
        CLRWDT
        MOVF   PORTA,W
        ANDLW  0X7
        MOVWF  LS_5
        BTFSC  STATUS,Z
        GOTO   XUANZ_32
        MOVLW  0X1
        SUBWF  LS_5,W
        BTFSC  STATUS,Z
        GOTO   XUANZ_40
        MOVLW  0X2
        SUBWF  LS_5,W
        BTFSC  STATUS,Z
        GOTO   XUANZ_46
        MOVLW  0X3
        SUBWF  LS_5,W
        BTFSC  STATUS,Z
        GOTO   XUANZ_56
        MOVLW  0X4
        SUBWF  LS_5,W
        BTFSC  STATUS,Z
        GOTO   XUANZ_70
        GOTO   XUANZ_46        ;电机选择
;-------------------------------------------------------------
XUANZ_32    ;32片磁钢电机
        MOVLW  0X39
        MOVWF  LS_6
        MOVLW  0X38
        MOVWF  LS_7
        BSF    FLAG,3         ;单\双计数选择
        GOTO   JISHU          ;开始计数
XUANZ_40    ;40片磁钢电机
        MOVLW  0X2D
        MOVWF  LS_6
        MOVLW  0XC7
        MOVWF  LS_7
        BSF    FLAG,3         ;单\双计数选择
        GOTO   JISHU          ;开始计数
XUANZ_46    ;46片磁钢电机
        MOVLW  0X27
        MOVWF  LS_6
        MOVLW  0XCE
        MOVWF  LS_7
        BSF    FLAG,3         ;单\双计数选择
        GOTO   JISHU          ;开始计数
XUANZ_56    ;56片磁钢电机
        MOVLW  0X20
        MOVWF  LS_6
        MOVLW  0XB3
        MOVWF  LS_7
        BSF    FLAG,3         ;单\双计数选择
        GOTO   JISHU          ;开始计数
XUANZ_70    ;70片磁钢电机
        MOVLW  0X34
        MOVWF  LS_6
        MOVLW  0X51
        MOVWF  LS_7
        BCF    FLAG,3         ;单\双计数选择
        GOTO   JISHU          ;开始计数
;------------------------------------------------------------
JISHU      ;开始计数  
        BTFSC  FLAG,2         ;计数器满期标记
        GOTO   CAIJIXH        ;采集信号 
        INCF   JS_INT1,F
        BTFSS  STATUS,Z
        GOTO   HFXC           ;1号计数未满,返回
        INCF   JS_INT2,F        ;2号计数        
        MOVF   LS_6,W
        SUBWF  JS_INT2,W
        BTFSS  STATUS,C
        GOTO   HFXC           ;2号计数未满,返回 
        BSF    FLAG,2         ;2号计数已满,打上标记
        GOTO   HFXC
;-----------------------------------------------------------
CAIJIXH    ;采集信号
        INCF   JS_INT1,F
        MOVF   LS_7,W
        SUBWF  JS_INT1,W
        BTFSS  STATUS,C
        GOTO   HFXC            ;1号计数余数未满,返回
        MOVF   LJIA_1,W
        MOVWF  XIANS_1
        MOVF   LJIA_2,W
        MOVWF  XIANS_2
        MOVF   LJIA_3,W
        MOVWF  XIANS_3
        MOVF   LJIA_4,W
        MOVWF  XIANS_4
        CLRF   LJIA_1
        CLRF   LJIA_2
        CLRF   LJIA_3
        CLRF   LJIA_3
        CLRF   JS_INT1
        CLRF   JS_INT2
        BCF    FLAG,2         ;所用的计数器,标记位复位
        BTFSC  PORTA,5        ;用于验证采样周期
        GOTO   LOOP_9
        BSF    PORTA,5
        GOTO   HFXC
LOOP_9  BCF    PORTA,5      
HFXC    BCF    INTCON,2   ;恢复现场,出栈
        SWAPF  LS_INT2,W
        MOVWF  STATUS
        SWAPF  LS_INT1,F
        SWAPF  LS_INT1,W
        RETFIE
        END
            

 

全部回复(0)
正序查看
倒序查看
现在还没有回复呢,说说你的想法