📄 ht45r38 电磁炉电流、电压检测及功率调整方法.txt
字号:
功率相同。
;-----------power_calculation()----------------------------------
;Calculating working power accroding to P=K*Vad*Iad,
;where, K stands for power coefficient.
;Then adjusting power with standard power value.
;---------------------------------------------------------------------
POWER_CALCULATION:
;result_hl = ad_work_voltage * ad_work_current
MOV A, ad_work_current
MOV data0_l, A ;( data1_l)*(data0_l)。
MOV A, ad_work_voltage
MOV data1_l, A
CALL MUL8UI ;8bit 乘8bit 子程序。此处即为电压采样值乘电流采样值。
;tmp_321 = result_hl * ad_power_coefficient
MOV A, ad_power_coefficient
MOV data1_l, A
MOV A, 0
MOV data1_h, A ;(data1_h/ data1_l)*(data0_h/ data0_l)。
MOV A, result_h
MOV data0_h, A
MOV A, result_l
MOV data0_l, A
CALL MUL16UL ;16bit 乘16bit 子程序。此处即为电压采样值乘电流采样值,
;再乘以功率系数。
;ad_work_power = tmp_321 /1000 ;计算出的功率值除以1000。
MOV A, 00h
MOV data2_l, A
MOV A, 03h
MOV data1_h, A
MOV A, 0e8h
MOV data1_l, A ;(data2_h.data0_h.data0_l)/;(data2_l.data1_h.data1_l)
MOV A, result1_l
MOV data2_h, A
MOV A, result_h
MOV data0_h, A
MOV A, result_l
MOV data0_l, A
CALL DIV24UL ;24bit 除以24bit 子程序。
EXECUTE_PWR_ADJUST: ;当计算出功率值后,那么实际功率与设定功率进行比较进行调整。
;if(ad_work_power > ref_power_hl + offset_power)
CLR C
MOV A, offset_power ;设定功率之值(ref_power_h/ ref_power_l)加上一个偏移量
;(offset_power)。
ADDM A, ref_power_l
MOV A, 0
ADCM A, ref_power_h
MOV A, 80h
XOR A, ref_power_h ;ref_power_h/ ref_power_l 中之值为设定功率之值。
MOV tmp_3, A
MOV A, 80h
XOR A, result_h
SUB A, tmp_3 ;判断实际计算出的功率值是否大于(设定功率之值加上偏移量)。
SNZ C
JMP PWR_BLWMAX
SNZ Z
JMP PWR_LGMAX
MOV A, ref_power_l
SUB A, result_l
SNZ C
PWR_LGMAX:
DEC PWM0 ;若实际功率大于设定功率那么减小PWM,即减小功率。
NOP
MOV A, PWM0
SUB A, MIN_PWM0 ;判断PWM0 是否已减为最小值。
SNZ C
INC PWM0 ;若PWM0 已经减为最小值,那么保持不变。
PWR_BLWMAX:
;if(ad_work_power < ref_power_hl - offset_power)
CLR C
MOV A, offset_power
ADD A, offset_power
MOV tmp_3, A ;(offset_power*2)暂存与tmp_3 中。
MOV A, ref_power_l
SUB A, tmp_3
MOV ref_power_l, A
CLR tmp_3
MOV A, ref_power_h
SBC A, tmp_3 ;设定功率之值减去一个偏移量(offset_power*2)。
MOV ref_power_h, A
MOV A, 80h
XOR A, result_h
MOV tmp_3, A
MOV A, 80h
XOR A, ref_power_h
SUB A, tmp_3
SNZ C
JMP EXIT_POWER_CHK ;若现在功率之值大于(设定值-偏移量)且小于(设定值+偏移量)
;则不需进行功率调整。
SNZ Z
JMP PWR_BLWMIN ;实际功率大于设定功率。
MOV A, result_l
SUB A, ref_power_l
SNZ C
PWR_BLWMIN:
INC PWM0 ;若实际功率大于设定功率那么减小PWM,即减小功率。
NOP
MOV A, PWM0
SUB A, MAX_PWM0 ;判断PWM0 是否已增为最大值。
SZ C
DEC PWM0 ;若PWM0 已经减为最小值,那么保持不变。
EXIT_POWER_CHK:
CLR C
MOV A, offset_power
ADDM A, ref_power_l ;因比较过程改变了功率设定值,现恢复功率设定值。
MOV A, 0
ADCM A, ref_power_h
RET
;-----------end of power_calculation()-----------
以下是功率调整程序中,用到的乘法和除法子程序,在每个子程序前均已标明入口参数和
出口参数,直接呼叫即可。
;-----------mul8ui()-----------------------------
;================================================
;Function description:
; 8 bits multiply 8 bits.
;Input Parameter:
; multiplicand: data0_l
; multiplicator: data1_l
;Output Parameter:
; result: result_h.result_l
;================================================
MUL8UI:
CLR result_l
CLR result_h
MOV A, 08h
MOV loop_i, A
RRADD:
CLR C
RRC result_h
RRC data1_l
SNZ C
JMP RR1
MOV A, data0_l
ADDM A, result_h
RR1:
SDZ loop_i
JMP RRADD
RRC result_h
RRC data1_l
MOV A, data1_l
MOV result_l, A
RET
;-----------end of mul8ui()----------------------
;-----------mul16ul()----------------------------
;================================================
;Function description:
; 16 bits multiply 16 bits.
;Input Parameter:
; multiplicand: data0_h.data0_l
; multiplicator: data1_h.data1_l
;Output Parameter:
; result: result1_h.result1_l
; .result_h.result_l
;================================================
MUL16UL:
CLR result_l
CLR result_h
CLR result1_l
CLR result1_h
MOV A, 10h
MOV loop_i, A
rradd16:
CLR C
RRC result1_h
RRC result1_l
RRC data1_h
RRC data1_l
SNZ C
JMP rr116
MOV A, data0_l
ADDM A, result1_l
MOV A, data0_h
ADCM A, result1_h
rr116:
SDZ loop_i
JMP rradd16
RRC result1_h
RRC result1_l
RRC data1_h
RRC data1_l
MOV A, data1_l
MOV result_l, A
MOV A, data1_h
MOV result_h, A
RET
;-----------end of mul16ul()---------------------
;-----------div24ul()----------------------------
;================================================
;Function description:
; 24 bits divided by 24 bits.
;Input Parameter:
; dividend: data2_h.data0_h.data0_l
; divisor : data2_l.data1_h.data1_l
;Output Parameter:
; quotient: result2_h.result_h.result_l
; remainder: result2_l.result1_h.result1_l
;================================================
DIV24UL:
CLR result_l
CLR result_h
CLR result1_l
CLR result1_h
CLR result2_l
CLR result2_h
MOV A, 18h
MOV loop_i, A
SZ data2_l
JMP start24
SZ data1_h
JMP start24
SZ data1_l
JMP start24
RET
start24:
SZ data2_h
JMP div24
SZ data0_h
JMP div24
SZ data0_l
JMP div24
RET
div24:
CLR C
RLC data0_l
RLC data0_h
RLC data2_h
RLC result1_l
RLC result1_h
RLC result2_l
MOV A, result1_l
SUB A, data1_l
MOV tmp_1, A
MOV A, result1_h
SBC A, data1_h
MOV tmp_2, A
MOV A, result2_l
SBC A, data2_l
SNZ C
JMP next24
MOV result2_l, A
MOV A, tmp_2
MOV result1_h, A
MOV A, tmp_1
MOV result1_l, A
MOV A, 01h
ADDM A, data0_l
MOV A, 00h
ADCM A, data0_h
ADCM A, data2_h
next24:
SDZ loop_i
JMP div24
dispa24:
MOV A, data2_h
MOV result2_h, A
MOV A, data0_h
MOV result_h, A
MOV A, data0_l
MOV result_l, A
RET
;-----------end of div24ul()---------------------
小结
在本文中我们重点介绍了,电磁炉中电流采样及电压采样电路设计原理,同时给出了具有
滤波功能的电流采样和电压采样软件源代码。最后介绍了如何根据电流值和电压值计算出
功率值,并进行功率调整。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -