学校实验室使用的电源,一般通过电位器来调整电压。在作者带着学生做实验的过程中,往往有学生随意调整电压,稍不注意,就会造成实验的失败或者器件的损坏。为此,我希望能够制作一个能够“锁住电压”的电源,经过一番研制,就有了这块数控电源芯片。利用这块电源芯片,可以根据需要制作各种性能要求的电源。下面以作者制作的一台样机为例,对该电源能够实现的功能作一个描述,然后介绍其制作的方法。

1.电源的性能及操作

如图1所示是样机的外形图,从图中可以看到,电源面板上有3位数码管用来指示输出电压值;4个发光管用来指示各种工作状态;有 5个按键可用来进行各种设置。

图1 电源样品的外形

1.1技术指标

输出电压:3~12V

电压调整方法(2种):

普通调整:0.1V/级递增或递减。

快捷调整:按预设电压值快速切换。

限流:当输出电流超过0.1s后,切断输出,同时过流指标灯点亮;

调压模式(3种):

快捷调整电压时自动关闭输出,普通调整时不关闭输出;

快捷调整和普通调整时均自动关闭输出;

快捷调整和普通调整时均不自动关闭输出;

开机模式:

开机时调出预设电压,但并不输出,需按输出键后才输出;

开机时调出预设电压,直接输出。

分辨率:控制板输出不低于0.1%,稳压电源精度取决于电源板的设计。

锁定模式

不锁定输出,可以自由调整输出电压;

锁定输出,锁定当前输出电压,电压即不可调整,直到进入解锁模式并输入解锁口令后才能重新调整电压。

1.2 显示方式

3位数码管用于显示当前输出电压,4位发光管分别用于指示“输出”、“过流”、“锁定”与“模式”。当输出指示灯亮时,输出端子上有电压输出,不亮时,输出为零;过流指标灯亮时,说明有过流现象,应检测负载情况;锁定指标灯亮,说明此时工作在锁定状态下,此时,电压值不可直接调整,需要进入设置状态解锁后才能调整电压;模式指示灯点亮时,只能在关闭电压输出后才能调整输出电压值。

1.3 按键操作

本机由5个按键组成,分别是功能键、加1键、减1键、快捷变换键和输出切换键。这5个按键的功能描述如下:

功能键:按该键进入设置状态。

加1键:未进入设置状态直接按该键时,每按一次加0.1V,可以快速连加。进入设置状态后,每按一次显示数字加1。

减1键:未进入设置状态直接按该键时,每按一次减少0.1V,可以快速连减。进入设置状态后,每按一次显示数字减1。

快捷变换键:每按一次,按预置值更改输出电压,预置值为3、5、6、9和12V。

输出切换键:当有电压输出时,按下该键立即切断输出;无电压输出时,按下并保持约1.5s后产生输出。

2.工作原理

本机由控制板和主电源板两部分组成,下面分别介绍。

2 .1 稳压电源及过流保护

图2所示为主电源板部分,其中IC1,IC3及相关部分组成±15V电源,提供给运算放大器LM324。IC3是7805,用于提供5V电源给控制板。

图2

图中,R18,W2,IC4D,VT2,VT3,等元件构成一个典型的串联稳压电路,其中VT3为电源调整管,IC4D的反相输入端通过多圈电位器W2和电阻R18接到输出端,引入负反馈。如果IC4D的同相输入端接一个基准电压,那么,通过调整W2就能改变输出电压,这也就是教科书上经典的串联稳压电源电路。但这里并不通过手工调节电位器来调节电压,而是在IC4D的同相输入端接一个“可变”基准电压。显然,只要改变这个电压值,输出电压也就随之改变。

R19,VD3,VT4,R20等元件构成一个恒流源,用于提供一个负载,避免空载时的失控。

IC4A与R1、R2、W1、电流取样电阻R3等组成过电流检测电路。当电路未接负载时,调整W1使得IC1A输出高电平,当电路接有负载时,电流必然流过R3,在R3两端形成电压降,这使得W1两端电压下降,即IC1A同相输入端的电压下降。当电路中流过额定电流(如1A)时,调整W1,使得IC1A刚好输出翻转。这个输出经过VD4和R16电平变换后,得到一个低电平,该电平被送往控制板,用来切断输出。

这样,电路的调压、保护等功能都已分析完毕,只要能够输出适当的基准电压,就能够获得所需要的输出电压了。

2.2 基准电压的产生

基准电压通过PWM方式来产生,控制板产生的PWM控制信号通过R15接到VT1的基极。如图3所示是两种占空比的PWM波形

10%占空比                                                                                            80%占空比

R4,R12,R13和T1(TL431)构成了一个基准源,在Va处得到5V的稳定电压。R5是反相器Q1的集电极负载电阻,经过VT1倒相后,10%占空比的波形会变成90%占空比的波形,而80%占空比的波形会变成20%占空比的波形。不过,这也正是我们所需要的,详见下面的分析。R6、R7和电容C7构成滤波电路,将PWM波形变换成稳定的直流电压。其电压值为:

Vo=Ti/T*Vref

式中Ti/T就是占空比,而Vref是由基准源TL431生成的5V标准电压。

这个基准电压经过由IC4B组成的反相比例放大器进行放大,并送到IC4D的同相输入端作为稳压电源的基准电压。这里有个问题,由于输入IC4B组成的反相比例放大器的电压为正,放大后的电压就应该是负,而这是无法满足使用要求的。当然,多用一级放大器就可以解决这一问题,但本电路设计中恰好用完一片四运放,为不增加芯片,这里使用了“调零”的方法。当控制端输出最低电压的控制要求(10%占空比的脉冲信号)时,经过VT1反相得到90%占空比的脉冲信号,滤波后实际得到的Vo是90/100*5=4.5V,而当控制端输出最高电压控制要求(10%占空比的脉冲信号)时,经过VT1反相得到10%点空比的脉冲信号,滤波后实际得到的电压为10/100*5=0.5V。这样,只要在IC4B的输入端为4.5V时,通过调整W2,将输出电压调整为0V,在IC4B的输入端为0.5V时,必然会有一个正电压输出。按R9为220K来计算,这个输出值约为10V。当然,这个值的绝对值大小并不重要,因为可以通过W3电位器来调整。

需要说明的是,这个设计仅仅是一种设计方案,读者可以根据基准电压产生这一部分内容的介绍来设计各种基准产生电路。同时,也可以设计出各种不同电路形式的稳压部分,以获得更大的输出电流、更高的效率或更好的性能。

2.3 控制板部分

图3是控制板部分的电路原理图,从图中可以看到,控制板由单片机IC1、3位LED数码管,4个发光二极管和5个按键组成。控制器提供1路基准电源输出,接受1路过流信号输入。

图3 控制部分原理图

图中IC1使用的是STC12C2052芯片,该芯片是一种与80C51在指令一级兼容的高性能单片机,其主要特点有:

1.  芯片内置EEPROM;

2.  I/O口具有多种工作模式,可以将同一个I/O口复用为输出和输出;

3.  大电流驱动能力;

4.  内置复位芯片。

本电路的设计中充分应用了这些特性。从图中可以看到,3位数码管和4个LED由芯片直接驱动,没有加任何驱动芯片或者三极管。内部EEPROM被用来存储设定的参数,无需再扩充其他存储芯片;利用I/O口的复用特点,P1口作为数码管段驱动的同时,又可作为按键的输入,大大节省了I/O引脚。复位电路只需使用简单的RC复位电路,就可以得到很好的复位效果。

控制芯片根据按键的设置,从基准源输出端送出各种不同占空比的控制电压,最终通过滤波得到稳定的电压,用以控制稳压电路部分,使得电路输出不同的电压。

3.控制程序编写

硬件电路设计完成后,就要编写软件了。软件基本上可以分为键盘驱动,PWM生成,功能实现等部分。

3.1 键盘处理程序

STC单片机的引脚可以设置为推挽输出、强上拉、仅为输入等状态,这个电路就是使用此特性来实现引脚的复用,以便使用仅20个引脚的单片机,降低成本。从图3中可以看到,数码管驱动和按键复用了P1.0~P1.4引脚。在大部分时间内,这些引脚被设置为推挽输出,用于驱动数码管。每隔一段时间,采集一次按键的状态。在将这些引脚作为输入使用之前,先把P3.5 P3.2 P3.1 P3.0 置为高阻状态,这些引脚用于数码管或发光管的公共阳极端,将它们设置为高阻态以后,数码管不再导通,避免对按键的判断产生影响。接着将P1口各引脚设置为高阻输入状态,从图中可以看到,按键的一端接有阻值为10K的排电阻,这个排电阻的公共端接+5V;而按键的另一端全部连接在一起,并通过1K电阻接地。当P1口被置为高阻状态后,如果没有键被按下,则由于排阻PZ1的作用,P1相应的引脚上将读到高电平1。如果有某一个或者多个按键被按下,则这些按键对应的引脚将变为低电平。因此,读入P1口的状态即可判断哪些按键被按下。以下是键盘处理程序。

uchar Key(void)                //键盘处理

{          uchar Key;

static uchar Mark;          //标志

uchar temp1,temp2=0;  //暂存键值

if(Mark==0)                 //无键按下

{     if(iTNum!=0)

return 0;

}

TR1=0;

temp2=P3;                    //读取P3值

temp2|=0xd8;                //除P3.5,P3.2,P3.1,P3.0以外,各位置1

P3M1&=0xd8;

P3M0|=0x27;                //P3.5 P3.2 P3.1 P3.0 置为高阻

temp1=P1;

P1|=0xff;                      //P1输出为高

P1M0=0xff;

P1M1=0;                     //设置P1口是高阻输入

uDelay();                      //短暂延时

Key=P1;                //取P1口的值

P1M0=0x0;

P1M1=0xff;           //设置P1口为推挽输出

P1=temp1;             //还原P1口的值

P3M0&=0xd8;

P3M1|=0x27;         //恢复P3相应端口为推挽输出

TR1=1;

Key|=0xe0;            //高3位不参与键值判断

if(0xff==Key)        //无键按下

{     Mark=0;         //清除该标志

……常规的按键操作程序。

3.2           PWM波形生成

PWM波形的频率可以根据工作特点、单片机内部结构等来确定,这里使用50HZ。程序中,CalcPwmOut函数根据设定的数值,计算PWM波形中高电平和低电平各应持续的时间,然后折算成定时器的定时初值。频率为50Hz即定时时间为20ms,也就是不论输出波形的占空比如何,其周期总是20ms。当所用晶振频率为12M时,周期的计数值必须是20000。周期计数值由高电平输出阶段持续值和低电平输出阶段持续时间两部分组成,这两部分计数值加起来是20000。以占空为20%为例,高电平持续时间为4ms,计数值为4000,而低电平持续时间为16ms,计数值为16000。理论上,输出的控制电压可以在0~5V之间变化,即占空比可以为0%~100%,但实际上,为了保证精度,这里规定占空比不得超过10%~90%,即基准电压在0.5~4.5之间变化,计数值在2000~18000之间变化。为了获得整数计算结果,这个值也可能会有所调整。例如,我们要设计输出电压为3~12V的电源模块,如果计数值从2000~18000变化,即变化量为18000-2000=16000,16000/90=177.77,这样不合理。如果将起点和计数值设为2000~16400,即间隔为16400-2000=14400,14400/90=160。这样,相应的计算公式是:Vv*160+2000,式中Vv用来表示电压值,其值从30变化到120。当设定电压为3.0V时,计算结果是6800,而当设定电压为12V(Vv=120时),计算结果是16400,相当于获得的基准电压为1.7V~4.1V。当禁止输出时,输出占空比为10%的PWM波形,即0.5V的基准电压。

void CalcPwmOut()              //PWM输出计算

{

ulong      ltmp;

ltmp=Vv;                            //取设置值

ltmp*=160;

ltmp+=2000;

if(OutCnt==0||iProtect)  //如果禁止输出

ltmp=2000;            //则输出基准值

Tmr0H=ltmp;

Tmr0L=PwmZs-Tmr0H;

……

计算出高电平应该持续的时间以后,用PwmZs(20000)减去这个值,就是低电平持续时间。然后再分别计算出高电平持续时间对应的TH0预置值和TL0预置值,其方法是用65536减去相应的计数值,然后分别取高8位和低8位,相应的程序如下所示。

Tmr0HH=(65536-Tmr0H)/256;

Tmr0HL=(65536-Tmr0H)-Tmr0HH*256;

Tmr0LH=(65536-Tmr0L)/256;

Tmr0LL=(65536-Tmr0L)-Tmr0LH*256;

3.3           数据的保存

STC12C2052芯片内置了EEPROM,可以用来保存相关参数。在STC芯片的数据手册上提供了相应的参考C语言参考程序。

其中读数据的函数为:unsigned char ByteRead(unsigned int Addr);

擦除单元数据的函数为:void EraseSector(unsigned int Addr);

将数据写入指定单元的函数为void ByteWrite(unsigned int Addr,unsigned char Dat);

调用这些函数的例子如下:

1.读出指定单元中的数据

OutMode=ByteRead(0x1000);

OpenSt=ByteRead(0x1001);

LockMode=ByteRead(0x1002);

2.擦除指单元

EraseSector(0x1000);

3.将数据写入指定单元

ByteWrite(0x1000,OutMode);

ByteWrite(0x1001,OpenSt);

ByteWrite(0x1002,LockMode);

ByteWrite(0x1003,Vv);

4.制作与调试

作者是批量制作,因此使用了印刷线路板。其中图2用了单面板,而图3则使用了双面板。图3所示的控制电路基本不需要调试,只要安装无误,即可正常工作,图2所示主电路需要进行按一定的顺序进行调试。安装图2所示主电路后,与控制电路连接,数码管上应能显示默认值3.0。单击按钮,按1.3节描述测试各功能,对于输出电压不必在意,只管数码管、LED显示正确即可。

LED、数码管等功能测试完毕后,按下输出切换键,关闭输出,此时输出指示LED熄灭。使用万用表测量图2所示Va,该值应该是5V,这个值的绝对精度要求并不高,因此通常不需要调整。如果该值偏离5V较多,应检查T1及周边元件是否损坏。当Va是5V时,VT1集电极电压约为4.1V。调节RP3,使得IC1的7脚输出为0V,即完成零点调整。将数码管上电压输出值调整为12.0V,按下输出切换键,开启输出,此时输出指标灯LED点亮。测量J4输出端电压,调整RP2,使得输出端的电压为12V,这样就完成了电压调整工作。输出保护可以视需要来进行调整,如果要在输出电流是1A时保护,可以在输出端接上负载,并串入电流,调整负载,当电流为1A时,调节RP1,使得IC1的1脚输出低电平。

电路制作完成后,还要做一个机壳,作者使用的市场上一种较易购买到的机壳,价格大概在5~6元左右,恰好可以装入一个20W的变压器和主板。控制板就直接安装在面板上了,安装工艺如图4所示。面板上根据印刷线路板安装孔的尺寸,打4个安装孔并锪孔,使用沉头螺钉,以便螺钉头部嵌入面板不致突出。穿过螺钉后用螺母紧固,然后再拧入第2个螺母。将印板上的4个安装孔穿入螺钉,调整螺丝上的第2个螺母,可以调整印板到面板间的距离,使得轻触按钮刚好与面板正面齐平,而数码管也正好与面板正面齐平或略低。加平垫、弹簧垫并用螺母压紧,即完成印刷线路板的安装工作。

图4 安装控制电路

因为黑色的拍出来很不好看,因此用一块双色板做演示拍的如何安装主控板

电源板,图中的二极管只是装了1N4007,没有装1N5404。散热器没有装(在左侧一片空白处可以装一块体积不算小的散热片了)

最后用激光打印机打印一张不干胶贴纸,刻去数码管显示窗口部分的纸,粘贴在面板上。注意按键和数码管的前面放置一小块透明的薄膜,这块放置在不干胶和面板之间。薄膜不能太硬,否则按键手感不好,也不能太软,否则贴纸很快会被顶破。作者用的是教学投影片,效果不错。将盒子盖起来时,在贴纸前面再粘一层保鲜膜,这样,贴纸不易脏,其上打印的字也不易脱落,使用效果较好。当然,有条件时,制作薄膜面板是效果最好的。最终的制作效果图1所示。

c语言程序设计双色板实训教程答案,可锁定输出的数控稳压电源-完全开源相关推荐

  1. 画出识别c语言注释的转换图,C语言程序设计基础与实训教程》第1章:基础知识.ppt...

    <C语言程序设计基础与实训教程>第1章:基础知识.ppt>由会员分享,可在线阅读,更多相关<C语言程序设计基础与实训教程>第1章:基础知识.ppt(25页珍藏版)> ...

  2. C语言循环语句实训项目,C语言程序设计与项目实训

    C语言程序设计与项目实训 编辑 锁定 讨论 上传视频 <C语言程序设计与项目实训>是2013年清华大学出版社出版的图书,作者是吴艳平.徐海燕. 书    名 C语言程序设计与项目实训 作  ...

  3. c语言程序设计项目化实训教程北京邮电出版,C语言程序设计教程(北京邮电大学出版社) 第1章精选.ppt...

    C语言程序设计教程(北京邮电大学出版社) 第1章精选 1.1 程序与程序设计 1.2 算法及其描述 1.3 C语言的发展及特点 二.C语言的特点 1.具有结构化语言的特点,用函数作为程序的组成单 位, ...

  4. c语言程序设计教程第二版张磊,C语言程序设计实验与实训指导及题解(第2版)-张磊...

    ?本书是普通高等教育"十一五"规划教材<C语言程序设计>(第2版)的配套辅导教材,全书主要包括实验指导.综合程序设计指导和习题解答三部分内容. 实验指导部分对应主教材各 ...

  5. 陕西国防 c语言第三章实训三答案,C语言程序设计实验指导

    <C语言程序设计实验指导与习题精选 >是编写团队多年教学的结晶,同时配套全国计算机等级考试内容,读者学习本书,可以加强实践环节训练,深入理解书中的算法,提高学习效率 /2019-03-01 ...

  6. c语言程序设计与实训,清华大学出版社-图书详情-《C语言程序设计与项目实训》...

    随着信息技术的迅猛发展,计算机人才的需求与日俱增, C语言走进了各类大学校园,成为相关专业学生的必修课程.同时,C语言也成为大学生们永恒的话题,部分大学生对它产生了恐惧心理,尤其是高职高专的学生更是& ...

  7. 陕西国防 c语言第三章实训三答案,C语言程序设计(上)

    大家好!欢迎你们!无论是新同学还是老朋友,都非常高兴能在这里和大家相聚! 我们一如既往还说C,因为它称霸于计算机语言,超乎我们的想象. 如果想深刻的理解这个时代,就要理解计算机编程! 编程完成了基于计 ...

  8. c语言周林答案,C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt...

    C语言程序设计实训教程教学课件作者周林ch04结构化程序设计课件.ppt * * 4.1 选择结构程序设计 4.2 循环结构程序设计 4.3 辅助控制语句 第四章 结构化程序设计 4.1 选择结构程序 ...

  9. 判断奇偶的c语言程序设计教程课后答案,C语言程序设计实训教程习题和试验解答.doc...

    C语言程序设计实训教程习题和实验解答 2.1 C语言概述 [习题解答] 1结构化程序有三大基本结构:顺序.分支和循环. 2..算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤.或者看成按 ...

最新文章

  1. [HNOI2008]GT考试[矩阵快速幂+kmp优化的dp]
  2. 剑指offer:把字符串转换成整数
  3. Hadoop(一)之初识大数据与Hadoop
  4. eclipse import的项目报autowired cannot be resolved to a type的错误
  5. 在linux 或docker中使用 system.drawing.common
  6. 74hc138译码器实验c语言程序,基于74hc138译码器实验分析 详解74hc138译码器实验
  7. Leetcode练习 快慢指针
  8. 51单片机开发板介绍
  9. 【面试总结】JNI层MediaScanner的分析,挥泪整理面经
  10. html制作地球自转,利用CSS3实现地球自转
  11. VB的界面设计~ 值得一看
  12. 思考12. 口说无凭,眼见为实。
  13. 【拓扑学知识】4.拓扑性质--分离公理与可数公理(分离性和可数性)
  14. 使用opencv的透视变换裁剪倾斜人脸
  15. 分享 | 全职在家工作/读书应该如何保持效率
  16. 深度linux安装防火墙,CentOS7安装iptables防火墙
  17. 【python】【转调】用python程序实现简谱转调
  18. 《Total Commander:万能文件管理器》——第2.5节.问题:我适合用TC吗?
  19. java仿QQ程序4.0
  20. 简单的理解EKF算法1

热门文章

  1. Mybaits逆向工程
  2. 3DMAX里面的烘焙规范(一)
  3. Windows11 21H2的版本任务栏任务折叠小窗口不是圆边的,很丑!
  4. java 网页编码_JAVA如何判断网页编码
  5. 人脸检测和识别(中文标记)完整项目源代码(基于深度学习+python3.6+dlib+PIL+CNN+(tensorflow、keras)10分钟实现 区分欢乐颂中人物详细图文教程和完整项目代码)
  6. U盘重装Win10方法以及常用必备软件安装
  7. 如何运用bat脚本批量 重命名/复制 文件
  8. 京东商城注册页面使用的正则表达式
  9. no target device found 问题解决
  10. UMP系统功能 容灾