📄 ht45r38 电磁炉电流、电压检测及功率调整方法.txt
字号:
HT45R38 电磁炉电流、电压检测及功率调整方法
简介
电磁炉是国内近几年发展得比较快的一种小家电,电磁炉具有如下的优点:无明火、无烟、
节电、省时、容易使用等。电磁炉的发展经历了早期纯硬件控制到现在微电脑单片机控制的阶段。
Holtek 的A/D 型MCU 在电磁炉中得到广泛地运用,其特点在于低成本、效益高、开发周期短等。
Holtek 用于电磁炉控制的MCU 有:HT46R47、HT46R22/23、HT46R12/14、HT46R32/34/322/342、
HT45R38 等。
在本文中我们重点介绍电磁炉中的电流检测方法、电压检测方法。电流检测与电压检测的
作用主要是计算功率,此功率值与设定值进行比较,根据比较结果来调正PWM 值,从而达
到功率稳定的目的。
电流检测原理
电流检测说明
由于电磁炉中的电流主要是加热线圈中的电流。检测此电流的方法为:在IGBT 对地的一端
加一个0.01W/3W 的康铜电阻,将电流转成电压,并将此电压经过HT45R38 内建OP 进行放
大,将放大后的信号送到HT45R38 内部ADC 通道1 进行采样。
在实际应用中,由于电磁炉加热线圈会产生电磁辅射干扰,所以我们在电流取样信号之后
加了两次RC 滤波电路,在电流信号进行放大后,又进行了一次RC 滤波,最后进入ADC进行转换。
在电流取样电路中,采用同向比例放大电路,其放大倍数为:(1+R7/R6)=1+100/10=1+10=11倍。
电流采样软件处理程序
电流采样软件设计中,重点在于抗干扰措施上,处理方法为:对在某个范围内的信号进行
采样,此步称为软件滤波;采样10 组有效值,对10 组有效值取掉最大值和最小值,求出
中间的2 组值,利用中间的2 组值求平均,求出平均值后才算一组有效采样值。具体处理
软件如下:
以下子程序为:采样10 组有效电流值。
;-----------current_ad()-------------------------
CURRENT_AD:
MOV A, ADRH ;ADRH 为AD 转换值存放缓存器。
MOV tmp_1, A ;暂存AD 采样值。
SUB A, MIN_CURRENT ;MIN_CURRENT 之值为电流最小值。
SNZ C
JMP CA_BLWMIN
MOV A, MAX_CURRENT ;MAX_CURRENT 之值为电流最大值。
SUB A, tmp_1
SNZ C
JMP CA_BLWMIN
;若AD 采样值在最小值和最大值之间,按有效值处理,否则按干扰信号处理。
MOV A, ad_current_count ;ad_current_count 为采样值计数器。
ADD A, OFFSET ad_current_buff ;ad_current_buff 为采样值存储RAM 首要地址。
MOV MP0, A
MOV A, ADRH
MOV R0, A
INC ad_current_count ;存储一个电流有效值后,则采样计数器加1。
CA_BLWMIN:
MOV A, 9 ;判断是否已采样10 组有效值。
SUB A, ad_current_count
SZ C
JMP EXIT_CURRENT_AD
CLR ad_current_count ;已采样10 组有效值,采样计数器清除为0。
EXIT_CURRENT_AD:
RET
;-----------end of current_ad()------------------
以下子程序将采样的10 组有效电流值,进行冒泡排序后,对中间2 组值进行求平均,求出
的平均值放在ad_work_current 中。
;-----------mean_current()-----------------------
;================================================
;Function description:
;Obtain mean current AD value
;from ad_current_buff with 10 values
;by using buble sort way.
;Input Parameter:
;ad_current_buff
;Output Parameter:
;ad_work_current
;================================================
MEAN_CURRENT:
CLR loop_k ;loop_k 用来指示是那一趟排序。
JMP CURR_CHECK_LOOP_K
CURR_NEXT_LOOP_K:
CLR flag_sort_over ;此旗标用来表明某趟排序中是否是否有数据交换。
CLR loop_n ;loop_n 表示最后一个数与其前面的数进行比较时的比较次数。
JMP CURR_CHECK_LOOP_N
CURR_NEXT_LOOP_N:
MOV A, loop_n
ADD A, OFFSET ad_current_buff ;根据loop_n 取出无序对列中第i 个数。
MOV MP0, A
MOV A, R0
MOV tmp_1, A ;取出无序对列中第i 个数暂存于tmp_1 中。
INCA loop_n
ADD A, OFFSET ad_current_buff ;根据loop_n 取出无序对列中第i+1 个数。
MOV MP0, A
MOV A, R0
SUB A, tmp_1 ;第i+1 个数与第i`个数进行比较。
SZ C
JMP CURR_NOT_SWAP
MOV A, loop_n
MOV tmp_2, A
ADD A, OFFSET ad_current_buff
MOV tmp_3, A ;暂存取数指针。
INCA tmp_2
ADD A, OFFSET ad_current_buff
MOV MP0, A
MOV A, R0
MOV tmp_2, A ;取出第i+1 个数,暂存于tmp_2 中。
MOV A, tmp_3
MOV MP0, A
MOV A, tmp_2
MOV R0, A ;将第i+1 个数数值放在第i 个数的位置上。
INCA loop_n
ADD A, OFFSET ad_current_buff
MOV MP0, A
MOV A, tmp_1
MOV R0, A ;将第i 个数数值放在第i+1 个数的位置上。
SET flag_sort_over ;设置有数据交换旗标。
CURR_NOT_SWAP:
INC loop_n ;loop_n 计数值加1,进行第i+1 个数与第i+2 个数进行比较。
CURR_CHECK_LOOP_N:
MOV A, 9
SUB A, loop_k ;loop_k 用来表示现在进行的是第i 趟排序。
MOV tmp_2, A ;求出无序区数据的个数。
MOV A, loop_n ;loop_n 表示第i 趟排序中,数据比较的次数。
SUB A, tmp_2 ;最后一个数与无序区的数是否全部比较完毕。
SNZ C
JMP CURR_NEXT_LOOP_N ;未完继续。
SNZ flag_sort_over
JMP EXIT_CURR_MEAN ;若某一趟排序完后无数据交换,则整个排序事件结束。
INC loop_k ;当第i 趟排序完毕后,loop_k 加1,进行第i+1 趟排序。
CURR_CHECK_LOOP_K:
MOV A, loop_k
SUB A, 9 ;当loop_k=9 时全部数据排序完毕。
SNZ C
JMP CURR_NEXT_LOOP_K
EXIT_CURR_MEAN:
MOV A, OFFSET ad_current_buff ;对中间两组值求平均。
ADD A, 4
MOV MP0, A
MOV A, R0
MOV tmp_1, A ;取出第5 组值放在tmp_1 中。
MOV A, OFFSET ad_current_buff
ADD A, 5
MOV MP0, A
MOV A, R0 ;取出第6 组值放在A 中。
CLR C
ADDM A, tmp_1 ;第5 组值加上第6 组值。
RRCA tmp_1
MOV ad_work_current, A ;最后求出的电流值在ad_work_current 中。
RET
;-----------end of mean_current()----------------
电压检测原理
电压检测说明
电压检测电路直接从L 在线和N 在线取电,经D1 和D2 整流后,用R1 和R2 进行分压,经
C1 滤波后,再经R3 和C2 滤波,送到HT45R38 的AN3 进行AD 转换。
上图中V0 点的电压为:220V×1.414=311V,V1 点的电压为:6.8K/(6.8K+560K)×311V=3.73V。
电压采样软件处理程序
电压采样软件设计中,重点在于抗干扰措施上,处理方法为:对在某个范围内的信号进行
采样,此步骤称为软件滤波;采样10 组有效值,对10 组有效值取掉最大值和最小值,求
出中间的2 组值,利用中间的2 组值求平均,求出平均值后才算一组有效采样值。具体处
理软件如下:
以下子程序为:采样10 组有效电压值。
;-----------voltage_ad()-------------------------
VOLTAGE_AD:
MOV A, ADRH ;ADRH 为AD 转换值存放缓存器。
MOV tmp_1, A ;暂存AD 采样值。
SUB A, MIN_VOLTAGE-10 ;MIN_VOLTAGE-10 之值为电压最小值。
SNZ C
JMP VA_BLW10
MOV A, MAX_VOLTAGE+10 ;MIN_VOLTAGE+10 之值为电压最大值。
SUB A, tmp_1
SNZ C
JMP VA_BLW10
;若AD 采样值在最小值和最大值之间,按有效值处理,否则按干扰信号处理。
MOV A, ad_voltage_count ;ad_voltage_count 为采样值计数器。
ADD A, OFFSET ad_voltage_buff ;ad_voltage_buff 为采样值存储RAM 首要地址。
MOV MP0, A
MOV A, ADRH
MOV R0, A
INC ad_voltage_count ;存储一个电流有效值后,则采样计数器加1。
VA_BLW10:
MOV A, 9 ;判断是否已采样10 组有效值。
SUB A, ad_voltage_count
SZ C
JMP EXIT_VOLTAGE_AD
CLR ad_voltage_count ;已采样10 组有效值,采样计数器清除为0。
EXIT_VOLTAGE_AD:
RET
;-----------end of voltage_ad()------------------
以下子程序将采样的10 组有效电压值,进行冒泡排序后,对中间2 组值进行求平均,求出
的平均值放在ad_work_voltage 中。
;-----------mean_voltage()-----------------------
;================================================
;Function description:
; Obtain mean voltage AD value
; from ad_voltage_buff with 10 values
; by using buble sort way.
;Input Parameter:
; ad_voltage_buff
;Output Parameter:
; ad_work_voltage
;================================================
MEAN_VOLTAGE:
CLR loop_k ;loop_k 用来指示是那一趟排序。
JMP VOLT_CHECK_LOOP_K
VOLT_NEXT_LOOP_K:
CLR flag_sort_over ;此旗标用来表明某趟排序中是否是否有数据交换。
CLR loop_n ;loop_n 表示最后一个数与其前面的数进行比较时的比较次数。
JMP VOLT_CHECK_LOOP_N
VOLT_NEXT_LOOP_N:
MOV A, loop_n
ADD A, OFFSET ad_voltage_buff ;根据loop_n 取出无序对列中第i 个数。
MOV MP0, A
MOV A, R0
MOV tmp_1, A ;取出无序对列中第i 个数暂存于tmp_1 中。
INCA loop_n
ADD A, OFFSET ad_voltage_buff ;根据loop_n 取出无序对列中第i+1 个数。
MOV MP0, A
MOV A, R0
SUB A, tmp_1 ;第i+1 个数与第i`个数进行比较。
SZ C
JMP VOLT_NOT_SWAP
MOV A, loop_n
MOV tmp_2, A
ADD A,OFFSET ad_voltage_buff
MOV tmp_3, A ;暂存取数指针。
INCA tmp_2 ;取出第i+1 个数,暂存于tmp_2 中。
ADD A,OFFSET ad_voltage_buff
MOV MP0, A
MOV A, R0
MOV tmp_2, A
MOV A, tmp_3
MOV MP0, A
MOV A, tmp_2
MOV R0, A ;将第i+1 个数数值放在第i 个数的位置上。
INCA loop_n
ADD A, OFFSET ad_voltage_buff
MOV MP0, A
MOV A, tmp_1
MOV R0, A ;将第i 个数数值放在第i+1 个数的位置上。
SET flag_sort_over ;设置有数据交换旗标。
VOLT_NOT_SWAP:
INC loop_n ;loop_n 计数值加1,进行第i+1 个数与第i+2 个数进行比较。
VOLT_CHECK_LOOP_N:
MOV A, 9
SUB A, loop_k ;loop_k 用来表示现在进行的是第i 趟排序。
MOV tmp_2, A ;求出无序区数据的个数。
MOV A, loop_n ;loop_n 表示第i 趟排序中,数据比较的次数。
SUB A, tmp_2 ;最后一个数与无序区的数是否全部比较完毕。
SNZ C
JMP VOLT_NEXT_LOOP_N ;未完继续。
SNZ flag_sort_over
JMP EXIT_VOLT_MEAN ;若某一趟排序完后无数据交换,则整个排序事件结束。
INC loop_k ;当第i 趟排序完毕后,loop_k 加1,进行第i+1 趟排序。
VOLT_CHECK_LOOP_K:
MOV A, loop_k
SUB A, 9 ;当loop_k=9 时全部数据排序完毕。
SNZ C
JMP VOLT_NEXT_LOOP_K
EXIT_VOLT_MEAN:
MOV A, OFFSET ad_voltage_buff ;对中间两组值求平均。
ADD A, 4
MOV MP0, A
MOV A, R0
MOV tmp_1, A ;取出第5 组值放在tmp_1 中。
MOV A, OFFSET ad_voltage_buff
ADD A, 5
MOV MP0, A
MOV A, R0
ADD A, tmp_1 ;第5 组值加上第6 组值。
RRC ACC
MOV ad_work_voltage, A ;最后求出的电压值在ad_work_voltage 中。
RET
;-----------end of mean_voltage()----------------
功率计算及功率调整
电磁炉中的功率计算为:P=K×VAD×IAD,其中P 代表功率,VAD为电压采样值(即上面求出的
ad_work_voltage 之值),IAD为电流采样值(即上面求出的ad_work_current 之值)。K 为功率
修正系数,VAD×IAD所得之值与实际功率有差别时,依据K 来修正,使K×VAD×AD之值与实际
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -