关键词:交流采样 频率变化 DSP TMS320F240
在交流采样系统中,通常是一个周波采样64点或128点的电量值,然后对这些数据进行处理。如果电网频率恒定,则采样间隔t=T/N(T为周期,N为采样点),而电网的频率通常有一定的波动,所以要不断调整采样间隔。
在单片机系统中,一般采用过零触发电路和单片机的外部中断来检测电量周波的开始和结束时间,再利用内部定时器计算出周期和采样间隔,在采样间隔定时中断程序中启动一次采亲。这种方案有两个缺点:其一,电路实现复杂;其二,精度不高,因为要考虑中断能否实时响应。过零触发电路产生的中断响应具有不确定性。
我们在使用TMS320F240 DSP开发交流采样系统时,巧妙地利用该款DSP的定时器、捕获器和不中屏蔽中断(NMI)实现了跟踪频率变化的交流采样。
1 NMI中断、定时器、捕获器的简单分析
(1)NMI中断
TMS320F24X系列有一个不可屏蔽中断(NMI)引脚。当该引脚有跳变信号时(可编程为上升沿或下降沿触发),立即进入中断程序,可以用于紧急事件的处理。本文中用于跟踪被测电量的频率。
(2)定时器介绍
TMS320F240有3个通用定时器,每个通用定时器有6种计数方式:①停止/保持模式,模式0;②单增计数模式,模式1;③连续增计数模式,模式2;④定向增/减计数模式,模式3;⑤单增/减计数模式,模式4;⑥连续增/减计数模式,模式5。
设fc是CPU的时钟频率,则定时时间t=脉冲个数/(fc/分频系数),脉冲个数与定时周期寄存器的值或比较寄存器的值有关。工作过程是:①根据CPU的频率、定时时间确定计数寄存器的初值TxNT、周期寄存器的初值TxPER、比较寄存器的初值TxCMP。②启动定时器计数。③计数到比较寄存器的值发生比较匹配中断,同时使TxCMP引脚发生跳变。本文中利用T3CPU的跳变去启动一次A/D转换。④计数到周期寄存器的值发生周期匹配中断。
定时器一旦开始工作就不受程序影响,准确性高,保证每隔固定间隔进行采样。
(3)捕获器介绍
捕获单元用于捕获引脚上电平的变化并记录发生的时间,记录事件发生的时间以定时器的计数器作时基。当捕获引脚发生跳变时,捕获单元将该时刻时基的计数寄存器T2CNT的值装入相应的FIFO队列中。FIFO队列可以装入两个值,第三个装入时会将第一个值挤出。如果将捕获器的跳变输入信号和NMI输入信号并联(见图2),则可以在NMI中断程序中读取跳变时的时基值(读FIFOx寄存器)。例如:以T2作时基,引脚电平第一次上跳时,T2计数寄存器T2CNT的值为X1,第二次为X2,T2分频系数为D,CPU频率为fc,则变化时间间隔为
t=D/fc×(X2-X1)
2 设计思想
过零触发电路的输出接TMS320F240外部不可屏蔽中断引脚NMI,确保了中断的实时响应;同时,过零触发电路的输出还接到捕获器1的输入端CAP1,T2定时器作捕获器的时基,捕获器可以捕获两个脉冲间隔的时间(用T2计数器的变化量表示),这样可以计算出周波的周期/频率。
用一个定时器T3完成定时触发采样,每隔一个采样周期T3定时器的比较匹配输出端T3CMP输出一个下降沿脉冲去启动ADC进行一次A/D转换,所以T3CMP的启动信号的间隔具有确定性。
下面对频率/周期和采样间隔的计算作出推导。
(1)频率和周期
捕获器用T2作时基,CAP1端每出现一个上升沿脉冲表示一个周波开始,同时立刻进入NMI中断程序,在中断程序中读取FIFO1寄存器的值赋给T3的周期寄存器。要注意的是:FIFO1总是初始化为0,所以FIFO1的值是在刚过去的周波内T2计数器的增加值;而T2的分频系数为128,假设DSP的工作频率为20MHz,这样就可以计算出上一个周波的周期T和频率f:
T=(1/20) μs×128×(FIFO1)=
(128/20)×10 -6×(FIFO1)s
f=1/T=(20×10 6)/[128×(FIFO1)]=156250/(FIFO1)Hz
(2)跟踪频率变化的采样间隔
如果T2工作在定时/计数状态下,给T2的周期寄存器T2PER赋初值为FIFO1寄存器的值,则T2的周期中断时间即是上一个周波的周期;而在NMI中断程序中将FIFO1寄存器的值赋给T3的周期寄存器T3PER.注意:T2的分频系数为128,T3的分频系数为1,所以T3的周期中断时间是一个周期的电量的1/128;而采样周期用T3作时基,T3的周期中断即是采样中断。从而实现了一个周期的128点采样,即实现了跟踪频率变化的交流采样,当然,有一个周波的滞后。
每个周期会产生一次NMI(不可屏蔽中断),在NMI中断程序中将T2CNT的增加值(在FIFO寄存器)读出来赋给T3的周期寄存器。因为T2的分频系数为128,这样T3的周期中断时间即为一个周期的1/128,实现了一个周期采样128点的目的。
3 硬件设计
(1)互感器电路及设计注意事项
利用互感器电网的二次高压和电流交换成0~5V或-5~+5V的电压送入A/D转换器,具体电路如图1所示。
图1中,电压互感器的原边100V,副边输出2mA电流经OP07转换成-3.5~+3.5V的电压量(注意:幅值范围为-5~+5V)。电流互感器的原边输入5A的电流,副边输出2mA的电流经运放转换成-3.5~+3.5V的电压量。
D11、D12,D21、D22为运放输入限幅保护电路;C11、R14,C21、R23为互感器相移补偿电路。因采样时只要保证一个周波采样N点,什么时候开始并不重要,所可以省去相移补偿电路。
R11,R12、R13,R21、R22的值可以通过以上给出的电流、电压值计算出来:R11=100V/2mA,R12+R13=R21+R22=3.5V/2mA。运放的输出端可以接一电容进行滤波。
运放的输出可以再接一级电压跟随器(如图2的U1A)起缓冲、隔离、提高带载能力的作用。
(2)过零触发电路
具体电路如图2所示。U1A构成的电压跟随器的作用如上所述,它的正端输入来自互感器电路的输出。U2A构成一个过零比较电路,D2稳压二极管使比较器的输出为0~5V,将模拟信号转换成数字信号送入DSP的捕获器输入端CAP1和不可屏蔽中断端NMI。
(3)A/D转换器和DSP的接口电路
电路原理如图3所示。ADC芯片采样14位的MAX125。TMS320F240的定时比较器输出端T3CMP接MAX125的启动转换器CONVST;MAX125转换结束产生中断,通过INT脚接DSP的XINT1脚向DSP申请中断,DSP在中断程序中读取转换结果。DSP对MAX125的操作是通过端口访问完成的,MAX125的片选端CS4接译码器的一个输出端,译码器的输入和使能端由DSP的地址线和I/O信号LS控制。
每隔一个采样周期(T/N)T3CMP端输出一个下降沿脉冲,启动MAX125进行一次A/D转换。采样间隔会根据电网频率的变化自动调整。
4 软件设计
下面给出几个程序函数。具体数据处理的函数因系统功能不同而异,限于篇幅这里不作讨论。
(1)定时器、捕获器初始化程序:
void init_TimerCapturet()
{*T2CNT=0; /*计数寄存器初始化*/
*T3CNT=0;
*T3CMP=1000;
*T2PER=30000;
T3PER=4000; /T2PER、T3PER会在NMI中断程序中根据电量频率的变化作出相应的调整*/
*CAPCON=0XBC55; /*设置捕获器*/
*GPTCON=0X186A;
*T2CON=0X17CA; /*方式2,分频系数为128*/
*T3CON=0X10CA; /*方式2,分频系数为1*/
*NMI_CR=0X64; /*设置不可屏蔽中断*/
}
(2)ADC转换结束中断响应程序
void c_int1()
{int i;/*其余为全局或静态变量*/
/*程序中读取ADC的转换结果*/
if(AChanel= =1) /*读A组3路的转换结果*/
{ outport(0x01,0x03);/*输出MAX125的控制字*/
inport(0x01,&ADC_Data[0]);
inport(0x01,&ADC_Data[1]);
inport(0x01,&ADC_Data[2]);
AChanel=0;
}
else
{/*如上读取B组3路的转换结果*/
}
/*将14位的结果转换为16位的(初码存放)*/
for(i=1;i<6;i++)
ADC_Data[i]=ADC_Data[i]<<2/4;
}
(3)不可屏蔽中断的中断程序
void c_int7() {
asm("SETC INTM");/*禁止中断*/
*T2CNT=0;/*作捕获器的时在,一个周波开始时其值为0*/
*T3PER=*FIFO1;/*T3的计数周期是一个周波周期的1/128*/
asm("CLRC INTM");/*使能中断*/
}
本文充分利用了TM320F240的片内资源,巧妙地实现了动态跟踪频率变化的交流采样,希望对使用该系列DSP进行测控领域开发的技术人员有所启发。