新闻中心

EEPW首页 > 电源与新能源 > 设计应用 > 实现数字电源转换的方法

实现数字电源转换的方法

作者:时间:2011-12-27来源:网络收藏

7 PID算法

使用PID算法,将实际与期望输出电压之间的误差进行比例、积分和微分计算,然后将这三项合起来,对PWM占空比的控制。PID算法可以用于采用电压和电流模式的控制环路。处理Microchip的DSC不需要DSP技巧(见图5的代码列表),控制软件(图4)的主要“核心”是PID环路。PID软件通常很小,但是其执行速度非常快,通常每秒可以反复几十万次。这么高的反复率需要PID软件程序尽可能有效地发挥最佳性能。使用汇编程序是保证“严紧代码”的一种很好的

PID控制环路是定期由ADC进行中断驱动,任何系统功能都能在“空闲环路”中执行,以便减少PID控制软件内不必要的工作量。诸如电压上升/下降、错误检测、前馈计算和通信支持程序功能都是空闲环路可以执行的,其他中断驱动进程的优先级都必须比PID环路低。

空闲环路在完成系统和外设的初始化任务之后启动。通常,空闲环路监控温度,计算“前馈”条件,并检查故障状况。SMPS软件可执行该控制算法,将ADC中断驱动的PID环路作为其与时间关系最密切的部分。PID软件不应该使用超过可用处理器大约66%的带宽,以便计算资源的其余部分能够分配给空闲环路软件。

假设以30 MIPS运行PID环路(包括30条指令),执行时间大约为1μs。如果反复率是500kHz(2μs),那么PID工作量需要消耗一半可用的处理器带宽,也就是15MIPS。

用于式降压式器的PID软件的实例代码列表:

CALCULATE_PID:

push.s ; Save SR and W0-W3

bclr.b IFS0+1, #3 ; Clr IRQ flag in interrupt controller

#PID_REG_BASE, w8 ; Init pointer to PID register block

mov #PID_GAIN_REG_BASE, w10 ; Init pointer to PID gain register block

mov ADBUF1, w0 ; Read ADC to get voltage measurement

mov COMMANDED_VOLTAGE, w1 ; Get commanded output voltage

sub w1, w0, w0 ; W0 = proportional voltage error

mov PROPORTIONAL_Error, w1 ; Get previous voltage error

sub w0, w1, w2 ; diff error = new verr - old verr

mov w0, PROPORTIONAL_ERROR ; Store New Proportional Voltage Error

mov w0, PREINTEGRAL_TERM ; Store copy PERR as pre integral term

mov w2, DERIVATIVE_ERROR ; Store new Derivative Error

; These registers are reserved for PID calculations

; w6, w7 = contains data for MAC operations

; w8, w10 = pointers to error terms, and gain coefficients

SUM_PID_TERMS:

clr A, [w8]+=2, w6, [w10]+=2, w7 ; clr A, prefetch w6, w7

mac w6*w7, A, [w8]+=2, w6, [w10]+=2, w7 ; MAC proportional term and gain

mac w6*w7, A, [w8]+=2, w6, [w10]+=2, w7 ; MAC derivative term and gain

mac w6*w7, B, [w8]+=2, w6, [w10]+=2, w7 ; Update Integrator

add ACCA ; Add ACCB (Integrator) to ACCA



评论


相关推荐

技术专区

关闭