世纪电源网社区logo
社区
Datasheet
标题
返回顶部
讨论

原创Microchip数字电源Demo

[复制链接]
查看: 7504 |回复: 39
1
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-20 16:59:09
最近心血来潮,做了一款基于Microchip的DSP数字电源Demo,
主控芯片采用的是Microchip的DSP控制器——dsPIC33EP64GS502,该主控芯片是Microchip的第三代DSP控制器。具有以下特性:
l  多组工作寄存器,可以缩短进出中断的时间,为环路的计算节约时间,减少相位损失。
l  高达1ns高精度PWM
l  5对独立的ADC采样保持单元,高达22路ADC采样通道。
l  4组模拟比较器,包含12位的DAC。
l  2组可编程的运算放大器。
l  I2C,支持PMBUS
l  2组SPI
l  2组UART
l  4组输入捕获
l  4组输出比较
l  5组16为定时器
本降压型DCDC数字电源变换器,包含以下功能单元:
l  同步Buck电路,实现电压的降压工作,恒压5V输出。
l  温度检测功能。
l  OLED显示功能。
l  按键功能。
l  LED指示功能。
输入:12-24V,输出:5V/2.5A。
VMC控制方式。


数字电源开发板

数字电源开发板
shiwu2.JPG
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-20 17:03:53
 
因为这个设计的最主要的目的是数字环路的控制,那我们是需要知道这款demo的软件的环路情况,那么环路测试是非常关键的,所以附一个环路波形图。
环路穿越频率点:6.3KHz
增益裕量:16dB
相位裕量:53度
Capture.JPG
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-20 17:06:35
 
下面是主功率电路图,是个非常简单的同步buck,采用高端电流采样。
sch1.JPG
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-20 17:11:40
 
主控芯片dsPIC33EP64GS502的电路图也是比不可少的,为了方便测试,选用的芯片封装为SOP28,如下。
另外这款芯片有个特别的地方,就是可以支持live update——也就是不掉电升级,只有一个限制条件,flash不能低于64K。
sch2.JPG
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-20 17:27:48
 
环路代码调用的是Microchip的compensator Libraries,由于是VMC控制,采用的是3P3Z补偿器。
3P3Z的差分方程如下:
u[n] = B0*e[n] + B1*e[n-1] + B2*e[n-2] + B3*e[n-3] + A1*u[n-1] + A2*u[n-2] + A3*u[n-3]


系数定义如下:
;  Array assignments:
;
;   xABCoefficients[0]  = B0
;   xABCoefficients[1]  = B1
;   xABCoefficients[2]  = B2
;   xABCoefficients[3]  = B3

;   xABCoefficients[4]  = A1
;   xABCoefficients[5]  = A2
;   xABCoefficients[6]  = A3

;   xErrorControlHistory[0] = e[n-1]
;   xErrorControlHistory[1] = e[n-2]
;   xErrorControlHistory[2] = e[n-3]

;   xErrorControlHistory[3] = u[n-1]   
;   xErrorControlHistory[4] = u[n-2]
;   xErrorControlHistory[5] = u[n-3]



我这里使用了辅助工作寄存器,该工作寄存器能够节约数据保存,压栈等的时间,寄存器应用如下:
;       w0  = Control Reference value
;       w1  = Address of the Source Register (Input)  - ADCBUFx
;       w2  = Address of the Target Register (Output) - PDCx/CMPxDAC
;       w3  = ACCAL ... and misc operands
;       w4  = ACCAH ... and misc operands
;       w5  = ACCAU ... and misc operands
;       w6  = postScalar
;       w7  = postShift
;       w8  = Library options structure pointer
;       w9  = ACoefficients/BCoefficients array base address { B0, B1, B2, B3, A1, A2, A3 }
;       w10 = ErrorHistory/ControlHistory array base address { e[n-1], e[n-2], e[n-3], u[n-1], u[n-2], u[n-3] }
;       w11 = minclamp
;       w12 = maxClamp
;       w13 = user defined, misc use
;       w14 = user defined, misc use


