📄 9.3.3 直流无刷电机控制的软件设计.txt
字号:
#define POSITION1 b'00010010'
#define POSITION2 b'00000110'
#define POSITION3 b'00100100'
#define POSITION4 b'00100001'
#define POSITION5 b'00001001'
#define POSITION6 b'00011000'
#define DUMMY_POSITION b'00000000'
;Forward sequence //电机正向转动
movlw POSITION2 //如果HALL信号为000
movwf POSITION_TABLE_FWD //PWM1&PWM2开通
movlw POSITION3
movwf POSITION_TABLE_FWD+1
movlw DUMMY_POSITION
movwf POSITION_TABLE_FWD+2
movlw POSITION4
movwf POSITION_TABLE_FWD+3
movlw POSITION1
movwf POSITION_TABLE_FWD+4
movlw DUMMY_POSITION
movwf POSITION_TABLE_FWD+5
movlw POSITION6
movwf POSITION_TABLE_FWD+6
movlw POSITION5
movwf POSITION_TABLE_FWD+7 //电机反向转动
movlw POSITION5
movwf POSITION_TABLE_REV
movlw POSITION6
movwf POSITION_TABLE_REV+1
movlw DUMMY_POSITION
movwf POSITION_TABLE_REV+2
movlw POSITION1
movwf POSITION_TABLE_REV+3
movlw POSITION4
movwf POSITION_TABLE_REV+4
movlw DUMMY_POSITION
movwf POSITION_TABLE_REV+5
movlw POSITION3
movwf POSITION_TABLE_REV+6
movlw POSITION2
movwf POSITION_TABLE_REV+7
换向更新函数
UPDATE_SEQUENCE //更新换向
btfss FLAGS1,FWD_REV //检测方向命令
bra ITS_REVERSE //如果反向跳转ITS_REVERSE
lfsr 0,POSITION_TABLE_FWD //如果正转,FSR0指向
;forward table的首地址
bra PICK_FROM_TABLE //前向表
ITS_REVERSE
lfsr 0,POSITION_TABLE_REV //如果反转,FSR0指向
//反转表的首地址
PICK_FROM_TABLE
movf PORTA,W //读取HALL状态
andlw 0x1C //IC1/IC2/IC3
rrncf WREG,W
rrncf WREG,W //移位得到HALL低位数值
movf PLUSW0,W //从表中读取数值
movwf OVDCOND //将数值装入OVDCOND中
//更新PWM选择输出端口
return
CALCULATE_PWM
movf SPEED_REFH,W
mullw (PWM_CONSTANT)
swapf PRODL,W
andlw 0x0F
movwf PDC_TEMPL
swapf PRODH,W
andlw 0xF0
iorwf PDC_TEMPL,F
swapf PRODH,W
andlw 0x0F
movwf PDC_TEMPH
movff PDC_TEMPH, PDCxH
movff PDC_TEMPL, PDCxL
RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -