📄 tsf_main.c
字号:
}
/* endless loop, wait for interrupt */
}
/* end of main() */
/********************** INTERRUPT SERVICE ROUTINES *********************/
void Led1On(void)
{*PEDATDIR=*PEDATDIR&0xFFFD;
}
void Led1Off(void)
{*PEDATDIR=*PEDATDIR|0x0002;
}
void Led2On(void)
{*PEDATDIR=*PEDATDIR&0xFFFB;
}
void Led2Off(void)
{*PEDATDIR=*PEDATDIR|0x0004;
}
void Led3On(void)
{*PEDATDIR=*PEDATDIR&0xFFF7;
}
void Led3Off(void)
{*PEDATDIR=*PEDATDIR|0x0008;
}
void Led4On(void)
{*PEDATDIR=*PEDATDIR&0xFFEF;
}
void Led4Off(void)
{*PEDATDIR=*PEDATDIR|0x0010;
}
void Led5On(void)
{*PEDATDIR=*PEDATDIR&0xFFDF;
}
void Led5Off(void)
{*PEDATDIR=*PEDATDIR|0x0020;
}
void Led6On(void)
{*PEDATDIR=*PEDATDIR&0xFFBF;
}
void Led6Off(void)
{*PEDATDIR=*PEDATDIR|0x0040;
}
void UpCeptRes(void)
{*PBDATDIR=*PBDATDIR|0x1010;
}
void GndCeptRes(void)
{*PBDATDIR=*PBDATDIR|0x1000;
*PBDATDIR=*PBDATDIR&0xFFEF;
}
void UpCeptS(void)
{*PBDATDIR=*PBDATDIR&0xDFFF;
*PBDATDIR=*PBDATDIR|0x0020;
}
void GndCeptS(void)
{*PBDATDIR=*PBDATDIR&0xDFDF;
}
void UpPrtRes(void)
{*PBDATDIR=*PBDATDIR|0x4040;
}
void GndPrtRes(void)
{*PBDATDIR=*PBDATDIR|0x4000;
*PBDATDIR=*PBDATDIR&0xFFBF;
}
void UpTS(void)
{
*PBDATDIR=*PBDATDIR&0x7FFF;
*PBDATDIR=*PBDATDIR|0x0080;
}
void GndTS(void)
{
*PBDATDIR=*PBDATDIR&0x7F7F;
}
void UpJzgEn(void)
{*PEDATDIR=*PEDATDIR|0x8080;
*PADATDIR=*PADATDIR|0x0020;//cap3 up
}
void GndJzgEn(void)
{*PEDATDIR=*PEDATDIR|0x8000;
*PEDATDIR=*PEDATDIR&0xFF7F;
*PADATDIR=*PADATDIR&0xFFDF; //cap3 down
}
void UpVtgRes(void)
{
*PFDATDIR=*PFDATDIR|0x101;
}
void GndVtgRes(void)
{*PFDATDIR=*PFDATDIR|0x0100;
*PFDATDIR=*PFDATDIR&0xFFFE;
}
void UpVtgs(void)
{*PFDATDIR=*PFDATDIR&0xFDFF;
*PFDATDIR=*PFDATDIR|0x0002;
}
void GndVtgS(void)
{*PFDATDIR=*PFDATDIR&0xFDFD;
}
void UpJcqEn(void)
{ *PFDATDIR=*PFDATDIR|0x0010;}
void GndJcqEn(void)
{
*PFDATDIR=*PFDATDIR&0xFFEF;
}
void DisDrive(void)
{*PADATDIR=*PADATDIR|0x0080;
*PBDATDIR=*PBDATDIR|0x000A;
}
void EnDrive(void)
{*PADATDIR=*PADATDIR&0xFF7F;
*PBDATDIR=*PBDATDIR&0xFFF5;
}
void UpRes(void)
{*PBDATDIR=*PBDATDIR&0xFFEF;
}
void GndRes(void)
{*PBDATDIR=*PBDATDIR|0x0010;
}
void UpP1(void)
{
*PADATDIR=*PADATDIR|0x0040; }
void GndP1(void)
{*PADATDIR=*PADATDIR&0xFFBF;
}
interrupt void Protect(void)
{ int p1,p2,p3;
asm(" setc INTM ");
p1=T-s;
p2=Vtg_s;
p=Cept_s;
if(p1==0)
{Led5On();}
if(p2==0)
{Led4On();}
if (p3==0)
{Led6On();}
while(1)
{s1=*PFDATDIR&0x0004;
s2=*PFDATDIR&0x0020;
s3=*PFDATDIR&0x0008;
if(s1==0)
if(s3==0)
{ GndJcqEn();
Led1Off();
GndJzgEn();
Led3Off();
break;
}
if(s2==0)
{
Led3On();
break;}
}
GndPrtRes();
delay();
UpPrtRes();
}
interrupt void timer2_isr(void)
{
}
void ad(void)
{ int end_ad,kk,tmp1;
static unsigned int tt=0,xxx=0;
static int ii=0;
static int i=0,j=0;
//loop:
// end_ad=*ADCTRL2&0x1000; /*wait for the end of conversion of adbit12*/
// while(end_ad) goto loop;
// *ADCTRL2=*ADCTRL2|0x4000; /*Immediately reset sequencer to state CONV00*/
// channel_0=(*RESULT15)>>6; /*Phase B*/
// channel_1=(*RESULT7)>>6; /*Phase C*/
// channel_2=(*RESULT14)>>6; /*None*/
// channel_3=(*RESULT6)>>6; /*Phase A*/
// Ad_data[ii]=(*RESULT3)>>6
//if(tt<50) tt++ ;
tt=tt+50;
//*CMPR1 = 1000;/*pwm_duty;*/ /* set PWM1 duty cycle 563*/
//*CMPR2 = 1000;/*pwm_duty;*/
//*CMPR3 = 1000;/*pwm_duty;*/
xxx++;
//if(qq==1) freq_testing=0;
if(qq==1)
{
if(xxx==12&&>0)
{
amp--;
xxx=0;
}
}
else {
if(xxx==12&&<0x2000)
{
amp=amp+1;
xxx=0;
}
}
Vq_testing = amp;
/* if(ii<300)
{Ad_data[ii]=(*RESULT6)>>6;
ii++;
}*/
//drive.calc(&drive);
// rmpc.target_value = freq_testing;
rmpc.calc((void *)&rmpc);
rg.rmp_freq=rmpc.setpt_value;
rg.calc((void *)&rg);
/* pid_spd.pid_ref_reg3 = 0;
pid_spd.pid_fdb_reg3 = sp.speed_frq;
pid_spd.calc((void *)&pid_spd);*/
pid_spd.pid_ref_reg1 = 500;
pid_spd.pid_fb_reg1 = sp.speed_frq;
pid_spd.calc((void *)&pid_spd);
pid_id.pid_ref_reg3 = 0x2000;//0x0
pid_id.pid_fdb_reg3 = current_DQ.d;
pid_id.calc((void *)&pid_id);
pid_iq.pid_ref_reg3 = pid_spd.pid_out_reg1;
pid_iq.pid_fdb_reg3 = current_DQ.q;
pid_iq.calc((void *)&pid_iq);
//observe((pid_spd.pid_out_reg3^0x8000)>>4,(pid_spd.pid_fdb_reg3^0x8000)>>4,(pid_iq.pid_out_reg3^0x8000)>>4,(pid_iq.pid_fdb_reg3^0x8000)>>4);
voltage_DQt.D = pid_id.pid_out_reg3;
voltage_DQt.Q = pid_iq.pid_out_reg3;
//voltage_DQt.theta = 0;
//voltage_DQt.theta = fe.theta_r_fe;
//voltage_DQt.D = 0;
//voltage_DQt.Q = Vq_testing;
voltage_DQt.theta = cur.theta_cur_mod;
// voltage_DQt.theta = rg.rmp_out;
ipark((void *)&voltage_DQt,(void *)&voltage_dq);
// observe((current_DQ.d^0x8000)>>4,(current_DQ.q^0x8000)>>4,(voltage_DQt.D^0x8000)>>4,(voltage_DQt.Q^0x8000)>>4);
svgen.d = voltage_dq.d;
svgen.q = voltage_dq.q;
svgen.calc((void *)&svgen);
pwm.mfunc_c1 = svgen.va;
pwm.mfunc_c2 = svgen.vb;
pwm.mfunc_c3 = svgen.vc;
pwm.update(&pwm);
ilg2_vdc.read(&ilg2_vdc);
current_abc.a = ilg2_vdc.Imeas_a;
current_abc.b = ilg2_vdc.Imeas_b;
current_abc.c = ilg2_vdc.Imeas_c;
// observe((current_abc.a^0x8000)>>4,(current_abc.b^0x8000)>>4,(rg.rmp_out^0x8000)>>4,(sp.speed_frq^0x8000)>>4);
/*if(j<200)
{
Ad_data[j]=ilg2_vdc.Imeas_a;
j++;
}*/
/* fira.input=ilg2_vdc.Imeas_a;
fira.calc(&fira);
current_abc.a=fira.output;
firb.input=ilg2_vdc.Imeas_b;
firb.calc(&firb);
current_abc.b=firb.output;
current_abc.c=-(current_abc.a+current_abc.b);*/
Vbus = ilg2_vdc.Vdc_meas;
/*if(i<=49)
{
aa[i]=channel_0;
bb[i]=channel_1;
cc[i]=channel_3;
i++;
}*/
//observe((current_dq.d^0x8000)>>4,(current_dq.q^0x8000)>>4,(current_DQ.d^0x8000)>>4,(current_DQ.q^0x8000)>>4);
// observe( channel_0<<2, channel_1<<2, channel_2<<2,0);
clark(¤t_abc,¤t_dq);
current_dqt.D = current_dq.d;
current_dqt.Q = current_dq.q;
//current_dqt.theta = 0;
current_dqt.theta = cur.theta_cur_mod;
//current_dqt.theta = rg.rmp_out;
park(¤t_dqt,¤t_DQ);
//observe((current_dqt.D^0x8000)>>4,(current_dqt.Q^0x8000)>>4,(cur.theta_cur_mod^0x8000)>>4,0);
volt.Mfunc_V1=svgen.va;
volt.Mfunc_V2=svgen.vb;
volt.Mfunc_V3=svgen.vc;
volt.DC_bus=Vbus;
volt.calc(&volt);
/*fe.u_ds_fe = volt.Vdirect;//volt.Vdirect;//rg.rmp_out;
fe.u_qs_fe = volt.Vquadra;//volt.Vquadra;//rg.rmp_out;
fe.i_ds_fe = current_dq.d;//current_dq.d;//rg.rmp_out;
fe.i_qs_fe = current_dq.q;//current_dq.q;//rg.rmp_out;
fe.calc(&fe);*/
//fe.theta_r_fe=fe.theta_r_fe-rg.rmp_out;
//observe((fe.theta_r_fe^0x8000)>>4,(rg.rmp_out^0x8000)>>4,(current_dq.d^0x8000)>>4,(current_dq.q^0x8000)>>4);
qep1.calc(&qep1);
sp.theta_elec = qep1.theta_elec; //qep1.theta_mech;
sp.calc(&sp);
observe((sp.speed_frq^0x8000)>>4,(*T2CNT^0x8000),(current_DQ.q^0x8000)>>4,0);
cur.i_cur_mod_D = current_DQ.d;
cur.i_cur_mod_Q = current_DQ.q;
cur.spd_cur_mod = sp.speed_frq;
if(cur.spd_cur_mod<0) cur.spd_cur_mod = 0; //sp.speed_frq;
cur.calc(&cur);
// observe((cur.theta_cur_mod^0x8000)>>4,0,0,0);
//observe(qep1.theta_elec>>4,qep1.theta_mech>>4,sp.speed_frq>>4,sp.speed_rpm>>4);
//observe((0x500^0x8000)>>4,(pid_spd.pid_fdb_reg3^0x8000)>>4,(pid_iq.pid_fdb_reg3^0x8000)>>4,(current_DQ.q^0x8000)>>4);
}
void timer1_isr(void)/* interrupt void timer1_isr(void)*/
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -