#征文#通向数字电源之路——TMS320F28035 dsp数字电源开发(1)

      最近在用TI的TMS320F28035芯片做一款数字电源,为了进一步了解这颗芯片的功能,笔者设计了一个数字电源实验板,用28035作为PWM控制芯片,来更好的学习。本节用到的程序代码在附件中提供下载。

       对于电源工程师来说,TI的28035芯片比较适合做数字开关电源,它有下面的几个优点:

1)成本比较低,便宜。

2)有6对(共12路)功能完善的PWM,可以组合成多种生成PWM波的方式,并有多种的触发ADC的模式,还带有一个Trip-Zone子模块快速触发PWM的动作。

3)快速的ADC采样,并有多种触发方式。

4)3个模拟比较器能直接关闭PWM(适合峰值电流型控制)。

5)60MHz工作频率的定点内核C28x,还有一个相同工作频率的浮点型协处理器——控制律加速器(CLA)。

6)带斜率补偿功能和10位的DAC。

2833x相比,适用于开关电源的外设更多,但是工作频率不如2833x高。另外,28035内核是定点型的。CLA就是为了弥补定点内核算力的不足,而专门增加的。

笔者设计的28035数字电源实验板,主要包含两个开关电源电路:同步buck和boost。如下图:

其实这个数字电源电路在笔者以前的系列文章《通向数字电源之路——初学者入门》中也用到过。这次就是把原来的microchip的dspic33ep128gs806芯片换成了28035。

首先,要安装CCS(TI的dsp的集成编译环境)。没必要装太新的版本,笔者安装的是CCS7.4。安装完后,一定要下载安装controlSUITE,里面有要用到的程序框架和大量的代码示例。

对比之前用的MicroChip的集成开发环境MPLAB X IDE,现在用的TI的CCS并不能通过可视化的代码配置器来自动生成代码。但是TI提供了一系列内容丰富的库和程序框架,来帮助程序员编写代码,这些库和程序框架大部分在controlSUITE中,在这里,可以应用一个数字电源程序框架的工程模板,在该模板中,根据需要添加或修改代码。

打开之前安装好的CCS ,然后将工程模板导入。

单击Finish,完成工程导入后的CCS会生成一个工程文件夹,文件夹的结构如图:

其中包含两种类型的文件,带有箭头的链接文件和不带箭头的本地文件,所有代码的修改或添加都是在本地文件中进行的,一定不要随意修改链接文件,因为其它工程需要导入该模板时,还会用到这些链接文件,如果修改了,在其它工程中有可能报错。

该工程模板实现了PWM1A和PWM2A的占空比可调的方波输出。其中PWM1是通过CLA来实现,PWM2是通过定点内核的中断实现,同时,还有一路的ADC采样。下面就以buck电路为例,看看如何实现数字电源的基本功能。

首先,介绍一下buck电路的基本参数:

输入电压:12V-30VDC

输出电压:5V-10VDC

输出电流:0-2A

开关频率:100KHz

控制环路应用buck电路最常用的峰值电流型。

用到的芯片资源:

ADCINA3:输入电压采样

ADCINB4:输出电压采样

Comp3A:buck峰值电流比较器正向输入端

PWM1A:buck主MOS管驱动

PWM1B:buck同步MOS管驱动

开始分步骤进行代码的编写:

1)PWM1的配置

因为PWM1A和PWM1B的输出引脚是复用的GPIO引脚,这就要求先定义功能。双击打开‘ProjectName-DevInit_F2803x.c’文件。找到下面的代码:

改为:

注释掉一行代码的快捷键为Ctrl+/。

接下来,要导入一个文件到工程文件夹中。依次如图操作:

  

可以看到,在工程文件夹中,已经出现该文件了。

双击刚才导入的文件,可以看到里面的代码都是ePWM相关的寄存器的配置,该文件中包含两个函数PWM_ComplPairDB_CNF()和PWM_ComplPairDB_UpdateDB()。因为这两个函数需要在ProjectName-Main.c中调用,所以需要在ProjectName-Main.c中先声明。

下面要用PWM_ComplPairDB_CNF()这个函数初始化PWM1。注意应该注释掉模板自带的PWM1的配置函数PWM_1ch_CNF(),否则会产生冲突。

因为工程模板原来的PWM1就是用CLA内核产生PWM波的,所以有关的CLA设置不变。CLA是独立于28035内核的并行协处理器,它主要的作用是进行浮点数学运算,减轻内核CPU的运算开销,减少环路控制算法运算时间,降低控制环路延时,增大系统的相位裕度。它有自己独立的程序和数据空间,有独立的数据和地址总线,能够读取ADC、ePWM和Comp相关的寄存器,配置起来比较复杂,好在工程模板已经替我们完成了这项工作,我们只需要修改个别的寄存器就行。另外就是CLA程序的代码以前只支持汇编,现在也完全支持C语言了,模板就是以C语言编写的,后缀.cla的程序文件就是CLA的C代码写成的。

双击“ProjectName-CLA_Shared.h”,在该头文件中可以看到包含了“DPlib.h”

然后按住Ctrl键,单击鼠标左键,点击“DPlib.h”,就会打开“DPlib.h”,因为编译时要用到‘PWMDRV_CLA_C.h’头文件,所以应该在DPlib.h中去掉注释,但是“DPlib.h”不是工程的本地文件,不能改动,所以要在ProjectName-CLA_Shared.h中将其包含进来。

因为PWM1A和1B是互补的且不能直通,所以要设置一定的死区。可以把死区的设置函数放在初始化函数中。

设置工程的仿真器和编译器的版本。

在调试的阶段,一般是将代码放在RAM中运行。

最后编译工程,全部通过。将代码写入RAM运行,波形如下:

