ADSP-CM403 Sinc—太阳能应用中的隔离测量

太阳能应用中的电压和电流测量需采用隔离测量技术。 DSP Sinc输入以及ADIAD7401A隔离式ADC恰好提供ADI 信号链的一个示例,实现这种隔离测量。

本文介绍采用ADSP-CM403xy和AD7401A器件,并由 ADI设计的测量应用典型信号链。

太阳能光伏逆变器系统

太阳能光伏逆变器转换来自太阳能面板的电能并高效地 将其部署到公用电网中。来自太阳能面板的电能基本上 属于直流源,它会被转换成交流,并与电网频率成一定的相位关系,馈送至公用电网上,且效率极高。转换可 以采用单级,也可以采用多级(见图1)。第1级通常为 DC-DC转换,其中太阳能面板的低电压与高电流输出转 换为高电压与低电流。这样做的目的是为了将电压提升 至与电网峰值电压兼容的水平。第2级通常将直流电压 和电流转换为交流电压和电流,一般使用H-电桥拓扑。

图1. 太阳能光伏逆变器信号链(ADI公司)

ADC理论—AD7401A

AD7401A是一款二阶Σ-Δ调制器,片上的数字隔离采用 ADI公司的iCoupler® 技术,能将模拟输入信号转换为高 速1位数据流。AD7401A采用5 V电源供电,可输入±250 mV 的差分信号(满量程±320 mV)。模拟调制器对模拟输入信 号连续采样,因而无需外部采样保持电路。输入信息以 数据流密度的形式包含在输出数据流内,该数据流的最 高数据速率可到20 MHz。通过适当的数字滤波器(称为 Sinc滤波器)可重构原始信息。处理器侧(非隔离)可采用 5 V或3 V电源 (VDD2)。

示例电路 – 描述

图2. 隔离式电压电路

Σ-Δ 调制器的交流输入是一个交流正弦波,表示单相电网 发出的220 V rms信号。电阻分频器将输入范围缩小到ADC 的额定输入范围。输入滤波器可降低输入端的噪声。

Σ-Δ 调制器输出包含两个信号:来自ADSP-CM403xy DSP处理器的高速时钟输入,以及保持调制数据的数据 信号。该数据可直接输入Sinc3滤波器,直接将数据转 换为ADC结果。下文显示该数据的一个示例。

图3. 调制器示例数据

在ADC的下限范围内,输入信号具有窄脉冲宽度,而在 上限范围内脉冲宽度几乎达到其最大值。输出数据通过 Sinc滤波器后,便如对角线所示。AD7401A工作电压高 达891 V单极性范围,或565 V双极性范围,并横跨隔离 栅:20μm聚酰亚胺。更多有关这些内容的信息以及各 种认证可在相关数据手册中找到。

ADSP-CM403XY SINC3外设模块

图4. ADSP-CM403 Sinc外设框图

框图显示4对Sinc滤波器(Sinc0至Sinc3)、2个调制器时钟 源和2组控制寄存器(单元)。模块接受4路来自GPIO输 入引脚的Σ-Δ 位流,并将2个调制器时钟源导入GPIO输 出引脚。脉冲宽度调制(PWM)信号使调制器时钟同 步,以获得最佳的系统性能。每个Sinc滤波器对均包含 初级滤波器、次级滤波器、DMA接口和过载限值检测 功能。初级Sinc滤波器通过DMA将其数据传输至存储 器。次级Sinc滤波器产生过载信号,可通过触发路由单 元(TRU)路由该信号,使PWM调制器产生跳变,生成 中断。

使用AD7401A时,器件额定抽取速率(DR)为256,但也 可在其他抽取速率下使用该器件。

对于DR=256的情况而言,Sinc3滤波器的响应见下文中 的图5a和5b。

图5. (a) Sinc3抽取速率=256 (b)模块噪底

数字滤波器

Sinc滤波器的传递函数使其能用在数字逻辑中(使用一系 列求和与抽取函数)。使用滤波器移除调制器采样时 钟,恢复采样信号的数字值。滤波器设计匹配双极性Σ-Δ 调制器,0 V输入下具有50%脉冲密度,正输入时超 过50%,而负输入时不足50%,如图6所示。

图6. ADSP-CM403 Sinc滤波器框图

数字滤波器是一组累加器,由调制器时钟(M_CLK)驱 动,后接一组由抽取时钟(D_CLK)驱动的微分器。 输入 累加器将输入位流转换为多字节字,而输出微分器获取 位流的均值1密度。

累加器和微分器的级数可以为3或4,具体取决于滤波器 阶数。滤波器的直流增益和带宽为滤波器阶数(O)和抽 取速率(D)的函数,即调制器时钟与抽取时钟的比值。 Sinc滤波器传递函数由累加器与微分器的传递函数之积 确定,Z域内的表达式为:

 

Equation 1

 

PWM和SINC数据对齐

Sinc外设时钟和PWM本质上运行在同样的ADSP-CM403 系统时钟下,典型值为100 MHz。PWM和Sinc可以同步 以便提供数据,并且时间与速率恰好和控制算法一致。 通常与PWM电平波形对齐。下图显示使用Sinc输入进行电网同步所需时序的示例。当PWM运行在20 kHz (50 μs) 时,PWM_SYNC信号(同步不同DSP的PWM模块或外部 PWM时需要用到该信号)位于PWM波形中央,几乎不 发生切换。若要对齐Sinc数据,则AD7401A的时钟速率 应设为10.24 MHz,并且抽取速率为256(见AD7401A数据 手册)。这将产生40 KHz (50μs)的16位字速率,两倍于PWM 频率。由于Sinc还可设为与PWM_SYNC输出对齐(如下 框图所示),Sinc现在能在每个PWM周期内产生两个数 据输出。输出字在SRAM中可用, 位置在下一个 PWM_SYNC信号位置处。显然,它说明Sinc数据可用 于电网同步算法控制中。

图7. PWM与Sinc外设对齐(ADSP-CM403)

编程示例

/* SPECIFY DECIMATION RATE OPTIONS */

/* 256 */
// RESULT = ADI_SINC_SETRATECONTROL (DEV, ADI_SINC_GROUP_0, ADI_SINC_FILTER_PRIMARY,DECRATE_256, 0);
// RESULT = ADI_SINC_SETLEVELCONTROL (DEV, ADI_SINC_GROUP_0, 0, 0, SAMPLECOUNT_INTRATE, PSCALE_256);          // PCINT INT RATE

/* 128 */
RESULT = ADI_SINC_SETLEVELCONTROL (DEV, ADI_SINC_GROUP_0, 0, 0, SAMPLECOUNT_INTRATE, PSCALE_128);          // PCINT INT RATE
RESULT = ADI_SINC_SETRATECONTROL (DEV, ADI_SINC_GROUP_0, ADI_SINC_FILTER_PRIMARY,DECRATE_128, 0); 

/* 64 */
RESULT = ADI_SINC_SETLEVELCONTROL (DEV, ADI_SINC_GROUP_0, 0, 0, SAMPLECOUNT_INTRATE, PSCALE_64);          // PCINT INT RATE
RESULT = ADI_SINC_SETRATECONTROL (DEV, ADI_SINC_GROUP_0, ADI_SINC_FILTER_PRIMARY,DECRATE_64, 0);


/* SET SECONDARY RATE CONTROL “/
RESULT = ADI_SINC_SETRATECONTROL (DEV, ADI_SINC_GROUP_0, ADI_SINC_FILTER_SECONDARY, 8, 0);
RESULT = ADI_SINC_SETFILTERORDER (DEV, ADI_SINC_GROUP_0, ADI_SINC_FILTER_THIRD_ORDER, ADI_SINC_FILTER_THIRD_ORDER); RESULT = ADI_SINC_SETCIRCBUFFER(DEV, ADI_SINC_GROUP_0, SINC_CIRCBUFFER, CIRC_BUF_SIZE);

/* SET OVERLOAD AMPLITUDE DETECTION LIMITS TO 0 – FULLSCALE */
RESULT = ADI_SINC_SETAMPLITUDELIMIT (DEV, ADI_SINC_PAIR_0, 0X0000, 0XFFFF);
RESULT = ADI_SINC_SETAMPLITUDELIMIT (DEV, ADI_SINC_PAIR_1, 0X0000, 0XFFFF);
RESULT = ADI_SINC_SETAMPLITUDELIMIT (DEV, ADI_SINC_PAIR_2, 0X0000, 0XFFFF);
RESULT = ADI_SINC_SETAMPLITUDELIMIT (DEV, ADI_SINC_PAIR_3, 0X0000, 0XFFFF);

/* SPECIFY MODULATOR CLOCK FREQUENCY, PHASE & STARTUP SYNCHRONIZATION */
RESULT = ADI_SINC_CONFIGMODCLOCK (DEV, ADI_SINC_GROUP_0, FSYSCLK, MODCLK, 0, FALSE);          // UP TO 20MHZ

/* IT’S THE SAME CLOCK AS THE PWM – SO PWM AND SINC ARE SYNCHRONOUS */
RESULT = ADI_SINC_ENABLEMODCLOCK (DEV, ADI_SINC_GROUP_0, ADI_SINC_MOD_CLK_IMMEDIATE );

/* ASSIGN BUFFERS TO RECEIVE SINC DATA-AUTOMATICALLY DMA’D INTO SRAM IN THE ADSP-CM403*/
RESULT = ADI_SINC_SUBMITBUFFER(DEV, ADI_SINC_GROUP_0, SINCDATA0, NUM_SAMPLES);

/* ROUTE THE TRU INTERRUPT */
RESULT = ADI_SINC_ENABLEDATAINTERRUPT (DEV, ADI_SINC_GROUP_0, ADI_SINC_DATA_INT_0, TRUE);

/* ENABLE & ASSIGN USED SINC FILTER PAIR, AND SPECIFY INTERRUPT MASKS */
RESULT = ADI_SINC_SETCONTROLINTMASK (DEV, ADI_SINC_INT_EPCNT0|ADI_SINC_INT_EFOVF0|ADI_SINC_INT_EPCNT1|ADI_SINC_INT_EFOVF1);
RESULT = ADI_SINC_ENABLEPAIR(DEV, ADI_SINC_PAIR_0, ADI_SINC_GROUP_0, TRUE);               // ACV_EXTERNAL
RESULT = ADI_SINC_ENABLEPAIR(DEV, ADI_SINC_PAIR_1, ADI_SINC_GROUP_0, TRUE);               // ACV_INTERNAL
RESULT = ADI_SINC_ENABLEPAIR(DEV, ADI_SINC_PAIR_2, ADI_SINC_GROUP_0, TRUE);               // DC LINK
RESULT = ADI_SINC_ENABLEPAIR(DEV, ADI_SINC_PAIR_3, ADI_SINC_GROUP_0, TRUE);               // AC_CURRENT

/* WAIT AND READ FULL SINE WAVE INTO SRAM – START NEAR AC CROSSOVER. */
DO
{
     PWM_SINC_LOOP=0;
     GET_ADC_DATA_PWM();
}
WHILE ((SINC_VEXT_DATA[0] > 50) || (SINC_VEXT_DATA[0] < -50)) ; // START SINC AT 0 V MEASUREMENT-ALIGNS WITH SINEWAVE.

作者

Martin Murnane

Martin Murnane

Martin Murnane 是工业和仪器仪表部太阳能PV系统工程师,专注于能源/太阳能PV应用。加入ADI公司之前,他曾从事过能源循环利用系统中电力电子技术(Schaffner Systems)、基于Windows的应用软件/数据库开发(Dell Computers)以及采用应变计技术的HW/FW产品开发(BMS)等领域的工作。Martin毕业于利默里克大学,获电子工程学士学位。