资讯详情

直流无刷电机c语言程序,无位置传感器的直流无刷电机调速控制程序(一)

SPLK #0000H,B2COUNT

SPLK #0000H,STALL

SPLK #0000H,ASYM

SPLK #0000H,V_ERRORK

SPLK #0000H,TIME

;--------------------------------------准备磁定位-------------------------------------------------------------

LDP #0

LACC COMP ;装载比较初值

LDP #0E8H ;反相驱动

SPLK #03FDH,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM1低有效,PWM6低电平,其他高电平

SACL CMPR1 ;A相入,C相出,B相不通电

SPLK #0000H,CMPR2

SPLK #0000H,CMPR3

;--------------------------------------等待磁定位结束------------------------------------------------------

MAGSTALL

LDP #0

LACC STALL ;检查磁定位是否结束

BCND MAGSTALL,EQ ;等待还没结束

;--------------------------------------磁定位结束换相----------------------------------------------------

LACC COMP

LDP #0E8H .

SPLK #03DFH,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM3低有效,PWM6低电平,其他高电平

SACL CMPR2 ;B相入,C相出,A不通电

SPLK #0000H,CMPR3

SPLK #0000H,CMPR1

LDP #0

SPLK #4,CAPT ;CAPT初值

;--------------------------------------主循环-----------------------------------------------------------------

LOOP

LDP #0

LACC FLAGCUR

BCND LOOP,EQ ;跳转不更新

SPLK #0,FLAGCUR ;更新,清除标志

CALL SEQUENCE ;调用更新子程序

B LOOP ;等待下一次更新

;--------------------------------------假中断处理-------------------------------------------------------------

PHANTOM

CLRC INTM

RET

;--------------------------------------更新比较值或换相子程序-----------------------------------------

SEQUENCE

LDP #0

LACC TIME ;每转时间计数器

ADD #1

SACL TIME

LACC CAPT ;变相控制字

ADD #CAPT_DETER ;加起始地址

BACC

CAPT_DETER

B RISING1 ;相当于H1上升沿

B FALLING3 ;相当于H3下降沿

B RISING2 ;相当于H2上升沿

B FALLING1 ;相当于H1下降沿

B RISING3 ;相当于H3上升沿

FALLING2 ;相当于H2下降沿

LACC COMP

LDP #0E8H

SPLK #0D3FH,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM5低有效,PWM4低电平,其它高电平

SACL      CMPR3               ;C相入,B相出,A相不通电

SPLK      #0000H,CMPR2

SPLK      #0000H,CMPR1

LDP       #0                  ;延时过滤干扰

LACC     ASYM                 ;延时计数器

ADD       #1                  ;加1

SACL     ASYM

SUB       #10                 ;检测是否到计数值

BCND      END,LEQ             ;没到,退出

SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

LACC      FLAG                ;感应电动势符号变化?

BCND      END,NEQ             ;变了,退出

LACC      V1,1                ;没变,检测.V1乘2

ADD       V1                  ;ACC=3*(BEMFA + NEUTRAL)

SUB       NEUTRAL             ;ACC=3*BEMFA

BCND      END,LT              ;<0符号没变,退出

SPLK      #1,FLAG             ;否则符号改变,置过零标志

LACC      BCOUNT

SACL      B2COUNT             ;更新延迟时间

B         END                 ;退出

RISING3

LACC      COMP

LDP       #0E8H

SPLK      #0DF3H,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM5低有效,PWM2低电平,其它高电平

SACL      CMPR3               ;C相入, A相出, B相不通电

SPLK      #0000H,CMPR2

SPLK      #0000H,CMPR1

LDP       #0                  ;延时过滤干扰

LACC      ASYM                ;延时计数器

ADD       #1                  ;加1

SACL      ASYM

SUB       #10                 ;检测是否到计数值

BCND      END,LEQ             ;没到,退出

SPLK       #10,ASYM           ;计数值已到,测量感应电动势过零点

LDP        #0

LACC      FLAG                ;感应电动势符号变化?

BCND      END,NEQ             ;变了,退出

LACC      V2,1                ;没变,检测.V2乘2

ADD       V2                  ;ACC=3*(BEMFB + NEUTRAL)

SUB       NEUTRAL             ;ACC=3*BEMFB

BCND      END,GEQ             ;≥0符号没变,退出

SPLK      #1,FLAG             ;否则符号改变,置过零标志

LACC      BCOUNT

SACL      B2COUNT             ;更新延迟时间

B         END                 ;退出

FALLING3

LACC      COMP

LDP       #0E8H

SPLK      #03FDH,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM1低有效,PWM6低电平,其它高电平

SACL      CMPR1               ; A相入, C相出, B相不通电

SPLK      #0000H,CMPR2

SPLK      #0000H,CMPR3

LDP       #0                  ;延时过滤干扰

LACC      ASYM                ;延时计数器

ADD       #1                  ;加1

SACL      ASYM

SUB       #10                 ;检测是否到计数值

BCND      END,LEQ             ;没到,退出

SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

LDP       #0

LACC      FLAG                ;感应电动势符号变化?

BCND      END,NEQ             ;变了,退出

LACC      V2,1                ;没变,检测.V2乘2

ADD       V2                  ;ACC=3*(BEMFB + NEUTRAL)

SUB       NEUTRAL             ;ACC=3*BEMFB

BCND      END,LT              ;<0符号没变,退出

SPLK      #1,FLAG             ;否则符号改变,置过零标志

LACC      BCOUNT

SACL      B2COUNT             ;更新延迟时间

B         END                 ;退出

RISING2

LACC      COMP

LDP       #0E8H

SPLK      #03DFH,ACTRA

8e530af0fcc3960ba420e2b09475f592.gifWM3低有效,PWM6低电平,其它高电平

SACL      CMPR2               ;B相入, C相出, A相不通电

SPLK      #0000H,CMPR3

SPLK      #0000H,CMPR1

LDP       #0                  ;延时过滤干扰

LACC      ASYM                ;延时计数器

ADD       #1                  ;加1

SACL      ASYM

SUB       #10                 ;检测是否到计数值

BCND      END,LEQ             ;没到,退出

SPLK      #10,ASYM            ;计数值已到,测量感应电动势过零点

LDP       #0

LACC      FLAG                ;感应电动势符号变化?

BCND      END,NEQ             ;变了,退出

LACC      V1,1                ;没变,检测.V1乘2

ADD       V1                  ;ACC=3*(BEMFA + NEUTRAL)

SUB       NEUTRAL             ;ACC=3*BEMFA

标签: 无刷电机无位置传感器启动

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台