开关电源的数字控制实现方案

合集下载

基于数字化控制的开关电源的研究

基于数字化控制的开关电源的研究
器,这样避免了模拟 P WM控制器 中的双 脉冲现象和半 频现象,实现了 P WM控制的完全数字化;A D转换 电 I
路用作 电压 、电流 、温度等数据 的采集,芯片可采用
T C 5 0芯 片 , 也可 采 用 T C 5 3芯 片 ,通 过 此 A D L 54 L24 I
开关,而不是使用传统模拟 P WM 比较器。它会将所有 模 拟系统参数转换成数字信号,并在数字域利用这些数
据计算控制响应 ,然后将新产生 的控 制信息加 传至系
统。
数字控制电源系统有以下特点 : ( )以数字信号处理器 D P或单片机为核心,将数 1 S 字 电源驱动器及 P WM控制器作为控 制对象而构成的智
电源原理结构如图 3 。
( P DS )
I 发l H形器 蠢 生l 电 l 波
压 电流温 度等信 号
且对单片机的要求不高,成本 比较低。该方案采用单片 机通过外接A D转换芯片进行采样,采样后对得到的数 / 据进行运算和调节, 再把结果通过 DA转换后传到P / WM 芯片中,实现单片机对开关电源的间接控 制。其原理结
开 关电源数字化控制 ; 戚 栋 ( 9 3 ) 男 ,博 士 , 副 教 授 , 主 要 从 事 开 关 电 源 与 16 一 功 率 变换 技 术 的 研 究 。
2基于数字控制技术开关 电源的方案
结 合当前的数字控制技术和流行的 电源管理模式,
我们提 出了以下两种方案 。
24 W c i e .e l 工技 l W.hn t t 电 木 W a n
量的分立元器件整合到一个芯片或一组芯片中。
( 4)能充分发挥数 字信号处理 器及 微控制器的优 势,使所设计的数字 电源达到高技术指标。 这种技术 可用于负载时间恒定的应用中,使电源运 行在高频状态,如功率 因数校正、非中断电源、多个化 学 电池译 电和 电机控制 ;还 可用于采用若干可配置的 P WM 内核及控 制、诊断和接口电路的手机 以及 P A的 D

开关电源控制模式分析

开关电源控制模式分析

开关电源控制模式分析摘要:开关电源高频化、模块化、数字化的实现,标志着开关电源控制技术的成熟,本文分析了开关电源控制模式,在总结了开关电源发展历程的基础上分析了数字化控制及电流型控制模式的优点。

关键词:开关电源控制模式数字化控制模块化开关电源作为一种能够稳定持续输出电压的电源,其主要是由控制开关晶体管控制开通和关断时间的,因此,在开关电源中最重要、最核心的部分就是控制电路,本文进行了开关电源控制模式分析。

1 开关电源概述开关电源是伴随着电力电子技术的进步而发展起来的,由于具有高效节能、轻巧便捷等特点,开关电源得到了越来越广泛的应用。

开关电源的效率可达到85%以上,与普通的线性电源相比其效率提高了近一倍,且其可靠性也较高,采用了体积较小的散热器和滤波元件,具有良好的发展前途。

可将开关电源分为AC/AC和DC/DC电源等类型,其中DC/DC电源变换器已实现了模块化的设计和发展,得到了广大用户的普遍认可。

2 开关电源发展历程开关电源的发展已经经历了40多年,早期开发的开关频率非常低,且价格较高,只能应用于卫星等少数要求电源质量较高的领域。

但自20世纪60年代晶闸管相位控制模式出现后开关电源经历了较快的发展,70年代时制约开关电源发展的瓶颈主要是效率问题,同时由于调试工作困难而难以大规模的推广应用。

70年代后期,随着大规模集成电路技术的出现,各种专用的开关电源芯片进入市场,将控制电路、驱动电路、保护电路和检测电路封装在一起的模式非常有利于开关电源的发展,由于焊点减小提高了开关电源的可靠性,同时也由于集成化的发展是开关电源的体积减小,为应用带来了极大的便利。

如今,集成化的电源已被广泛应用于计算机、航天、彩色电视等各个领域,且随着微电子技术、半导体技术的进一步发展,功能更强大,集成度更高的超大规模集成电路的出现,电子设备的体积和重量仍在不断减小,但与之相匹配的电源体积却大的多,在现代化的电子产品中,电源的体积要比微处理器大10倍以上,因此,如何缩小电源的体积就是一项非常具有意义的研究课题。

高功率因素开关电源的数字化控制方案

高功率因素开关电源的数字化控制方案











皇王研霾一 -
高功率 因素开 关 电源 的数 字化控制 方案
杭 州电子科技 大学 电子信 息学院 黄 博
【 摘要】该文介绍 了基于DS I功率 因素校正开关 电源的一种数字化实现方案 ,提 出了一种数字电源的系统结构,分 析 了系统的总体 性能,设计 了各模块 的实现方 P  ̄ 案。对功率 因素校正的工作原理、实现方案及部分程序做 了具体分 析。通过Ma a 的仿 真与样 机的测试 ,实验结果 与仿 真结果 显示该方 案实现 了较 高的功率 因素和 l fb
的 不 断发 展 , 高 速 度 廉 价 的 数 字 信 号 处 择 了美 国T 公 司 的T S 2 F 8 2 为 电路 I M 30 2 1作 理 器 D P 出现 ,控 制 策 略更 多 的需 要 通 的主 控 芯片 。 S的 过 数 字 信 号 处 理 器 加 以 实 现 ,在 功 率 因 对 于P C F 电路 的结 构 选 择 的是 平 均 o s拓 数 校 正 中 使 用 数 字 控 制 己成 为 发 展 的 趋 电流 控 制 法 的B o t 扑 结 构 。 从原 理 上
均 电流控 制 等 。因为 平 均 电流 控制 法 具有


的丰 富程 度 可用 总谐 波 畸变 来 表示 :
T HD=I/i hl () 1
内环 所 必 需 的 参 考 电流 值 l, 入 电感 。输 电流I经数 字 化采 样 后与 参考 电流It 行 进 比较 ,差值 送 入 电流 内环 P调 节器 。该P I I 调 节 器 的输 出送 入 PM k 器 ,与 三 角波 W L较
信 号 比较产 生 开关 信 号 的 占空 比,最 后通 过驱 动 电路 产 生驱 动信 号控 制 开关 管 的通

数字式开关电源的PID控制

数字式开关电源的PID控制

/开关电源的数字化控制 //所用拓扑为Buck,单片机msp430//PID算法实现开关电源的恒流、恒压、恒功率功能//糖coffeeuestc//Part 1/include <>include ""include ""include ""include ""include ""include ""void main void{WDTCTL = WDTPW + WDTHOLD;init_clk;init_lcd;GUI_CU;init_ADC12;init_TA;init_TB;initKey;_EINT;while1{KeyScan;ifMode==0 ;PutDigiU%10;PutDigfU/10;;PutDigiI%10;PutDigfI/10;;PutD igfP/10;PutDigfP%10;}/处理电压PWM/void deal_U{ifUout>Us100+25||Uout+25<100Us ;PutDigfUs;}/显示设置电流/void DisplaySetI{unsigned char iIs,fIs;iIs = Is/10; fIs = Is%10;Set_cursor0,3;PutcLCD'0';PutDigiIs;PutcLCD'.';PutDigfIs;}/显示设置功率/void DisplaySetP{unsigned char iPs,fPs;iPs = Ps/10; fPs = Ps%10;Set_cursor0,3;PutDigiPs/10;PutDigiPs%10;PutcLCD'.';PutDigfPs; }/键盘初始化/void initKey{KeyDIR &= ~Inc + Dec + MOD + ADD + PLU;}/键盘检测/void KeyScan{ifKeyIN = 0x1f{Delay100;ifKeyIN = 0x1f{unsigned char KeyTemp = KeyIN;whileKeyIN = 0x1f; //等待按键松开 switchKeyTemp{case 0x1e:{ifMode==0 {Us+=1;}else ifMode==1 {Is+=1;} else {Ps+=5;}}break; //+case 0x1d:{ifMode==0 {Us-=1;}else ifMode==1 {Is-=1;} else {Ps-=5;}}break; //-case 0x1b:{Mode++;ifMode>2Mode=0;ifMode==0 {Us = 10;GUI_CU;}else ifMode==1 {Is = 10;GUI_CC;} else {Ps = 10; GUI_CP;}}break; //modcase 0x17:{ifMode==0 {Us+=5;}else ifMode==1 {Is+=2;}else {Ps+=10;}}break; //++case 0x0f:{ifMode==0 {Us-=5;}else ifMode==1 {Is-=2;}else {Ps-=10;}}break; //--}}}}endif/Part init Headfile/ifndef __initdefine __init/初始化时钟/void init_clk{FLL_CTL0 |= XCAP18PF; // Set load capacitanceFLL_CTL1 &= ~XT2OFF; // Turn on XT2do{IFG1 &= ~OFIFG; // Clear oscillator fault flagfor unsigned int i = 1000; i; i--;}while IFG1 & OFIFG; // Test osc fault flagFLL_CTL1 = SELS; // Select SMCLK source as XT2CLK}/初始化AD,计算输出/void init_ADC12{P6SEL = 0x03; // Enable A/D channel inputsADC12CTL0 = ADC12ON + MSC + SHT0_8 + REFON + REF2_5V; //Turn on ADC12,set sampling timeADC12CTL1 = SHP + ADC12SSEL_1 + CONSEQ_1; // Use sampling timer 序列单次ADC12MCTL0 = INCH_0 + SREF_1;ADC12MCTL1 = INCH_1 + SREF_1 + EOS;ADC12CTL0 |= ENC;}/初始化TA,采样周期/void init_TA{TACTL = TASSEL_2 + TACLR; // sMCLK, clear TARCCTL0 = CCIE; // CCR0 interrupt enabledCCR0 = 800;TACTL |= MC_1; // Start Timer_A in UP mode}/初始化TB,驱动信号/void init_TB{TBCTL |= TBSSEL_2 + TBCLR + MC_1 + ID_0; // SCLK, Clear Tar TBCCR0 = 400; // PWM = 20KTBCCTL2 = OUTMOD_7;TBCCR2 = 200; // CCR2 PWM duty cycleP2DIR |= BIT3; // outputP2SEL |= BIT3; // TA1 otion }pragma vector=TIMERA0_VECTOR__interrupt void Timer_A void{ADC12CTL0 |= ADC12SC;}endif。

一种最佳的数字开关电源控制器架构

一种最佳的数字开关电源控制器架构

数字 控 制利 用模 拟 技术 很 难做 数字控制器架构考虑 到 的复 杂控 制 算法 大 幅 提高 系 统性
各 个周 期 的控 制 变 量计 算 和 电流 限
数 字 开 关 电源控 制器 要 在市 场 制 。 件 处 理器 由一个 带 宽 较 低 的 硬
它 能 ,这 不 仅让 传 统 电源 架构 的 性 能 上 成 功 ,就 必 须 具备 低 成 本 和易 于 可 编 程 系 统 处理 器 负 责管 理 , 会 使 更 强大 ,还 可 实现 过 去 由于 缺 少精 使 用 等 优 点 ,同时提 供 一 种 方法 来 持 续 修 改 硬件 处理 器 的参 数 , 得 密 控 制 算 法 而 无 法 达 成 的 电源 创 实现 模 拟技 术 不 易达 成 的功 能及 性 系统 在所 有 线路 点 或 负 载下都 能 发 系 新 。数字 控 制还 能 免 除 容易 受 到 老 能 。 此 处 将 考 虑 三 种 常 用 架 构 : 挥 最 大 性 能 。 统 处 理器 还 会 执 行 这 化 和 温 度 影 响 的外 部 模拟 元 器 件 , DS 、 制硬 件 和 特殊 应 用 处 理器 。 系统 预 测 及 管 理 功 能 。 种架 构 兼 P定
P带 宽 限制 , 括 马达驱 动 器 和三 相 电源 转 换器 在 的应 用 ,由于 受 到 DS 电流模 式 控 制 。 图 2即为模 拟 电压
内的 许多 应 用 , 就 通过 通 用 处 理 其 性 能 或许 会 输 给模 拟技 术 。 早 器 和 DS P实 现 各 种 数 字控 制 方 法 。 硬 件 式 设 计 ( 图 l 则 会 用 见 B)
又再 次 引 起 业 界注 意 。

执行 带宽 要 求 较 高 的 运 算 ,例 如 ,

功率因数校正(PFC)的数字控制方法

功率因数校正(PFC)的数字控制方法

功率因数校正(PFC)的数字控制方法引言电力电子产品的广泛使用,对电网造成了严重的谐波污染。

这使得功率因数校正(PFC)技术成为电力电子研究的一个热点。

功率因数校正的目的,就是采用一定的控制方法,使电源的输入电流跟踪输入电压,功率因数接近为1。

传统上,模拟控制在开关电源应用中占据了主导地位[1]。

随着高速度,廉价的数字信号处理器(DSP)的出现,在开关电源中使用数字控制已成为发展的趋势[2][3][4][5][6]。

本文对实现PFC的模拟控制方法和数字控制方法进行了比较,介绍了采用数字控制的独特优点。

详细讨论了采用数字信号处理器作为控制核心时的设计事项和方法。

1 PFC模拟控制和数字控制的比较功率因数校正的模拟控制方法已经使用了多年,也有现成的商业化集成电路芯片(比如TI/Unitrode的UC3854,Fairchild的ML4812,STmicroelectronics的L6561等)。

图1(a)是基于UC3854的模拟控制电路结构方框图。

电路采用平均电流控制方式,通过调节电流信号的平均幅度来控制输出电压。

整流线电压和电压误差放大器的输出相乘,建立了电流参考信号,这样,这个电流参考信号就具有输入电压的波形,同时,也具有输出电压的平均幅值。

PFC的模拟控制方法简单直接。

但是,控制电路的元器件比较多,电路适应性差,容易受到噪声的干扰,而且调试麻烦。

因此,模拟控制有被数字控制取代的趋势。

图1(b)是PFC的数字控制原理框图。

类似于模拟方法,使用了两个控制环路:电压环和电流环。

电压环通过调节平均输入电流来控制直流总线电压,电流环控制交流输入电流使之跟踪输入电压。

控制过程由DSP完成,通过DSP的软件来实现电流和电压的调节。

数字控制方法具有以下几个优点:1)通过软件调整控制参数,比如,增益和带宽,从而使系统调试很方便;2)大量控制设计通过DSP来实现,而用模拟控制器是难以实现的;3)在实际电路中,使用数字控制可以减少元器件的数量,从而减少材料和装配的成本;4)DSP内部的数字处理不会受到电路噪声的影响,避免了模拟信号传递过程中的畸变、失真,从而控制可靠;5)如果将网络通信和电源软件调试技术相结合,可实现遥感、遥测、遥调。

基于DSP的数字开关电源设计与实现

基于DSP的数字开关电源设计与实现

Science &Technology Vision科技视界0引言开关电源是利用现代电力电子技术,控制开关管开通和关断的时间比率,维持稳定输出电压的一种电源,包括脉冲宽度调制(PWM)控制IC 和MOSFET 两部分。

与其它类型电源相比它不仅具有体积小和重量轻的优点,开关电源的效率也更高,因而开关电源被广泛应用于各个电子领域,如家电行业、交通设施、工业设备等等。

随着数字技术的发展,DSP 芯片技术日益成熟,DSP 芯片的功能也日益强大和完善,性价比不断上升。

DSP 芯片技术的完善也为开关电源应用数字控制提供了可行性方案。

本文就基于DSP 的数字开关电源的设计与实现进行探讨。

1DSP 概述DSP(数字信号处理器)是一种依靠数字运算处理信息的独特微处理器,工作原理如下:模数转换器接受模拟信号后再将其转换成0和1的数字序列,再对其进行数字滤波、IFFT 等数学运算处理[1]。

并结合相应的控制算法将数字信号生成相应的控制量,最后经过数模转换器或者PWM 信号将其转换成所需的形式,例如通过数模转换器将控制量转换成模拟信号。

DSP 的可编程性灵活、计算能力强,DSP 最高可执行数十亿条各种类型的计算指令,其执行能力远远强于其它处理器。

2基于DSP 的数字开关电源硬件整体设计基于DSP 的数字开关电源系统是一个综合性很强的系统,它由硬件系统和软件系统组成,基于DSP 的数字开关电源开发过程设计电子工程、软件工程等多个方面的知识。

本文结合飞思卡尔公司生产的MC56F8323开关电源,介绍基于DSP 的数字开关电源系统硬件设计。

基于DSP 的数字开关电源的硬件系统由EMC 模块、PFC 模块、DC-DC 模块、控制器模块、驱动电路五个部分组成,EMC 模块消除可消除200V 市电的共模和差模的干扰,同时减少开关管产生的高频干扰进入市电,从而减少市电受高频干扰的程度[2]。

PFC 模块的功能为提高电源的功率因子,减少无功功率;DC-DC 模块负责对不同的电压进行转换处理,将不同的电压转换成适宜的电压,再输出电压。

程控电源方案

程控电源方案

程控电源方案概述程控电源(Programmable Power Supply)是一种能够通过编程方式控制输出电压和电流的电源设备。

它以数字方式控制输出参数,具有高精度、高稳定性和高可靠性的特点,被广泛应用于实验室、工业自动化、电子设备测试等领域。

本文将介绍程控电源的原理、工作方式以及应用场景,并重点介绍一种常见的程控电源方案。

程控电源原理程控电源的原理是通过采集、处理和控制模拟信号,实现对输出电压和电流的精确控制。

其基本原理如下:1.采集模拟信号:程控电源通过内置的模数转换器(ADC)采集输入电压和电流的模拟信号,并将其转换为数字信号供后续处理。

2.数字信号处理:采集到的模拟信号经过内部的数字信号处理器(DSP)进行处理,包括滤波、放大、补偿等操作。

3.控制回路:数字信号处理后通过控制回路产生对应的控制信号,控制开关电源的开关频率和占空比,从而实现对输出电压和电流的控制。

4.反馈控制:程控电源还包括反馈控制回路,通过采集输出端的电压和电流进行反馈,将其与期望值进行比较,并根据比较结果对控制信号进行调整,以实现闭环控制。

程控电源工作方式程控电源的工作方式通常分为手动控制和编程控制两种。

1.手动控制:程控电源通常配备前面板,通过设置旋钮或按钮来手动调整输出电压和电流。

2.编程控制:程控电源提供了通信接口(如RS-232、GPIB、USB等),可以通过电脑或其他控制设备与之通信并发送控制指令。

用户可以使用编程语言(如LabVIEW、Python等)编写控制程序,实现对程控电源的远程控制。

程控电源方案应用场景程控电源广泛应用于以下场景:1.实验室研究:在科研实验过程中,常常需要对电子元器件进行电压和电流的精确控制,程控电源能够满足实验的需求,并且具备高精度和可编程的特点。

2.电子设备测试:在电子设备的生产和测试过程中,需要对设备进行各种电压和电流的测试,程控电源可以提供稳定和可控的电源输出,方便测试人员进行测试和调试。

开关电源多路输出技术控制方法综述

开关电源多路输出技术控制方法综述

开关电源多路输出技术控制方法综述
多路输出技术中一个重要性能指标就是负载交叉调整率的问题,我们通常采用变压器副边多个绕组的方法来实现多路输出。

但是这种方法一般只采样一路主输出进行反馈调节控制,因此交叉调整性能较差。

改善多路输出开关电源交叉调整率的方法可分为无源和有源两类。

本文首先介绍了几种传统的多路输出技术,并对其进行了简单的分析和总结。

重点介绍了两种新的多路输出技术:恒流源实现多路输出和PWM—PD多路输出技术。

结合典型拓扑探讨了PWM—PD技术的应用前景。

 l 传统的多路输出方法
 1)无源调节
 无源调节通过在次级增加一些简单的无源器件可以使负载交叉调整率得到一定的改善。

无源调节包括耦合电感调节控制和加权电压反馈调节控制两种,如图1所示。

前者通过将输出电感L1、L2绕在同一磁芯上,相当于增大了
滤波电感,使辅输出稳压,从而使负载交错性能得到一定改善。

加权电压反馈调节同时检测反馈几路输出电压加权和到控制电路中,通过合理设计各路输出反馈电压的加权因子,调整各路输出电压。

这两种方法都存在调节误差。

但它们实现起来比较简单,不增加电路的复杂性,适用于对输出电压精度要求较低的场合。

 2)有源调节
 有源调节也可称为次级后置装置调节,即通过在变压器副边加入一级有源调节装置对次级整流电路进行调整来实现对辅输出电压的调整。

以正激电路。

开关电源的基本控制原理

开关电源的基本控制原理

开关电源的基本控制原理开关电源是一种将直流电转换为交流电的电源装置。

其基本控制原理是通过开关管(晶体管或功率MOS管等)的开关动作,控制输入电源电压的连续开闭,以达到输出电压的变化。

1.输入电压整流与滤波:开关电源通常使用交流输入电源,首先需要使用整流电路将交流电转换为直流电。

整流电路可以采用二极管桥式整流电路,将交流信号变为全波整流的直流电。

然后采用滤波电路对整流电压进行平滑,以消除残余的交流成分。

2.输入电压调整电路:开关电源还需要一种输入电压调节电路,用来改变输入电压的大小,以实现对输出电压的调节。

调节电路一般采用电位器、电阻、可调电压稳压器等元件组成,通过改变电路的电阻或给定的精确电压来调整输入电压的大小。

3.输入电流控制:开关电源中的输入电流通常由输入电源提供。

通过对电源输入电流进行控制,可以实现对输出电流的控制。

电流控制主要依靠反馈电路实现,通过对反馈信号进行放大、调节,以达到期望的输出电流。

4.正弦波PWM控制:开关电源的核心控制方式是采用脉宽调制(PWM)技术,通过调节开关元件的导通时间和关断时间来控制输出电压。

通常使用比较器比较输入信号和三角波信号,产生PWM信号。

PWM信号通过控制开关管的导通和关断,实现对输出电压的调节。

5.输出电压滤波:开关电源输出的是脉冲信号,需要通过滤波电路将其转变为平滑的直流电压。

滤波电路一般采用电感、电容等元件组成的低通滤波电路,将高频脉冲信号滤除,得到平稳的输出电压。

开关电源通过以上控制原理实现对输入电压、电流的调节和对输出电压的稳定控制。

其核心是PWM技术的应用,通过高频开关控制实现对输出电压的精确调节。

开关电源具有高效率、便携性和稳定性好的特点,广泛应用于计算机、通信设备、工业设备等领域。

数字式开关电源的PID控制

数字式开关电源的PID控制

/******** 开关电源的数字化控制 ******/ /******** 所用拓扑为 Buck,单片机 msp430**********//*****PID 算法实现开关电源的恒流、恒压、恒功率功能 ******/ /********* 糖 coffee@uestc************/ /**********************************************Part 1**********************************************/#include <>#include ""#include ""#include ""#include ""#include ""#include "" void main( void ){WDTCTL = WDTPW + WDTHOLD;init_clk();init_lcd();GUI_CU();init_ADC12();init_TA();init_TB();initKey();_EINT();while(1){KeyScan();if(Mode==0) ;PutDig(iU%10);PutDig(fU/10);;PutDig(iI%10);PutDig(fI/10);;PutDig(fP/10) ;PutDig(fP %10);}void deal_U(){if((Uout>Us*100+25)||(Uout+25<100*Us)) ;PutDig(fUs);void DisplaySetI(){ unsigned char iIs,fIs;*************处理电压 PWM****************/******** 显示设置电流 ************/ }iIs = Is/10; fIs = Is%10; Set_cursor(0,3); PutcLCD('0');PutDig(iIs);PutcLCD('.');PutDig(fIs); }********显示设置功率**********void DisplaySetP(){unsigned char iPs,fPs; iPs = Ps/10; fPs = Ps%10;Set_cursor(0,3);PutDig(iPs/10);PutDig(iPs%10);PutcLCD('.');PutDig(fPs);}/*********** 键盘初始化*************/void initKey(){KeyDIR &= ~(Inc + Dec + MOD + ADD + PLU);}/************ 键盘检测**************/void KeyScan(){if(KeyIN != 0x1f){Delay(100);if(KeyIN != 0x1f){unsigned char KeyTemp = KeyIN;while(KeyIN != 0x1f); // 等待按键松开switch(KeyTemp){case 0x1e:{if(Mode==0) {Us+=1;} elseif(Mode==1) {Is+=1;} else {Ps+=5;}}break; //+case 0x1d:{if(Mode==0) {Us-=1;} elseif(Mode==1) {Is -=1;} else {Ps-=5;}}break; // -case 0x1b:{Mode++;if(Mode>2)Mode=0;if(Mode==0) {Us = 10;GUI_CU();}else if(Mode==1) {Is = 10;GUI_CC();}else {Ps = 10; GUI_CP();}}break; //modcase 0x17:{if(Mode==0) {Us+=5;} elseif(Mode==1) {Is+=2;} else {Ps+=10;}}break; //++case 0x0f:{if(Mode==0) {Us-=5;} elseif(Mode==1) {Is -=2;} else {Ps-=10;}}break; // --}}}}#endifPart init Headfile#ifndef __init#define __init/********** 初始化时钟**********/ voidinit_clk(){FLL_CTL0 |= XCAP18PF;FLL_CTL1 &= ~XT2OFF;// Set load capacitance// Turn on XT2do{IFG1 &= ~OFIFG;for (unsigned int i = 1000; i; i --); }while (IFG1 & OFIFG); FLL_CTL1 =SELS;// Clear oscillator fault flag// Test osc fault flag// Select SMCLK source as XT2CLK}/**********void init_ADC12(){ P6SEL = 0x03;// Enable A/D channel inputs ADC12CTL0 = ADC12ON + MSC + SHT0_8 + REFON + REF2_5V;//Turonn ADC12,set sampling timeADC12CTL1 = SHP + ADC12SSEL_1 + CONSEQ_1; // Use sampling timer 序列单次 ADC12MCTL0 = INCH_0 + SREF_1;ADC12MCTL1 = INCH_1 + SREF_1 + EOS;ADC12CTL0 |= ENC; }void init_TA(){ TACTL = TASSEL_2 + TACLR;CCTL0 = CCIE;CCR0 = 800;TACTL |= MC_1;}// sMCLK, clear TAR // CCR0 interrupt enabled// Start Timer_A in UP mode void init_TB(){TBCTL |= TBSSEL_2 + TBCLR + MC_1 + ID_0;TBCCR0 = 400; TBCCTL2 = OUTMOD_7;TBCCR2 = 200; P2DIR |= BIT3; P2SEL |= BIT3;// PWM = 20K // CCR2 PWM duty cycle // output // TA1 otion#pragma vector=TIMERA0_VECTOR__interrupt void Timer_A (void){ADC12CTL0 |= ADC12SC;}#endif******** 初始化TA,采样周期**********/******** 初始化TB,驱动信号**********/初始化AD,计算输出**********/ // SCLK, Clear Tar。

开关电源数字化控制技术研究

开关电源数字化控制技术研究

开关电源数字化控制技术研究摘要:随着我国经济的飞速发展和社会的发展,在科学技术发展的同时,各种自动化技术也得到了迅速的发展。

因此,数字控制电路被广泛地用于高频开关电源的设计。

本文从理论上探讨了基于 BUCK变换器的软切换技术,建立了基于BUCK变换器的高稳定性的移相全桥变换器的小信号模型。

关键词:数字化;控制电路;高频开关电源引言在电力系统中,开关电源是电力系统中重要的辅助电源。

当前,这种电源是以高频开关电源模块并联方式工作的,但是由于开关电源的开关频率高,电流大,开关损耗大, EMI干扰大,因此软切换技术应运而生,并随着控制技术的发展,以及微机的快速发展,直流系统开关电源的发展趋势是将软切换技术与数字智能控制技术有机地结合起来。

1.开关电源的了解内容1.1开关电源的概念开关电源是一种高频功率转换器,也称开关电源。

切换电源的作用就是把一种电压转化为不同的体系结构,转化为使用者所需的电压和电流,在日常的使用中起到了很大的作用,它可以改变不合适的电压和电流,还可以在一定程度上节省电能,保证居民的生活和使用。

开功率技术是目前最流行的一种技术,它的发展速度非常快,但也正因为如此,它才能在技术上更上一层楼。

开关电源是指开关电源,同时具备开关、高频、直流三种功能的电源。

目前有多种控制方式,数字控制技术是目前比较成熟的一种。

数字控制技术主要采用软切换技术和软切换技术。

由于电力电子技术的迅速发展,使其与人类的生产、生活紧密地联系在一起。

它具有对电力系统的内部状况进行实时监测、内外通讯,并将其内部的状况反馈到整个电力系统,从而达到对电力系统的全方位监测与控制。

开关电源的优点是功率转换效率高,电压稳定范围宽,重量轻。

开关电源的发展,改变了过去体积大、携带不便的弊端,而传统的开关电源技术存在着许多弊端,如功率转换技术不方便、切换损失大,但随着技术的发展,这种弊端也逐渐被解决。

