سلام دوستان
من کدهای زیر رو تویه stm32f103re نوشتم اما زمان اجراش خیلی زیاده حدود 120 میکروثانیه اما من چون نیاز دارم سوییچچینگ انجام بدم نیاز دارم تا زمان اجرای این دستورات به 10 میکروثانیه برسه نمیدونم مشکل از کجاست با اینکه تعداد کدها هم کمه (فرکانس هم 72 مگاهرتز هست)
کد:
GPIOA->BSRR = 0x0001;
ADC1ConvertedValue = ADC_GetConversionValue(ADC1);
V_adc = ADC1ConvertedValue;
v_adc = (V_adc/4095)*3.3f;
v_adc = v_adc-(1.65f); // v_adc = v_adc-(3.3/2);
v_adc1 = v_adc/(1.125f); // v_adc = v_adc-(3.3/2);
u_k = v_adc;
y1_k = -0.9476f*y1_k_2 + 1.946f*y1_k_1 - 0.0262f*u_k_2 + 0.0262f*u_k;
y2_k = -0.9476f*y2_k_2 + 1.946f*y2_k_1 + 0.0004814f*u_k_2 + 0.0009629f*u_k_1 + 0.0004814f*u_k;
u_k_2 = u_k_1;
u_k_1 = u_k;
y1_k_2= y1_k_1;
y1_k_1 = y1_k;
y2_k_2= y2_k_1;
y2_k_1 = y2_k;
/* ***********************************************************************/
valpha = y1_k;
vbeta = y2_k;
Vd = cosf(teta_out_k)*valpha + sinf(teta_out_k)*vbeta;
Vq = -sinf(teta_out_k)*valpha + cosf(teta_out_k)*vbeta;
Vd_in_k = 0-Vd;
Vd_out_k = Vd_out_k_1 + 92.25f*Vd_in_k - 91.75f*Vd_in_k_1;
Vd_in_k_1 = Vd_in_k;
Vd_out_k_1 = Vd_out_k;
Vd_out_m_k = Vd_out_k;// Vd_out_m_k = Vd_out_k + (2*pi*50);
teta_out_k = teta_out_k_1 + 5.85e-005f*Vd_out_m_k + 5.85e-005f*Vd_out_m_k_1;
Vd_out_m_k_1 = Vd_out_m_k;
teta_out_k_1 = teta_out_k;
sin_data = -sinf(teta_out_k+pi/6);
d1 =0.6f * sin_data*199;
d = d1;
d2 =0.6f * v_adc1*199;
db = d2;
if(d1>=0){
GPIOA->BSRR = 0x0100; // A.8
GPIOA->BSRR = 0x0200; // A.9
}
else
{
GPIOA->BRR = 0x0100;
GPIOA->BRR = 0x0200;
}
GPIOA->BRR = 0x0001;