wkhn
认证:优质创作者
所在专题目录 查看专题
通向数字电源之路——初学者入门(1)
通向数字电源之路——初学者入门(2)
通向数字电源之路——初学者入门(3)
通向数字电源之路——初学者入门(4)
通向数字电源之路——初学者入门(5)
通向数字电源之路--进阶(1)
作者动态 更多
一种采用CAN总线方式升级F28035芯片Flash的方法(三)
2024-05-13 15:31
一种采用CAN总线方式升级F28035芯片Flash的方法(二)
2024-05-13 15:31
一种采用CAN总线方式升级F28035芯片Flash的方法(一)
2024-05-13 15:31
STM32G4系列MCU——数字电源入门(4)
2023-03-14 10:46
STM32G4系列MCU——数字电源入门(3)
2023-03-13 20:05

通向数字电源之路——初学者入门(3)

      在之前的两篇文章中,我介绍了Boost和Buck电路数字控制环路的实现。初步实现了数字电源的基本PWM调节功能,但是也存在一些问题,有以下几点:

1)不能实现BUCK和BOOST电路的同时工作,本文将以两电路同时工作为目标,对软件进行改进。

2)在轻载或空载时,无法稳压,导致输出电压无法稳定。这需要在电流采样电路中加入一个上拉电阻,确保轻载或空载时,PWM脉宽能降为0。

3)将BOOST输出电压的采样通道由AN5移到AN1,因为AN1是独立的ADC内核,而AN5是共享ADC内核,所以AN1采样速度比AN5要快一些。

4)写入程序后,不能更改两电路的输出电压。在程序中增加串口通讯的功能,通过串口改变输出电压。

原理图和软件,会在文中附件中提供下载。

1.如何让两电路同时工作?

      在前面的文中提到,控制环路的算法是在ADC采样中断中进行运算的,如果两电路同时工作,ADC采样中断就有可能发生冲突(也许冲突导致其中一个中断产生的延时并不会使环路不稳,但是笔者还没测试过)。为了解决ADC采样中断冲突的问题,可以把采样频率降低,即不在是每个PWM周期都采样,而是每两个PWM周期采样一次,同时错开两个电路的采样时间(在PWM的配置中可以设),就能实现同时工作且ADC采样不会产生冲突。具体设置如下:

在MCC中,点击PWM设置。

因为两个电路是PWM要同时工作,PWM时基就设为“主时基”,占空比设为“主占空比”

“Master Duty Cycle”为“主占空比”,“Period”为“主时基”。这里是将buck和boost的PWM频率都设为100KHz,占空比最大为50%。

设置PWM1

这里将“Duty Cycle Mode”和“Independent Time Base Mode”都选择“Master”。

请注意,在“Trigger Control”中,如下设置:

“Output Divider”中选择“2”,表示每两个PWM周期触发一次ADC采样,“Postscale Start Enable”中的“0”,表示从dsp上电后的第一个PWM开始计算ADC采样周期。

PWM2设置:

这里“Postscaler Start Enable”选择“1”,表示从dsp上电后第二个PWM周期开始计算ADC采样时间,这样PWM1和PWM2的ADC采样时间就错开了一个PWM周期,不会产生冲突。

然后进行ADC设置:(触发源应为PWM1 Primary和PWM2 Primary)

配置内部比较器1、2

当完成mcc设置后,将PI控制环路的差分方程写入程序中。

编绎后,烧录代码,两个电路能正常稳定工作。输入电压为15V,输出电压buck电路为4.26V,boost电路为19.95V。至于ADC采样频率降低后,对整体控制环路有什么影响?有时间会在以后的文章中讲述。

2.在上一版电路中,存在一个bug,电路空载时,两电路输出电压都会不受抑制的增高,这非常危险。导致这个现象发生的主要原因是:内部比较器在采样电流信号为零时,并不会使PWM输出0占空比,即使DAC的输出为0!这就导致PWM永远达不到0占空比!解决的方法很简单,用电阻上拉电流的采样,使DAC输出为0时,PWM能达到0占空比。

3.AN5通道的ADC采样,改到了AN3通道了。

4.增加了串口通讯功能

      为了能通过通讯的方式调整输出电压,并且了解电源内部的工作状态,有必要增加串口通讯功能。串口通讯要求按照收到的电压值输出电压,并定时发送某些状态位。需要两个外设:UART和Timer。用32位Timer2,回调函数的执行周期为1秒。

