Sepic电源模块设计与实现

摘  要

将大小恒定的直流电变换为另一恒定或电压可调的直流电的变换电路称为直流- 直流变换电路(DC/DC Converter)。不带变压器隔离的直流变换电路称斩波电路(DC Chopper),它的作用是直接将一直流电变换为另一电压恒定或者电压可以调节的直流电。在电力电子技术出现之前,直流调压技术主要依靠直流发电机。通过电位器调压虽然可以改变直流电压的大小,但是当负载发生变化时,负载两端电压变化较大。电力电子技术则很好解决了直流变换问题,由于采用了PWM控制的方式,因此称为直流斩波电路。常用的DC/DC直流斩波电路有Buck电路和Boost电路,其他四种还有Buck-Boost电路、Cuk电路、Sepic电路以及Zeta电路。本文针对常用的Sepic电路进行了研究,首先详细的阐述了Sepic电路的工作原理,然后在MATLAB/Simulink对其进行了建模与仿真,接着进行实物电路的设计,再而通过Proteus仿真确定方案的可行性后,在实物板子上验证所学的算法,经过检验,发现设计的sepic电路大体上能让人满意。

一、课程设计任务

综合实践涉及自动化专业的多门核心专业课程,有模拟电子技术、数字电子技术、电力电子技术、单片机原理与应用、系统仿真技术、自动控制原理等。通过一个完整的工程案例,把多门专业课程进行融合贯通,打破课程的“知识孤岛”,培养学生的综合实践能力和团队协作能力。

要求:

(1)    电源模块有:Boost电路、Buck电路、cuk电路、sepic电路,选择其中一种。

(2)    理解相关电路的工作原理,建立数学模型。

(3)    利用MATLAB或PSIM软件进行电路原理仿真和控制算法仿真。

(4)    利用Proteus软件进行单片机程序仿真。

(5)    控制算法可以选择:PID、模糊控制、专家系统等。

(6)    掌握电路板原理图绘制和PCB图绘制。

(7)    完成电源模块的焊接和硬件测试。

(8)    完成电源模块的软件测试。

(9)    完成实践文档撰写。

二、Sepic数字电源工作原理

详细见。

SEPIC电路原理-CSDN博客

三、系统硬件设计

本章主要介绍系统的硬件设计:包括主电路设计、驱动电路设计、采样电路设计、控制电路设计等部分。

主电路设计

计算开关管二极管的电压、电流,并进行器件选型。

计算电感感量、电容容值,并进行器件选型。

给出主电路的设计图。

负载电阻R的确定

根据欧姆定律,输出电压可调范围较大,输出电流2A内;

可以确定负载电阻为20Ω。

电感感量的确定

SPEIC使用两个电感 ,这两个电感可以绕在同一个磁芯上,因为在整个开关周期内加在它们上面的电压是一样的。使用耦合电感比起使用两个独立的电感可以节省PCB的空间并且可以降低成本当然也可以采用分离的电感。

确定电感的一个好规则就是,在最小输入电压下,使得纹波电流峰峰值大约
等于最大输入电流的40%。在数值相同的电感 中流动的纹波电流由下
面公式算出: 

电感由下式求得

f为开关频率, 最小V时的占空

储能电容Csepic 的选择

储能电容Csepic 的选择主要看RMS电流(有效电流),可由下式得出∶

SEPIC电容必须能够承受跟输出功率有关的有效电流。这种特性使SEPIC特别适用于流过电容的有效电流(跟电容技术有关)相对较小的小功率应用。SEPIC电容的电压额定值必须大于最大输入电压。C的纹波电压的峰峰值可以这样计算∶

=0.5V得 =44uf满足需要的有效电流的电容在C上一般不会产生太大的纹波电压,因此峰值电压通常接近输入电压。

输出滤波电容C的确定 

SEPIC中,当电源开关Q1打开时,电感充电,输出电流由输出电容提供。因此输出电容会出现很大的纹波电流。选定的输出电容必须能够提供最大的有效电流。输出电容上的有效电流是∶

 A

输出纹波电压

ESR、ESL和大容量的输出电容直接控制输出纹波。如图4所示,假设一半纹波跟ESR有关,另外一半跟容量有关,因此

 

 

输出电容必须满足有效电流、ESR和容量的需求,所以输出电流选择44uf。在表面贴装应用中,在输出端采用钽电容,聚合物电解电容和聚合物钽电容或者多层陶瓷电容。

输入滤波电容

在SEPIC应用中虽然对输入电容的要求不是很严格,但是用10uF或者更大的电容可以使电路免受输入电源内阻的影响。这里采用44uf。

输出二极管的选型

选择能够承受峰值电流和反向电压的二极体。二极体必须承受的最小反向峰值电压是∶

功率MOSFET的选择

最小阈值电压Vth(min)、导通电阻RDS(ON)、栅漏电荷QGD和最大漏源电压VDS(max)是选择MOSFET的关键参数。峰值开关电压等于

逻辑电平或者子逻辑电平阈值MOSFET应该根据栅极电压使用。

RDS(ON)值应该选最大工作结温时的值,一般在MOSFET资料手册中给出。要确保导通损耗加上开关损耗不会超过封装的额定值或者超过散热设备的极限。

由于做的电源容量不大,这里选择IRF540(100V 33A)就能好的满足需求。

主电路的设计图

图3.1.1 主电路的设计图

驱动电路设计

DC/DC变换器开关管需要触发信号,一般单片机输出的触发信号不能直接用于驱动开关管,需要通过驱动电路进行放大处理。

IR2101是双通道、栅极驱动、高压高速功率驱动器,该器件采用了高度集成的电平转换技术,大大简化了逻辑电路对功率器件的控制要求,同时提高了驱动电路的可靠性。同时上管采用外部自举电容上电,使驱动电源数目较其他IC驱动大大减少,在工程上减少了控制变压器体积和电源数目,降低了产品成本,提高了系统可靠性,被广泛应用于小功率变换器的驱动芯

根据官方手册,加入必要的自举二极管和自举电容后,在PWM信号输入引脚加100 kΩ的下拉电阻,防止PWM信号输入开路或高阻时MOS误动作; IR2101芯片内部不带有死区功能,为防止上下桥臂通时导通,需要在软件上实现死区功能。

图3.2.1 PWM驱动电路图

采样电路设计

电压采样电路设计

线电压采样(输出电压采样)

电压采样电路采用电阻分压后直接通过运放LM358采用差分放大电路将调理输出电压,再通过电阻分压按比例缩小至ADC能够采样的范围。(二极管作用防止输出电压超过3.3损坏DSP的ADC)。再使用ADC采样,软件解算出输出电压。

由于本设计中电压有正有负(兼容CUK、Buck-Boost),MCU不能采样负电压,所以需要一个基准电压将放大后的负电压抬升至正电压供MCU采样。基准电压用3.3 V通过分压电阻分压产生1.5V,LM358组成的电压跟随器输出1.5 V供电路使用。

输入电压与输入电压参考值的换算公式为:

图3.3.1 电压采样电路图

在12位ADC采样的电路中,输出电压计算公式如下:

电流采样电路设计

电流采样电路如下图所示,该电路使用了基于霍尔感应原理的电流检测专用芯片ACS712。该芯完全基于霍尔感应的原理设计,由一个精确的低偏移线性霍尔传感器电路与位于接近IC表面的铜箔组成,电流流过铜箔时,产生一个磁场, 霍尔元件根据磁场感应出一个线性的电压信号,经过内部的放大、滤波、斩波与修正电路,输出一个电压信号,该信号从芯片的第七脚输出,直接反应出流经铜箔电流的大小。因为斩波电路的原因,其输出将加载于0.5Vcc 上。ACS712 的Vcc 电源一般建议采用5V。以下为官方的参考设计电路。

图3.3.2 电压采样电路图

ACS712输出与输入的关系为 。一般输出的电压信号介于0.5V~4.5V之间。输出电压通过ADC采样,软件解算出电流。

由于板子上芯片用的是ACS712 0b5(最大电流5A),该型号的灵敏度为185mv,所以,在单片机中解算的公式如下:

​​​​​​​

 图3.3.3 电流采样电路图

控制电路设计

进行单片机控制系统电路设计。

表3.4.1 引脚配置图

信号分类

引脚名称

对应信号

属性

PWM信号

GPIO0

PWM_L

V1驱动信号

GPIO1

PWM_H

V2驱动信号

ADC信号

ADCINA1

VAB_FB

输出电压检测

ADCINA7

IA_FB

输出电流检测

继电器控制信号

GPIO16

J4.6

继电器控制

LED

GPIO2

LED3

辅助显示LED

OLED显示控制

GPIO28

OLED_SDA

I2C的SDA

GPIO29

OLED_SCL

I2C的SCL

按键控制

GPIO12

KEY

按键

​​​​​​​辅助电源电路设计

辅助电源通过二极管隔离从电源适配器DC-005(12V)的输入端取电,经过7805变换产生直流5V,在通过AMS1117-3.3变换产生3.3V电源;直流DC-005(12V)为驱动芯片供电以驱动MOS工作以及作为Sepic电路的输入;直流3.3V、5V为F28027和运放、电流检测芯片供电。

四、系统软件设计

本章主要介绍系统的软件设计:包括系统整体框图、闭环控制器框图、程序流程图、主要模块程序代码与分析。

系统框图

系统整体框图:包括输入源电源、主电路、驱动、采样、显示、按键等。

系统框图如图4.1.1所示。TMS320F28027通过GPIO模块控制OLED或者串口与上位机显示屏实时显示数据。通过PWM模块控制驱动电路从而控制Sepic电路的MOS管,通过ADC模块,利用采样电路来采样Sepic电路的、输出电压以及输出电流的电压值

图4.1.1 系统框图

控制算法简介

PID

位置式PID

​​​​​​​

在控制信号幅值受限、且给定目标出现大跳变的情况下,积分控制容易产生积分器饱和(integrator windup)的现象,使系统出现大超调和低频震荡,甚至导致不稳定。课上所学两种抗积分饱和方法:遇限消弱积分法,反馈抑制抗饱和PID。

增量式PID

​​​​​​​

增量式算法不需要对积分项累加,控制量增量只与近几次的误差有关,计算误差对控制量计算的影响较小。

积分饱和现象是位置式PID 算法应用常见的一种现象,因此对于位置式PID 算法除了需要对输出进行限幅外还需要对积分输出进行限幅,而增量式算法很好地避免了积分饱和现象,因此在增量式PID 控制算法中只需要对输出限幅,而无需积分限幅。

专家PID

专家PID 控制主要是利用受控对象和控制规律的知识进行控制,

专家PID 主要由五个控制律组成,通过工作状态及误差去选择相应的控制律去稳定数据,并对参数进行调节达到对控制系统稳定的作用。其控制结构如图 所示。

由于篇幅限制,这里就不一一展现了,而且由于某些原因,专家PID在电源控制方面性能一般,所以这里不会详细展开叙述,具体说来专家PID很需要专家的经验,可能电机控制的经验运用到电源中就不太适合,得调很多参数,有些情况下还不如普通的PID。

自适应模糊PID

自适应模糊PID 控制系统结构如图所示。控制系统以偏差e和偏差变化率ec作为输入量,利用模糊规则进行模糊推理,输出Δkp,Δki,Δkd。对PID三个参数进行在线分析与调整,而自适应模糊PID 控制器输出u( t) 作用Mosfet开关管上,从而使sepic的输出电压达到要求的实时稳定性。

详细内容见:​​​​​​​

自适应模糊PID(位置式)C语言实现_模糊pid c语言-CSDN博客

闭环控制器框图

这里给出闭环控制器框图,主要有电压单环、电压、电流双环等控制框图。

电压单环控制框图

电压环控制框图如图所示,通过AD电路采样电压,与给定点样进行比较,得到PWM的占空比,从而控制PWM模块的输出信号,输出信号控制Sepic电路的MOS管,实现电压单环控制。

图4.3.1 电压压单环控制框图

电压电流双环控制框图

电压电流双环控制框图入下图所示,该控制算法的原理为Sepic电路的输出电压经电压采样电路转换后,和给定电压进行相减,并进行PI控制器进行电压外环PI闭环控制,电压外环PI控制的输出值作为给定电流,给定电流与输出电流经电流采样电路转换为电压值进行比较,进入控制器进行解算,从而控制PWM模块的输出信号,输出信号控制Sepic电路的MOS管,实现电压电流双环控制。

图4.3.2 电压电流双环控制框图

程序流程图

程序流程图如图3.2所示。在程序一开始进行各个模块的初始化,初始化结束后开始循环执行任务。由于TI的I2C设计的有问题,运用学长的方案去做,配置好I2C去驱动OLED的时序不对。使用寄存器版本(28335移植)编写 发现总线一直处于Busy状态,根本没法发送数据。

这里使用模拟I2C显示,但由于频繁中断会导致模拟I2C的时序出问题,导致显示效果不佳。

整个程序流程是PWM触发ADCINT1与ADCINT2中断采样,然后对采样的值递归,然后控制算法是在固定控制周期进行解算,这里通过CPUTIMER0定时器(10ms)中断触发解算,对采样到ADC值(10ms大约采样60-70次,取最后7次)进行滤波,算出实际电压、电流值,通过控制器算出PWM占空比,完成一个周期的控制。

图4.4.1 程序流程图

主要模块程序配置与分析

ADC模块的采样精度为12位,将ADC参考电压源配置为内部自带的参考电压源,电压采样范围为0-3.3V,对应的ADC采样值为0-4096。

配置了A1、A7两个引脚,分别对应实验板上的输出电压采样、输出电流采样。

实际电压值与采样值的换算公式为

​​​​​​​实际电流值与采样值的换算关系为:

​​​​​​​

采样窗口数目配置为16个,该配置影响的是给电容充电时间的长短,充电时间越长,电容的电压值与采样电压值越接近,误差越小,采样时间会稍长。

ADC触发模式配置为EPWM1触发,在每个EPWM1的过CAMPA触发ADC采样。ADC采样完发生ADC中断,对采样到的值进行递归,方便进行滤波。

滤波方法尝试采用了卡尔曼滤波、递归平均值滤波、递归中值滤波、中位值平均滤波等等,卡尔曼滤波不适合做这种剧烈变化的采样滤波,最后采用的是中值滤波。

方法:

递归采样7次,按冒泡排序法大小排列。取中间值为本次有效值

优缺点:

克服波动干扰,对温度等变化缓慢的被测参数有良好的滤波效果,对速度等快速变化的参数不宜。

PWM模块

由于实物板子不是双向SEPIC设计,所以不需要互补PWM输出,这里就设置了输入为EPWM1A通道,过零点装载,采用工作在连续增计数模式下,周期设置为6000,也就是10KHz(在开关电源中,电源频率最好设置大一些,20k以上)其AQ模块动作为:当TBCTR=比较点时,设置为低电平,当TBCTR=0时设置为高电电平,由此可以比较简单的推算出所要的占空比。

TIMER模块

由于PWM的频率是10KHz(0.1ms),为了保证控制更加平稳,这里没有启用PWM中断进行控制量的解算,(控制周期过小会导致电压震荡很严重),因此这里采用的是定时器确定控制周期来进行控制器的解算输出。

ADC采样要滤波,需要多采样几个数据,因此控制周期最少要取1ms以上,这里使用10ms,定时器的配置为系统时钟10分频,周期值60000;触发中断周期为10ms。

GPIO模块

配置一个lED,显示程序是否正在运行。

配置引脚为按键输入,识别按键动作,从而为下一步控制继电器做准备

引脚控制继电器开闭,从而实现切换负载。

配置引脚为模拟I2C引脚,驱动OLED工作。

SCI模块

SCI模块主要是用来打印电压、电流数据方便调试PID的参数值。这里对串口进行了重定向,方便上位机接收数据。

上位机采用的是VOFA+,有图形化显示界面,很方便调节PID值,唯一的不足之处是其数据无法快速导出,进行作图。

PIE模块

配置了4个中断,CPUTIMER0中断,外部中断、以及ADCINT1~2中断,具体作用上面介绍过了,由于PIE模块的中断优先级定死了,通过这里ADC 优先级设置为最高,确保,CPUTIMER0中断采样到的电压电流值的置信度高。

关键代码

  1. interrupt void myTimer_CpuTimer0_isr(void)     //redefined in Isr.h
  2. {
  3.     timer0base++;
  4.     Isr_count++;
  5.     Voltage_Real_temp=filter2(filter_buf1);
  6.     Current_Real_temp=filter2(filter_buf2);
  7.     /*这里2048是换算完的  如果是1.5f-(float)temp/4096.0f*3.3f 误差会放大*/
  8.     Voltage_Real = (2048.0f-(float)Voltage_Real_temp)/4096.0f*3.3f*17.0f;
  9.     Current_Real = ((float)Current_Real_temp-3000.0f)/4096.0f*3.3f/0.185f;
  10.     adc_count1 = 0;
  11.     adc_count2 = 0;
  12. #if displaymode == uart
  13.     sprintf(Buffer,"channels:%f,%f,%f\n",pid.Ref,Voltage_Real,Current_Real);
  14.     printf("%s",Buffer);
  15. #elif displaymode == oled
  16. //    OLED_Clear();
  17.     sprintf(Buffer,"Ref:%.3f\n",pid.Ref);
  18.     OLED_ShowString(1,1,Buffer,24,1);
  19.     sprintf(Buffer,"Fdb:%.3f\n",Voltage_Real);
  20.     OLED_ShowString(1,30,Buffer,24,1);
  21.     OLED_Refresh();
  22. #endif
  23.     #if defined(FUZZYPID)
  24.         control_uk = fuzzy_pid_control(Voltage_Real, pid.Ref, pid_vector[0]);
  25.         if(control_uk<150)
  26.             control_uk=150;
  27.         else if (control_uk>2900)
  28.             control_uk=2800;
  29.     #elif defined(DCL_PID)
  30.         pid.Fdb = Voltage_Real;
  31.         pid.calc(&pid);
  32.         inside_pid.Ref=pid.Out;
  33.         inside_pid.Fdb = Current_Real*10;
  34.         inside_pid.calc(&inside_pid);
  35.         control_uk = inside_pid.Out;
  36.     #else
  37.         pid.Fdb = Voltage_Real;
  38.         pid.calc(&pid);
  39.         control_uk = pid.Out;
  40.     #endif
  41.         duty_val = (int)control_uk;
  42.         PWM_setCmpA(myPwm1, duty_val);
  43.         if(Isr_count>=Ref_scaler)
  44.        {
  45.            Isr_count=0;
  46.            GPIO_toggle(LED_Gpio_obj,LED4);
  47.             if(pid.Ref==VoltageRef2)
  48.             {
  49.                 pid.Ref=VoltageRef1;   // 电压给定 轮换
  50.                 #if defined(PID2)
  51.                     pid.init(&pid);
  52.                 #endif
  53.             }
  54.             else if(pid.Ref==VoltageRef1)
  55.             {
  56.                 pid.Ref=VoltageRef2;
  57.                 #if defined(PID2)
  58.                     pid.init(&pid);
  59.                 #endif
  60.             }
  61.        }
  62.     PIE_clearInt(myPie, PIE_GroupNumber_1);
  63. }
  64. void myAdc_ADCINT1_isr(void)
  65. {
  66.     filter_object1 = ADC_readResult(myAdc, ADC_ResultNumber_0);
  67.     filter_buf1[filter_num] = filter_object1;
  68.     for(char i = 0; i < filter_num; i++)
  69.     {
  70.         filter_buf1[i] = filter_buf1[i + 1]; // 所有数据左移,低位扔掉
  71.     }
  72.     adc_count1++;
  73. //    PWM_clearSocAFlag(myPwm1);
  74.     PIE_clearInt(myPie, PIE_GroupNumber_1);
  75.     ADC_clearIntFlag(myAdc, ADC_IntNumber_1);
  76. }

如程序框图所示,代码编写思路与其相似。

五、系统仿真及分析

Protues软件仿真

本章采用Protues软件对所建立的系统进行整体仿真,仿真包括两部分:1.开环仿真;2.闭环仿真。并对开环仿真和闭环仿真结果进行分析。

通过给定固定的占空比的方式,对Sepic电路进行开环输出仿真测试。

可能由于电力二极管性质更特殊吧,proteus里面二极管没法复现(肖特基、齐纳、隧道二极管也不太行),所以采用了双向SEPIC电路。

开环仿真结果如下图所示:

闭环仿真结果如下图所示:

图5.3.1 输出给定24V闭环结果(红绿线代表电感电压波形)

图5.3.2 输出给定7.5V闭环结果(红绿线代表电感电压波形)

MATLAB仿真

这里仅仅知识采用三角波与PID的输出进行调制产生PWM波,其实还可以使用DC-Convert模块进行调制产生PWM波去驱动IGBT实现SEPIC电路的功能。

图5.4.1 MATLAB仿真图

MATLAB仿真图如下,给定9V,输出为9V,输出可以较好的跟踪输入,而且快速性还行。

图 5.5.1 MALAB仿真结果

六、实验测试

开环测试

这里没有做升压输出,这是由于要考虑到水泥电阻功耗的限制。

而且过压容易导致过流,从而使ACS712的电流过大(图中的是ACS712 0b5最大5A电流 但是实际上最大承受电流不足5A(3.3-2.5)/0.185=4.32A),过流导致ACS712输出过压,电压倒灌到3.3V处,从而导致单片机供电失压复位。

基本上符合SEPIC电压输出的的规律。

表 6-1 开环测试结果

占空比(百分比)

输出电压/V

输出电流/A

50

11.5

0.565

25

3.75

0.1870

10

1.2

0.05

闭环测试

以下为闭环测试的结果,给定电压设置为3.3V和5V,在给定电压期间进行两次切载操作,其中运用了4种算法,具体波形如图所示。

图6.2.1 普通增量式PID

图6.2.2 专家PID

图6.2.3 模糊自适应PID

图6.2.4 增量式PID双闭环

图6.2.5 实物OLED显示界面

突加阶跃给定

在初始时给定电压设为3.3V,50s后给定电压5V随后在这两种电平切换循环,完成阶跃给定测试。以下对四种算法进行分析:

普通PID,由于PID参数整定的比较好,上升时间较短,无超调,调节时间也短。

专家PID算法,很依靠专家的经验,这里由于输出占空比驱动MOSFET,在偏差较大的时候,可以通过输入与输出关系给定固定的占空比,因此调节时间相对短,略有超调。

模糊PID系统因其具有参数自适应性,可在线实时整定PID参数,理论上可以从而明显减小了超调量和调节时间,增强了系统的鲁棒性,但是其偏差与偏差的微分论域不好确定(还有比例因子、调节因子需要事先整定),性能上提升看起来不大。

双闭环PID理论上会电流环而限制了启动电流,通过电流环减小了输出电压超调且使调节时间缩短,但这里可能是由于参数调节不佳的原因由较大的超调量。快速性大为提高。

负载扰动测试

在阶跃给定期间进行负载扰动测试,在每隔50/3s进行切载动作(控制继电器通断水泥功率电阻)。切载后,输出电流需要与新的负载匹配,先前进入平衡稳定状态的双闭环控制需要重新进行调整。

加载操作:负载从10欧降低到20欧。

减载操作:负载从20欧降低到10欧。

普通增量式PID在加减载控制效果与参数调整关系很大,当负载扰动引起工作点变化并导致系统模型及其频率特性改变时,固定的参数无法相应改变,导致系统性能稍微有些下降。

专家PID由于在偏差偏大时会根据人为设定输出,快速性挺好仅次于双闭环。

模糊PID动态性能还行,而采用模糊PID控制后,参数能够分别通过3个子推理器推理得出,实现参数在线自整定,使得系统输出电压的精度更高,提高了系统的动态性能。

加载时,双闭环PI控制系统输出电压动态压降最小,恢复时间也很短;减载时,PI双闭环系统性能也不错,只是两者周会有超调。可以看到在采用了双闭环控制后,由于对电压进行了闭环,输出电压在突降后会很快地追随给定值,重新回到稳定状态。

算法性能比较

表6.2.1 四种算法性能比较

控制算法

响应速度

电压纹波

抗负载扰动

稳定性

单环PID

单环专家PID

单环模糊PID

双环PI

较优

七、总结与展望

仿真遇到的问题

1、仿真遇到的开环电压不稳问题,运用了双向SEPIC,因为之前自己事先proteus仿真焊接调试了同步buck,为此提供了启发。

2、实物测试的时候,开环测试十分必要,这对我们了解电路的极限有很大的帮助(电压多少最好,电流多少合适)。

3、调试的时候,明白了控制器的输出要限幅对于做开关电源重要性,可以防止很多意外发生。不得不说这个电路设计的很巧妙,通过过流使电压倒灌,从而使单片机失压复位,杜绝了PWM的输出。

4、对于ADC采样不准,这里没能用matlab拟合(主要时间不多)有点小缺憾。在滤波方面采用了多种算法,效果也不是很好,这可能还是由于开关频率和电路不匹配,导致采样不准。

