4-30V/5A 可调稳压电源 带断电记忆功能
用PIC16F676单片机控制KIC-125稳压电源模块。KIC-125最大输入可以达到40V,由于KIC-125的限制,最低只能够输出4V。
元件FMG8是内部带电阻的双三极管。
特点:输出范围是4-30V;输出电压存入EEPROM,具备断电记忆功能;
每步调整约0.1V,连续按键不放的调整速率是约1V/S;
超过5A电流保护,关断输出;开关调压,损耗小。
汇编语言的程序,希望对大家有用。
;※※※※※※ PIC16F676 控制的开关稳压电源 ※※※※※※
LIST P=16F676
#INCLUDE<P16F676.INC>
__CONFIG 002CH ;F676配置
ERRORLEVEL -302,-305 ;不要提示302、305警告
#define JIA PORTA,4 ;加
#define JIAN PORTA,5 ;减
W_TEMP EQU 21H ;
STATUS_TEMPEQU 22H ;
YANSHI1 EQU 25H ;延时1
YANSHI2 EQU 26H ;延时2
JISHI EQU 27H ;计时
SHUCHU EQU 28H ;输出
BIAOZHI EQU 29H ;标志
JISUAN EQU 30H ;计算
COUNTER EQU 31H ;读写EEPROM地址单元
ORG 0000H ;
NOP
GOTO MAIN ;
;※※※※※※※ 中断程序 ※※※※※※
ORG 04H ;
MOVWFW_TEMP
SWAPFSTATUS,W
BCF STATUS,RP0
MOVWFSTATUS_TEMP ;
BTFSCJIA ;
GOTO RET1 ;
MOVLW0X55 ;
MOVWFBIAOZHI ;
GOTO RET ;
RET1
BTFSCJIAN ;
GOTO RET ;
MOVLW0XAA ;
MOVWFBIAOZHI ;
RET
BCF INTCON,RAIF ;
BSF INTCON,GIE ;
SWAPFSTATUS_TEMP,W
MOVWFSTATUS
SWAPFW_TEMP,F
SWAPFW_TEMP,W
RETFIE
;※※※※※※※ 中断程序 ※※※※※※
;※※※※※※※ 主程序 ※※※※※※
MAIN
CLRF SHUCHU ;
CLRF PORTA ;
CLRF PORTC ;
BCF STATUS,RP0 ;
MOVLWB'10001000' ;使能所有中断,使能PORTA电平变化中断
MOVWFINTCON ;
MOVLWB'11111111' ;
MOVWFCMCON ;关闭比较器器
BSF STATUS,RP0 ;
CLRF ANSEL ;全部配置为数字端口
MOVLWB'00111000' ;
MOVWFTRISA ;设定A端口
MOVLWB'00000000' ;
MOVWFTRISC ;设定B端口
MOVLWB'00110000' ;
MOVWFWPUA ;输入RA4,RA5端口弱上拉
MOVLWB'00110000' ;
MOVWFIOCA ;输入RA4,RA5端口使能电平变化中断
MOVLWB'00001010' ;WDT预分频1:4
MOVWFOPTION_REG ;
;※※※※※ 以上初始化程序段 ※※※※※
MAIN1
CALL DU_EEPROM ;
CALL DIANYUAN ;
MOVLW0X00 ;
SUBWFBIAOZHI,W ;
BTFSSSTATUS,Z ;
GOTO CHULI ;转到处理程序
CLRWDT ;
GOTO $-4 ;
;※※※※※电源输出※※※※※
DIANYUAN ;电源输出
MOVF SHUCHU,W ;
MOVWFJISUAN ;
MOVLWB'00000011' ;
ANDWFJISUAN,F ;
BCF STATUS,C ;
RLF JISUAN,F ;
BCF STATUS,RP0 ;
MOVF JISUAN,W ;
MOVWFPORTA ;这段输出低2位
MOVF SHUCHU,W ;
MOVWFJISUAN ;
MOVLWB'11111100' ;
ANDWFJISUAN,F ;
BCF STATUS,C ;
RRF JISUAN,F ;
BCF STATUS,C ;
RRF JISUAN,F ;
BCF STATUS,RP0 ;
MOVF JISUAN,W ;
MOVWFPORTC ;这段输出高6位
RETURN ;
;※※※※※电源输出※※※※※
CHULI
MOVLW0X55 ;0X55代表”加“,这里是”加“处理程序
SUBWFBIAOZHI,W ;
BTFSSSTATUS,Z ;判断是否有”加“标志
GOTO CHULI1 ;转到”减“处理段
CALL DELAY2 ;
BTFSCJIA ;
GOTO CHULI2 ;”加“无效,干扰信号
CALL ANJIAN1 ;调用按键处理程序
GOTO CHULI2 ;
CHULI1
MOVLW0XAA ;0XAA代表”减“,这里是”减“处理程序
SUBWFBIAOZHI,W ;
BTFSSSTATUS,Z ;判断是否有”减“标志
GOTO CHULI2 ;
CALL DELAY2 ;
BTFSCJIAN ;
GOTO CHULI2 ;”减“无效,干扰信号
CALL ANJIAN2 ;调用按键处理程序
CHULI2
GOTO MAIN1 ;
;※※※※※”加“按键处理程序※※※※※
ANJIAN1 ;”加“按键处理程序
MOVLWD'25' ;
MOVWFJISHI ;
ANJIAN3
BTFSCJIA ;
GOTO ANJIAN5 ;按键放开
CALL DELAY2 ;
DECFSZ JISHI,F ;
GOTO ANJIAN3 ;
MOVLWB'11111111' ;
SUBWFSHUCHU,W ;
BTFSSSTATUS,Z ;判断是否到达最高电压,达到最高电压停止
INCF SHUCHU,F ;
CALL DIANYUAN ;
CALL DELAY ;
BTFSCJIA ;
GOTO ANJIAN7 ;
GOTO $-8 ;
ANJIAN5
MOVLWB'11111111' ;
SUBWFSHUCHU,W ;
BTFSSSTATUS,Z ;判断是否到达最高电压,达到最高电压停止
INCF SHUCHU,F ;
CALL DIANYUAN ;
ANJIAN7
CALL XIE_EEPROM ;记录输出数据
CLRF BIAOZHI ;清除标志
RETURN ;
;※※※※※”加“按键处理程序※※※※※
;※※※※※”减“按键处理程序 ※※※※※
ANJIAN2 ;”减“按键处理程序
MOVLWD'25' ;
MOVWFJISHI ;
ANJIAN4
BTFSCJIAN ;
GOTO ANJIAN6 ;
CALL DELAY2 ;
DECFSZ JISHI,F ;
GOTO ANJIAN4 ;
MOVLW0X00 ;
SUBWFSHUCHU,W ;
BTFSSSTATUS,Z ;判断是否到达最低电压,达到最低电压停止
DECF SHUCHU,F ;
CALL DIANYUAN ;
CALL DELAY ;
BTFSCJIAN ;
GOTO ANJIAN8 ;
GOTO $-8 ;
ANJIAN6
MOVLW0X00 ;
SUBWFSHUCHU,W ;
BTFSSSTATUS,Z ;判断是否到达最低电压,达到最低电压停止
DECF SHUCHU,F ;
CALL DIANYUAN ;
ANJIAN8
CALL XIE_EEPROM ;记录输出数据
CLRF BIAOZHI ;清除标志
RETURN ;
;※※※※※”减“按键处理程序 ※※※※※
;※※※※※读取EEPROM数据※※※※※
DU_EEPROM ;读取EEPROM数据
CLRWDT
BCF INTCON,GIE ;关闭中断
BSF STATUS,RP0 ;存储体1
MOVLW0X01 ;
MOVWFEEADR ;读取EEPROM地址1
BSF EECON1,RD ;
MOVF EEDATA,W ;
MOVWFSHUCHU ;将数据记入SHUCHU单元
BSF INTCON,GIE ;恢复中断
RETURN
;※※※※※读取EEPROM数据※※※※※
;※※※※※写EEPROM,记录数据※※※※※
XIE_EEPROM ;写EEPROM,记录数据
CLRWDT ;
BCF INTCON,GIE ;
BSF STATUS,RP0 ;
MOVLW0X01 ;
MOVWFEEADR ;写入数据的地址
MOVF SHUCHU,W ;
MOVWFEEDATA ;数据转入EEDATA
BSF EECON1,WREN ;
BSF STATUS,RP0 ;
BSF STATUS,RP1 ;存储体4,使用Proteus无法仿真
MOVLW0X55 ;
MOVWFEECON2 ;
MOVLW0XAA ;
MOVWFEECON2 ;
BSF EECON1,WR ;
BTFSC EECON1,WR ;
GOTO $-1 ;
BCF EECON1,WREN ;禁止写操作
BSF INTCON,GIE ;
RETURN ;
;※※※※※写EEPROM,记录数据※※※※※
;×××××××× 延时程序1 ××××××××
DELAY
MOVLWD'100' ;100mS
MOVWFYANSHI1 ;
DEL1
MOVLWD'255' ;
MOVWFYANSHI2 ;
DEL2
NOP
DECFSZ YANSHI2,1 ;
GOTO DEL2 ;
CLRWDT ;
DECFSZ YANSHI1,1 ;
GOTO DEL1 ;
RETURN ;
;×××××××× 延时程序1 ××××××××
;×××××××× 延时程序2 ××××××××
DELAY2
MOVLWD'20' ;20mS
MOVWFYANSHI1 ;
DEL3
MOVLWD'255' ;
MOVWFYANSHI2 ;
DEL4
NOP
DECFSZ YANSHI2,1 ;
GOTO DEL4 ;
CLRWDT ;
DECFSZ YANSHI1,1 ;
GOTO DEL3 ;
RETURN ;
;×××××××× 延时程序2 ××××××××
END ; http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_493657.JPG
用16F676控制的KIC-125稳压电路图 (原文件名:PIC16F676控制的可调电源.JPG)
http://cache.amobbs.com/bbs_upload782111/files_20/ourdev_494043.JPG
需要将KIC-125内部的两个反馈电阻去掉,然后R1用10K电阻代替。 (原文件名:KIC-125内部电阻修改.JPG) 好像DCDC,输出加大电容可能会有点问题。 呵呵,似乎有用PWM调压的 【3楼】 fHimemhacker F.H.
呵呵,似乎有用PWM调压的
-------------------------------------------------
呵呵,没那么复杂。PIC16F676+FMG8+(R1~R8)= 一个电位器而已。 看起来不错,不知能否提供一个编辑好的hex文件,关照一下像我们这些不懂单片机而又想玩玩的人。谢谢了。 D1非常关键,没有D1,如果发生停电,输出电压比输入电压高,很容易损坏KIC-125,特别是用于充电时。
不使用电位器是因为:电位器调整不均匀,会有一段可调输出变化快,一段可调输出没有变化,不好操弄。
如果PIC16F676异常,只会将输出电压降到最低,不会输出非常高电压,损坏用电设备。
如果将KIC-125的电流保护采样电阻引出,分接多个不同的采样电阻,使用继电器切换,能够实现多个不同的电流保护。
HEX文件ourdev_496295.rar(文件大小:565字节) (原文件名:PIC16F676 +KIC-125.rar) 好东西正要找的。存下了! 不错 mark 不错,简单易行 本帖最后由 enddel 于 2012-9-4 16:22 编辑
对maxims 的回复:编程没有特别要求,直接用发布的HEX文件即可。这种情况说明单片机确实没有正常工作。飙升到28V,说明单片机控制端口全部输出高电位,然后又变低电位了,电压慢慢下降是因为电容蓄能的原因。我一般采用在板编程,编程器连接GND端、MCLR端、ICSPCLK端、ICSPDAT端,电源由板上提供。同时,配置字:__CONFIG 002CH使用了内部RC振荡器,你看看是否在编程时,修改了这个配置,造成时钟没有工作,和复位端口配置改变。 来看看 学习学习
页:
[1]