1.2开关电源的发展和应用目前,开关控制技术在许多领域都比较成熟,其发展前景十分广阔,其发展趋势是:高频、高可靠性、高性能、低功耗、低噪声、等方向发展。

DSP用于开关电源控制

DSP用于开关电源控制

DSP用于开关电源控制摘要随着高速低成本数字信号处理器IC的出现,在开关电源中采用数字信号控制方式变得越来越有兴趣。

在本论文中,采用TI公司的一颗DSP IC去解决通信用整流模块(PFC+PWM)的控制是一个成本性能的最佳方案。

进一步,我们论述其硬件及软件的详细的设计方法。

仿真并展示出实验结果,论证开关电源数字化可以完全满足通讯用整流模块电源的需要。

关键词:DSP控制的开关电源及数字化电源随着带有模数(A/D)转换器及脉宽调制器(PWM)的高性能数字信号处理器的出现,人们对数控式开关电源的兴趣在增加。

数字控制提供了数个超过模拟控制的优点。

它很容易执行计算功能,相对其它方式有更大的柔性。

较低的噪声,应付各种环境干扰及环境变化。

当然它也有缺点,包括信号分辨的局限由于处理器有限长度的语句长度及A/D变换器的取样时间延迟。

以及因计算功率造成的控制环频带宽度的限制。

无论如何,作为性能价格比,数字式控制器已变得可行,并有足够的竞争力。

特别在大功率高端的开关电源中应用。

在本论文中,一个成本最佳化的方案用于一个500W的通讯整流模块电源中(PFC+DC/DC),它采用TI公司的一个DSP IC。

系统的细节设计方法,硬件,软件都给出,此外,用仿真及试验结果展示出来,以便论证开关电源的数字化,可以满足通讯整流模块电源的需要。

数字电源系统的实现方案在一个典型的通讯用数字电源的可行性验证法中,其关键参数要满足:输入电压:90~264V AC频率:47~65 Hz功率因数:>0.95 235AC。

超过50%负载时。

输出电压:48V输出功率:500W功率电路主要是EMI滤波器。

基于BOOST的PFC电路及基于半桥的DC/DC 电路。

全部控制功能(诸如冲击电流控制,PFC控制,DC/DC的PWM控制,负载的均流控制,故障保护等)都由DSP IC来处理。

为使成本有竞争力,可选一颗新型DSP IC。

DSP不仅能放在初级侧,如果需要也能放在二次侧,有太多的高速数字信号如同模拟信号一样地处理。

数字式开关电源的PID控制

数字式开关电源的PID控制

