基于DSP的三段式电流保护综合实验基于DSP的三段式电流保护一、实验目的:1.通过DSP程序的设计模拟继电保护跳闸实验,进一步了解DSP在继电保护中的应用。2.理论与实践相结合,强化学生的工程实际能力。3.通过具体电路的设计和调试,加深对电力系统微机保护整个流程的理解,锻炼运用常用算法编程解决问题的能力。4.通过实验线路的设计,计算及实际操作,使理论与实践相结合,增加感性认识,使书本中的知识更加巩固。培养动手能力,增强对DSP运用的能力,培养分析查找故障的能力。二、硬件电路:2·1实验设备DSP板、仿真器、直流电源、吸锡器、电烙铁、万用表,示波器、调压器、灯泡、螺丝刀、导线若干2·2DSP芯片F2812介绍DSP2812功能比单片机强大的多,TMS320F2812是美国TI公司推出的C2000平台上的定点32位DSP芯片,适合用于工业控制,电机控制等,用途广泛,应该相当于单片的升级版。运行时钟也快可达150MHz,处理性能可达150MIPS,每条指令周期6.67ns。IO口丰富,对用户一般的应用来说足够了。两个串口。具有12位的0~3.3v的AD转换等。具有片内128k×16位的片内FLASH,18K×16位的SRAM,一般的应用系统可以不要外扩存储器。(1).ADC编程TMS320F2812带有两个8选1多路切换器和双采样/保持器的12位ADC,模拟量输入范围为0~3V,最快转换速率为80ns,选用10kSPS采样率,并采用EVA的定时器(0.1ms)自动触发方式,可同时采样4个通道,并采用每次转换结束的中断方式来纪录采样结果(右移4位)。转换结果=(212-1)×(输入的模拟信号-ADCLO)/3ADC转换时,首先初始化DSP系统,然后设置PIE中断矢量表,再初始化ADC模块,接着将ADC中断的入口地址装入中断矢量表并开中断,然后再启动0.1ms定时器,同时等待ADC中断,最后在ADC中断中读取ADC转换结果,并用软件启动下一次中断。(2).脉波宽度调变(PWM)PWM的功能包括:拥有宽广可程序的Dead-time长度;PWM载波频率实时的改变;PWM脉波宽度实时的改变可以透过程序来产生非对称、对称及空间向量PWM信号;提供外部保护接脚PDPINTx来保护功率级板,当这个接脚为地时,PWM信号将会强制变为高阻抗.其动作流程大致为:比较器的值(CMPRx)进来与T1CON所设定的对称或非对称之波形比较,然后产生方波PHx输出进入死区时间产生电路产生出两个有死区时间的信号,再透过输出逻辑电路来设定每个PWM的输出逻辑,如此就可产生所需要的PWM信号。2·3硬件电路图三、分析与计算:主电路由电流互感器、电压互感器、微型继电器、和部分电阻组成。交流采样模块(+-12V双电源供电)信号处理电路有4个运算放大器、两个电位器、一个104独石电容和部分电阻组成。从电压互感器出来的信号,首先经过运放D,进行反相偏置处理,然后经过运放C,它是个一阶有源滤波。运发B的作用是对前两级的信号进行放大,使信号更适合DSP的要求,最后运放A是个跟随器,其作用是减小对信号源的影响,因为理想运放的输入电阻无穷大。1.交流采样结果用示波器观察得到的波形,基本上和计算值相符,不大于3.3V,不小于2V2.模拟继电保护动作结果1)输入电压小于80V不动作,数码管显示当前输入电压,模拟电路正常工作;2)输入电压大于160V时立即跳闸,数码管显示当前电压值,模拟电流速断;3)输入电压小于160V且大于120V时,数码管显示当前输入电压,经过3秒的延时后跳闸,数码管显示当前电压值,模拟电流二段;4)输入电压小于120V且大于80V时,数码管显示当前输入电压,经过5秒的延时后跳闸,数码管显示当前电压值,模拟电流三段;四、软件流程:初始化开中断改定值程序入口(上电或复位后)修改定值有报告发送报告自改时间到自检装置有问题报警、存报告YNNYNNYY五、软件代码:#includeDSP281x_Device.h#includeDSP281x_Examples.h;interruptvoidadc_isr(void);voidoutput(intm,intn);voiddisp(intd);Uint16LoopCount;Uint16ConversionCount;Uint16Voltage1[240];Uint16Voltage2[240];Uint16Power_voltage;Uint16c;Uint16d;Uint16e;Uint16f;main(){InitSysCtrl();//初始化cpuDINT;//关中断InitPieCtrl();//初始化pie寄存器IER=0x0000;//禁止所有的中断IFR=0x0000;InitPieVectTable;//初始化pie中断向量表EALLOW;PieVectTable.ADCINT=&adc_isr;EDIS;AdcRegs.ADCTRL1.bit.RESET=1;asm(RPT#10||NOP);AdcRegs.ADCTRL3.all=0x00C8;AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;AdcRegs.ADCTRL3.bit.ADCPWDN=1;PieCtrlRegs.PIEIER1.bit.INTx6=1;IER|=M_INT1;EINT;ERTM;EALLOW;//初始化GPIOGpioMuxRegs.GPAMUX.all=0x0000;GpioMuxRegs.GPADIR.all=0xFFFF;EDIS;GpioDataRegs.GPADAT.bit.GPIOA0=0;LoopCount=0;ConversionCount=0;c=0;d=0;e=0;f=0;AdcRegs.ADCMAXCONV.all=0x0001;//设置AD转换的通道AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;EvaRegs.T1PR=0x186A;//设置PWM的周期EvaRegs.GPTCONA.bit.T1TOADC=2;//选择周期中断EvaRegs.T1CON.all=0x1042;//设置寄存器while(1)//等待中断{LoopCount++;}interruptvoidadc_isr(void)//AD中断子函数{Voltage1[ConversionCount]=AdcRegs.ADCRESULT04;//结果存放在数组中Voltage2[ConversionCount]=AdcRegs.ADCRESULT14;if(ConversionCount==239)//取采样后的最大值{inti;for(i=0;i240;i++){if(Voltage1[0]tiaozha();//调用跳闸子函数ConversionCount=0;}elseConversionCount++;AdcRegs.ADCTRL2.bit.RST_SEQ1=1;//复位等待下次中断AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;return;}oidtiaozha(void)//跳闸子函数{inta=0,b=0,i;e++;if(fdisp(f);//调用显示子函数f=0;}if(Power_voltage2800)//一段的判据{GpioDataRegs.GPADAT.bit.GPIOA0=1;while(1){output(1,3);output(11,2);output(11,1);output(10,0);for(i=0;i0xffff;i++){}}}elseif(Power_voltage2200DSP三段式保护综合实验设计_文档下载)//二段的判据{a=1;}elseif(Power_voltage1600)//三段的判据{b=1;}elseGpioDataRegs.GPADAT.bit.GPIOA0=0;if(a==1)c++;if(b==1)d++;for(i=0;i0xffff;i++)if(c==10)//二段的延{GpioDataRegs.GPADAT.bit.GPIOA0=1;c=0;d=0;while(1){output(2,3);output(11,2);output(11,1);output(10,0);for(i=0;i0xffff;i++)f(d==20)//三段的延时{GpioDataRegs.GPADAT.bit.GPIOA0=1;c=0;d=0;while(1){output(3,3);output(11,2)output(11,1);output(10,0);for(i=0;i0xffff;i++){}}}return;}voiddisp(intd)//显示子程序{floata;intx,i=0,b[3];if(d1964)d=1964;a=(d-1964)*235.0/1436;//换算公式x=a*10;//取百、十、个、小数位各位数字,存入数组b[i]=x/1000;i++;b[i]=x/100%10;i++;b[i]=x/10%10;i++;b[i]=x-x/10*10;output(b[3],3);//按位输出output(b[2],2);output(b[1],1);output(b[0],0);}voidoutput(intm,intn)//显示输出子程序{intb,i;switch(m)//查询数码表{case0:b=63;break;case1:b=6;break;case2:b=91;break;case3:b=79;break;case4:b=102;break;case5:b=109;break;case6:b=125;break;case7:b=7;break;case8:b=127;break;case9:b=111;break;case10:b=115;break;case11:b=64;break;}if(n==2&&m10)b=b+128;GpioDataRegs.GPADAT.bit.GPIOA1=1;for(i=7;i=0;i--)//发送数据{GpioDataRegs.GPADAT.bit.GPIOA2=bi&1;GpioDataRegs.GPADAT.bit.GPIOA1=0;GpioDataRegs.GPADAT.bit.GPIOA1=1;}}//取每一位的数值