5、F28027的单片机PWM的频率较小,10Khz-20Khz是精度与频率的平衡,频率更高,纹波更小,但可调占空比也小,但相应控制精度也会下降。(主要还是对于F28027的HRPWM不是很熟悉。

总结

随着电力电子技术的发展,对电路的模拟控制已经难以满足各种场合的需要,数字控制因具有容易更新,容易维护,运行稳定等优点在各种应用场合中得到广泛的应用。

本文基于SEPIC的DC-DC变换器为出发点,研究了双向SEPIC变换器的工作原理以及其数字控制的实现方法,最后完成了电路的参数设计与电路调试,工作总结如下:

(1) 基于电路拓扑以及控制方法的选择,设计硬件系统的总体框架,并根据设计要求计算电路参数,选择合适的电子器件,设计合理的驱动电路、采样调理电路以及电源电路。

(2) 为了实现对电路的数字控制,首先对SEPIC变换器进行simlink建模仿真。 接着通过proteus进行模拟实物仿真,验证原理以及算法的可能性。

(4) 基于老师给的实物电路版,将程序载入F28027中以实现 DSP 对电路板的控制。运用了4种算法进行控制:分别是增量PID电压单闭环、专家PID电压单闭环、模糊PID电压单闭环、增量式PI电压电流双闭环。结果表明,这些算法各有优劣,总体上能满足控制需求。

展望

虽然取得了一些成果,但由于本人的时间以及学识有限,课题中还有部分工作需要在今后能够不断的完善,主要体现在以下几个方面:

(1)ADC滤波采样需要改进。

(2)使用HRPWM进行控制,使开关频率和电路参数匹配。

(3)采用更先进的算法进行控制,如模糊PID电压电流双闭环等等。

参考文献

  1. 齐彦薇. 数字型Buck/Boost双向DC-DC变换器的设计[D]. 西安石油大学.
  2. 杨航, 刘凌, 阎治安,等. 双闭环Buck变换器系统模糊PID控制[J]. 西安交通大学学报, 2016, 50(4):7.
  3. 莫程凯, 邰可欣, 段灵芝. 基于模糊PID控制开关电源的研究[J]. 电子技术与软件工程, 2021(14):3.
  4. 冉希谷. 基于STM32单片机的DC/DC升压变换器设计[J]. 集成电路应用, 2021, 38(5):3.
  5. 牟健, 何波贤, 梅杰,等. 基于STM32F334双向同步整流BUCK-BOOST数字电源设计[J]. 电子产品世界, 2018, 25(9):5.
  6. 李萍. 基于STM32F334的数字开关电源[J]. 实验科学与技术.
  7. 冀晓霏, 郭栋梁, 牛亮,等. 基于PID算法的四开关数字电源的设计与实现[J]. 山西电子技术, 2020(5):3.
  8. 成卓敏, 荣军, 李瀚,等. Sepic斩波电路在Simulink中的建模与仿真[J]. 电子技术(上海), 2016(11):3.
  9. 许峰. SEPIC变换器同步整流技术的研究[J]. 通信电源技术, 2017, 34(6):3.
  10. 徐宁博, 孙德, 窦祥. SEPIC变换器的原理分析与建模[J]. 电子测量技术, 2018, 41(8):4.
  • 16
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACS712是一款基于霍尔效应的电流传感器,可以用来测量直流电路中的电流大小。在STM32中接入ACS712电路需要注意以下几点: 1. 连接ACS712的引脚:ACS712有三个引脚,分别是VCC、GND和OUT。其中,VCC和GND分别连接到STM32的3.3V和GND引脚,OUT连接到STM32的一个模拟输入引脚。 2. 为ACS712提供合适的电源:ACS712需要使用3.3V的电源供电,可以从STM32的3.3V引脚中获取。 3. 选择合适的放大倍数:ACS712的输出电压大小取决于测量的电流大小和放大倍数,一般可以选择±5A、±20A或±30A的ACS712,根据具体的应用场景选择合适的放大倍数。 4. 计算电流值:ACS712输出的是模拟电压信号,需要使用STM32的ADC模块将其转换为数字信号,然后根据放大倍数和计算公式计算出电流值。 以下是一个简单的示例代码,可以实现测量ACS712输出的电流值并输出到串口: ```c #include "stm32f10x.h" #include "stdio.h" #define ACS712_SENSITIVITY 0.185 //ACS712输出电压灵敏度为185mV/A void ADC1_Init(void); void USART1_Init(void); void USART1_SendChar(char ch); void USART1_SendString(char* str); float ADC1_GetVoltage(uint16_t adc_value); int main(void) { uint16_t adc_value; float voltage, current; ADC1_Init(); USART1_Init(); while(1) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); //启动ADC转换 while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); //等待转换完成 adc_value = ADC_GetConversionValue(ADC1); //获取转换结果 voltage = ADC1_GetVoltage(adc_value); //计算输入电压 current = (voltage - 2.5) / ACS712_SENSITIVITY; //计算电流值 char str[32]; sprintf(str, "Current: %.2fA\r\n", current); USART1_SendString(str); //输出到串口 } return 0; } void ADC1_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); RCC_ADCCLKConfig(RCC_PCLK2_Div6); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles5); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); } void USART1_Init(void) { RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 115200; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void USART1_SendChar(char ch) { while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, (uint8_t)ch); } void USART1_SendString(char* str) { while(*str) { USART1_SendChar(*str++); } } float ADC1_GetVoltage(uint16_t adc_value) { return (float)adc_value / 4096 * 3.3; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值