2013年3月23日

用LM2596搭建数控稳压电源

常用的LM2596芯片可以方便地搭成各种降压式开关稳压电源,但要用单片机来控制它的输出电压就稍微有点麻烦了——主要的思路有两种,一种是使用传统的电位器控制方式,用单片机控制数字电位器来代替模拟电位器;另一种则是利用单片机的PWM或DAC输出一个控制电压,引入到LM2596的反馈环路中。这次试验的是后一种思路。

如图,设输出电压为Vout,控制电压为Vctrl,LM2596的反馈端电压为Vfb,根据运放的基本性质可得:

Vctrl * R3/(R3+R8) + Vfb * R8/(R3+R8) = Vout * R9 / (R2+R9)

按上图的参数,可以写为Vctrl * 10/11 + Vfb * 1/11 = Vout * 1/4

对于LM2596-ADJ,其Vfb = 1.23V,于是有Vout = 4/11 * (10 * Vctrl + 1.23 )

于是,当Vctrl = 0V时,输出电压为1.23V;当Vctrl = 3V时,输出电压为11.3V左右。实际上由于LM358运放输入共模电压的限制,当供电电压为12V时,本电路最高输出电压为10V左右。在R2和R9的分压端引出一路信号到单片机的ADC来测量输出电压。

怎么测量输出电流呢?在输出地端串联小电阻检测电流虽然较简单,但是造成输入、输出不共地,许多情况下反倒更麻烦,因此这里选择了由R4、R1、R6、U3和Q1等元件构成的高端电流检测电路。如图,R4上的压降被U3放大15倍后,得到一个对地的电压,单片机测出此电压,除以15,再除以R4的阻值50毫欧即可得到输出电流。用12V 15W灯泡作为负载,实测工作状况如下:

PWM dutyVctrl/VVout/VIout/A
14.6%0.743.10.45
24.4%1.224.90.56
34.2%1.706.60.65
43.9%2.178.40.74
53.7%2.6110.20.82

后记:用同样原理实现了APW7120+2SK3919*2的可调同步整流降压电路,实测最大稳定输出电流达到11A。

2013年3月19日

萤火虫瓶子 & LCD串行驱动接口

本来是发在新浪blog的,结果莫名其妙被关了,只好重写一遍……

前者是用AVR的io口模拟PWM,驱动8个LED闪亮。视频:http://v.youku.com/v_show/id_XNTI4Nzc4MDYw.html

分别试验了用PCF8574、74HC164和用一片ATmega48实现用串口驱动1602液晶屏。

PCF8574的方案很简单,4个IO按4线法连接LCD高4位,2个IO连接EN端和RS端。LCD RW直接接地,用一只7660产生负压。需要占用i2c口,显示速度慢、性价比也低,总之不推荐。

用ATmega48扩展的话,可以8线连接,接口用i2c、spi、uart都可以,用一个PWM口产生负压可以节省一只7660,是最灵活的方式,不过用uart时需要双方都有晶振。

用74HC164要多占用两个IO,不过用一些小技巧可以实现只占用两个GPIO:如图,用电阻和二极管形成一个与门,在串行写入数据时将最高位置1,写完8bit后再拉高DATA端,此时与门输出高电平,EN动作。之后要拉低DATA,连续八个CLK以清空164输出端,避免影响下一轮。实测写LCD快速、稳定,成本也是三种方式里最低的。