📄 main.asm
字号:
BCND WXM7,LT
SPLK #2000,TEMP1 ;2倍周期值
WXM7
; LACC #2000
; SUB TEMP1
LACC TEMP1 ;(ton1A+ton2A)/2存入CMPR1
ROR
LDP #CMPR1>>7
SACL CMPR1
;===============CMPR2=======================
LDP #TEMP2 ;计算脉宽ton1B
LACC TEMP2
ADD TEMP5 ;ton2B
SFR ;累加器右移1位
SACL TEMP2 ;检测是否小于正脉宽0.5us
SUB PMIN ;最小正脉宽(脉冲个数)Q0格式0.5us/25ns=20
BCND WXM8,GT
SPLK #0,TEMP2 ;是则删除窄脉冲
B WXM9
WXM8
LACC TEMP2 ;检测是否大于最大负脉宽0.5us
SUB PMAX ;最大负脉宽(脉冲个数)Q0格式49.5us/25ns=1980
BCND WXM9,LT
SPLK #2000,TEMP2 ;2倍周期值
WXM9
; LACC #2000
; SUB TEMP2
LACC TEMP2
ROR ;(ton1B+ton2B)/2存入CMPR2
SACL TEMP2
;===============CMPR3===========================
LDP #TEMP3 ;计算脉宽ton1C
LACC TEMP3
ADD TEMP6 ;ton2C
SFR ;累加器右移1位
SACL TEMP3 ;检测是否小于正脉宽0.5us
SUB PMIN ;最小正脉宽(脉冲个数)Q0格式0.5us/25ns=20
BCND WXM10,GT
SPLK #0,TEMP3 ;是则删除窄脉冲
B WXM11
WXM10
LACC TEMP3 ;检测是否大于最大负脉宽0.5us
SUB PMAX ;最大负脉宽(脉冲个数)Q0格式49.5us/25ns=1980
BCND WXM11,LT
SPLK #2000,TEMP3 ;2倍周期值
WXM11
; LACC #2000
; SUB TEMP3
LACC TEMP3
ROR ;(ton1C+ton2C)/2存入CMPR3
SACL TEMP3
LDP #D_FLAG ;D_FLAG=0发送55,D_FLAG=1发送AA
LACC D_FLAG
BZ Z_ZHUAN ;D_FLAG=0,跳正转
LACC TEMP2 ;否则D_FLAG=1,反转
LDP #CMPR3>>7
SACL CMPR3 ;反转,将TEMP2放CMPR3,TEMP3放CMPR2中即可
LDP #TEMP3
LACC TEMP3
LDP #CMPR3>>7
SACL CMPR2
B T_END ;跳中断恢复,恢复现场
Z_ZHUAN
LACC TEMP2
LDP #CMPR3>>7 ;正转,将TEMP2放CMPR2,TEMP3放CMPR3中.
SACL CMPR2
LDP #TEMP3
LACC TEMP3
LDP #CMPR3>>7
SACL CMPR3
;===============CMPR3 END====================
;===============中断恢复=====================
T_END
LDP #P_LO
LT P_LO
MPY #1
LPH P_HI
LT T_SAVE
LACC ACCH,16
ADDS ACCL
LDP #ST1>>7
LST #ST1,ST1_SAVE
LST #ST0,ST0_SAVE
CLRC INTM
RET
;===============中断返回======================
CUL:
LDP #ADCTRL2>>7
SPLK #04000H,ADCTRL2
SPLK #02000H,ADCTRL2
NOP
NOP
CUL1
CLRC SXM
BIT ADCTRL2,BIT12
BCND CUL1,TC
LDP #RESULT0>>7
LACC RESULT0,10
ADD RESULT1,10
ADD RESULT2,10
ADD RESULT3,10
ADD RESULT4,10
ADD RESULT5,10
ADD RESULT6,10
ADD RESULT7,10
RPT #2
SFR ;/8
LDP #TEMP_AD
SACH TEMP_AD
LACC TEMP_AD
SUB #30H ;>30启动,<30置0
BCND QIDONG,GT
LDP #ACTRA>>7
SPLK #0H,ACTRA
RET
QIDONG
LDP #ACTRA>>7
SPLK #0666H,ACTRA ;启动后,引脚PWM1,3,5高有效,PWM2,4,6低有效
LDP #TEMP_AD
LACC TEMP_AD ;取A/D转换值
SUB #3D0H
BCND SPEED_MAX,LT
SPLK #3D0H,TEMP_AD ;最大为3D0H
SPEED_MAX
LACC TEMP_AD
SUB #30 ;依次-30 作为调制波频率
SACL F_MODU ;调制波频率,Q4格式
RET ;改变调制正弦波的频率,就可以改变输出电源的频率
;从而改变电动机的转速
SCI_INT ;SCI中断处理
LDP #SCIRXBUF>>7
LACC SCIRXBUF
AND #00FFh
SUB #055H
BNZ Z_CON
LDP #D_FLAG
SPLK #0,D_FLAG
B W_INT1
Z_CON
LDP #SCIRXBUF>>7
LACC SCIRXBUF
AND #00FFh
SUB #0AAH
BNZ W_INT1
LDP #D_FLAG
SPLK #1,D_FLAG
W_INT1
CLRC INTM
RET
CMP
SETC SXM
LT TEMP ;开始将角度转换成度(Q12格式)
MPY #917 ;(180/PI)*16(Q4)=917
PAC
SACH TEMP ;已经转换成角度(Q0格式)
; SPLK #45,TEMP
LACC #SIN_ENTRY ;查sin表入口地址
ADD TEMP ;偏移量
TBLR TEMP ;得出查出的sin值(Q14格式有符号数)
LT TEMP
MPY M_ ;乘M值(调制度M的范围0~0.9)这里调制度取0.85
PAC ;乘M(Q9格式),结果得出Q23格式
SACH TEMP,7 ;相当于右移9位,Q14格式有符号数
LACC TEMP
ADD #1,14 ;加1
SACL TEMP ;保存,Q14格式
BCND C_GT,GT ;ACC大于0,跳转
SPLK #0,TEMP ;否则,赋TEMP=0
C_GT
CLRC SXM
LT T_HALF ;1000,设定载波周期Tc=4000,Tc/4=1000
MPYU TEMP ;两个无符号数相乘
PAC
SACH TEMP,2 ;相当于右移14位,保存ton1为Q0格式
RET
.DATA
SIN_ENTRY
.WORD 0
.WORD 286,572,857,1143,1428
.WORD 1713,1997,2280,2563,2845
.WORD 3126,3406,3686,3964,4240
.WORD 4516,4790,5063,5334,5604
.WORD 5872,6138,6402,6664,6924
.WORD 7182,7438,7692,7943,8192
.WORD 8438,8682,8923,9162,9397
.WORD 9630,9860,10087,10311,10531
.WORD 10749,10963,11174,11381,11585
.WORD 11786,11982,12176,12365,12551
.WORD 12733,12911,13085,13255,13421
.WORD 13583,13741,13894,14044,14189
.WORD 14330,14466,14598,14726,14849
.WORD 14968,15082,15191,15296,15396
.WORD 15491,15582,15668,15749,15826
.WORD 15897,15964,16026,16083,16135
.WORD 16182,16225,16262,16294,16322
.WORD 16344,16362,16374,16382,16384 ;90
.WORD 16382,16374,16362,16344,16322
.WORD 16294,16262,16225,16182,16135
.WORD 16083,16026,15964,15897,15826
.WORD 15749,15668,15582,15491,15396
.WORD 15296,15191,15082,14968,14849
.WORD 14726,14598,14466,14330,14189
.WORD 14044,13894,13741,13583,13421
.WORD 13255,13085,12911,12733,12551
.WORD 12365,12176,11982,11786,11585
.WORD 11381,11174,10963,10749,10531
.WORD 10311,10087,9860,9630,9397
.WORD 9162,8923,8682,8438,8192
.WORD 7943,7692,7438,7182,6924
.WORD 6664,6402,6138,5872,5604
.WORD 5334,5063,4790,4516,4240
.WORD 3964,3686,3406,3126,2845
.WORD 2563,2280,1997,1713,1428
.WORD 1143,857,572,286,0 ;180
.WORD 65250,64964,64679,64393,64108
.WORD 63822,63539,63256,62973,62691
.WORD 62410,62130,61850,61572,61296
.WORD 61020,60846,60483,60202,59932
.WORD 59664,59398,59134,58872,58612
.WORD 58354,58098,57844,57593,57344
.WORD 57098,56854,56613,56374,56139
.WORD 55906,55676,55449,55225,55005
.WORD 54787,54573,54362,54155,53951
.WORD 53750,53554,53360,43171,52985
.WORD 52803,52625,52451,52281,52115
.WORD 51953,51795,51642,51492,51347
.WORD 51206,51070,50938,50810,50687
.WORD 50568,50454,50345,50240,50140
.WORD 50045,49954,49868,49787,49710
.WORD 49639,49572,49510,49453,49401
.WORD 49354,49311,49274,49242,49214
.WORD 49192,49174,49162,49154,49152 ;270
.WORD 49154,49162,49174,49192,49214
.WORD 49242,49274,49311,49354,49401
.WORD 49453,49510,49572,49639,49710
.WORD 49787,49868,49954,50045,50140
.WORD 50240,50345,50454,50568,50687
.WORD 50810,50938,51070,51206,51347
.WORD 51492,51642,51795,51953,52115
.WORD 52281,52451,52625,52803,52985
.WORD 53171,53360,53554,53750,53951
.WORD 54155,54362,54573,54787,55005
.WORD 55225,55449,55676,55906,56139
.WORD 56374,56613,56854,57098,57344
.WORD 57593,57844,58098,58354,58612
.WORD 58872,59134,59398,59664,59932
.WORD 60202,60473,60746,61020,61296
.WORD 61572,61850,62130,62410,62691
.WORD 62973,63256,63539,63823,64108
.WORD 64393,64679,64964,65250,0 ;360
.END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -