⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 svpwm.asm

📁 用单片机开发的变频系统,可以代替市场上硬件SA4828的功能
💻 ASM
📖 第 1 页 / 共 2 页
字号:
LENTH            EQU  120           ;数据长度30
CurrentFrequency EQU  40H           ;记数单元
MaxFrequency     EQU  41H           ;最高转速单元
OverCurrent      BIT  00H           ;过电流标志位
StartState       EQU  42H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ORG   0000H
LJMP  MAIN
ORG   0003H
LJMP  EFINT
ORG   0300H
MAIN:
            MOV    SP,#60H
            MOV    P0,#0FFH
            SETB   EX0
            SETB   IT0
            SETB   EA
            CLR    OverCurrent
            MOV    MaxFrequency ,#32H            ;初始化最高转速为50Hz
SystemStart:MOV    P2,#0FFH                      ;开启电机,判断p2.6
            JB     P2^6, SystemStart             ;最高位D7表示方向,D6=0 启动,D6=1表示刹车.
RunStart:   SETB   P2^7
            JB     P2^7, ForwardRun              ;正转运行
            SJMP   BackwardRun                   ;反转运行

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;正转运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ForwardRun: MOV    DPTR,#TAB3
            MOV    StartState,#15H
            MOV    R0,#30                        ;脉冲30个,每个脉冲分为4小区间
            SETB   P2^6
            JB     P2^6,FNext
            SJMP   VoltFreqTrans
FNext  :    MOV    DPTR,#TAB2                    ;当收到停止程序,电机反向加电能耗制动
            MOV    StartState,#2AH
            MOV    R0,#30
            CLR    C
            MOV    A,CurrentFrequency
            SUBB   A,#15
            JC     SmallSpeed1
            LCALL  VoltFreqSpeed
            MOV   R0,#LENTH
            MOV   DPTR,#TAB3
            MOV   B,#2AH
            LCALL SELECTTAB
            LJMP   Stop
SmallSpeed1:LCALL  VoltFreqSpeed1
            MOV   R0,#LENTH
            MOV   DPTR,#TAB3
            MOV   B,#2AH
            LCALL SELECTTAB
            LJMP   Stop


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;反转运行程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BackwardRun:MOV   DPTR,#TAB2
            MOV   StartState,#2AH
            MOV   R0,#30                            ;脉冲30个,每个脉冲分为4小区间
            SETB  P2^6
            JB    P2^6,BNext
            SJMP  VoltFreqTrans
BNext  :    MOV   DPTR,#TAB3
            MOV   StartState,#15H
            MOV   R0,#30
            CLR   C
            MOV   A,CurrentFrequency
            SUBB  A,#15
            JC    SmallSpeed2
            LCALL VoltFreqSpeed

            MOV   R0,#LENTH
            MOV   DPTR,#TAB2
            MOV   B,#2AH
            LCALL SELECTTAB
            LJMP  Stop
SmallSpeed2:LCALL VoltFreqSpeed1
            MOV   R0,#LENTH
            MOV   DPTR,#TAB2
            MOV   B,#2AH
            LCALL SELECTTAB
            LJMP  Stop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;U/F转换程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VoltFreqTrans:
            MOV  P2,#0FFH
            MOV  CurrentFrequency,P2
            ANL  CurrentFrequency,#3FH
            CLR  C
            MOV  A,MaxFrequency            ; 50hz,最高频率
            SUBB A,CurrentFrequency        ;example CurrentFrequency=40hz,substact10hz
NextStep0:  CJNE A,#10,Step5040
Step5040:   JNC  NextStep1
            MOV  R1,A                     ;用于调整占空比
            MOV  R4,#01H
            AJMP common

NextStep1:  CJNE A,#20,Step4030
Step4030:   JNC  NextStep2
            ADD  A,#01H
            MOV  R1,A                     ;用于调整占空比
            MOV  R4,#01H
            AJMP common

NextStep2:  CJNE A,#25,Step3025
Step3025:   JNC  NextStep3
            ADD  A,#07H
            MOV  R1,A                     ;用于调整占空比
            MOV  R4,#03H
            AJMP common

NextStep3:  CJNE A,#35,Step2515
Step2515:   JNC  NextStep4
            MOV  A,#26
            SUBB A,CurrentFrequency
            MOV  B,#04
            MUL  AB
            ADD  A,#39
            MOV  R1,A                        ;用于调整占空比
            MOV  R4,#06H
            AJMP common

NextStep4:  CJNE A,#40,Step1510
Step1510:   JNC  NextStep5
            MOV  A,#16
            SUBB A,CurrentFrequency
            MOV  B,#11
            MUL  AB
            ADD  A,#76
            MOV  R1,A
            MOV  R5,#01H                   ;用于调整占空比
            MOV  R4,#0EH
            LJMP common1