/********开关电源的数字化控制******//********所用拓扑为Buck,单片机msp430**********//*****PID算法实现开关电源的恒流、恒压、恒功率功能******/ /*********糖coffee@uestc************//**********************************************Part1Main.C**********************************************/#include<msp430xG46x.h>#include"LCD12864.h"#include"table.h"#include"GUI.h"#include"deal.h"#include"IndependentKey.h"#include"init.h"void main(void){WDTCTL=WDTPW+WDTHOLD;init_clk();init_lcd();GUI_CU();init_ADC12();init_TA();init_TB();initKey();_EINT();while(1){KeyScan();if(Mode==0)//恒压模式{DisplaySetU();Delay(100);ADC();Delay(100);}else if(Mode==1)//恒流模式{DisplaySetI();Delay(100);ADC();Delay(100);}else//恒功率模式{DisplaySetP();Delay(100);ADC();Delay(100);}}}/**********************************************Part2Headfile**********************************************//**********************************************Part2.1LCD12864Headfile**********************************************/#ifndef__LCD12864#define__LCD12864#define LCD_CS BIT0#define LCD_SID BIT2#define LCD_CLK BIT4#define LCD_EN P3DIR#define LCD_CTRL P3OUT#define LCD_CS_Set_high LCD_CTRL|=LCD_CS#define LCD_CS_Set_low LCD_CTRL&=~LCD_CS#define LCD_SID_Set_high LCD_CTRL|=LCD_SID#define LCD_SID_Set_low LCD_CTRL&=~LCD_SID#define LCD_CLK_Set_high LCD_CTRL|=LCD_CLK#define LCD_CLK_Set_low LCD_CTRL&=~LCD_CLK#define LCD_delay1void Write_Data(unsigned char byte,unsigned char reffer);void Send_Byte(unsigned char byte);void ClearLCD(void);void Put_Array(unsigned char*data,unsigned char length,unsigned char address); /*************延时**********************/void Delay(unsigned char time)//主时钟1微秒延时{unsigned int i;i=0x08*time;for(;i;i--);}/************************************************//函数名称:Initial_LCD(void)//函数功能:启动初始化************************************************/void Initial_LCD(void){LCD_EN|=LCD_CS+LCD_SID+LCD_CLK;Write_Data(0x30,0);//基本指令集Delay(LCD_delay);Write_Data(0x30,0);Write_Data(0x0C,0);Delay(LCD_delay);Write_Data(0x01,0);//清屏Delay(LCD_delay);Write_Data(0x06,0);Delay(LCD_delay);}/**************************************************************** *函数名称:Write_Data(unsigned char byte,unsigned char reffer)*函数功能:发送指令或数据reffer数据1指令0*输入变量:unsigned char byteunsigned char byte****************************************************************/ void Write_Data(unsigned char byte,unsigned char reffer){unsigned char temp,stemp;temp=byte;LCD_CS_Set_high;LCD_CLK_Set_low;if(reffer==1)Send_Byte(0xFA);elseSend_Byte(0xF8);//发送第一个字节stemp=(temp&0xF0);Send_Byte(stemp);stemp=temp<<4;Send_Byte(stemp);LCD_CS_Set_low;}/**********************************************************函数名称:Send_Byte(unsigned char byte)*函数功能:发送一字节数据*输入变量:unsigned char byte*********************************************************/void Send_Byte(unsigned char byte){unsigned char temp,i;temp=byte;for(i=0;i<8;i++)//send8times{if(temp&0x80)//send the highestLCD_SID_Set_high;elseLCD_SID_Set_low;temp=(temp<<1);LCD_CLK_Set_low;LCD_CLK_Set_high;Delay(LCD_delay);}}/****************************************************************************** ******函数名称:Put_Array(unsigned char data,unsigned char length,unsigned char address)*函数功能:在LCD上显示一个数组*输入变量:unsigned char dataunsigned char lengthunsigned char address******************************************************************************* ****/void Put_Array(unsigned char*data,unsigned char length,unsigned char address){if(address!=0){Write_Data(address,0);}for(unsigned char i=0;i<length;i++){Write_Data(data[i],1);}}/*************************************************函数名称:ClearLCD(void)*函数功能:清屏***************************************************/void ClearLCD(void){Write_Data(0x01,0);}/*********************************************************************** *函数名称:Set_cursor*功能描述:设置光标的位置为CurY行,CurX列*输入:CurX=position(0:7)CurY=line(0:3)***********************************************************************/ void Set_cursor(unsigned char CurY,unsigned char CurX){switch(CurY){case0:Write_Data(0x80+CurX,0);break;//写入第一行CurX列的地址case1:Write_Data(0x90+CurX,0);break;//写入第二行CurX列的地址case2:Write_Data(0x88+CurX,0);break;//写入第三行CurX列的地址case3:Write_Data(0x98+CurX,0);break;//写入第四行CurX列的地址default:break;}}/*************************************************函数名称:PutInt(unsigned int num)*函数功能:显示十进制数************************************************/void PutInt(unsigned int num){unsigned int snum;unsigned char temp[12]={0},temp1[12]={0}; unsigned char i=0,n=0;snum=num;if(snum==0){temp[0]='0';i++;}while(num!=0){temp[i]=num%10+0x30;num=num/10;i++;}n=i;for(i=0;i<n;i++)temp1[i]=temp[n-1-i];Put_Array(temp1,n,0);}void PutDig(unsigned char num){unsigned char snum;snum=num+0x30;Write_Data(snum,1);;}/*********************************************** **函数名称:PutcLCD()**功能描述:LCD写char**输入:LCD_Char***********************************************/ void PutcLCD(unsigned char LCD_Char){Write_Data(LCD_Char,1);}/*********************************************** **函数名称:PutsLCD()**功能描述:LCD写入RAM字符串**输入:字符指针Str***********************************************/void PutsLCD(const char*Str){int Str_Temp;Str_Temp=*Str;//Str_Temp所赋的值是Str所指向的字符while(Str_Temp!=0x00)//字符串还没有结束{Write_Data(Str_Temp,1);Str++;Str_Temp=*Str;}}/*************************************函数名:ClrRam(void)函数功能:清整个GDRAM空间*************************************/void ClrRam(){unsigned char x,y;for(y=0;y<64;y++)for(x=0;x<16;x++){Write_Data(0x34,0);Write_Data(y+0x80,0);//行地址Write_Data(x+0x80,0);//列地址Write_Data(0x30,0);Write_Data(0x00,1);Write_Data(0x00,1);}}/***************************************************函数名:ShowAll函数说明:显示一幅128*64的图画传入参数:图形指针*img****************************************************/void ShowAll(unsigned char*pPicture){unsigned char i,j,k;Write_Data(0x36,0);for(i=0;i<2;i++)//分上下两屏写{for(j=0;j<32;j++)//行{Write_Data(0x80+j,0);//写X坐标(第几行上写)if(i==0)//写Y坐标,判断哪一屏Write_Data(0x80,0);elseWrite_Data(0x88,0);for(k=0;k<16;k++)//写一整行数据(16个字节,合八个字符)Write_Data(*pPicture++,1);}}//Write_Data(0x36,0);}#endif/**********************************************Part2.2Table Headfile**********************************************/extern unsigned char img[]={0x00,0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x07,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x1F,0xFF,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x7F,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0xFF,0xFF,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFE,0x7F,0xFF,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFF,0x7F,0xFE,0xDF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x1F,0xFF,0x7F,0xFF,0xBF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3F,0xFB,0xFF,0xF9,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7F,0xFB,0xFF,0xFF,0x3F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xBF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0xC0,0x03,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0xFF,0xFE,0x00,0x00,0x7F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0xFF,0xF8,0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0xFF,0xF0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0x7F,0xC0,0x00,0x00,0x03,0xFE,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0xF7,0x80,0x00,0x00,0x01,0xF5,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xFB,0x00,0x00,0x00,0x00,0xE3,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1F,0xFF,0x03,0xF8,0x07,0xF8,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFE,0x0F,0xFE,0x1F,0xFC,0x7F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFC,0x1C,0x0F,0x7C,0x0C,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFC,0x1C,0x03,0xF0,0x06,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF8,0x08,0x01,0xE0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF8,0x08,0x07,0xF0,0x0E,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF0,0x08,0x0F,0x38,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF0,0x0C,0x1E,0x1E,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xF0,0x04,0x7C,0x0E,0x1C,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xF0,0x05,0xF8,0x00,0x00,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xE3,0xBF,0x9C,0xFF,0xEF,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xE3,0xBB,0x6D,0xFF,0xFF,0x87,0xDF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xEF,0xE3,0xBE,0x6F,0xF3,0xBB,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xF0,0xE3,0xBE,0xFF,0xFB,0xB8,0x07,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFE,0xE3,0xFB,0xFC,0x7B,0x9F,0x87,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xE1,0xF3,0x1D,0xF3,0x9F,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xE0,0x07,0xF8,0x07,0x0C,0x07,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xF0,0x06,0xF8,0x0F,0x18,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF0,0x0C,0x1C,0x1E,0x0C,0x0F,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF0,0x0C,0x0E,0x3C,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF8,0x0C,0x07,0x78,0x0C,0x0F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x7F,0xF8,0x18,0x03,0xF0,0x04,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xF8,0x18,0x03,0xE0,0x04,0x1F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFC,0x08,0x0F,0xF8,0x04,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x3F,0xFE,0x0C,0x3F,0x3E,0x08,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1F,0xFE,0x07,0xFC,0x07,0xF0,0x7F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x1F,0xFF,0x03,0xE0,0x00,0xA0,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0xFF,0x80,0x00,0x00,0x01,0xFF,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0F,0xFF,0xC0,0x00,0x00,0x03,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0xFF,0xE0,0x00,0x00,0x07,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0xFF,0xF8,0x00,0x00,0x0F,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0xFF,0xFC,0x00,0x00,0x3F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0xFF,0xFF,0x00,0x00,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xE0,0x07,0xFF,0xFF,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7F,0xFF,0xFF,0xFF,0xFF,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x3F,0xFF,0xFF,0xFF,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x0F,0xFF,0xDD,0xC6,0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x07,0xFF,0xD6,0xDC,0x7F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x03,0xFF,0xB9,0xBD,0xBF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0xFF,0x7B,0xCD,0xBF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x3F,0xF7,0xEE,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x0F,0xFF,0x1F,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/**********************************************Part2.3GUI Headfile**********************************************/#ifndef__GUI#define__GUI/**********开机界面**********/void init_lcd(){Initial_LCD();Set_cursor(0,4);PutsLCD("SwPower");Set_cursor(1,4);PutsLCD("糖coffee");Set_cursor(2,4);PutsLCD("糖coffee");Set_cursor(3,4);PutsLCD("糖coffee");ShowAll(img);while((P1IN&0x1f)==0x1f);/*Initial_LCD();Set_cursor(0,0);PutsLCD("Set I:01.00A");Set_cursor(1,0);PutsLCD("Out U:V");Set_cursor(2,0);PutsLCD("Out I:A");Set_cursor(3,0);PutsLCD("Out P:W");*/}/************恒流源界面**************/void GUI_CC(){Initial_LCD();Set_cursor(0,0);PutsLCD("Set I:01.00A");Set_cursor(1,0);PutsLCD("Out U:V");Set_cursor(2,0);PutsLCD("Out I:A");Set_cursor(3,0);PutsLCD("Out P:W");}/************恒压源界面**************/void GUI_CU(){Initial_LCD();Set_cursor(0,0);PutsLCD("Set U:01.00V");Set_cursor(1,0);PutsLCD("Out U:V");Set_cursor(2,0);PutsLCD("Out I:A");Set_cursor(3,0);PutsLCD("Out P:W");}/************恒功率界面**************/void GUI_CP(){Initial_LCD();Set_cursor(0,0);PutsLCD("Set P:01.00W");Set_cursor(1,0);PutsLCD("Out U:V");Set_cursor(2,0);PutsLCD("Out I:A");Set_cursor(3,0);PutsLCD("Out P:W");}#endif/********************************************** Part2.4deal Headfile**********************************************/ #ifndef__deal#define__dealunsigned int Us=10;//设置时扩大10倍,默认1.0V unsigned int Is=10;//设置时扩大10倍,默认1.0A unsigned int Ps=10;//设置时扩大10倍,默认1.0Wfloat Kru=0.25;//分压系数5/20float Kri=1.3;//放大系数约0.05*25unsigned int Uo[6];unsigned int Io[6];long unsigned int Umem;unsigned int Uout;long unsigned int Imem;unsigned int Iout;unsigned int Pout;signed int iError,lastError,iIncpid;float Kp=0.05;float Ki=0.01;unsigned int PWM=50;unsigned char Mode=0;/***************求数组的平均数****************/ unsigned int mean(unsigned int a[]){unsigned int dat=0;unsigned int max=a[0];unsigned int min=a[0];for(unsigned int j=0;j<6;j++){if(max<a[j])max=a[j];if(min>a[j])min=a[j];}for(unsigned int i=0;i<6;i++){dat=dat+a[i];}dat=(dat-max-min)>>2;return dat;}/***************显示输出电压****************/ void displayU(){unsigned char iU,fU;iU=Uout/100;fU=Uout%100;Set_cursor(1,3);PutcLCD('0');PutDig(iU/10);PutcLCD('.');PutDig(iU%10);PutDig(fU/10);//PutDig(fU%10); }/***************显示输出电流****************/void displayI(){unsigned char iI,fI;iI=Iout/100;fI=Iout%100;Set_cursor(2,3);PutcLCD('0');PutDig(iI/10);PutcLCD('.');PutDig(iI%10);PutDig(fI/10);//PutDig(fI%10);}/***************显示输出功率****************/void displayP(){unsigned char iP,fP;iP=Pout/100;fP=Pout%100;Set_cursor(3,3);PutDig(iP/10);PutDig(iP%10);PutcLCD('.');PutDig(fP/10);PutDig(fP%10);}/***************处理电压PWM****************/void deal_U(){if((Uout>Us*100+25)||(Uout+25<100*Us))//精度25mV{iError=Us*100-Uout;//当前误差iIncpid=(signed int)(Kp*iError+Ki*lastError);PWM=PWM+iIncpid;if(PWM<20)PWM=20;else if(PWM>380)PWM=380;TBCCR2=PWM;}}/***************处理电流PWM****************/void deal_I(){if((Iout>Is*100+5)||(Iout<Is*100+15))//精度4.8mA{iError=Is*100-Iout;iIncpid=(signed int)(Kp*iError+Ki*lastError);PWM=PWM+iIncpid;if(PWM<20)PWM=20;else if(PWM>380)PWM=380;TBCCR2=PWM;}}/***************处理功率PWM****************/void deal_P(){if((Pout>Ps*10+3)||(10*Ps>Pout+2))//输出功率大于设定功率{iError=Ps*10-Pout;iIncpid=(signed int)(Kp*iError+Ki*lastError);PWM=PWM+iIncpid;if(PWM<20)PWM=20;if(PWM>380)PWM=380;TBCCR2=PWM;}}/***************计算输出电压电流功率****************/void ADC(){static unsigned int index=0;Uo[index]=ADC12MEM0;Io[index]=ADC12MEM1;index++;if(index==6){Umem=mean(Uo);Imem=mean(Io);Uout=(unsigned int)(2500*4.1*Umem/4096);//放大1000倍显示Iout=(unsigned int)(2500*Imem/(4096*1.3));//放大1000倍显示Pout=(unsigned int)((Uout/100.0)*(Iout/100.0));//放大100倍显示displayU();displayI();displayP();if(Mode==0)deal_U();else if(Mode==1)deal_I();elsedeal_P();index=0;}}#endif/********************************************** Part2.5独立键盘Headfile**********************************************/ #ifndef__IndependentKey#define__IndependentKey#define KeyDIR P1DIR#define KeyIN(P1IN&0x1f)#define Inc BIT0#define Dec BIT1#define MOD BIT2#define ADD BIT3#define PLU BIT4/**********显示设置电压************/void DisplaySetU(){unsigned char iUs,fUs;iUs=Us/10;fUs=Us%10;Set_cursor(0,3);PutDig(iUs/10);PutDig(iUs%10);PutcLCD('.');PutDig(fUs);}/**********显示设置电流************/void DisplaySetI(){unsigned char iIs,fIs;iIs=Is/10;fIs=Is%10;Set_cursor(0,3);PutcLCD('0');PutDig(iIs);PutcLCD('.');PutDig(fIs);}/**********显示设置功率************/void DisplaySetP(){unsigned char iPs,fPs;iPs=Ps/10;fPs=Ps%10;Set_cursor(0,3);PutDig(iPs/10);PutDig(iPs%10);PutcLCD('.');PutDig(fPs);}/***********键盘初始化*************/void initKey(){KeyDIR&=~(Inc+Dec+MOD+ADD+PLU);}/************键盘检测**************/void KeyScan(){if(KeyIN!=0x1f){Delay(100);if(KeyIN!=0x1f){unsigned char KeyTemp=KeyIN;while(KeyIN!=0x1f);//等待按键松开switch(KeyTemp){case0x1e:{if(Mode==0){Us+=1;}else if(Mode==1){Is+=1;}else{Ps+=5;}}break;//+case0x1d:{if(Mode==0){Us-=1;}else if(Mode==1){Is-=1;}else{Ps-=5;}}break;//-case0x1b:{Mode++;if(Mode>2)Mode=0;if(Mode==0){Us=10;GUI_CU();}else if(Mode==1){Is=10;GUI_CC();}else{Ps=10;GUI_CP();}}break;//modcase0x17:{if(Mode==0){Us+=5;}else if(Mode==1){Is+=2;}else{Ps+=10;}}break;//++case0x0f:{if(Mode==0){Us-=5;}else if(Mode==1){Is-=2;}else{Ps-=10;}}break;//--}}}}#endif/**********************************************Part2.6init Headfile**********************************************/#ifndef__init#define__init/**********初始化时钟**********/void init_clk(){FLL_CTL0|=XCAP18PF;//Set load capacitanceFLL_CTL1&=~XT2OFF;//Turn on XT2do{IFG1&=~OFIFG;//Clear oscillator fault flagfor(unsigned int i=1000;i;i--);}while(IFG1&OFIFG);//Test osc fault flagFLL_CTL1=SELS;//Select SMCLK source as XT2CLK}/**********初始化AD,计算输出**********/void init_ADC12(){P6SEL=0x03;//Enable A/D channel inputsADC12CTL0=ADC12ON+MSC+SHT0_8+REFON+REF2_5V;//Turn on ADC12,set sampling timeADC12CTL1=SHP+ADC12SSEL_1+CONSEQ_1;//Use sampling timer序列单次ADC12MCTL0=INCH_0+SREF_1;ADC12MCTL1=INCH_1+SREF_1+EOS;(文档由搜狐视频播放器/分享,如果喜欢我们的电影,请使用搜狐视频在线观看,支持搜狐视频、优酷、土豆、乐视等国内各大视频网站热门影视资源,覆盖全网90%视频节目。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

