太阳能应用中的电压和电流测量需要隔离的测量技术。DSP sinc输入与ADI公司的AD7401A隔离式ADC一起,只是ADI公司提供此类隔离测量的信号链的一个例子。
本文档介绍ADI公司使用ADSP-CM403xy和AD7401A器件设计的测量应用的典型信号链。
太阳能光伏逆变器系统
太阳能光伏逆变器转换来自太阳能电池板的电力,并将这些电力有效地部署到公用电网。来自太阳能电池板的电力本质上是一个直流电流源,被转换为交流电流,并与电网的频率同相馈入公用电网,并达到非常高的效率水平。转换可以采取一个或多个阶段(参见图 1)。第1级通常是DC-DC转换,其中太阳能电池板输出的低电压和高电流转换为高电压和低电流。这样做的原因是将电压提高到与电网峰值电压兼容的水平。第2级通常是将直流电压和电流转换为交流电压和电流,通常使用H桥拓扑。
图1.太阳能光伏逆变器信号链,ADI公司。
模数转换器理论—AD7401A
AD7401A是一款二阶Σ-Δ调制器,采用基于ADI耦合器技术的片内数字隔离功能,可将模拟输入信号转换为高速1位数据流。AD7401A采用5 V电源供电,接受±250 mV(满量程±320 mV)差分输入信号。模拟调制器无需外部采样保持电路,可连续对模拟输入进行采样。输入信息以数据速率高达20 MHz的密度包含在输出流中。原始信息用适当的数字滤波器(即sinc滤波器)重建。处理器端(非隔离)可以使用5 V或3 V电源(V®电子数据分析).
示例电路 – 描述
图2.隔离电压电路。
Σ-Δ调制器的交流输入是交流正弦波,代表来自单相电网的220 V rms。有一个电阻分压器,用于将输入范围减小到ADC的指定输入范围。输入滤波器可降低输入端的噪声。
Σ-Δ调制器的输出包含两个信号:来自ADSP-CM403xy DSP处理器的高速时钟输入和保存调制数据的数据信号。该数据可以直接输入到sinc3滤波器,在那里数据可以直接转换为ADC结果。此数据的示例如下所示。
图3.调制器示例数据。
在ADC的较低范围内,输入信号具有较窄的脉冲宽度,而在刻度的较高端,脉冲宽度接近其最大值。当通过sinc滤波器时,输出数据是对角线中显示的数据。AD7401A可在高达891 V单极性范围或565 V双极性范围内工作,隔离栅为20μm聚酰亚胺。有关此方面和各种认证的更多信息,请参见相关数据表。
ADSP-CM403XY 辛克3外设模块
图4.ADSP-CM403 SINC外设框图。
框图显示了四个sinc滤波器对(sinc0–sinc3)、两个调制器时钟源和两组控制寄存器(单元)。该模块接受来自 GPIO 输入引脚的四个 Σ-Δ 位流,并将两个调制器时钟源定向到 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)驱动的微分器。输入累加器将输入位流转换为多字节字,而输出微分器得出位流的平均密度。
累加器和微分器级的数量可以是三个或四个,具体取决于滤波器的顺序。滤波器的直流增益和带宽是滤波器阶数(O)和抽取率(D)的函数,抽取率是调制器与抽取时钟的比值。sinc滤波器的传递函数由累加器和微分器的传递函数的乘积产生,在z域中由下式给出
对齐 PWM 和 Sinc 数据
sinc外设模块和PWM本质上在ADSP-CM403的同一系统时钟上运行,典型值为100 MHz。PWM和sinc可以同步,以便数据可以在与控制算法一致的适当时间和速率下可用。这通常与PWM电平波形对齐。下图显示了使用 sinc输入与电网同步所需的时序示例。当PWM以20 kHz (50μs)运行时,PWM_SYNC信号(同步PWM模块或来自不同DSP的外部PWM需要)位于PWM波形的中心,很少发生开关。为了对齐sinc数据,AD7401A的时钟速率应设置为10.24 MHz,抽取率为256(在AD7401A数据手册中指定)。由此产生的 16 位字速率为 40 KHz (50μs);PWM频率的两倍。如下图所示,由于sinc也可以设置为与PWM_SYNC输出对齐,因此sinc现在每个PWM周期将产生两个数据输出。输出字将以SRAM格式在下一个PWM_SYNC信号中可用。这清楚地表明sinc数据可用于电网同步算法控制。
图7.ADSP-CM403中PWM和SINC外设的对齐。
编程示例
/* 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.
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !