一种新型的微机继电保护测试仪的信号产生方法
论文摘要:介绍了基于高性能数字信号处理器TI DSP C5402和2-3片DAC7644实现微机继电保护测试的信号产生方案,此方案可以将目前国内微机继电保护测试仪的信号频率由20-1000Hz提高到20-2000Hz的设计思想、工作原理和软硬件体系结构。
使谐波次数达到40次,满足部份国外的微机继电保护装置的频率及谐波试验的要求。
关键词:DSPC5402DAC7644微机继电保护信号产生
微机继电保护测试仪是近十多年来发展起来的一个新型智能化测试仪器,目前国内的微机继电保护测试仪的交流试验的最高频率为1kHz,谐波小于或等于40次,无法满足部份国外进口的微机继电保护装置的试验要求。
信号发生部分由TI DSP C5402和2-3片DAC7644以有配套的程序加载EPROM的读写控制逻辑CPLD组成。
DSP完成多路信号的发生,送出DA 输出到后级放大器。
可以实现N路信号发生信,即将信号分成I个组,每组J相。
N=I*J,实现8=2*4(4路电压信号和4路电流信号共两组)和12=4*3(两组电压信号和两组电流信号,每组均为三相)两套方案。
每组各相的频率相同,但幅度、相位独立可调。
各组频率独立可调。
频率、相位幅度可以按一定变化率、变化范围自动调节。
可以满足频率精度:0.0001Hz,幅度精度:0.2%,相位精度:0.1度。
具体设计方案如下图所示:
多相信号发生器结构示意图
控制接口:DSP做从机,单片机或PC做主机。
由DSP的HPI接口可以读写DSP内部存贮器,需要调节频率、相位、幅度时,主机根据要求计算相应参数,通过HPI接口修改DSP 相应内部存贮器。
调节控制可以由单片机完成,也可以PC机通过串口发送给单片机,再发给DSP,也可以用其它设计方案。
调节参数:
1.基本参数:
(一)I组频率参数Mi,i=1,2,..I (2 word)
用相位变化率来表示,计算公式为:M=2^32*f/fs,其中fs=100kHz为DA的转换速率,f为所设定的频率。
(二)I*J个相移参数:PSi_j,i=1,2,..i,j=1,2,..J (2 word)
计算公式为:PS=10000H*相移角度/360 比如45度为20000H
为保证相位自动变化计算的精度,用32bit来计算
(三)I*J个幅度参数:VEi_j,i=1,2,..i,j=1,2,..J (1 word)
参数0-7FFFFH,也可以用0-FFFFH,超过8000H会反相。
2.自动调节参数:
(一)相移变化率参数:DeltaPSi_j (2 word)
表示每0.1秒相位变化多少。
设要求相位K度/秒变化时,
计算公式为:DeltaPSi_j =K*0.1*2^32/360
(二)是否启用自动变化:AutoAdjust,
1表示自动调节,0不自动调节。
另外频率、幅度自动变化由于存在上下界的问题,放到主机上计算,然后写入DSP,实时更新。
注意对于双精度(
设第一组频率为1500Hz,经计算M1= 3D70A3DH,则地址2000H存放3D7H,地址2001存放0A3DH。
HPI接口程序设计
单片机与HPI接口比较简单,HPI的8位数据线与P0相接,几个读写及控制信号与P2、RD、WR相联,本例如下:
;p0.0-p0.7 ===== HD0-HD7 8位HPI数据线
;P2.0 ===== HCNTL0 2位读写模式控制线
;P2.1 ===== HCNTL1
;P2.2 ===== HBIL 高8位/低8位选择
;P2.4 ===== HR/W 读/写状态信号
;P2.7 ===== HCS 片选信号
;WR ===== HDS2 两个读写控制信号HDS2和HDS1
;RD ===== HDS1
;ALE ===== HAS 跟ALE的功能差不多,这里没有用到
;HINT ===== INT0 从机中断主机,这里没有用到。
下面是一个从串口接收地址(16bit)和数据(8bit),把数据写到DSP相应内存中的例子,与HPI 接口相关的语句用粗体字显示:
ORG 0000H
AJMP MAIN
ORG 0003H ;INT0中断子程序
RETI
ORG 0030H
MAIN:
;设置串口
MOV SCON,#50H ;SCON: mode 1, 8-bit UART, enable rcvr
MOV TMOD,#20H ;TMOD: timer 1, mode 2, 8-bit reload
MOV TH1,#0FDH ;TH1: reload value for 9600 baud @ 11.0592MHz
MOV TL1,#0FDH
SETB TR1 ;timer 1 run
;初始化HPI控制寄存器HPIC
MOV A, #08h
MOV DPTR,#0000h
MOVX @DPTR,A
MOV DPTR,#0400h ;要写两次,写同样的东西
MOVX @DPTR,A
SetAddress:
;从串口读高8位地址
CLR TI
JNB RI,$
MOV A,SBUF
CLR RI
;写HPIA高8位地址
MOV DPTR,#0200h
MOVX @DPTR,A
;从串口读低8位地址
JNB RI,$
MOV A,SBUF
CLR RI
;写HPIA低8位地址
MOV DPTR,#0600h
MOVX @DPTR,A
WriteHPI:
;从串口读高8位数据
JNB RI,$
MOV A,SBUF
CLR RI
;写高8位数据
MOV DPTR,#0300h ;Wrtie without autoincement
MOVX @DPTR,A
;从串口读低8位数据
JNB RI,$
MOV A,SBUF
CLR RI
;写低8位数据
MOV DPTR,#0700h ;Wrtie without autoincement
MOVX @DPTR,A
;再次取地址
AJMP SetAddress
End
初始状态:各参数有一个初值,DA输入为0
程序开始HPIC的初如化过程很简单,控制寄存器HPIC的高8位和低8位是重复的,写两次08H就行了,初始化的结果是:读写的第一个字节是高8位,第二个字节是低8位。
其它的可以不用理会。
本例使用了较简单的通信协议,PC向串口先后发送16位地址和16位数据。
如果需要连续向一片地址写数据。
通信协议可以改为:16位起始地址-1,8位数据长度,然后是各地址的数据。
并且写操作时使HPIA自动增加(HCNTL1/1=01),由于写操作时地址是操作前地址加1,所以写入HPIA的地址必须是所需地址-1。
例如要向2001-2007连续8地址写入数据,发送数据为:1FFFH,08H,数据1,数据2,。
数据8。
程序流程如下:
接收HPIA高8位1FH,写到0200H,
接收HPIA低8位FFH,写到0600H
接收数据长度:8H,写入计数器(也可以是7H,看不同的计数方法)
接收数据高8位,写入HPI
MOV DPTR,#0100h ;Wrtie with autoincement
MOVX @DPTR,A
接收数据低8位,写入HPI
MOV DPTR,#0500h ;Wrtie with autoincement
MOVX @DPTR,A
如果计数未完,重复以上两步操作
跟前面的代码相比,只是HCNTL1/1=11变成了HCNTL1/1=01
精度估算
假设晶振是精确的,DSP的定时分频也是精确的,那么由于量化误差带来的频率误差为:100kHz/2^32=0.00002Hz,满足0.0001Hz的精度要求。
相位也是32bit表示,计算误差可忽略,查表输入是12bit,查表相位误差为360/2^12=0.088,满足准确度0.1度的要求。
幅度系数为15bit,计算精底可以到1/2^15=0.00003,但DA参考源的精度最高只能到0.1%,
DAC7644EB输出误差一般只有3-4LSB,取4LSB,误差也只有有低2bit,1/2^(15-2)=0.00012,也就是模拟输出误差主要取决于DA参考源的精度。
的要求。
输出幅度建议不小于 2.5V/2^9=0.005V,正好相当于0.2%的满幅度,也就是建议输出0.005V-2.500V。
值得注意的是以上讨论的精度都是转换点的,转换点之间必然有阶梯状的误差,一般由低通滤波来圆滑。
每周期点数越多,误差越小。
每周期点数计算公式为:fs/f=100kHz/f,当f=500Hz 时,点数有200个,波形已经比较圆滑,f=1.5kHz时有66.7个点,f=2k时有50个点,加上低通后应该可以接受,需要实验一下才能确定。
如果要求f=2k时也有几百个点,需要500k -1MHz转换速率的DA芯片,而5402的处理能力最高100MHz,如果用1M的DA,则每次转换只有100个时钟周期用于处理,无法及时处理完12路的信号,则需要多片5402并行处理或用FPGA来设计。