开关电源的数字控制实现方案
类别:电子综合阅读:5732
尽管业内不少人都认为,模拟和数字技术很快将争夺电源调节器件控制电路的主导权,但实际情况是,在反馈回路控制方面,这两种技术看起来正愉快地共存着。

的确,许多电源管理供应商都提供了不同的方案。

一些数字控制最初的可编程优势现在甚至在采用模拟反馈回路的控制器和稳压器中也有了。

当然,数字电源还是有一些吸引人之处。

本文主要讨论脉冲宽度调制(PWM)、脉冲密度调制(PDM)和脉冲频率调制(PFM)开关稳压器和控制器IC。

其中一些集成了控制实际开关的一个或多个晶体管的驱动器,另一些则没有。

还有一些甚至集成了开关FET,如果它们提供合适的负荷的话。

因此,数字还是模拟的问题取决于稳压器的控制回路如何闭合。

图1显示了两种最常见的PWM开关拓朴布局的变化,降压和升压(buck/boost)转换器。

在同步配置中,第二只晶体管将取代二极管。

在某种意义上来讲,脉冲宽度调制的采用使得这些转换器“准数字化”,至少可与基于一个串联旁路元件的723型线性稳压器相比。

事实上,PWM使得采用数字控制回路成为可能。

不过,图1中的转换器缺少控制一个或几个开关占空比的电路,它可在模拟或数字域中实现。

