直流无刷电机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
WM1低有效,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
WM3低有效,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
WM5低有效,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
WM5低有效,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
WM1低有效,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
WM3低有效,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
總結
以上是生活随笔為你收集整理的直流无刷电机c语言程序,无位置传感器的直流无刷电机调速控制程序(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 直流无刷电机FOC控制算法 理论到实践
- 下一篇: 彻底搭建云笔记(附插件)