Timer定时器中断和UART中断全部打开。设置完成后,生成代码。

定时器的代码相对简单,只需要在定时器2的回调函数中写入发送函数(UART1_Write())或接收函数(UART1_Read())即可。

如果要读取接收的数据,就用UART1_Read()函数。请注意,由mcc自动生成的UART代码,内部定义了一个缓冲区,缓冲区的大小可以自定义,比如缓冲区定义了8个字节。如果上位机一次发送了8个字节,那么就要用UART1_Read()函数一次性接收这8个字节(for循环8次UART1_Read()函数),再处理接收的数据。当dsp接收了8个字节后,缓冲区会满,不及时读出数据,将会丢失后面接收到的数据。这就要求读缓冲区数据的频率要高于UART接收并写满缓冲区的频率。如果发了8个字节,只用UART1_Read()函数接收了7个字节,则下一次再用UART1_Read()函数则会继续接收缓冲区的第8个字节。

UART的代码相对复杂,但是对于使用者来说只需要用UART1_Read()函数和UART1_Write()函数即可。不必关心内部的缓冲机制。

总结:

      1)一颗芯片可以控制两个不同的电路的控制环路,增大了使用的灵活性。

      2)增加了通讯功能,在此基础上,还可以把dsp内部状态通过通讯发送出来。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
本篇所含全部资料,点击此处留下邮箱我会发给你
资料明细:digital_power_kit_buck&boost.X.rar,C2103.pdf
觉得内容不错的朋友,别忘了一键三连哦!
赞 4
收藏 7
关注 597
成为作者 赚取收益
全部留言
0/200
  • 老师,能不能发我一下资料,谢谢! to****@****.com
    回复 1条回复
  • zhouspace 05-29 18:57
    老师,能不能发我一下资料,谢谢! 14****@****.com
    回复 1条回复
  • longhuayun9 03-26 10:58
    老师,能不能发我一下资料,谢谢! 13****@****.com
    回复 1条回复
  • 发烧小峰 02-01 16:12
    老师,能不能发我一下资料,谢谢! bc****@****.com
    回复 1条回复
  • 发烧小峰 02-01 16:03
    老师,能不能发我一下资料,谢谢! bc****@****.com
    回复 1条回复
  • 发烧小峰 02-01 16:00
    老师,能不能发我一下资料,谢谢! bc****@****.com
    回复 1条回复
  • 有时路过 2024-10-27 22:11
    老师,能不能发我一下资料,谢谢! 18****@****.com
    回复 1条回复
  • Jzz 2024-10-17 21:50
    内容已删除 96****@****.com
    回复 1条回复
  • Jzz 2024-10-17 21:50
    老师,能不能发我一下资料,谢谢! 96****@****.com
    回复 1条回复
  • Jzz 2024-10-17 21:50
    内容已删除 96****@****.com
    回复 1条回复
  • dy-mmS594yD 2024-07-20 01:41
    老师,能不能发我一下资料,谢谢! 17****@****.com
    回复 1条回复
  • 无双叶子 2024-07-13 07:49
    老师,能不能发我一下资料,谢谢! 84****@****.com
    回复 1条回复
  • songxium 2024-01-26 13:49
    老师,能不能发我一下资料,谢谢! so****@****.com
    回复 1条回复
  • power小白 2024-01-10 23:23
    老师,能不能发我一下资料,谢谢! 13****@****.com
    回复 1条回复
  • dy-fr7bqalt 2024-01-04 16:10
    老师,能不能发我一下资料,谢谢! da****@****.com
    回复 1条回复
  • dy-iGugTBNk 2023-12-21 17:30
    老师,能不能发我一下资料,谢谢! pe****@****.com
    回复 1条回复
  • anono 2023-09-11 13:53
    老师,能不能发我一下资料,谢谢! 10****@****.com
    回复 1条回复
  • dy-GQbyZem1 2023-05-26 09:15
    老师,能不能发我一下资料,谢谢! 22****@****.com
    回复 1条回复
  • sdll825 2023-03-16 14:13
    老师,能不能发我一下资料,谢谢! sd****@****.com
    回复 1条回复
  • yangwenlong 2023-02-28 21:57
    老师,能不能发我一下资料,谢谢! ya****@****.com
    回复 1条回复