不管采用模拟还是数字技术,都有两种方式实现反馈回路:电压模式和电流模式。

简单起见,首先考虑它在模拟域中如何实现。

图1: 没有控制器的开关模式DC-DC电源十分简单。

不论用于升压还是降压,其成功与否取决于设计者如何安排一些基本的元器件。

在电压模式拓朴中,参考电压减去输出电压样本就可得到一个与振荡器斜坡信号相比较的小误差信号(图2),当电路输出电压变化时,误差电压也产生变化,后者反过来改变比较器的门限值。

反过来,这将使输出信号宽度发生变化。

这些脉冲控制稳压器开关晶体管的导通时间。

随着输出电压升高,脉冲宽度将变小。

图2: 电压模式反馈(本例中在模拟域)包含一个控制回路。

电流模式控制的一个优势在于其管理电感电流的能力。

一个采用电流模式控制的稳压器具有一个嵌套在一个较慢的电压回路中的电流回路。

该内回路感应开关晶体管的峰值电流,并通过一个脉冲一个脉冲地控制各晶体管的导通时间,使电流保持恒定。

与此同时,外回路感应直流输出电压,并向内回路提供一个控制电压。

在该电路中,电感电流的斜率生成一个与误差信号相比较的斜坡。

当输出电压下跌时,控制器就向负载提供更大的电流(图3)。

图3: 电流模式反馈采用了嵌套反馈回路。

与电压模式不同,它需要计入电感上的电流。

在这些控制拓朴中,在回路的相移达到360°的任意频率处,控制回路的增益不能超过1。

相移包括了将控制信号馈入反馈运放的倒相输入端所产生的固有180°相移、放大器和其它有源元件的附加延迟、以及由电容和电感(特别是输出滤波器的大电容)引入的延迟。

稳定回路要求对一定频率范围内的增益变化和相移进行补偿。

传统上,采用模拟PWM 来稳定电源通常需要采用经验方法:你在一块与生产型电路板相同布局的实际电路板上,实
验各种无源器件的不同组合,并观察在电源电压和负载需求变化时的电路时间域响应。

最近,事情已变得很简单。

因为现在模拟控制器公司在其自己的型号产品上实现了首先在数字控制器上引入的各种“在寄存器中插入一个值”的功能。

数字控制回路
开关电源数字控制的最好解释是由Artesyn公司的Geof Potter撰写的《开关电源转换器的数字控制介绍》白皮书,它可在/whitepaper/dcdc/上找到。

该白皮书描述了电压模式控制拓朴,但它也讨论了电流模式。

大多数电压模式控制的数字实现方案包括了模数转换器(ADC)、实现一些控制算法的微控制器或DSP、以及一个数字脉冲宽度调制器(DPWM),该DPWM拾取控制器输出并产生驱动执行开关动作的一个或几个晶体管所需的信号(图4)。

图4: 电压模式控制的数字实现消除了锯齿产生器。

在其他方面,它们与模拟实现紧密对应。

首先,ADC产生馈入控制器的一系列输出电压的数字表示。

控制算法是人们所熟悉的比例积分(PI)或比例积分/差分(PID)算法。

在一个PID控制器(更复杂的实例)中,每个ADC输入都要执行基于一系列系数的算法。

比例系数是与灵敏度相关的增益因子。

整数系数按照错误出现的时间长短来调节PWM的占空比。

诱导系数补偿回路的时间延迟(相位更有效)。

综合起来,PID算法的各个系数决定了系统的频率响应。

控制器随后将ADC的输出电压表示转换成维持期望的输出电压所需的脉冲持续时间(占空比)信息。

然后,该信息被传送至一个DPWM,它执行与模拟PWM一样的驱动信号产生功能。

注意模拟和数字控制方案管理开关晶体管的不同。

模拟控制器在时钟上升沿触发开关晶体管成ON状态,并在电压坡度达到预设的门槛电压时将晶体管触发成OFF状态;PID
控制器则计算开关晶体管ON和OFF状态期间所需的持续时间。

理论上,模拟控制可以提供连续精度的输出电压。

但ADC精度和采样率的交互作用再加上DPWM开关速率,使事情变得有些复杂。

例如,DPWM必须具有比ADC更高的精度。

否则,ADC输出的1-LSB变化就可能导致DPWM使输出电压变化大于1-LSB。

其结果是,输出电压就稳定地在两个数值之间转换,这个状态被称之为“限制性循环”。

不过,避免循环也不是轻而易举的。

这是因为要提供DPWM更高的精度就意味着必须提高其脉冲速率(脉冲速率决定了在任一给定时间段能够产生多少比特)。

然而,DPWM脉冲速率限制了它对所有来自控制器的比特进行压缩的时间。

Artesyn白皮书中的例子介绍了一个假设的具有1MHz开关速率和10位ADC的DPWM。

计算显示,调制器要求超过1 GHz 的脉冲速率。

当然,如此的高速度是不切实际的,因此数字控制器的设计者必须找到另一种替代解决方案。

一种方案是引入一些DPWM时钟抖动。

稳压器输出过滤器对馈入的任一脉冲串进行平均,这使对每个mth输出脉冲的宽度进行相当于1 LSB的调整成为可能。

这将脉冲串的平均值增加或降低了1 LSB精度的1/m倍。

如果在控制器输入端的1-LSB 使输出脉冲串平均变化10mV,这将使每四个脉冲缩短相应于10 mV的时间,那么通过滤波器的平均输出电压将降低10mV/4或2.5mV。

替代解决方法
尽管几乎所有数字控制器采用ADC和程序存储控制器,但这并不是唯一可能的解决方案。

去年,Zilker Labs注意到,达到最新Pentium级处理器所要求的阶跃响应(每毫微秒数百安),要求在控制器中采用相当快同时对功率消耗量大的DSP。

作为一种较低功耗的替代方案,该公司推出了一款基于比较器(而不是ADC)和状态机(而不是程序存储解决方案)的控制器。

此外,前述简单的降压型或升压型拓朴也不是实现数字稳压的唯一途径。

Vicor提出了一种完全不同的解决方案,它基于比前述简单的降压型或升压型拓朴要复杂得多的稳压器拓朴,并重新分配了电源架构中的各个基本元素。

最后,数字控制曾是一项突破性技术,但如今数字控制的诸多好处也已出现在模拟控制稳压器中。

相关文档
最新文档