|
wait_for_comm:
; Update demag metric
mov Temp1, #0
jnb Flags0.DEMAG_ENABLED, ($+8); If demag disabled - branch
jnb Flags0.DEMAG_DETECTED, ($+5)
mov Temp1, #1
mov A, Demag_Detected_Metric ; Sliding average of 8, 256 when demag and 0 when not. Limited to minimum 120
mov B, #7
mul AB ; Multiply by 7
mov Temp2, A
mov A, B ; Add new value for current demag status
add A, Temp1
mov B, A
mov A, Temp2
mov C, B.0 ; Divide by 8
rrc A
mov C, B.1
rrc A
mov C, B.2
rrc A
mov Demag_Detected_Metric, A
clr C
subb A, #120 ; Limit to minimum 120
jnc ($+5)
mov Demag_Detected_Metric, #120
clr C
mov A, Demag_Detected_Metric ; Check demag metric
subb A, Demag_Pwr_Off_Thresh
jc wait_for_comm_wait ; Cut power if many consecutive demags. This will help retain sync during hard accelerations
setb Flags0.DEMAG_CUT_POWER ; Set demag power cut flag
All_pwmFETs_off
Set_Pwms_Off
wait_for_comm_wait: ;等待换向
jnb Flags0.T3_PENDING, ($+5)
jmp wait_for_comm_wait
; Setup next wait time
mov TMR3RLL, Wt_Zc_Scan_Start_L ;换向后等待下次过零
mov TMR3RLH, Wt_Zc_Scan_Start_H
setb Flags0.T3_PENDING
orl EIE1, #80h ; Enable timer3 interrupts
ret
楼主你好,这段代码中的 demag metric 是个什么变量?
这个120最小值代表什么意思?
谢谢你! |
|