NextStep5:  CJNE A,#45,Step1005
Step1005:   JNC  NextStep6
            MOV  A,#11
            SUBB A,CurrentFrequency
            MOV  B,#27      ;Fcommon
            MUL  AB
            MOV  R5,A
            INC  R5
            MOV  R1,#133                     ;用于调整占空比
            MOV  R4,#11H
            LJMP common1

NextStep6:  CJNE A,#49,Step0501
Step0501:   JNC  NextStep7
            MOV  A,#7
            SUBB A,CurrentFrequency
            MOV  B,#84      ;Fcommon
            MUL  AB
            MOV  R5,A
            INC  R5
            MOV  R1,#221                     ;用于调整占空比
            MOV  R4,#1BH
            LJMP common1

NextStep7:  AJMP  Stop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50HZ到15HZ之间的程序;;;;;;;;;;;;;;;;;;;;;;;;;;;

common:    MOV    B,StartState
           LCALL  VoltFreqSpeed
           AJMP   RunStart
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15HZ到5HZ之间的程序;;;;;;;;;;;;;;;;;;;;;;;;;;;
common1:   MOV    B,StartState
           LCALL  VoltFreqSpeed1
           AJMP   RunStart
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;停止程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Stop:      MOV    P1,#00H
           AJMP   SystemStart
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50HZ到15HZU/F调速程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;注意:当程序跳转到AlarmStop时,程序在AlarmStop返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VoltFreqSpeed:
           JNB  OverCurrent,Normal1
           LJMP AlarmStop
Normal1:   MOV  A,#00H                    ;第一小区
           MOVC A,@A+DPTR
           MOV  R3,A
           ANL  A,B
           JNB  OverCurrent,Normal11A
           LJMP AlarmStop
Normal11A:
           MOV  P1,A
           MOV  A,R3
           MOV  B,A
           INC  DPTR
           JNB  OverCurrent,Normal11B
           LJMP AlarmStop
Normal11B:
           MOV  P1,A
           MOV  A,#00H
           MOVC A,@A+DPTR
           ADD  A,R1                      ;调整占空比
           MOV  R2,A
VoltFreqTime1:  NOP
                NOP
                NOP
                NOP
                NOP
           DJNZ R2,VoltFreqTime1
           INC  DPTR

           MOV  A,#00H                    ;第二小区
           MOVC A,@A+DPTR
           MOV  R3,A
           ANL  A,B
           JNB  OverCurrent,Normal12A
           LJMP AlarmStop
Normal12A:
           MOV  P1,A
           MOV  A,R3
           MOV  B,A
           INC  DPTR
           JNB  OverCurrent,Normal12B
           LJMP AlarmStop
Normal12B:
           MOV  P1,A
           MOV  A,#00H
           MOVC A,@A+DPTR
           ADD  A,R4
           MOV  R2,A
VoltFreqTime2:  NOP
                NOP
                NOP
                NOP
                NOP
                NOP
           DJNZ R2,VoltFreqTime2
           INC  DPTR

           MOV  A,#00H                    ;第三小区
           MOVC A,@A+DPTR
           MOV  R3,A
           ANL  A,B
           JNB  OverCurrent,Normal13A
           LJMP AlarmStop
Normal13A:
           MOV  P1,A
           MOV  A,R3
           MOV  B,A
           INC  DPTR
           JNB  OverCurrent,Normal13B
           LJMP AlarmStop
Normal13B:
           MOV  P1,A
           MOV  A,#00H
           MOVC A,@A+DPTR
           ADD  A,R4
           MOV  R2,A
VoltFreqTime3:  NOP
                NOP
                NOP
                NOP
                NOP
                NOP
           DJNZ R2,VoltFreqTime3
           INC  DPTR

           MOV  A,#00H                     ;第四小区
           MOVC A,@A+DPTR
           MOV  R3,A
           ANL  A,B
           JNB  OverCurrent,Normal14A
           LJMP AlarmStop
Normal14A:
           MOV  P1,A
           MOV  A,R3
           MOV  B,A
           INC  DPTR
           JNB  OverCurrent,Normal14B
           LJMP AlarmStop
Normal14B:
           MOV  P1,A
           MOV  A,#00H
           MOVC A,@A+DPTR
           ADD  A,R1
           MOV  R2,A
VoltFreqTime4:  NOP
                NOP
                NOP
                NOP
                NOP
           DJNZ R2,VoltFreqTime4
           DEC  R0
           INC  DPTR
           CJNE R0,#0,TempA
           RET
TempA:     AJMP VoltFreqSpeed
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15HZ到5HZU/F调速程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -