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

本文详细介绍了如何制作一款具备电压锁定功能的数控电源。电源采用3位数码管显示电压,4个发光管指示工作状态,通过5个按键进行设置。技术指标包括3~12V的输出电压,0.1V/步进调整,过流保护和三种调压模式。电源由控制板和主电源板组成,基准电压通过PWM方式产生,单片机控制输出电压。软件部分涉及键盘处理、PWM生成和数据保存。制作过程中包括电路调试和面板安装,最后展示了成品效果。
摘要由CSDN通过智能技术生成

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

1.电源的性能及操作

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

2892012375922.jpg

图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电源给控制板。

2892454169592.jpg

图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波形

2893107509821.jpg                

2893341976522.jpg

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路过流信号输入。

2893872215048.jpg

图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个螺母,可以调整印板到面板间的距离,使得轻触按钮刚好与面板正面齐平,而数码管也正好与面板正面齐平或略低。加平垫、弹簧垫并用螺母压紧,即完成印刷线路板的安装工作。

2894476253381.jpg

图4 安装控制电路

2894829128871.jpg

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

2895189801646.jpg

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值