西安科技大学基于DSP的三段式过流保护
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于DSP的三段式过流保护
综合实验报告
学院:电气与控制工程学院
专业:电气工程及其自动化1002
基于DSP的三段式过流保护综合实验报告
一、实验目的:
1.通过DSP程序的设计模拟继电保护跳闸实验,进一步了解DSP在继电保护中的应用。
2.通过实验线路的设计,计算及实际操作,使理论与实践相结合,增加感性认识,使书本中的知识更加巩固。
3.培养动手能力,增强对DSP运用的能力。
4.培养分析查找故障的能力。
5.增加对DSP外围电路的认识。
二、实验设备:
DSP板,仿真器,面包板,采样板电路,电烙铁,示波器,调压器,直流电源,灯泡,导线等工具。
三、实验元器件:1.主回路元件
2.信号处理电路元件:
3.接插件图元件:
4.显示图元件:
四、实验设计原理:
为了实现过电流保护的动作选择性,各保护的动作时间一般按阶梯原则进行整定。
即相邻保护的动作时间,自负荷向电源方向逐级增大,且每套保护的动作时间是恒定不变的,与短路电流的大小无关。
具有这种动作时限特性的过电流保护称为定时限过电流保护。
三段式电流保护的作用,是利用不同过电流值下,设置不同的延时动作时间来规避工作尖峰电流和使发生短路故障时,只有事故点最近的断路器动作以减少断电的影响范围。
三段就是三个时限,保护范围不同,一般一段时间最短电流最大(又叫瞬时速断保护)二段(定时限过电流保护)三段(过电流保护)电流比一段小时间稍微长,一般参照一段可以设。
我们利用电压的大小来模拟三段式电流保护中的电流,超过设定的电压值就会跳闸,输入电压小于100V不动作,模拟电路正常工作;输入电压大于180V小于200V时立即跳闸,模拟电流速断;输入电压小于150V且大于180V时,经过3秒的延时后跳闸,模拟电流二段;
输入电压小于150V且大于100V时,经过5秒的延时后跳闸,模拟电流三段。
五、实验要求:
本次设计是基于TMS320F2812 DSP的交流采样和模拟速断的系统。
系统总体结构框图如下图:
负载(灯泡)电压、电流量经过电压、电流互感器,再经过信号处理电路,变为DSP所要求的信号量,经过DSP自带的交流采样模块,变为CPU能处理的数字量。
然后经过判断(采样值与设定值比较)后,发出跳闸信号,同时显示在4位当前电压,电流的有效值。
六、实验原理图:
1.主回路电路图:
主电路由电流互感器、电压互感器、微型继电器、和部分电阻组成。
图中电压互感器实质是一个电流互感器。
当正常工作时,一次侧的电流等于二次侧的电流。
R1为限流电阻,那么这个电流型电压互感器的变比计算如下
因为
K
U
K U 12002
1=
所以变比为2002
1
==
U U k v 电流互感器TA1015的变比1000=A k 。
主电路中,三极管基极电阻R5关系到DSP 能不能跳闸,同时又要保护基极与集电极件的PN 结不被击穿。
因为继电器的吸合电压为3.8V ,为了能让继电器可靠吸合,则三极管必须工作在饱和导通状态。
则电阻R5的阻值为:
J
CE CC BE B B R sat V V R V V I β)
(10)(-≥
-=
选择R5阻值大小为为1K。
2.信号处理回路
信号处理电路有4个运算放大器、两个电位器、一个10nf独石电容和部分电阻组成。
从电压互感器出来的信号,首先经过滤波回路进入运放1,经电压跟随器2进入运放3进行偏置处理,然后经过运4对信号进行调整,使信号适合DSP的要求,从而决定继电器动作情况。
七、调试波形结果:
信号处理回路电压(电流)波形:
一级运放(滤波):
二级运放(跟随):
三级运放(电压偏置):
四级运放(波形幅值调整为0.5v~2.5v):
八、程序流程图:
九、实验程序:
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "math.h"
#include "stdlib.h"
// Prototype statements for functions found within this file.
//////////////////////////功能函数//////////////////////////////////////
interrupt void adc_isr(void);
void suanfa(void);
void tiaozha(void);
void delayns(Uint16);
void display_init(void);
void display(Uint16);
void output(Uint16);
////////////////////////////////////////////////////////////////////////
// Global variables used in this example:
Uint16 ConversionCount;
Uint16 Value;
float min,max,average,Vmax;
Uint16
display_code[20]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xfd,0x61,0xdb,0 xf3,0x67,0xb7,0xbf,0xe1,0xff,0xf7};
float Voltage[240],Voltage1[240];
float Current[240],Current1[240];
void main(void)
{
InitSysCtrl();//初始化cpu
DINT;//关中断
InitPieCtrl();//初始化pie寄存器
IER = 0x0000;//禁止所有的中断
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();//初始化pie中断向量表
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected register
PieVectTable.ADCINT = &adc_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
//////////////////////////////////AD配置///////////////////////////////////////////// AdcRegs.ADCTRL1.bit.RESET = 1; // Reset the ADC module
asm(" RPT #10 || NOP"); // Must wait 12-cycles (worst-case) for ADC reset to take effect AdcRegs.ADCTRL1.bit.RESET = 0;
AdcRegs.ADCTRL1.bit.SUSMOD=3; //仿真暂停时,序列发生器和其他数字电路逻辑立即停止AdcRegs.ADCTRL1.bit.ACQ_PS=8; //采样窗口大小,SOC脉冲宽度为9个ADCLK
AdcRegs.ADCTRL1.bit.CPS=0; //内核时钟预定标器,等于0,未将时钟进行2分频
AdcRegs.ADCTRL1.bit.CONT_RUN=0; //运行于启动/停止模式
AdcRegs.ADCTRL1.bit.SEQ_CASC=1; //单序列发生器模式,级联模式
AdcRegs.ADCTRL3.bit.ADCBGRFDN = 3; // Power up bandgap/reference circuitry
DELAY_US(8000);
AdcRegs.ADCTRL3.bit.ADCPWDN = 1; // Power up rest of ADC
DELAY_US(20);
AdcRegs.ADCTRL3.bit.ADCCLKPS=15; //ADCLK=HSPCLK/30
AdcRegs.ADCTRL3.bit.SMODE_SEL=1; //并发采样模式
AdcRegs.ADCMAXCONV.all = 0x0000; // 最大采样通道数为1,一次采样2个通道
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // 采样A0和B0
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1; //清除SEQ1中的中断标志位INT_SEQ1 AdcRegs.ADCST.bit.INT_SEQ2_CLR=1; //清除SEQ2中的中断标志位INT_SEQ2
AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ=0;
AdcRegs.ADCTRL2.bit.RST_SEQ1=0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1; //使能SEQ1中断
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1=0;
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1; //允许EVA启动触发SEQ1/SEQ
AdcRegs.ADCTRL2.bit.EXT_SOC_SEQ1=0;
AdcRegs.ADCTRL2.bit.RST_SEQ2=0;
AdcRegs.ADCTRL2.bit.SOC_SEQ2=0;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2=0;
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ2=0;
AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ2=0;
AdcRegs.ADCTRL2.bit.SOC_SEQ1=0;
////////////////////////////GPIO配置//////////////////////////////////// EALLOW;
GpioMuxRegs.GPBMUX.bit.PWM7_GPIOB0=0; //跳闸输出;
GpioMuxRegs.GPBMUX.bit.PWM8_GPIOB1=0; //串行数据输出
GpioMuxRegs.GPBMUX.bit.PWM9_GPIOB2=0; //CLK
GpioMuxRegs.GPBMUX.bit.PWM10_GPIOB3=0; //按键信号输入
GpioMuxRegs.GPBDIR.bit.GPIOB0=1; //输出
GpioMuxRegs.GPBDIR.bit.GPIOB1=1; //输出
GpioMuxRegs.GPBDIR.bit.GPIOB2=1; //输出
GpioMuxRegs.GPBDIR.bit.GPIOB3=0; //输入
EDIS;
///////////////////////////EVA配置///////////////////////////////////////
EvaRegs.T1CON.bit.TMODE=2; //计数模式为连续增计数
EvaRegs.T1CON.bit.TPS=1; //T1CLK=HSPCLK/2=37.5MHz
EvaRegs.T1CON.bit.TENABLE=0; //暂时禁止T1计数
EvaRegs.T1CON.bit.TCLKS10=0; //使用内部时钟
EvaRegs.GPTCONA.bit.T1TOADC=2; //周期中断启动ADC
EvaRegs.EVAIMRA.bit.T1PINT=1; //使能定时器T1的周期中断
EvaRegs.EVAIFRA.bit.T1PINT=1; //清除定时器T1的周期中断标志位
EvaRegs.T1PR=0x0c35; //周期为83.3us
EvaRegs.T1CNT=0; //初始化计数器寄存器
ConversionCount = 0;
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
EvaRegs.T1CON.bit.TENABLE=1; //启动T1计数
while(1)
{
tiaozha();
Value=(Uint16)(Vmax*10);
output(Value);
delayns(5000);
}
}
//////////////////////////////AD中断子序////////////////////////////////////////////// interrupt void adc_isr(void)
{
Voltage[ConversionCount]=((float)(AdcRegs.ADCRESULT0>>4));
Current[ConversionCount]=((float)(AdcRegs.ADCRESULT1>>4));
if(ConversionCount==239)
{
suanfa();
ConversionCount = 0;
}
else ConversionCount++;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
return;
}
/////////////////////////////算法处理///////////////////////////////////
void suanfa(void)
{
Uint16 N,M,K;
max=Voltage[0];
min=Voltage[0];
Vmax=Voltage1[0];
for(N=0;N<240;N++)
{
if(max<Voltage[N])
max=Voltage[N];
if(min>Voltage[N])
min=Voltage[N];
}
average=(max+min)/2;
for(M=0;M<240;M++)
{
Voltage1[M]=(fabs(Voltage[M]-average)/4095.0*2.0*311.0);
}
for(K=0;K<240;K++)
{
if(Vmax<Voltage1[K])
Vmax=Voltage1[K];
}
}
//////////////////////////跳闸处理程序///////////////////////////////////////// void tiaozha(void)
{
if(GpioDataRegs.GPBDAT.bit.GPIOB3==0)
GpioDataRegs.GPBDAT.bit.GPIOB0=1;
// else
// GpioDataRegs.GPBDAT.bit.GPIOB0=1;
if(Vmax>180&&Vmax<200)
GpioDataRegs.GPBDAT.bit.GPIOB0=1;
else if(Vmax>150&&Vmax<180)
{
delayns(15000);//延时3秒
if(Vmax>150&&Vmax<180)
GpioDataRegs.GPBDAT.bit.GPIOB0=1;
}
else if(Vmax>100&&Vmax<150)
{
delayns(25000);//延时5秒
if(Vmax>100&&Vmax<150)
GpioDataRegs.GPBDAT.bit.GPIOB0=1;
}
// else
// GpioDataRegs.GPBDAT.bit.GPIOB0=0;
}
////////////////////////数码管显示子程序//////////////////////////////////////// void output(Uint16 value)
{
display_init();
display(value%10);
display(value/10%10+10);
display(value/100%10);
display(value/1000);
}
void display_init(void)
{
Uint16 len2;
for(len2=0;len2<32;len2++)
{
GpioDataRegs.GPBDAT.bit.GPIOB2=0;
GpioDataRegs.GPBDAT.bit.GPIOB1=0;
GpioDataRegs.GPBDAT.bit.GPIOB2=1;
}
}
void display(Uint16 m)
{
Uint16 temp,len1;
temp=display_code[m];
for(len1=0;len1<8;len1++)
{
GpioDataRegs.GPBDAT.bit.GPIOB2=0;
if(temp&0x01==1)
GpioDataRegs.GPBDAT.bit.GPIOB1=1;
else
GpioDataRegs.GPBDAT.bit.GPIOB1=0;
GpioDataRegs.GPBDAT.bit.GPIOB2=1;
temp>>=1;
}
}
/////////////////////////////////////////////////////////////////////////////
//////////////////////////延时程序///////////////////////////////////////////
void delayns(Uint16 k)
{
Uint16 ii,jj;
for(ii=0;ii<k;ii++)
for(jj=0;jj<1000;jj++);
}
//////////////////END////////////////////////////////////////////////////////
十、试验中遇到的问题及解决方法
1. 按照书中的信号处理原理图进行仿真时,发现输出的波形超出了要求范围,另外,输出波形的相位和输入波形的相位是相反的。
解决方法:对各个电路模块中运算放大器的作用及其传递函数进行计算,发现第3三极的运算放大器起到的是放大作用,不能缩小幅值,因此决定更改电路。
相位相反由于第3极的运放为反相放大器,导致波形发生了反相,故相位差了180度。
2. 电路板焊接完成后,用示波器测到的波形不是正弦波,发现有正弦波的下边有一部分被消掉了。
解决方法:仔细检查电路板有无漏焊,虚焊,接地,线路与线路短路等问题,确定无误后。
在用示波器测其输出波形,若还无波形,通过查找运预算放大器应用相关的书籍,发现由于运算放大器的线性区有范围,当放大的幅值过大会出现失真现象。
故通过调节电位器,降低幅值以调整波形,得到满意的结果。
3. 用最后自行设计的信号处理原理图进行仿真后,实际波形与理论值相差不大满足要求,但实焊接好后,又是波形发生了失真。
解决方法:考虑的是运放供电电源的问题,由于电源不对称造成的,将原先供运放芯片工作的+5v电源换成双电源供电,在双电源供电的情况下,实际输出的波形与理论值相符,并且没有失真现象,调节范围也变大了。
4. 编程在编显示这一部分程序时,用DSP实现的方法和单片机实现的方法一样,但是单片机控制能显示出来数据,但是DSP控制不能显示显示,基本操作时序都一样。
解决方法:首先考虑是DSP引脚的问题,换了一块DSP板实验,结果仍然出不来。
因此排除了DSP的硬件问题,考虑软件的延时,结果加延时也不行。
重新编测试程序还是不行。
最后看见一个同学连线时发现他用DSP板自带的5V电源供电,就这样试了试,结果好了。
这才明白是电源没有共地造成的。
5. 跳闸出口三极管连接的不合理,导致跳闸后不能断开复位。
解决方法:分析实验指导书上的原理图发现原理图中的接线合理,再三极管导通的情况下不能断开,也就是三极管没有工作在开关状态。
之后在网上找资料,找到了三极管驱动5V继电器的电路图。
分别用PNP和NPN实现,用NPN时高电平跳闸,继电器线圈接于集电极,用PNP时低电平跳闸,继电器线圈接于发射极。
最终对焊接好的板子进行了小范围改变,符合满足了要求。
十一、实验心得。