因为mos管的驱动芯片IR2181s驱动下降速度较慢,所以留有较大的死区。该PMW波形的占空比是通过CLA_Duty1变量来设置的,此处占空比设为0.4。

由于互补死区的存在,实际波形的占空比小于0.4。

2)模拟比较器的配置

28035芯片内部集成了3个模拟比较器(Comp),可以用来做峰值电流比较器。在该模拟比较器中还提供了DAC和斜率补偿的功能。下面看看如何配置:

首先将Comp的配置文件导入工程,导入的文件名和路径如下:

也是要以本地文件的形式导入工程中。在ProjectName-Main.c中声明DAC_CNF.c定义的函数。

在“ProjectName-DevInit_F2803x.c”中使能Comp3的时钟。

然后用DacDrvCnf()函数初始化Comp3。

先禁止斜率补偿器的工作,调试Comp3和DAC是否正常。

Comp3的输出做为ePWM1的控制信号,在峰值电流超过DAC的设定值时,要关断PWM1A的输出(即主MOS管的驱动),因此还要重新配置ePWM1。主要就是配置ePWM1的Trip-Zone(TZ)子模块中的寄存器。

写入TZ动作逻辑的代码:

TZ配置的420和421行表明,当Comp3输出高电平时PWM1A输出低电平,而PWM1B的输出状态不变。415行的代码表明,Comp3的高电平会产生PWM1A关断信号,并在下个PWM周期开始时,自动清除该PWM1A的关断信号,即逐周期限流。

因为主mos管开通的瞬间,会在电感电流中产生一个尖刺,如果不处理,将会导致PWMA误关断,所以还需要用到TZ的前沿消隐功能。

为了能清楚的观察Comp3的输出情况,需要将Comp3的out脚使能

现在可以在开环状态下进行电流内环的调试。在前面代码中,设置了一个固定的DAC值300,DAC是10位的,所以换算成电流峰值的限流值为:

实测波形如下:

从波形来看模拟比较器在电流采样波形达到1V时翻转,比较器工作正常,DAC工作正常。但是由于主mos管的驱动芯片IR2181s本身的关断延时,导致电感电流继续上升。从下图中,可以看到由于前沿消隐的作用,比较器能正确的关断PWM1A。同时也能看到主mos管的开通也存在明显的延时现象。

下面将斜率补偿加入,先包含斜率补偿用到的头文件。

修改Comp3初始化配置。

添加斜率补偿调用函数

编译通过,斜率补偿也能正常工作了。

在下一篇中,将进行电压闭环的代码实现。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
本篇所含全部资料,点击此处留下邮箱我会发给你
资料明细:DPLibTemplate-F2803x.rar
觉得内容不错的朋友,别忘了一键三连哦!
赞 28
收藏 40
关注 432
成为作者 赚取收益
全部留言
0/200
  • songxium 01-26 14:12
    老师,能不能发我一下资料,谢谢! so****@****.com
    回复 1条回复
  • dy-xyjG9uzx 2023-12-28 00:37
    老师,能不能发我一下资料,谢谢! 12****@****.com
    回复 1条回复
  • dy-qtnES1VB 2023-12-20 16:45
    老师,能不能发我一下资料,谢谢! 78****@****.com
    回复 1条回复
  • dy-YTCGE17B 2023-12-17 20:58
    老师,能不能发我一下资料,谢谢! ch****@****.com
    回复 1条回复
  • jimu115139 2023-09-22 16:21
    老师,能不能发我一下资料,谢谢! 24****@****.com
    回复 1条回复
  • anono 2023-09-11 14:30
    老师,能不能发我一下资料,谢谢! 10****@****.com
    回复 1条回复
  • dy-dFT1gATR 2023-09-08 23:07
    老师,能不能发我一下资料,谢谢! qu****@****.com
    回复 1条回复
  • dy-CD2VqjDm 2023-08-15 20:32
    老师,能不能发我一下资料,谢谢! do****@****.com
    回复 1条回复
  • dy-vhYRityJ 2023-07-30 00:44
    老师,能不能发我一下资料,谢谢! 25****@****.com
    回复 1条回复
  • dy-jXQfuaKh 2023-07-06 14:17
    老师,能不能发我一下资料,谢谢! 32****@****.com
    回复 1条回复
  • dy-jXQfuaKh 2023-07-06 12:41
    老师,能不能发我一下资料,谢谢! 3207772736@qq.com
    回复
  • dy-FR5iR5SP 2023-06-09 14:07
    老师,能不能发我一下资料,谢谢! 89****@****.com
    回复 1条回复
  • Jasper129 2023-05-30 11:08
    老师,能不能发我一下资料,谢谢! 18****@****.com
    回复 1条回复
  • dy-2Q6ite1c 2023-04-26 16:04
    老师,能不能发我一下资料,谢谢! 14****@****.com
    回复 1条回复
  • dy-3KbSlHcZ 2023-04-24 15:02
    老师,能不能发我一下资料,谢谢! 64****@****.com
    回复 1条回复
  • yangwenlong 2023-04-22 14:47
    原理图上复位电路没有接在DSP的第7脚XRS上,相当于没有复位电路,程序能够正常运行吗?
    回复
  • dy-4eHHKKCs 2023-04-16 22:57
    老师,能不能发我一下资料,谢谢! 28****@****.com
    回复 1条回复
  • qfw88 2023-04-16 09:50
    老师,能不能发我一下资料,谢谢! 29****@****.com
    回复 1条回复
  • dy-AuSGqzwh 2023-03-22 08:51
    老师,能不能发我一下资料,谢谢! 17****@****.com
    回复 1条回复
  • sdll825 2023-03-16 10:31
    老师,能不能发我一下资料,谢谢! sd****@****.com
    回复 1条回复