版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于STC12系列单片机的串联型开关电源设计与实现开关电源是一种利用现代电力电子技术,控制开关管开通和闭合的时间比率,维持稳定输出电压的一种电源,开关电源一般是由脉冲宽度调制(PWM)控制。与一般的线性电源相比较,两者的成本都随着输出功率的增加而增长,但两者的增长速率有所差异,最重要的一点就是开关电源效率一般都会要比线性电源的效率要高。基于开关电源与线性电源的不同,开关电源主要由以下的几个模块组成:1串联开关电源电路;2 AD转换模块采集电源电压;3 PWM波形输出模块;4数码管显示;5键盘输入设置电压;6通过CPU(STC12C5A60S2)控制算法。系统的基本框图如下:基本思路为:首先从键
2、盘输入一个电压值,并把该电压值在数码管上面显示出来,再由A/D转换模块对串联开关电源电路的输出端进行电压采集,将采集到的电压值与键盘输入的电压值进行比较,通过闭环算法,控制PWM的脉宽输出,由此控制串联开关电压电源电路,改变输出的电压值,使得输出值与设定的电压值相等。一:串联开关电源电路部分该电路图由一个三极管,电感,电阻,电容,二极管,还有就是接VCC和接GND端,电路相对比较简单,如图所示:原理:在PWM端无输入时,三极管相当于闭合,三极管右边的电路无电流流过,此时RL两端的电压为0V。当PWM端有电流输入时,三极管导通,电感L1和电容C1,可以分别防止电流和电压突变,有一定的稳压作用。高
3、频二极管D1,可以在PWM由开向关状态转换时与电感L1形成通路,释放电感的能量。而由于PWM端输入的是方波,也就是说三极管是处于开或者关状态的。由此C1和R1在开状态时电容充电,R1两端的电压逐渐升高,而当三极管处于关状态时,电容C1对R1进行放电,此时电压逐渐降低。最后通过控制三极管的开与关的时间比例便可以使得在R1两端形成稳定的电压。二:键盘输入数据部分在该实验中,输入数据时要用到矩阵键盘,矩阵键盘又称为行列式键盘,它是用4条I/O线作为列线,4条I/O线作为行线组成的键盘。在行线和列线的每一个交叉点上设置一个按键,由此组成了4*4的键盘,比之直接将端口线用于键盘多出了一倍,而且线数越多,
4、区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。这样的行列式键盘结构可以有效地提高单片机系统中I/O口的利用率。如下图所示的4*4矩阵键盘:为了判断矩阵键盘上面的按键是否有按下的,由于矩阵键盘是连接着P2口的,可以事先对P2端口赋值,比如使P2 = 0x7f,则除了P2.7口是低电平之外,其余的均为高电平。通过扫描P2.0到P2.3,要是有按键按下,假如P2.3为低电平,则可知道P2.3与P2.7对应的那个按键按下了(也就是SM1),以此类推,便可以知道具体是哪个按键被按下了。除了上面要知道是
5、哪个按键被按下了之后,还要知道那个按下的按键代表的是哪个值,此时通过给所赋的低电平的端口和另一个低电平的端口组合起来就可以知道所按下的按键所代表的数值。三:数码管数据显示部分知道了上面在矩阵键盘输入的数值后,便要在数码管上面显示出来。该实验板的8位数码管是共阴极的数码管,使用端口为P0和P1口,且为动态数码管,因此在同一时间,只有一个数码管是亮着,但由于人眼的视觉残留,使得看上去是全部一起亮着的。8位分别有段选和位选,段选就是要一个数码管显示的字型,而位选则是由低电平选中所要那一个数码管,该数码管才能亮。因此要使得数码管亮并显示数字,则必须在位选时该数码管的位选管脚出于低电平,然后再通过段选显
6、示字型。如下图所示的数码管:四:控制PWM输出部分STC12C5A60S2系列单片机集成了两路可编程计数器阵列(PCA)模块,可用于软件定时器,外部脉冲的捕捉,高速输出以及脉宽调制(PWM)输出。在该实验中主要用到PWM脉宽调制输出,通过对特殊功能寄存器初始化,就可以在P1.3(选择模式0时) 或P1.4(选择模式1时)端口输出可调占空比的高速脉冲。五:A/D转换部分(完成万用表功能,即测量开关电源输出电压)STC12C5A60S2系列单片机自带有8路10位高速A/D转换器,在本实验中只用到其中的一路,故可以通过软件设计选择其中的一路用来测量电压。在不需作为A/D转换的端口可以继续作为I/O口
7、使用。AD转换对特殊功能寄存器的初始化主要有ADC_CONTR和A/D转换结果寄存器ADC_RES(用来存放高八位)ADC_RESL(用来存放低两位);在ADC_CONTR中包含有ADC电源控制位ADC_POWER,模数转换器转换速度控制位SPEED1SPEED0,模数转换器转换结束标志位ADC_FLAG,模数转换器(ADC)转换启动控制位ADC_START,模拟输入通道选择CHS1/CHS2/CHS3。由于是2套时钟,在设置ADC_CONTR控制寄存器的语句执行之后,要经过4个CPU时钟的延时,其值才能够保证被这只进ADC_CONTR控制寄存器,所以设置ADC_CONTR控制寄存器后,要加4
8、个空操作延时才能正确读到ADC_CONTR寄存器的值。ADC的结构如下图所示:六:闭环控制算法这部分是整个实验中最重要的部分,该部分主要是通过A/D采集数据控制PWM输出,PWM控制开关电源输出,以达到稳定,即让开关电源输出电压稳定在键盘输入的电压值。针对前面的要求,则需要用单片机来完成所有的控制与计算。在该实验中,作为AD采集的端口为P1.0,PWM输出端口为P1.3,在采集完电压数据的时候把数据存放在ADC之中,而从键盘输入数值时,键盘上显示的是一个小数,但在单片机中存在中间变量temp的是一个整数,为小数的1000倍,因此在引用数码管显示的数值时要将temp除以1000才能得到实际的设置
9、电压数值Vs;另一方面,采集回来的电压ADC要转换成实际的电压数值,则由下面的算法得出:真实值 Vr = ADV*5.0/1024.0 在得到这两个数值之后对他们进行比较,要是Vr<Vs,说明采集回来的电压偏低,此时则要降低PWM输出脉冲的占空比;同理,当Vr>Vs时,则要降低PWM输出脉冲的占空比,由此而使得串联开关电路的输出电压与事先所设置的电压值相同。实际测得的电压与设置的电压对比表格如下:Vs<0.80.80.91.01.11.21.31.41.51.61.7Vr0.860.951.031.161.261.341.451.561.651.71.81.92.02.12.
10、22.32.42.52.62.72.82.91.81.92.012.122.232.342.442.532.642.762.852.933.03.13.23.33.43.53.63.73.83.94.0>4.03.073.123.253.353.463.583.693.783.93.964.08通过上面的表格可以看出来,虽然实际测出来的电压Vr和设置的电压Vs有一定的误差,但是总体还是在设置的电压附近波动,所能输出地电压范围为0.8v4.0v。心得体会:通过这次基于STC12系列单片机的串联型开关电源的课程设计让我对单片机的理论有了更加深入的了解,同时在具体的制作过程中我发现现在书本上的
11、知识与实际的应用存在着不小的差距,书本上的知识很多都是理想化后的结论,忽略了很多实际的因素,或者涉及的不全面,可在实际的应用时这些是不能被忽略的,因此不得不考虑这方面的问题,这让我无法根据书上的理论就轻易得到预想中的结果,有时结果甚至很差别很大在实验之中,要使用单片机的管脚,则必须要对所要用到的管脚充分的了解。在此之中我充分了解到,单片机的管脚不单单是输入输出而已,还有很多的其他功能,就比如说这次实验中所用到的AD转换功能和PWM脉冲输出功能。要知道怎么样使用一些管脚的第二功能或者第三功能,就要对该单片机的结构有更深的了解,在设计程序的时候就可以对一些特殊的功能寄存器进行初始化,以便更好地使用
12、复用的管脚。除此之外,我更加深了对C语言的理解,C51是针对单片机设计的,它与纯粹的C语言还是有一些差别的。像在这次实验之中使用到的定时器和对一些特殊功能寄存器赋值的那些语句,在纯粹的C语言里面是没有的。C51是要在熟知单片机的结构下才能编程的,特别是此次里面所要用到的AD转换和PWM脉宽输出。在编程的时候,有几点很深的体会就是:1定时器的使用,定时器有点类似于死循环,不过和死循环不一样的是,定时器是当计时超过所设定的时间时,就会产生中断,从头开始几时,在定时器中断里面的程序也重新开始执行。而死循环,比如说while(1),在它里面的程序执行完一次的时候有会从新从头开始执行,不像定时器要到一定
13、的时间之后才可以重新运行一次程序。2还有就是对一些细节上面的改进,比如说按按键是的防抖动问题,可以加上一些延时防止单片机误判多次按下按键。关于小数点的时候,可以用一个除所需显示的数字按键来表示,小数点的移动可以设置标志位,再与前面现实的数值相或,就可以使得小数点显示在相应的位那里了。总体来说,我通过这次课程设计不单单学到了很多单片机和C51编程的的知识,更多的是学会了学习的方法,能够将所学到的知识用到实验上面,可以把知识记得更清楚。这还更多地提高了在遇到实际问题时该怎样解决实际问题的能力。更深入地学习C语言,又可以更多地提高自己的逻辑,思考能力,使思维结构更严谨。希望在以后的学习之中可以更多地
14、接触到这样的实验,那样就可以更好地提高自己的动手能力与对所学知识的运用能力。本实验C程序源代码:/*/*文件名:开关稳压电源.c*/*功能:设定电压初始值,使得输出电压值与数码管显示值相同*/*单片机型号:STC12C5A60S2(带AD转换与PWM脉宽调制输出功能)*/*/*/#include <STC12C5A60S2.H>#include <intrins.h> /51基本运算(包括_nop_空函数#define uchar unsigned char#define uint unsigned intvoid Display_Number(unsigned int
15、 Number); /显示函数声明void delay (unsigned int t ); /延时函数的声明void Read_init (uchar CHA);unsigned int ADC_Read (void);void KeyScan(void); /键盘扫描函数void PWM_init(void); /PWM输出初始化函数void PWM0_set (unsigned char a); /PWM脉宽占空比输出设置unsigned char code Bit_Table8=0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;unsigned char
16、code Seg_Table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x00;unsigned charLedBuf=0,1,2,3,4,5,6,7;unsigned char DispPoint = 200; /小数点标志位unsigned char t = 50;unsigned char i,xxx =50;unsigned int j,temp =0;unsigned int ADC = 0;unsigned int Vset = 200;uchar KeyDownFlag = 0;uchar KeyValue = 0;uc
17、har KeyValueTemp = 0;uchar Key20msDelay = 0;sbit P2_0 = P20;sbit P2_1 = P21;sbit P2_2 = P22;sbit P2_3 = P23;sbit P3_5 = P35;void main(void)TCON = 0x01; EX0 = 1;EA = 1;TMOD = 0x11;/设置定时器T0T1都是工作方式1TH0 = 0xF8;/定时器0初始化T0 = 65535-2000 定时2ms TL0 = 0x2F;TH1 = 0xEC;/定时器1初始化T1 = 65535-5000 定时5msTL1 = 0x77;
18、ET0 = 1;ET1 = 1; TR0 = 1;TR1 = 1;Read_init(0); /选择AD转换通道7PWM_init(); /PWM初始化Display_Number(0);while(1) if(P3_5 = 0)Display_Number(xxx);/显示占空比,用于测试 delay(20);if(KeyDownFlag)/判断矩阵键盘是否有按键按下 if(KeyValue = 16)/16表示小数点DispPoint = 4;elseif(temp<1000&&KeyValue<11) /只用到矩阵键盘的1到10的按键if(KeyValue =
19、 10) KeyValue = 0;temp = 10*temp+KeyValue ;/读取矩阵键盘值DispPoint = DispPoint+1;/小数点左移一位 Display_Number(temp);/显示数值for(i=10;i>0;i-)for(j=20000;j>0;j-); /*AD转换函数*/unsigned int ADC_Read (void)unsigned char c,AD_FIN=0; /存储A/D转换标志unsigned int SUM = 0;for(c=50;c>0;c-) ADC_CONTR |= 0x08;/启动A/D转换(0000
20、1000 令ADCS = 1) _nop_(); _nop_(); _nop_(); _nop_(); while (AD_FIN =0) /等待A/D转换结束 AD_FIN = (ADC_CONTR & 0x10);/0001 0000测试A/D转换结束否 ADC_CONTR &= 0xE7; /1111 0111 清ADC_FLAG位, 关闭A/D转换,SUM = SUM +ADC_RES*4+ADC_RESL;/10位ADC数据高8位在ADC_RES中,低2位在ADC_RESL中 SUM = SUM/50;return (SUM); /返回A/D转换结果 取10次的平均
21、/*AD转换初始化函数*/void Read_init (uchar CHA)uchar AD_FIN=0; /存储A/D转换标志 CHA &= 0x07; /选择ADC的8个接口中的一个(0000 0111 清0高5位) ADC_CONTR = 0x60; /ADC转换的速度 _nop_(); ADC_CONTR |= CHA; /选择A/D当前通道 _nop_(); ADC_CONTR |= 0x80; /启动A/D电源 delay(1); /使输入电压达到稳定(1ms即可) /*数码管显示函数*/void Display_Number(unsigned int Number)un
22、signed int Temp = Number;unsigned char i = 0x04;while(Temp > 0)LedBufi = Temp % 10;Temp = Temp / 10;i+;for(;i<8;i+)LedBufi = 10;/*利用定时器T0对数码管扫描显示数值*/void T0_interrupt(void)interrupt 1static unsigned char data i = 0x04;TMOD = 0x11;TH0 = 0xF8;/定时器T0初值重装t TL0 = 0x2F;KeyScan();P0 = 0x00;P1 = Bit_T
23、ablei;if(i = DispPoint)P0 = Seg_TableLedBufi|0x80;else P0 = Seg_TableLedBufi;i+;if(i>7) i = 0x04;/*延时函数*/void delay (unsigned int t ) unsigned int i; while (-t != 0) for (i = 0; i < 600; i+); /*矩阵键盘扫描*/void KeyScan(void) uchar TestKeyCode;uchar ScanKeyCode;uchar i;ScanKeyCode = 0x00;for(i=0;i&
24、lt;4;i+)TestKeyCode = 0x80;/1000 0000TestKeyCode >>=i; /右移1000 0000TestKeyCode = TestKeyCode;/取反得0x7f 0111 1111 P2 = TestKeyCode;if(!P2_3) ScanKeyCode = 4*i+1;break;else if(!P2_2) ScanKeyCode = 4*i+2; break;else if(!P2_1) ScanKeyCode = 4*i+3; break;else if(!P2_0) ScanKeyCode = 4*i+4; break;if(ScanKeyCode) /按键按下if(!KeyDownFlag) if(Key20msDelay)Key20msDelay+; if(Key20msDelay > 8) /延时防抖动if(KeyValueTemp = ScanKeyCode) KeyDownFlag = 1; KeyValue = KeyValueTemp; Key20msDelay = 0; elseKey20msDelay = 1;KeyValueTemp = Sc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广告公司合作协议合同样本
- 2025软件销售代理合同书
- 2025小型汽车配件购买合同
- 2025公司向个人借款合同范本
- 二零二五年度房地产项目土地租赁及销售代理协议3篇
- 2025农村家庭土地流转合同分家协议书样本2篇
- 公墓生态葬服务及配套设施建设合同(年度)3篇
- 二零二五年度电子商务企业高管平台运营管理聘用合同3篇
- 2025年度房屋维修服务与社区环境改善合作协议2篇
- 二零二五年度新型塑钢窗研发与生产合同3篇
- 2025年国家图书馆招聘笔试参考题库含答案解析
- 机器人课程课程设计
- 南充市市级事业单位2024年公招人员拟聘人员历年管理单位遴选500模拟题附带答案详解
- 安全知识考试题库500题(含答案)
- 2024-2025学年上学期南京小学数学六年级期末模拟试卷
- 河北省保定市定兴县2023-2024学年一年级上学期期末调研数学试题(含答案)
- 2025年中国蛋糕行业市场规模及发展前景研究报告(智研咨询发布)
- 护理组长年底述职报告
- 护理不良事件分析 课件
- 糖尿病患者健康管理测试试题(三套题-有答案)
- 《住院患者身体约束的护理》团体标准解读课件
评论
0/150
提交评论