太阳能应用中的电压和电流测量需采用隔离测量技术。DSP Sinc输入以及ADIAD7401A隔离式ADC恰好提供ADI信号链的一个示例,实现这种隔离测量。本文介绍采用ADSP-CM403xy和AD7401A器件,并由ADI设计的测量应用典型信号链。
太阳能光伏逆变器系统
太阳能光伏逆变器转换来自太阳能面板的电能并高效地将其部署到公用电网中。来自太阳能面板的电能基本上属于直流源,它会被转换成交流,并与电网频率成一定的相位关系,馈送至公用电网上,且效率极高。转换可以采用单级,也可以采用多级(见图1)。第1级通常为DC-DC转换,其中太阳能面板的低电压与高电流输出转换为高电压与低电流。这样做的目的是为了将电压提升至与电网峰值电压兼容的水平。第2级通常将直流电压和电流转换为交流电压和电流,一般使用H-电桥拓扑。
ADC理论—AD7401A
AD7401A是一款二阶Σ-Δ调制器,片上的数字隔离采用ADI公司的iCoupler® 技术,能将模拟输入信号转换为高速1位数据流。AD7401A采用5 V电源供电,可输入±250 mV的差分信号(满量程±320 mV)。模拟调制器对模拟输入信号连续采样,因而无需外部采样保持电路。输入信息以数据流密度的形式包含在输出数据流内,该数据流的最高数据速率可到20 MHz。通过适当的数字滤波器(称为Sinc滤波器)可重构原始信息。处理器侧(非隔离)可采用5 V或3 V电源 (VDD2)。
示例电路 – 描述
Σ-Δ 调制器的交流输入是一个交流正弦波,表示单相电网发出的220 V rms信号。电阻分频器将输入范围缩小到ADC的额定输入范围。输入滤波器可降低输入端的噪声。
Σ-Δ 调制器输出包含两个信号:来自ADSP-CM403xyDSP处理器的高速时钟输入,以及保持调制数据的数据信号。该数据可直接输入Sinc3滤波器,直接将数据转换为ADC结果。下文显示该数据的一个示例。
在ADC的下限范围内,输入信号具有窄脉冲宽度,而在上限范围内脉冲宽度几乎达到其最大值。输出数据通过Sinc滤波器后,便如对角线所示。AD7401A工作电压高达891 V单极性范围,或565 V双极性范围,并横跨隔离栅:20μm聚酰亚胺。更多有关这些内容的信息以及各种认证可在相关数据手册中找到。
ADSP-CM403XY SINC3外设模块
框图显示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。
数字滤波器
Sinc滤波器的传递函数使其能用在数字逻辑中(使用一系列求和与抽取函数)。使用滤波器移除调制器采样时钟,恢复采样信号的数字值。滤波器设计匹配双极性Σ-Δ 调制器,0 V输入下具有50%脉冲密度,正输入时超过50%,而负输入时不足50%,如图6所示。
数字滤波器是一组累加器,由调制器时钟(M_CLK)驱动,后接一组由抽取时钟(D_CLK)驱动的微分器。 输入累加器将输入位流转换为多字节字,而输出微分器获取位流的均值1密度。
累加器和微分器的级数可以为3或4,具体取决于滤波器阶数。滤波器的直流增益和带宽为滤波器阶数(O)和抽取速率(D)的函数,即调制器时钟与抽取时钟的比值。Sinc滤波器传递函数由累加器与微分器的传递函数之积确定,Z域内的表达式为:
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数据可用于电网同步算法控制中。
编程示例
/* 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条评论
快来发表一下你的评论吧 !