—电力系统微机保护课程设计
院 系:电气工程学院
班 级:XXXX
组 员:
2010年12月23日
设计目的:
1.理论与实践相结合,强化学生的工程实践能力
2.通过具体的电路设计和调试,加深对电力系统微机保护的整个流程的理解,锻炼运用常用算法编程解决问题的能力。
设计任务:
用DSP或单片机试想简单的三段式电流保护功能。三段式包括顺时电流速断,限时电流速断,定时限过流。
三段式电流保护范围:
实施方案:
三段式电流保护装置的设计包括电压行成回路,采样保持电路,模拟低通滤波,A/D转换和输出几部分。装置的工作回路属于二次回路,根据模数转换器输入范围要求,采用电流变换器将输入信号变换成正负5V范围内的电压信号。由于采用DSP设计,故转换为3.3V。系统频率为50HZ,即周期为20ms,低通滤波器的频率为100HZ,滤波后的电压信号存在正负值,采用电压跟随器保留正值,且范围为0~2.5V。实际操作中由信号发生器产生抵押工频输入信号,用以模拟实际电网测量调理后的信号。输出用三对红绿两色LED指示三段保护是否启动和发布跳闸命令。相邻线路三段保护动作时限和整定值自定,采用两点积分法进行采样,采样间隔为5ms,严格满足采样定理(Fs>2Fmax)。将处理后的电流值与整定值进行比较,用以判定哪段动作。当I>I1时,I段启动并动作,通过一定延时后Ⅱ段,Ⅲ段有感应但不动作;当I2电路图:
1,设计原理图:
2,保护装置构成原理图
⒊微机保护跳闸原理图:
程序框图:
1,系统主程序流程图
2,中断服务程序
问题解决:
由于每次采样只能采样一个数据,第二次采样就会覆盖第一次的数据,这对我们变成造成了极大的困扰。采样计算后的数据存在正负值,对究竟是用程序实现净其正值化还是利用硬件来实现不太清楚。若有变成来实现不知道该如何处理,但是有硬件来做的话就简单得多,因为电压跟随器就是用来实现这一功能的。用信号发生器来提供输入信号时,我们同样遇到一些问题,A/D采样的数据不正确,没有吧RESULT0中的数据右移,后来将RESULT0中数据右移6位再进行数据处理。调试的时候每次亮灯顺序不对,因此在每次亮灯签都要先将B口清零。
设计收获:
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题。锻炼实践动手能力,是对学生实际工作能力的具体训练和考察过程。
刚开始接到题目时根本不知道如何下手,不知道具体所用知识,于是小组成员一起在网上和图书馆查阅相关资料,了解大概框架,然后资源共享,一起设计构思,并付诸实践。通过这次课程设计,我们深刻的体会到“众人拾柴火焰高”的道理,只有同心协力才能客观全面的完成这次课程设计,我们每个人都各自发挥所长,不仅增长了见识更是体会到了团队合作,这对我们以后的学习,工作和生活都有很大的帮助。
书山有路勤为径,学海无涯苦作舟。通过这次课程设计,我们深感以前的学艺不精,更是体会到了知识的匮乏,我们一致表示以后无论是学习上还是生活上都要认真仔细,努力学习其中的知识。
程序清单:
#include"2407c.h"
#include"math.h"
#define unit unsigned int
#define unchar unsigned char
uint dat0=0,array[512];
float ad_dat[128],outdat=0,I=0,I1=1.8,I2=1.6,I3=1.2;
uint k=0;
void inline disable()
{
asm("setc INTM");
}
void inline enable()
{
asm("clrc INTM");
}
void initial()
{
asm("setc SXM");
asm("clrc OVM");
asm("clrc CNF");
*SCSR1=0X81FE; //CLKIN=40M
*WDCR=0X0E8; //DISABLE WD
*IMR=0X0001; //ENABLE INT1
*IFR=0X0FFFF; //CLR INT FLAG
}
void t4_init()
{
*T4CNT=0X0000; //CLR T4
*T4CON=0X100C; //连续增计数模式,1分频,选用内部时钟源
*T4PER=0X186A; //SET T4_PER f=6.4KHZ;128分频
*GPTCONB=0X0400; //T4周期中断标志出发A/D转换
*EVBIMRB|=0X0001; //允许T4周期中断
*EVBIFRB=0X0FFFF; //复位T4中断标志位
}
void ad_init()
{
*ADCTRL1=0X0010; //SEQ为级联工作模式
*ADCTRL2=0X8404; //EVB SOC SEQ=1,允许SEQ被EVB的SOC信号启动
//SEQ1与SEQ2均采用中断模式
*MAXCONV=0X00; //转换1个通道
*CHSELSEQ1=0X0B; //通道12
}
void adsoc()
{
*T4CON=*T4CON|0X40; //定时开始
}
void interrupt ad_int()
{
dat=*RESULT0>>6;
array[k]=dat0;
ad_dat[k]=((dat0*3.30)/1024-1.65)*2;
outdat+=ad_dat[k]*da_dat[k];
if(k==1)
{
k=0;
I=sprt(outdat/2);
outdat=0;
}
else k++;
*ADCTRL2=*ADCTRL2|0X4200; //CLR FLAG Bit
enable(); //开中断
}
void interrupt nothing()
{
enable();
return;
}
void main()
{
disable();
initial();
t4_init();
ad_init();
MCRA=MCRA&0X00C7;
PBDATDIR=0XFF00;
PADATDIR=PADATDIR*0XFF00;
PADATDIR=PADATDIE|0X0FF38;
enable();
adsoc();
while(1)
{
if(I>I1)
{
PBDATDIR=PBDATDIR&0X0FF00;
PBDATDIR=PBDATDIR|0X0003;
PADATDIR=PADATDIR&0X0FF00;
PADATDIR=PDATDIR|0X0FF38;
Delay(4000);
PBDATDIR=PBDATDIR&0X0FF00;
PBDATDIR=PBDATDIR|0X0007;
PADATDIR=PADATDIR&0X0FF00;
PADATDIR=PADATDIR|0X0FF38;
Delay(4000);
PBDATDIR=PBDATDIR&0X0FF00;
PBDATDIR=PBDATDIR|0X0017;
PADATDIR=PADATDIR&0X0FF00;
PADATDIR=PADATDIR|0X0FF38;
}
if(I>12&I PBDATDIR=PBDATDIR&0X0FF00; PBDATDIR=PBDATDIR|0X000C; PADATDIR=PADATDIR&0X0FF00; PADATDIR=PDATDIR|0X0FF38; Delay(4000); PBDATDIR=PBDATDIR&0X0FF00; PBDATDIR=PBDATDIR|0X0001C; PADATDIR=PADATDIR&0X0FF00; PADATDIR=PDATDIR|0X0FF38; } if(I>I3&I PBDATDIR=PBDATDIR&0X0FF00; PBDATDIR=PBDATDIR|0X00030; PADATDIR=PADATDIR&0X0FF00; PADATDIR=PDATDIR|0X0FF38; } } }