单相电流控制器
文章目录
前言
为了保护负载和系统电源有时就需要对负载电流进行限制, 当负载电流超出某个值就把断开负载供电, 待恢复后再供电。
一、概述
这些单一的功能且要求价格低廉的产品, 用通用MCU就非常不划算, OTP类MCU是一个不错的选择, 价格低至几毛钱以下。OTP(One Time Programmable)是MCU的一种存储器类型, 意思是一次性可编程, 程序烧入单片机后,将不可再次更改和清除, 平时调试程序需要厂家提供的仿真器, 不能像其它MCU那样可通过ISP下载。本电路采用台湾远翔科技的FM8PC712A型号MCU来实现电流控制器功能。
二、电路和原理
1.电路图
2.原理概述
交流电输入通过RC降压得到12V直流电源, 再通LM7805降压给MCU供电, 同时12V电源给继电器提供电源, 由MCU控制继电器的闭合或断开。J6是电流互感器, 来测量继电器触点端的电流, 即给负载供电电流, 再通过D7、R1、R2和R3等器件半波整流, 把小交流电整成直流电让MCU的ADC采集。拨码开关用来设置电流档位。
三、程序设计
该MCU是8位机, 只支持厂家的汇编语言。
1.程序流程图
2.程序简述
接入AC220V电源通电,给设备供电后先稳定3秒。进行第一次电流采集对比,没有超过将继续采集对比;若超过延时5秒后再进行第二次电流采集对比,仍然没有超过再返回到第一次,若超出设定电流即继电器断电1分钟,之后再稳定3秒后通电再返回到第一次电流采集对比,如此反复运行。
3.汇编程序代码
;=====================================================================
;-------------------------- ROM Areas --------------------------------
;=====================================================================
ORG 000H
GOTO reset
ORG 003H ;interrupt
GOTO int_vector
;---------------------------------------------------------------------
;---------------------------------------------------------------------
INT_VECTOR:
MOVAR INTACCTMP ;07DH
SWAPR STATUS,A
MOVAR INTSTATMP ;Push Stack
BTRSC PWM0CR,P0TMIF_B
GOTO P0TMItask ;P0TM
BTRSC PWM1CR,P1TMIF_B
GOTO P1TMItask ;P1TM
BTRSC ADCON_2,ADCIF_B
GOTO ADCItask ;ADC
//BTRSC INTFLAG,LVDT30IF_B
//GOTO LVDT30Itask ;LVDT30
//BTRSC INTFLAG,LVDT24IF_B
//GOTO LVDT24Itask ;LVDT24
BTRSC INTFLAG,TM0IF_B
GOTO TM0Itask ;TM0
BTRSC INTFLAG,INT0IF_B
GOTO INT0Itask ;INT0
BTRSC INTFLAG,INT1IF_B
GOTO INT1Itask ;INT1
BTRSC CMPCON1,CMPRIF1_B ;(CP > CN)
GOTO CMPR1Itask ;CMP1 raising
BTRSC CMPCON1,CMPFIF1_B ;(CP < CN)
GOTO CMPF1Itask ;CMP1
BTRSC CMPCON2,CMPRIF2_B ;(CP > CN)
GOTO CMPR2Itask ;CMP2 raising
BTRSC CMPCON2,CMPFIF2_B ;(CP < CN)
GOTO CMPF2Itask ;CMP2
int_exit:
SWAPR INTSTATMP,A ;Pop Stack
MOVAR STATUS
SWAPR INTACCTMP,R
SWAPR INTACCTMP,A ;WHY
RETFIE
;=====================================================================
;------------------ Main Programme Beginning -------------------------
;=====================================================================
;=====================================================================
reset:
clrwdt
BCR WDT,WDTE_B ;Disable Watch dog timer
nop
nop
CALL CLEAR_RAM
CALL RESET_INIT
BTRSS PCON,LVDT24_B
GOTO reset
BSR CLKCFG,SELCLK0_B //1M
BCR CLKCFG,SELCLK1_B
BCR CLKCFG,SELCLK2_B
BSR CLKCFG,INCODS_B ;bit2 //XOUT Enable(0)/Disable(1)
BCR CLKCFG,ATSW_B //Disable auto clock switch Fcpu to 4Mhz clock when SELOPR=0 and VDD < 3.0V
NOP
CALL GPIO_INIT
FM_Delay_ms 1
BCR RELAY_OUT ///
CALL ReadKeyVau
CALL SECCURRENT
CALL ADC_INIT
FM_Delay_ms 1EH
MAIN_LOOP:
CALL ADC_CONVERT
MOVR TEMPH,A
SUBAR CURRENTTH_H,A
BTRSS STATUS,C_B
GOTO RECHECK
ANDIA FFH
BTRSS STATUS,Z_B
GOTO MAIN_LOOP
MOVR TEMPL,A
SUBAR CURRENTTH_L,A
BTRSC STATUS,C_B
GOTO MAIN_LOOP
RECHECK: FM_Delay_ms 32H
CALL ADC_CONVERT
MOVR TEMPH,A
SUBAR CURRENTTH_H,A
BTRSS STATUS,C_B
GOTO RELAYOFF
ANDIA FFH
BTRSS STATUS,Z_B
GOTO MAIN_LOOP
MOVR TEMPL,A
SUBAR CURRENTTH_L,A
BTRSC STATUS,C_B
GOTO MAIN_LOOP
RELAYOFF:
// BCR RELAY_OUT
BSR RELAY_OUT
MOVIA 06H
MOVAR COUNT
DELAY1MIN: FM_Delay_ms 64H
DECR COUNT,R
MOVIA 0FH
ANDAR COUNT,A
BTRSS STATUS,Z_B
GOTO DELAY1MIN
BCR RELAY_OUT
// BSR RELAY_OUT
FM_Delay_ms 1EH
GOTO MAIN_LOOP
四、技术参数要求
1.输入交流220V/50Hz
2.输出交流220V/50Hz,最大16A
五、总结
实际测试发生精度不太准, 问题出现在电流互感器转变成小交流电再半波整流这个电路, 不是ADC精度问题, 该方案稳定性和精度都较很差, 所以这是一个失败的产品。
免责申明: 作者难免技术水平有限,如有错误拒不承认,本文技术资料只适于学习和参考,不可商用,若要商用,不必告知我,跟我没一毛关系。