《毕业设计(论文)高效率恒流源控制电路的设计.doc》由会员分享,可在线阅读,更多相关《毕业设计(论文)高效率恒流源控制电路的设计.doc(26页珍藏版)》请在三一办公上搜索。
1、泉 州 师 范 学 院毕业论文(设计)题 目 高效率恒流源控制电路的设计 物理与信息工程 学 院 电子信息科学与技术 专 业 07 级 1 班学生姓名 学 号 指导教师 职 称 教授 完成日期 2011.4 教务处 制高效率恒流源控制电路的设计物理与信息工程学院 电子信息科学与技术 指导老师【摘 要】本文设计了由单片机C8051F410为核心的高效率恒流源控制电路,该控制电路可以实现开关稳压电源输出恒定电流。开关稳压电源的电流可在200mA到600mA间进行设置调节,设置调节电流是通过按键控制实现。输出电流和预设的电流还可以通过LCD显示屏显示出来。【关键词】数字电位器;C8051F410;恒
2、流;程序模块目 录引言41. 总体方案设计41.1系统设计41.2 系统设计的基本要求42. 单片机控制电路的设计42.1 单片机C8051F410介绍42.2 单片机内部的模/数转换器62.3 单片机内部的数/模转换器72.4 I2C总线的介绍72.5单片机最小系统电路设计82.6 数字电位器X9241的介绍82.7 数字电位器的电路设计122.8 显示电路的设计122.9 按键的设置123. 单片机控制程序的设计133.1 AD子程序的流程图133.2 数字电位器的子程序133.3总体设计程序144. 数据测量及数据分析164.1测试仪器164.2数据测试174.3数据分析185. 设计总
3、结18致谢18附录 PCB原理图和程序19引言随着现代科学技术的迅速发展,电子产品的发展速度也是相当的迅速,现在电子产品已经走进各家各户。随着电子厂家的增多,电子产品的普及,并且很多电子产品都要用到可充电池。但是不同的厂家生产的电池型号不同,充电电流电压都不一样。本文就提出了设计可控制的充电器的控制部分。该控制部分控制了充电的电流,是充电电流恒定,并且电流还可以由按键控制在200mA到600mA间改变,对不同型号的电池采用合适的充电电流,使电池的使用寿命更长。该控制电路的优点就是能满足不同型号的电池,而且可以使充电器的效率更高。1. 总体方案设计1.1系统设计本系统原理框图如图1-1所示,主要
4、是由单片机C8051F410最小系统、按键、控制模块和液晶显示器组成。其中,用单片机内部的AD功能采集电压,算出输出电流值,通过和设定的电流比较大小,使单片机控制控制模块,让输出电流稳定。预设电流的大小由按键控制,且采集的电流和预设的电流大小都会在液晶显示屏上显示。图1-1 系统原理框图1.2 系统设计的基本要求(1) 能使输出电流稳定。(2) 通过按键的控制可以改变输出电流的大小:200mA600mA。(3) 能在液晶显示屏上显示采集的电压和输出电流。(4) 可以充电完报警。2. 单片机控制电路的设计2.1 单片机C8051F410介绍单片机自从20世纪70年代末发明到现在,经历了单片微型计
5、算机、微控制器及片上系统三大阶段,前面的两个阶段主要是以MCS-51和80C51为代表。但是随着嵌入式领域对单片机的性能和功能要求大大的提高,以前的单片机不管是运行的速度还是系统的集成度等多个方面都不能够满足新设计的要求,就在这个时候Silicon Labs 公司推出了C8051F系列单片机,成为了片上系统的典型代表。C8051F系类的单片机具有上手快(与8051的指令集完全兼容)、研发快(开发工具易用,可缩短研发周期)和见效快(调试手段灵活)的特点。C8051F系类的单片机性能优势主要有:基于增强的CIP-51内核,与MCS-51的指令集完全兼容;中断源增加到了22个中断源,使得单片机有更高
6、的执行效率;内部集成了丰富的模拟资源;集成了多个外设接口,可以让设计者减少外接电路,这不仅仅减少了系统的成本,更是大大降低了功耗;提高了信号处理方面的性能;片内具有独立的时钟源,程序员既可直接应用片内时钟,也可选择外接时钟,同时还可以在内外时钟源之间自由的切换,且时钟切换功能有利于降低系统整体功耗;提供了空闲和停机模式等多种电源管理模式来降低系统的功耗;实现了I/O口从固定使用方式到交叉开关配置;复位方式多样化,这是为保障系统的安全、操作的灵活和零功耗系统的设计带来极大好处;仿真调试从传统的仿真调试方法到基于JTAG接口的系统调试;C8051F系列单片机的型号众多,设计者可以根据设计需要来选择
7、不同的规模以及带有特定外设接口的型号,该公司提供了引脚最多的高性能单片机多达100个引脚,封装最小的可以小到3mmX3mm,这样可以满足不同设计的需求1。C8051F410的引脚图如图1-4所示。图1-4 单片机的引脚图单片机C8051F410是Silcon Lab公司发明的小封装、高性能、完全集成的低功耗混合信号片上系统型MCU。因为单片机有片内上电复位、VDD监视器、看门狗定时器和时钟振荡器,所以C8051F410单片机是真正能独立工作的片上系统。FLASH存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051固件。片内集成外设的很多先进特性,设计者可以通过软件对所
8、有外设进行控制,可以关断任何一个或所有外设节省应用代码空间和CPU执行时间。由于单片机C8051F410的各种优点,它适合于仪器仪表、便携式医疗设备、测控系统、智能传感器、POS系统、电子玩具、游戏机等众多应用领域。单片机C8051F410具有强大的功能,它的内部结构和原理分别如图1-2和1-3所示。C8051F410的功能和特点:微控制器核是高速、流水线结构且与8051兼容的,最高速度可达50MIPS;片内具有全速、非侵入式的在系统调试接口;有12位的ADC和两个12位的电流输出DAC;内部具有高精度振荡器 ,频率为24.5MHz且可编程;片内有32KB的FLASH存储器和2304字节RAM
9、 ;硬件实现的SMBus/ I2C、增强型UART和增强型SPI串行接口;4个16位定时器 ;具有6个捕捉/比较模块和看门狗定时器功能的可编程计数器/定时器阵列(PCA); 硬件实时时钟(smaRTClock),工作电压可低至1V,带64字节电池后备RAM和后备稳压器硬件CRC引擎;片内具有电压比较器、上电复位、VDD监视器和温度传感器2。图1-2 C8051F410单片机内部结构图图1-3 C8051F410原理框图2.2 单片机内部的模/数转换器C8051F410的ADC0子系统是由一个27通道的模拟多路选择器和一个200ksps的12位逐次逼近寄存器型ADC组成的,ADC中还集成了跟踪保
10、持电路、可编程窗口检测器以及硬件累加器。ADC输入为单端方式,可以选择P0.0 到 P2.7、温度传感器输出、VDD或GND为测量的输入端口,这些端口测量的信号都是相对GND的。但是要注意的是被选择为ADC0输入的端口应该配置成模拟输入,且要跳过数字交叉开关2。图2.3为12位ADC的原理框图。图1-5 ADC的原理图 在配置ADC的时候,首先要选择转换启动源。ADC有四种转换启动方式:将AD0BUSY 置1、定时器3溢出、CNVSTR输入信号的上升沿、定时器2溢出。然后要选择是正常方式还是突发方式。每次ADC转换的时候必须有一小段的时间用来跟踪,使转换结果准确。ADC有三种跟踪方式:预跟踪、
11、后跟踪和双跟踪。还要计算建立时间,接着要选择重复的次数和选择输出字左对齐还是右对齐。最后使能或禁止窗口比较以及转换结束中断2。2.3 单片机内部的数/模转换器C8051F410内部有两个12位电流方式数/模转换器(IDAC)。IDAC的输出方式是输出电流,它最大输出电流有4种不同的设置:0.25mA、0.5mA、1mA和2mA。IDA0的输出连接到P0.0,IDA1的输出可连接到P0.0或P0.1。当使用IDAC时,所选择的IDAC引脚应被交叉开关跳过2。2.4 I2C总线的介绍C8051F410内部有一个SMBus/I2C接口,SMBus I/O接口是一个双线的双向串行总线,与I2C串行总线
12、兼容。I2C总线采用的是二线制传输,一根是数据线SDA,另一根是时钟线SCL,所有的I2C的器件都要接在SDA和SCL上,每一个器件都有独立的地址。I2C可以工作在主和/或从方式,一个总线上可以有多个主器件。在作为主或从器件时,数据传输的最大速率可达系统时钟频率的十分之一,I2C的数据传送的基本单元为一位数据,时钟线SCL的一个时钟周期只能传输一位数据2。SDA和SCL二者都是双向线路,它们通过模拟电路或者是的上拉电阻连接到电源正极,所以当二总线处于空闲状态时,二者都为高电平。在连接I2C总线的器件输出级必须是漏极开路或者是集电极开路的结构形式,以实现“线与”的功能。总线上扩展的接口芯片只受规
13、定的上升和下降时间的限制,上升时间不能超过300ns,下降时间不能超过 1000ns3。I2C总线的扩展如图1-6所示。图1-6 I2C总线扩展示意图2.5单片机最小系统电路设计单片机最小系统的电路设计如图图1-7。图1-7 单片机C8051F410的最小系统2.6 数字电位器X9241的介绍X9241是由美国XICOR公司推出的比较有代表性的一种,这种数字电位器是把4个E2POT数字电位器集成在单片的CMOS集成电路上。一块x9241芯片中有四个电位器,这四个电位器可以串联使用,也可以单个使用,每个电位器是由一个电阻阵列组成的,每个阵列由63个电阻串联,在每个电阻的连接点都有一个被滑动单元访
14、问的点。滑动单元在电阻阵列中的位置由程序员通过I2C总线接口控制。X9241共有20个引脚。其中20脚Vcc是电源,10脚Vss是地;9脚SDA是I2C数据线,14脚SCL是I2C时钟线;A0A3脚是地址线,是由用户使用的电路自己决定的;VW0VW3是电位器的滑动端;VH0VH3是电位器的高端;VL0VL3是电位器的低端。数字电位器的引脚配置图如图1-8所示。图1-8 x9241的引脚配置图X9241的每个电位器是由电阻阵列、一个滑动端计数寄存器(WCR)和4个8位数据寄存器组成的。用户可以直接写入和读出这4个数据寄存器中的数据。WCR的内容也可以由用户写入和读出,它是用来控制滑动端在电阻阵列
15、中的位置,以实现改变电位器的阻值。其功能框图如图1-9所示4。图1-9 x9241的功能方框图 X9241是一个支持I2C总线协议的从属器件。它的高4位地址为0101,这是固定位,固定为是由器件出厂时给定,用户是不能自行设置,这是器件的标识码。低4位地址由A0A3输入引脚的状态决定,这也规定了I2C总线上同类芯片的最大个数。当SCL时钟线为高电平时,数据线SDA上的数据必须稳定。当SCL时钟线为低电平时,数据点SDA的状态才能改变。当SCL为高时,SDA状态的改变用来表示开始和终止条件。单片机送到X9241的所有指令都是由开始条件引导,然后单片机再输出X9241从器件的地址。X9241把单片机
16、输出的数据流与该器件的地址比较,若地址比较是相同的,则发出一个应答响应信号。送到X9241的第二个字节包括指令、寄存器和电位器选择的信息,其高4位为指令,低4位的 P1、P0用来选择4个电位器中的1个以及R1、R0用来选择4个寄存器中的1个,其格式为:I3I2I1I0P1P0R1R0X9241共有9条指令,其指令集见表1。这9条指令中有4条二字节指令和三字节指令,还有一条指令是增加/减少指令。二字节指令是用在数据寄存器中一个和WCR的数据交换,其时序见图1-9(A);三字节指令是用在单片机和X9241之间的数据传输,其时序见图1-9(B);增加/减少指令是用来增加或减少滑动端的,其时序见图1-
17、9(C)。X9241的4个电位器之间可以串联使用。在三字节指令中,后面六位是用来定义滑动端的位置,前面两位是用来定义串联和滑动端使能的。其中CM位是用来表示串联方式的,当其为0时电位器正常工作;当其为1时,电位器与它相邻的高序号的电位器串联连接,DW位是用来滑动端使能,当其为0时滑动端使能,为1时滑动端被禁止。当工作于串联方式时,电位器之间应该串联起来,只能用一个滑动端,其它滑动端要禁止。是用来增加或减少滑动端的,其时序见图1-9(C)。图1-9 X9241的时序图表1 X9241的指令指令指令格式操作I3I2I1I0P1P0R1R0读WCR10011/01/0N/AN/A读出指定的滑动端的寄
18、存器数据写WCR10101/01/0N/AN/A在指定的滑动端的寄存器写入数据读数据寄存器10111/01/01/01/0读指定的电位器的指定的寄存器写数据寄存器11001/01/01/01/0写指定的电位器的指定的寄存器数据寄存器至WCR(单个)11011/01/01/01/0传输指定电位器的寄存器数据到WCRWCR至数据寄存器(单个)11101/01/01/01/0传输指定电位器的WCR数据到指定的寄存器数据寄存器至WCR(全部)0001N/AN/A1/01/0传输指定的所有四个数据寄存器的内容到与它们相应的WCR中WCR至数据寄存器(全部)1000N/AN/A1/01/0传输所有WCR中
19、的内容到与它们相应的指定的数据寄存器中增加/减少滑动端00101/01/0N/AN/A使能增加/减少由P1、P0指定的(WCR)X9241的4个电位器之间可以串联使用。在三字节指令中,后面六位是用来定义滑动端的位置,前面两位是用来定义串联和滑动端使能的。其中CM位是用来表示串联方式的,当其为0时电位器正常工作;当其为1时,电位器与它相邻的高序号的电位器串联连接,DW位是用来滑动端使能,当其为0时滑动端使能,为1时滑动端被禁止。当工作于串联方式时,电位器之间应该串联起来,只能用一个滑动端,其它滑动端要禁止。是用来增加或减少滑动端的,其时序见图1-9(C) 5。2.7 数字电位器的电路设计图1-1
20、0 数字电位器电路2.8 显示电路的设计显示器LCD1602的1、3脚接地,第2脚接电源+5V。后两位可接可不接。其电路图如图1-11所示。图1-11 LCD的电路2.9 按键的设置该设计中按键是用来选择充电电流的大小,初始是充电电流为200mA,我们可以用按键来加减预设电流。因为只需要4个按键(两个用来百位加减,两个用来十位加减),所以这里采用的是独立式按键,有利于减轻编程的压力。3. 单片机控制程序的设计3.1 AD子程序的流程图 本控制电路的输出电流就是通过单片机内部的AD进行采样,用LCD显示出来的。本程序选择通道P1.1为采集输入通道,通过对AD0BUSY写1来启动ADC转换。采样子
21、程序的流程图如图3-1所示。 图3-1 AD采样流程图3.2 数字电位器的子程序 X9241是由单片机的I2C总线控制,它要严格的按照时序来编写程序。该控制电路只要用到数字电位器中的一个来代替开关稳压电源中的电位器,所以只要用到三字节指令。程序中选择电位器中的电位器0来控制。数字电位器子程序流程图如图3-2所示。图3-2 数字电位器流程图3.3 总体设计程序方案一:采用单片机内部的D/A控制开关稳压电源主要芯片UC3843的2脚,这里选择的D/A最大的输出电流是2mA,芯片 UC3843的2脚电压是2.5V,因此单片机的DA输出引脚还要接一个2K的电阻到地,才能输出一个大于2.5V的电压。当L
22、CD显示的电流小于设定的电流,单片机的DA输出的电流降低,让开关稳压电源的输出电流升高;当LCD显示的电流大于设定的电流,单片机的DA输出的电流升高,让开关稳压电源的输出电流降低。 总控制程序的流程图如图3-3所示。图3-3 采用DA控制程序的流程图 开关稳压电源电路的输出部分电路如图3-4所示。图3-4 降压电路的输出电路 方案二:本设计的数字电位的高端接在与地连接的电阻上,低端接在与输出端连接上的电阻上,滑动端WCR的与UC3843的2脚连接。如图所示,输出电压的公式:从公式可以看出,输出电压U0与RB成反比。当要输出更大的电压时,要使数字电位器的滑动端向VH滑动;当要输出更小的电压时,滑
23、动端就要向VL端滑动。根据这个原理,当采集的电流大于预设的电流时,程序设计要使开关稳压电源的输出电流降低,就要让滑动端向VL滑动,因此写入寄存器WCR的值就要减小;否则反之。采用数字电位器控制输出的程序流程图如3-5所示。图3-5 采用X9241控制的程序流程图通过完成后的对比,用数字电位器控制时,LCD上显示的采集电压波动大,会使输出电流的变化大。会引起这种情况的原因主要是:数字电位器的电阻是由63个电阻串联组成的,它的滑动端是停在两个电阻之间的,而电阻阵列的每个电阻约有180欧姆,如果在两点组间无法找到合适的点的时候,滑动端只能来回跳动。而我们用DA时,LCD上显示的电压比使用数字电位器时
24、稳定,跳动的范围很小。综上所述,本设计最终选择的是用C8051F410内部的DA来控制开关稳压电源主要芯片UC3843的2脚。4. 数据测量及数据分析4.1测试仪器数字万用表(DT9205N)、直流稳定电源(QJ3003A )、双通道示波器(SS-7802A)4.2数据测试表1 显示电流与万用表的测量值的误差LCD显示的电流(mA)万用表测得的电流(mA)LCD显示的电流(mA)万用表测得的电流(mA)LCD显示的电流(mA)万用表测得的电流(mA)LCD显示的电流(mA)万用表测得的电流(mA)0201801963603605405271030190207370370550536203920
25、021038038056054530492102203903885705544058220230400397580563506723024041040659057260782402504204166005817087250260430425610590809726027044043562059890106270280450444630607100115280289460454640618110125290299470463650630120136300300480472660638130146310310490481670648140158320320500490680659150167330
26、330510500690668160177340340520509700677170187350350530518表2 恒流源性能测量二(负载:TCL手机锂离子充电电池,充电电流:200mA10%) 电池类型充电时间3.7V TCL手机锂离子充电电池起始电压: 3.72V(万用表测量)0.5小时3.92V1小时3.98V起始电压:0V(万用表测量)0.5小时3.82V1小时3.96V表3 恒流源充电时间测量 电池类型充电电流3.7V TCL手机锂离子充电电池起始电压:0 V 充满时间200mA2小时50分钟(4.24V)300mA1小时54分钟(4.19V)400mA1小时27分钟(4.13V
27、)500mA1小时4分钟(4.06V)4.3数据分析由表1可以看出显示的充电电流与实际的电流有一定的误差,这是因为采样本身就有一定的误差,而且采样电阻会随电流的变化而有微小的变化,这也会造成一定的误差的。由表3可以看出不同的电流对电池的充电时间不一样,当电流越大时,充电时间越短。充电的流越小,时间越长,但是充电完后的电池电压就越大。5. 设计总结本次毕业设计采用的主要核心芯片是C8051F410,这种单片机是和80C51完全兼容的,因此上手快,但是它比80C51的功能强大了很多。通过这次设计,我对这种单片机有了一定的了解。虽然这次我们在毕业设计的最后选择了直接用单片机内部的DA来控制开关稳压电
28、源电路的输出电流,但是在设计期间使用了位器X9241,使我懂得了X9241的用法和更加掌握了I2C的运用。在编程的过程中,遇到了很多的问题,但我能及时的查资料,使我对单片机和C语言有了更深刻的理解。致谢本次设计在导师袁放成教授的指导和关怀下顺利的完成,在此谨向袁老师表示衷心的感谢。参考文献1 2C8051F410芯片数据手册.3 段晨东.单片机原理及接口技术M.清华大学出版社,2008.07.4 黄采伦.数字电位器X9241原理及单片机的接口设计J.湘潭工学院信息与电气工程系,2000.5 X9241芯片手册.Design of High Efficiency Constant-current
29、 Source control Circuit DesignSchool of Physics and Information EngineeringElectronics Information Science and Technology Class 07070303028 Huang Tianyao Tutor:Professor Fangcheng YuanAbstractThis text designed to pick C8051F410 as the core of microcomputer high-efficiency constant-current source co
30、ntrol circuit, this control circuit switching power supply output can be realized constant current. A switching power supply in the current 200mA between 600mA setting to adjust, set adjust current is realized by button control. Output current and default current but also through the LCD screen disp
31、layed. 【 keywords 】 Digital potentiometer; C8051F410; Constant flow; Program module附录 PCB原理图和程序单片机最小系统的PCB按键和LCD的PCB程序:#include / SFR declarations#include #include typedef unsigned char uchar;typedef unsigned int uint;typedef unsigned long ulong;sfr16 TMR2RL = 0xca; sfr16 TMR2 = 0xcc; sfr16 ADC0 = 0
32、xbd; /采集的数字结果存储器sfr16 TMR3RL = 0x92; sfr16 TMR3 = 0x94; sfr16 IDA0 = 0x96; sfr16 IDA1 = 0xF4; int x=200;#define SYSCLK 24500000 #define BAUDRATE 115200 #define SAMPLE_RATE_DAC 100000L #define PHASE_PRECISION 65536 #define FREQUENCY 1000 unsigned int PHASE_ADD = FREQUENCY * PHASE_PRECISION / SAMPLE_R
33、ATE_DAC;sbit lcdrs=P15;sbit lcdrw=P16;sbit lcde=P17;sbit c=P02;sbit d=P03;sbit a=P04;sbit j=P05;void SYSCLK_Init (void);void PORT_Init (void);void Timer2_Init(void);void ADC0_Init(void);void UART0_Init (void);void lcdinit(void); /lcd初始化void lcdsendc(uchar c); /发送lcd指令void lcdsendd(uchar c); /发送lcd数据
34、void lcdbusy(void); /判断忙状态void delay1ms(uint time); /延时void DAC0_Init (void);void main (void) unsigned long mV; IDA0=0xa000; PCA0MD &= 0x40; SYSCLK_Init (); PORT_Init (); Timer2_Init(); UART0_Init(); ADC0_Init(); lcdinit(); DAC0_Init (); EA = 1;AD0BUSY=1; while (1) void SYSCLK_Init (void) OSCICN = 0
35、x87; RSTSRC = 0x04; void PORT_Init (void) XBR0 = 0x01; XBR1 = 0x40; P1MDOUT |= 0xe8; P1MDIN &= 0xFD; P1SKIP |= 0x02; P2MDOUT = 0xff; P0MDOUT = 0xfe; P0MDIN = 0xFE; P0SKIP = 0x01; void Timer2_Init (void) TMR2CN = 0x00; CKCON = 0x30; TMR2RL = - (SYSCLK / 10000); TMR2 = 0xffff; TR2 = 1; void ADC0_Init
36、(void) ADC0CN = 0x03; REF0CN = 0x13; ADC0MX = 0x09; ADC0CF = (SYSCLK/3000000)-1)3; ADC0CF |= 0x00; EIE1 |= 0x08; AD0EN = 1; void UART0_Init (void) SCON0 = 0x10; if (SYSCLK/BAUDRATE/2/256 1) TH1 = -(SYSCLK/BAUDRATE/2); CKCON |= 0x08; else if (SYSCLK/BAUDRATE/2/256 4) TH1 = -(SYSCLK/BAUDRATE/2/4); CKC
37、ON &= 0x0B; CKCON |= 0x01; else if (SYSCLK/BAUDRATE/2/256 12) TH1 = -(SYSCLK/BAUDRATE/2/12); CKCON &= 0x0B; else if (SYSCLK/BAUDRATE/2/256 48) TH1 = -(SYSCLK/BAUDRATE/2/48); CKCON &= 0x0B; CKCON |= 0x02; else while (1); TL1 = TH1; TMOD &= 0xf0; TMOD |= 0x20; TR1 = 1; TI0 = 1; void ADC0_ISR (void) in
38、terrupt 10 int q,b,s,g; static unsigned long accumulator = 0; static unsigned int measurements = 2048; unsigned long result=0; unsigned long mV; AD0INT = 0; accumulator += ADC0; measurements-; if(measurements = 0) measurements = 2048; result = accumulator / 2048; accumulator=0; mV = result *1.005; q=(mV/1000)%10; b=(mV/100)%10; s=(mV/10)%10; g=(mV)%10; lcdsendc(0x80); lcdsendd(s); lcdsendd(h); lcdsendd(i);