.global _SMPS_Controller3P3ZUpdate_HW_Accel          ; provide global scope to routine

    _SMPS_Controller3P3ZUpdate_HW_Accel :

    push    CORCON        ; Save CORCON as it will be modified for fractional computation
                        ; 1.31 saturation
                                          
    ; Immediately load previous ACCUMULATOR results to free up Alt-W registers w3, w4, & w5 for misc. instructions
    mov w3, ACCAL        ; Load bits 15:0
    mov w4, ACCAH        ; Load bits 31:16
    mov w5, ACCAU        ; Load bits 39:32

    mov  #0xA0, w4        ; Load literal value 0x0080 CORCON register: 0b 0000 0000 1010 0000
    mov  w4, _CORCON

    sub w0, [w1], w5  ; w5 = Control Reference - measured output  ( w5 = w0 - [w1] )

    mov w5, [w10]     ; Store most recent error; becomes e[n-1] for next iteration

    mov [w9++], w4    ; w4 = B0
    mac w4*w5,  a     ; ACCA = B0 * e[n] + ACCA from previous iteration

    sftac a, w7       ; w7 = Normalization shift value to compensate coefficient scaling
                        ; ACC = ACC>>ostShift or ACC = ACC<<ostShift depending on sign of value

    sac.r a, #0, w4   ; w4 = Rnd(ACCAH) - this is the control output value from previous
                      ; line of code after having been shifted.  Store bits 31:16 of the ACCA
                      ; into w4 temp register

    mpy   w4*w6, a    ; Multiply control output (after rounding) and postScalar factor
    sac.r a, w4       ; w4 = Rnd(ACCAH) again after normalization

    ; Save control output to control history array prior to clamping

    mov w4, [w10 + #0x6]    ; w4 = u[n] ( becomes u[n-1] for next calculation )

    ; Clamp to minimum if needed
    cpsgt        w4, w11       ; Check if u[n] > minClamp.  If true, the next instruction is discarded and a Nop() is executed
                        ; If not true, execute next instruction
    mov.w        w11, w4     ; Update u[n] with minClamp value

    ; Clamp to maximum if needed
    cpslt        w4, w12     ; Check if u[n] < maxClamp. If true, the next instruction is discarded and a Nop() is executed
                        ; If not true, execute next instruction
    mov.w        w12, w4     ; Update u[n] with maxClamp value

    mov                w4, [w2]        ; Update the target register (Output):  [w2] = PDCx/CMPxDAC
    mov                w4, w14

controlHistoryUpdate:

   ; Update control history:

    clr  a,        [w9]+=2, w4, [w10]+=2, w5     ; ACCA = EMPTY
                                                       ; w4   = B1, w5 = e[n-1]

    mac  w4*w5, a, [w9]+=2, w4, [w10]+=2, w5     ; ACCA = B1 * e[n-1]
                                                 ; w4   = B2, w5 = e[n-2]

    mac  w4*w5, a, [w9]+=2, w4, [w10]+=2, w5         ; ACCA = B1 * e[n-1] + B2 * e[n-2]
                                                 ; w4   = B3, w5 = e[n-3]

    mac  w4*w5, a, [w9]+=2, w4, [w10]+=2, w5     ; ACCA = B1 * e[n-1] + B2 * e[n-2] + B3 * e[n-3]
                                                 ; w4 = A1, w5 = u[n-1]
                                                                                                 
    ; Calculate second section of 3P3Z controller -> (ACoefficients * controlHistory) and add results to accumulator 'A'                                                                                                 

    mac  w4*w5, a, [w9]+=2, w4, [w10]+=2, w5     ; ACCA = A1 * u[n-1] + B1 * e[n-1] + B2 * e[n-2] + B3 * e[n-3]
                                                 ; w4 = A2, w5 = u[n-2]

    mac  w4*w5, a, [w9],    w4, [w10],    w5     ; ACCA = A1 * u[n-1] + A2 + u[n-2] + B1 * e[n-1] + B2 * e[n-2] + B3 * e[n-3]
                                                 ; w4 = A3, w5 = u[n-3]

    mac  w4*w5, a,              [w10]-=6, w5     ; ACCA = A1 * u[n-1] + A2 * u[n-2] + A3 * u[n-3] + B1 * e[n-1] + B2 * e[n-2] + B3 * e[n-3]

    ; Decrement pointers to return to array base addresses

    sub  w9,  #0x0C, w9                ; Decrement by 6 words (Reset coefficient array pointer)

    ; Update compensator errorControlHistory array elements
       
    mov [--w10], w3                ; w3 = e[n-2]
    mov  w3, [w10 + #2]                ; e[n-3] = w3
    mov [--w10], w3                ; w3 = e[n-1]  
    mov  w3, [w10 + #2]                ; e[n-2] = w3       

    mov [w10 + #8], w3                ; w3 = u[n-2]
    mov  w3, [w10 + #10]        ; u[n-3] = w3
    mov [w10 + #6], w3                ; w3 = u[n-1]
    mov  w3, [w10 + #8]                ; u[n-2] = w3

    ; Save 40-bit accumulator results for next iteration

    mov ACCAL, w3                ; Load bits: 15:0
    mov ACCAH, w4                ; Load bits: 31:16
    mov ACCAU, w5                ; Load bits: 39:32

    pop CORCON            ; Restore CORCON

    return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;





nc965
  • 积分:82051
  • |
  • 主题:114
  • |
  • 帖子:24668
积分:82051
版主
  • 2019-4-20 17:43:50
 
谢谢演示
wszdxp2004
  • 积分:8481
  • |
  • 主题:67
  • |
  • 帖子:1121
积分:8481
LV8
副总工程师
  • 2019-4-22 09:55:13
 
谢谢分享……

ad596142041
  • 积分:1619
  • |
  • 主题:1
  • |
  • 帖子:71
积分:1619
LV6
高级工程师
  • 2019-5-8 23:39:51
 
这是用的汇编,佩服
飘飘飘
  • 积分:3751
  • |
  • 主题:5
  • |
  • 帖子:228
积分:3751
LV8
副总工程师
  • 2019-5-9 08:07:07
 
膜拜哦!
世纪电源网雪花
  • 积分:25967
  • |
  • 主题:731
  • |
  • 帖子:1987
积分:25967
超级版主
  • 2019-4-22 08:34:03
 
谢谢楼主的分享!
westbrook
  • 积分:7918
  • |
  • 主题:13
  • |
  • 帖子:1290
积分:7918
LV8
副总工程师
  • 2019-4-25 10:00:24
 
厉害,看来Microchip做数字电源是个不错的选择。
尖叫的变压器
  • 积分:1977
  • |
  • 主题:10
  • |
  • 帖子:207
积分:1977
LV6
高级工程师
  • 2019-4-28 10:13:54
 
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-29 20:33:48
 
数字电源,准确的叫法应该叫做“全数字环路控制电源”,顾名思义,也就是环路是数字方式完成的,完全不同于模拟电源。
我们知道,电源最重要的是效率。
而电源最为关键的两个技术一个是磁路,一个是环路。
而数字电源也就是通过ADC采样输出,把输出模拟信号离散化,转换为数字量,通过DSP的运算(如,PI,SPSZ,2P2Z,3P3Z等),进行环路补偿。
通过PWM模组单元,推动功率开关管驱动器,完成对整个拓扑的驱动,从而达到输出稳定。
从这里我们可以看出,数字电源在采样以及离散化,运算都是需要花费时间的。而我们认为模拟纯硬件花费的时间可以忽略。
那么数字电源的这些时间花销,就是延时。
所以我们需要更快的ADC采样,dsPIC33EP64GS502从触发ADC采样到转换完成只需要300ns.
并且我们需要更快的环路运算,则DSP的内核和乘法器等功能,使环路代码尽可能快的完成整个计算。除此之外,dsPIC33EP64GS502具有多组工作寄存器,能够加快环路中断的处理。
所以,DSP是做数字电源的关键!!
尖叫的变压器
  • 积分:1977
  • |
  • 主题:10
  • |
  • 帖子:207
积分:1977
LV6
高级工程师
  • 2019-4-29 22:11:14
 
ST的ADC采样速度200ns就完成了啊,定时器最高分辨216ps。。。。
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-29 22:30:42
 
Microchip的采样保持到转换完成,总共300ns,完成一个3P3Z算法,从ADC触发到刷新PWM只需要0.89us.
ADC仅仅是一个方面,环路计算的快慢更为关键,比如一条指令可以完成乘加,加地址偏移,预取值。
尖叫的变压器
  • 积分:1977
  • |
  • 主题:10
  • |
  • 帖子:207
积分:1977
LV6
高级工程师
  • 2019-4-30 00:03:47
 
STM32F34C8T6为了加速环路计算,在CPU内核位置制作了一个特殊RAM,零取指令等待时间,硬件乘法除法一个时钟周期就计算完了。。。
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-30 07:34:13
 
比如,ST的MCU如果要完成,从触发采样,完成一个3P3Z算法所需要的时间是多长吧。
你是乘除一个指令周期,要的是(乘加,地址偏移,预取值)这几个动作一共一个指令周期哈。
而且,你可以看到目前上ST做数字电源的量产产品有多少?
ST自己推出的数字电源解决方案有多少?
飞思卡尔的数字电源市场份额都比ST大。
尖叫的变压器
  • 积分:1977
  • |
  • 主题:10
  • |
  • 帖子:207
积分:1977
LV6
高级工程师
  • 2019-4-30 09:39:14
 
ST入电源市场太晚,并不能说明就一无是处,我相信Cortex-M4和Cortex-M7内核的数字电源必将分一杯羹!
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-5-6 07:41:37
 
进早进晚不是你我说的有用,我们也无法预计将来会怎么样?我们能够看见的目前的市场情况,现在市场就是这样的。
没有任何人说ST一无是处吧,我们只针对数字电源市场来说个厂家的应用。
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-4-29 20:41:29
 
整机工作非常稳定,原本有个0A-2.5A负载调变波形,没有找到就插一个软件版本好和技术支持方式的图吧。
shiwu3.JPG
leeplus
  • 积分:342
  • |
  • 主题:0
  • |
  • 帖子:4
积分:342
LV4
初级工程师
  • 2020-6-13 13:54:36
  • 倒数9
 
动态跳变,效果如何?
熊紅
  • 熊紅
  • 离线
  • LV6
  • 高级工程师
  • 积分:1216
  • |
  • 主题:1
  • |
  • 帖子:76
积分:1216
LV6
高级工程师
  • 2019-5-3 00:02:52
 
哪裡買得到板子呢?
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-5-6 07:26:02
 
可以加我的QQ:420408862哈
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-5-6 07:27:25
 
上面demo显示屏可以联系我哈。
尖叫的变压器
  • 积分:1977
  • |
  • 主题:10
  • |
  • 帖子:207
积分:1977
LV6
高级工程师
  • 2019-5-6 09:37:47
 
支持楼主!!!
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
  • 2019-5-12 16:02:23
 
感觉楼主真有意思,打着TI的棋号,做着微芯的生意。
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2019-5-13 11:35:59
 
哈哈哈哈哈哈哈哈
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2020-1-10 16:39:01
 
Microchip 3P3Z code library 讲解视频,如下。
SMPS_Controller3P3ZUpdate_HW_Accel  

复制这段内容后打开百度网盘手机App,操作更方便哦
链接:https://pan.baidu.com/s/1cX808n5C3oUAeWaj6bWvxA 提取码:hcLt
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
  • 2020-1-13 11:18:46
 
微芯的芯片就是太贵。
msp430
  • msp430
  • 离线
  • LV3
  • 助理工程师
  • 积分:205
  • |
  • 主题:1
  • |
  • 帖子:17
积分:205
LV3
助理工程师
  • 2020-5-17 11:21:21
 
Microchip的dsPIC33C系列应该是业界最便宜的的了啊
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
  • 2020-5-17 15:39:43
  • 倒数10
 
只有更便宜没有最便宜。

主要还是看具体应用,不同应用可能需求不一样,选择也就不一样了。
chongwen
  • 积分:422
  • |
  • 主题:2
  • |
  • 帖子:14
积分:422
LV6
高级工程师
  • 2022-3-8 17:03:50
  • 倒数7
 
您好,请教一下,dspic33CK系列的还能用SMPS库吗?我看官网介绍针对EP和F系列的芯片
圣地亚哥
  • 积分:485
  • |
  • 主题:0
  • |
  • 帖子:30
积分:485
LV6
高级工程师
  • 2020-3-9 09:14:19
 
请问lz,你的postScalar参数和postShift参数是多少呀,怎么确定的,谢谢
empyrium
  • 积分:107
  • |
  • 主题:0
  • |
  • 帖子:1
积分:107
LV2
本网技师
  • 2021-11-11 12:41:24
  • 倒数8
 
老师您好!视频文件中init_alt_w_registers_3p3z.S文件在哪里下载呀?microchip官网上找不到。
KONSITA
  • 积分:366
  • |
  • 主题:6
  • |
  • 帖子:26
积分:366
LV4
初级工程师
  • 2022-6-13 21:10:30
  • 倒数6
 
请教,这芯片如果要处理四相并联的boost升压,能否执行得过来?
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
  • 2022-6-14 17:35:32
  • 倒数5
 
控制条件也很重要,如果控是的是IGBT,20K以下频率,精度要求不是太高,一些单片机也能控制。
KONSITA
  • 积分:366
  • |
  • 主题:6
  • |
  • 帖子:26
积分:366
LV4
初级工程师
  • 2022-6-15 11:31:25
  • 倒数4
 
100KHz频率MOSFET ,12Vdc升压到48Vdc.四相BOOST并联需要均流,输出功率2400W。帮我评估一下?谢谢
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
  • 2022-6-16 17:39:30
  • 倒数3
 
平均单相功率达600W,Boost也许不是合适的架构。
KONSITA
  • 积分:366
  • |
  • 主题:6
  • |
  • 帖子:26
积分:366
LV4
初级工程师
  • 2022-6-20 18:56:42
  • 倒数2
 
请教一下,哪个拓扑更合适些?谢谢你
BingSun
  • 积分:10927
  • |
  • 主题:58
  • |
  • 帖子:1999
积分:10927
LV10
总工程师
最新回复
  • 2022-6-22 02:36:38
  • 倒数1
 
目前用得比较多的是推挽。
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)28285637 /(13823562357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2022 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号