全国电子设计大赛三相电压逆变程序 芯片 dspic4011 dspicWord下载.docx
- 文档编号:19688816
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:37
- 大小:25.61KB
全国电子设计大赛三相电压逆变程序 芯片 dspic4011 dspicWord下载.docx
《全国电子设计大赛三相电压逆变程序 芯片 dspic4011 dspicWord下载.docx》由会员分享,可在线阅读,更多相关《全国电子设计大赛三相电压逆变程序 芯片 dspic4011 dspicWord下载.docx(37页珍藏版)》请在冰豆网上搜索。
{
unsignedintd;
smo=0;
if(a-70<
b&
&
b<
a+70&
b-70<
c&
c<
b+70)//偏差值待定,加大误差,取中间值(yuan45)
{
smo=1;
/*d=a;
if(d<
b)d=b;
c)d=c;
returnd;
*/
if(a<
b){d=a;
a=b;
b=d;
}
c){d=a;
a=c;
c=d;
if(b<
c){d=b;
b=c;
returnb;
}
return0;
}
//MAX电压周期最大值采样结果MAX平滑度测试
//算法说明:
a,b,cc点与a,b比较,与其中之一个平滑,则取c点,如果都不平滑,取b点。
unsignedintUA_M_T_0,UA_M_T_1,UA_M_T_TEMP;
voidsmooth_t_uo(unsignedinta,unsignedintb,unsignedintc)//smooth_t_uo(UA_M_T_0,UA_M_T_1,UA_M_T);
if((b-45<
c&
b+45)||(a-50<
a+50))UA_M_T_TEMP=c;
//偏差值待定,加大误差,取中间值(周期采样偏差很小的哦,所以15合适了,因为偏差小的时候只有+-3)
//在调pi的时候可能偏差会比较大,这各值,不太合理吧。
或许还不够大吧,因为一个周期变化大。
再大点吧。
elseUA_M_T_TEMP=b;
//给足够大的值,要不然虑掉正常的波,其他全部都没了。
if(UA_M_T_TEMP<
10)UA_M_T_TEMP=b;
//MAX电流周期最大值采样结果MAX平滑度测试
unsignedintIOA_M_T_0,IOA_M_T_1,IOA_M_T_TEMP;
unsignedintIOB_M_T_0,IOB_M_T_1,IOB_M_T_TEMP;
unsignedintIOC_M_T_0,IOC_M_T_1,IOC_M_T_TEMP;
voidsmooth_t_io(unsignedinta,unsignedintb,unsignedintc,unsignedintflag)
unsignedintio_temp;
b+45)||(a-50<
a+50))io_temp=c;
elseio_temp=b;
if(flag==1)IOA_M_T_TEMP=io_temp;
if(flag==2)IOB_M_T_TEMP=io_temp;
if(flag==3)IOC_M_T_TEMP=io_temp;
if(io_temp<
10)io_temp=c;
//电流平滑度测试,因为参数不同,所以这里分开了为两个子函数
//**************************************************
unsignedintsmooth_3_test_i(unsignedinta,unsignedintb,unsignedintc)
if(a-75<
a+75&
b-12<
b+12)//偏差值未定a-75<
d=a;
returnd;
//mppt稳压wenya
#defineU_GETUA_M_T
//这个宏定义定义了采样反馈的目的电压,UA_M_T,UB_M_T,UC_M_T之一//o相o线i相
//VREF为对应稳定时的采样值
unsignedlongpid1,pid2,pid3;
unsignedintuk0,uk1;
unsignedintKP=60,KI=7,VREF=418;
//verf采样结果看着,待定。
voidWENYA(void)
{
uk0=uk1;
uk1=U_GET;
pid1=(unsignedlong)a+(unsignedlong)KP*uk0+(unsignedlong)KI*VREF;
pid2=(unsignedlong)uk1*(KP+KI);
if(pid1>
pid2)
{
pid3=pid1-pid2;
if(pid3>
65530)a=65530;
elsea=pid3;
}
elsea=0;
//三相过流和不对称保护和缺相
//**************************************************
unsignedintIO_M_VALUE,IO_SMOOTH_MIN=125,IO_QUEXIANG_MAX=10;
//三个数待测125
voidIO3_PROTECT(void)
//过流保护测试
if(IOA_M_T_TEMP>
IO_M_VALUE||IOB_M_T_TEMP>
IO_M_VALUE||IOC_M_T_TEMP>
IO_M_VALUE)//加入过流的值
overload=1;
//显示过流的屏幕信号
elseoverload=0;
//不对称测试
if(0)
if(IOA_M_T_TEMP-IO_SMOOTH_MIN<
IOB_M_T_TEMP&
IOB_M_T_TEMP<
IOA_M_T_TEMP+IO_SMOOTH_MIN
&
IOA_M_T_TEMP-IO_SMOOTH_MIN<
IOC_M_T_TEMP&
IOC_M_T_TEMP<
IOB_M_T_TEMP-IO_SMOOTH_MIN<
IOB_M_T_TEMP+IO_SMOOTH_MIN
)buduichen=0;
elsebuduichen=1;
//缺相保护
if
(1)
if(IOA_M_T<
IO_QUEXIANG_MAX||IOB_M_T<
IO_QUEXIANG_MAX||IOC_M_T<
IO_QUEXIANG_MAX)
quexiang=1;
elsequexiang=0;
//欠压保护保护
unsignedintUS_MIN=360;
voidUS_LOW_PROTECT(void)
if(US_1_4T<
10)return;
US_MIN)qianya=1;
elseqianya=0;
//if(qianya==1)jidianqi=1;
//检测到欠压也不动作,要主控的,检测到多个错误时才动作
unsignedintjdt_0,jdt_1;
//检测继电器下降沿用的当_LATRD2的值。
unsignedinttempad,IO10,IO20,IO30;
unsignedintIO1,IO2,IO3,IO_TEMP,IO11,IO22,IO33,IOAA,IOBB,IOCC;
unsignedintjs1;
//计算一次
//ADC中断
void__attribute__((interrupt))_ADCInterrupt(void)
//采样7个结果
//AD_US=AD_US+ADCBUF0;
//AD_UA=ADCBUF1;
//AD_UB=ADCBUF2;
//AD_UC=ADCBUF3;
//tempad=ADCBUF4;
//AD_IOA=ADCBUF5;
IO10=IO1;
IO1=ADCBUF5;
//AD_IOB=ADCBUF6;
IO20=IO2;
IO2=ADCBUF6;
//AD_IOC=ADCBUF7;
IO30=IO3;
IO3=ADCBUF7;
AD_UA=ADCBUF0;
AD_IOA=ADCBUF1;
AD_IOB=ADCBUF2;
AD_IOC=ADCBUF3;
AD_US=AD_US+ADCBUF4;
/*
if(IO10-10<
IO1&
IO1<
IO10+10){IO11=IO10;
if(IO11<
IO1)IO11=IO1;
if(IO20-20<
IO2&
IO2<
IO20+20){IO22=IO20;
if(IO22<
IO2)IO22=IO2;
if(IO30-20<
IO3&
IO3<
IO30+20){IO33=IO30;
if(IO33<
IO3)IO33=IO3;
if(AD_N==0)
{
IOAA=IO11;
IO11=0;
IOBB=IO22;
IO22=0;
IOCC=IO33;
IO33=0;
IO1=0;
IO2=0;
IO3=0;
IO10=0;
IO20=0;
IO30=0;
}
*/
//电流搞起start
//**************************************************
if(PWM_N<
=4&
js1==0)
{
js1=1;
SUM_1=0;
UA1=0;
UA2=0;
UA3=0;
UB1=0;
UB2=0;
UB3=0;
UC1=0;
UC2=0;
UC3=0;
UA_M_3=0;
UB_M_3=0;
UC_M_3=0;
UA_M_T_0=UA_M_T_1;
UA_M_T_1=UA_M_T;
UA_M_T=0;
UB_M_T=0;
UC_M_T=0;
IOA1=0;
IOA2=0;
IOA3=0;
IOB1=0;
IOB2=0;
IOB3=0;
IOC1=0;
IOC2=0;
IOC3=0;
IOA_M_3=0;
IOB_M_3=0;
IOC_M_3=0;
IOA_M_T=0;
IOB_M_T=0;
IOC_M_T=0;
if(4<
PWM_N&
PWM_N<
395)
js1=0;
//U传递
UA1=UA2;
UA2=UA3;
UA3=AD_UA;
UB1=UB2;
UB2=UB3;
UB3=AD_UB;
UC1=UC2;
UC2=UC3;
UC3=AD_UC;
//I传递
IOA1=IOA2;
IOA2=IOA3;
IOA3=AD_IOA;
IOB1=IOB2;
IOB2=IOB3;
IOB3=AD_IOB;
IOC1=IOC2;
IOC2=IOC3;
IOC3=AD_IOC;
//调用函数取值电压3点最大
temp1=smooth_3_test_u(UA1,UA2,UA3);
if(smo==1)
UA_M_3=temp1;
if(UA_M_T<
UA_M_3)UA_M_T=UA_M_3;
temp1=smooth_3_test_u(UB1,UB2,UB3);
UB_M_3=temp1;
if(UB_M_T<
UB_M_3)UB_M_T=UB_M_3;
temp1=smooth_3_test_u(UC1,UC2,UC3);
UC_M_3=temp1;
if(UC_M_T<
UC_M_3)UC_M_T=UC_M_3;
//调用函数取值电流3点最大
temp1=smooth_3_test_i(IOA1,IOA2,IOA3);
IOA_M_3=temp1;
IOA_M_3)IOA_M_T=IOA_M_3;
temp1=smooth_3_test_i(IOB1,IOB2,IOB3);
IOB_M_3=temp1;
if(IOB_M_T<
IOB_M_3)IOB_M_T=IOB_M_3;
temp1=smooth_3_test_i(IOC1,IOC2,IOC3);
IOC_M_3=temp1;
if(IOC_M_T<
IOC_M_3)IOC_M_T=IOC_M_3;
if(395<
=PWM_N&
SUM_1==0)//SUM_1,此次执行与否位,0表示没有执行,1执行了,检测执行与否后,来执行
SUM_1=1;
//if(_LATD2==0)//如果继电器关闭,则关闭输出值的处理
//{//继电器关了也进行检测,结果都是关闭,没关系,当故障排除后,
WENYA();
//a=50000;
smooth_t_uo(UA_M_T_0,UA_M_T_1,UA_M_T);
//周期结果滤波,不滤去结果,关键是在现实的pi用滤过后的值,
//这个效果不好,给显示用了
//a=60000;
//这个调试用的
smooth_t_io(IOA_M_T_0,IOA_M_T_1,IOA_M_T,1);
smooth_t_io(IOB_M_T_0,IOB_M_T_1,IOB_M_T,2);
smooth_t_io(IOC_M_T_0,IOC_M_T_1,IOC_M_T,3);
IO3_PROTECT();
//}
//电流搞起end
//直流的电压用AD_N搞定,50次平均一次start
AD_N++;
if(AD_N==50)
{
AD_N=0;
US_1_4T=AD_US/50;
AD_US=0;
US_LOW_PROTECT();
}
//直流的电压用AD_N搞定,50次平均一次end
//继电器动作
if(overload==1||buduichen==1||quexiang==1||qianya==1)//欠压四分之一周期就可以动作一次,所以这个50次还是比较合理的,欠压快点,因为也比较准,其他比较容易被干扰,所以长点时间动作合理,
ERROR_N++;
if(ERROR_N>
1000)
{
jdt_0=_LATD2;
_RD2=1;
jdt_1=_LATD2;
if(jdt_0==1&
jdt_1==0)DISP_N=1;
ERROR_N=0;
}
//*只有当连续出现多次,10次(待定)错误时才动作
//*错可能一周出现多个,所以用>
10,继电器关闭后N=0,这样继电器on上时N=0,才能正常工作
//*关闭的触发条件是什么,这在恢复保护时,处理好它,保护能否恢复它是关键
//继电器下降沿时DISP_N=1,其他时候当然不干
}
elseERROR_N=0;
_ADIF=0;
}
//******************************************************************
//ADC初始化,四通道,同时采样,顺序转换,触发信号,由T1给,其他自动工作
//********************************************************************
voidAD_INI(void)
_TRISB0=1;
//ua
_TRISB1=1;
//ub
_TRISB2=1;
//uc
_TRISB3=1;
//ioa
_TRISB4=1;
//ioB
_TRISB5=1;
//iOC
_TRISB6=1;
//US
//adcon1
_ADON=0;
_ADSIDL=0;
_FORM=0;
_SSRC=0B111;
//自动采样,结束采样位,开始转换
_SIMSAM=0;
_ASAM=0;
//自动采样
_SAMP=0;
//开始采样
/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国电子设计大赛三相电压逆变程序 芯片 dspic4011 dspic 全国 电子设计 大赛 三相 电压 程序