Esempio n. 1
0
// ======================================================================================
void Init_RMNK( TRMNK *prmnk, float DefaultPeriod, float BaseXAmpl, float DefaultFreq )
{
    // ----- Инициализация переменных ------
    prmnk->x_phi     = (float)0.0;
    prmnk->delta_phi = (float)TWO_PI / DefaultPeriod;
    prmnk->delta_phi_m = prmnk->delta_phi;

    prmnk->Qx[0] = (float)0.0;
    prmnk->Qx[1] = BaseXAmpl;
    prmnk->Qx[2] = (float)0.0;

    // ------ Значения MjuX могут меняться (это скорость сходимости) -----
    prmnk->MjuX[0] = (float)0.002;
    prmnk->MjuX[1] = (float)0.002;
    prmnk->MjuX[2] = (float)0.002;

    // ------ Значения MjuX могут меняться (это скорость сходимости) -----
    prmnk->MjuY[0] = (float)0.004;
    prmnk->MjuY[1] = (float)0.004;
    prmnk->MjuY[2] = (float)0.004;

    Init_LowPass_IRFiltr_1rstOrder( prmnk->fi_Xa, 250.0,  BaseXAmpl, DISCRET_TIME );
    Init_LowPass_IRFiltr_1rstOrder( prmnk->fi_Xb, 250.0, (float)0.0, DISCRET_TIME );

    Init_LowPass_IRFiltr_1rstOrder( prmnk->fi_Ya, 250.0, (float)0.0, DISCRET_TIME );
    Init_LowPass_IRFiltr_1rstOrder( prmnk->fi_Yb, 250.0, (float)0.0, DISCRET_TIME );
}
Esempio n. 2
0
// ==========================================================
void Init_Algo( TGyro *gyro, float *apUARTfloats  )
{
    Sint16   iCounter = 0;

    gyro->pUARTfloats = apUARTfloats;

    // --- Переприсвоение Дефайнов -----
    gyro->DefaultFrequency         = (float)Base_Frequency;
    gyro->DefaultPeriod            = (float)ALGO_FREQUENCY / gyro->DefaultFrequency;
    gyro->Frequency                = gyro->DefaultFrequency;
    gyro->k_Omega                  = k_omega;
    gyro->DebugTime                = TIMES;
    gyro->DebugMode                = DEBUG_MODE;
    gyro->StartUpTime              = (Sint32)(GYRO_StartUp_Time * ALGO_FREQUENCY);
/////////////
    gyro->isXPhase_corr            = CORR_X_PHASE;
    gyro->isYPhase_corr            = CORR_Y_PHASE;

    gyro->isAlfaE_f_corr           = CORR_ALFA_E_f;
    gyro->isAlfaQ_f_corr           = CORR_ALFA_Q_f;
    gyro->isAlfaE_t_corr           = CORR_ALFA_E_t;
    gyro->isAlfaQ_t_corr           = CORR_ALFA_Q_t;
    gyro->isPhiQ_corr              = CORR_PhiQ;

    gyro->isStatic1_corr           = CORR_STATIC_1;
    gyro->isStatic2_corr           = CORR_STATIC_2;
    gyro->isDynamic_1_corr         = CORR_DYNAMIC_1;
    gyro->isDynamic_2_corr         = CORR_DYNAMIC_2;
/////////////
    gyro->GyroOut_corr_st1         = (float)0.0;
    gyro->GyroOut_corr_st2         = (float)0.0;
    gyro->GyroOut_corr_st1_a       = (float)0.0;
    gyro->GyroOut_corr_st1_b       = (float)0.0;
    gyro->GyroOut_corr_st1_c       = (float)0.0;
    
    gyro->GyroOut_corr_st2_a       = (float)0.0;
    gyro->GyroOut_corr_st2_b       = (float)0.0;
    gyro->GyroOut_corr_st2_c       = (float)0.0;

    gyro->GyroOut_MK1              = (float)1.0;  // Единица
    gyro->GyroOut_MK2              = (float)1.0;  // Единица

    gyro->corr_cos_alfa_e          = (float)1.0;  // Единица
    gyro->corr_sin_alfa_e          = (float)0.0;
    gyro->corr_cos_alfa_q          = (float)1.0;  // Единица
    gyro->corr_sin_alfa_q          = (float)0.0;

    gyro->CorrectionOrderCalc      = 0;
/////////////


    gyro->Base_ExcitationPhaseAG = (float)PHASE_AG            * DEG_TO_RAD;
    gyro->Base_ExcitationPhase_x = (float)PHASE_EXCITIATION_X * DEG_TO_RAD;
    gyro->Base_ExcitationPhase_y = (float)PHASE_EXCITIATION_Y * DEG_TO_RAD;

    gyro->ExcitationPhaseAG = gyro->Base_ExcitationPhaseAG;
    gyro->ExcitationPhase_x = gyro->Base_ExcitationPhase_x;
    gyro->ExcitationPhase_y = gyro->Base_ExcitationPhase_y;

    gyro->MainSum_counter     = 0;
    gyro->MainSumInit_counter = 0;
    gyro->isMainSumInited     = 0;

   // -- ФАЗА (Задержка) АГ ----
    gyro->Zn_exc.zn_curr = (ALGO_FREQUENCY / Base_Frequency) * gyro->ExcitationPhaseAG * TWO_PI_INVERT;
    Init_Zn( &gyro->Zn_exc );

   // -------- Инит коррекционных переменных --------
    gyro->f1 = (float)0.0;    gyro->e1 = (float)0.0;    gyro->q1 = (float)0.0;    gyro->t1 = (float)0.0;
    gyro->f2 = (float)0.0;    gyro->e2 = (float)0.0;    gyro->q2 = (float)0.0;    gyro->t2 = (float)0.0;
    gyro->f3 = (float)0.0;    gyro->e3 = (float)0.0;    gyro->q3 = (float)0.0;    gyro->t3 = (float)0.0;
    gyro->f4 = (float)0.0;    gyro->e4 = (float)0.0;    gyro->q4 = (float)0.0;    gyro->t4 = (float)0.0;
    gyro->f5 = (float)0.0;    gyro->e5 = (float)0.0;    gyro->q5 = (float)0.0;    gyro->t5 = (float)0.0;
    gyro->f6 = (float)0.0;    gyro->e6 = (float)0.0;    gyro->q6 = (float)0.0;    gyro->t6 = (float)0.0;

   // ----------------- Пегуляторы ------
    Init_PiReg_new( gyro->pi_x_1,        X_ampl*X_ampl, Kp_x  , Ki_x  , (float)DISCRET_TIME );  
    Init_PiReg_new( gyro->pi_x_2,                  0.0, Kp_x  , Ki_x  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->pi_y_1,        Y_ampl*Y_ampl, Kp_y  , Ki_y  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->pi_y_2,                  0.0, Kp_y  , Ki_y  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->pi_phi_1,                0.0, Kp_phi, Ki_phi, (float)DISCRET_TIME );
    Init_PiReg_new( gyro->pi_phi_2,                0.0, Kp_phi, Ki_phi, (float)DISCRET_TIME );

    Init_PiReg_new( gyro->rmnk_x.pi_pll_x1, 0.0, Kp_f  , Ki_f  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->rmnk_x.pi_pll_x2, 0.0, Kp_f  , Ki_f  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->rmnk_y.pi_pll_x1, 0.0, Kp_f  , Ki_f  , (float)DISCRET_TIME );
    Init_PiReg_new( gyro->rmnk_y.pi_pll_x2, 0.0, Kp_f  , Ki_f  , (float)DISCRET_TIME );

   // ----------------- 
    //Init_CascadFiltration  ( &gyro->cf_Freq );
    //Init_CascadFiltration  ( &gyro->cf_Temp );
    //Init_CascadFiltration  ( &gyro->cf_NCycles );
    //Init_CascadFiltration  ( &gyro->cf_Quad );
    //Init_CascadFiltration  ( &gyro->cf_Exci );
    

   // ----------------- 
    Init_PeriodDetector ( &gyro->rmnk_x.ANodePeriod, gyro->DefaultFrequency );

   // ----------------- 
//    Init_PhaseDetector( &gyro->Phase, gyro->DefaultFrequency);

   // -------------------------
    Init_RMNK( &gyro->rmnk_x, gyro->DefaultPeriod, (float)X_ampl*X_ampl, gyro->DefaultFrequency );
    Init_RMNK( &gyro->rmnk_y, gyro->DefaultPeriod, (float)X_ampl*X_ampl, gyro->DefaultFrequency );
 
    gyro->Temperature = (float)0.0;      
    gyro->NULL_value  = (float)0.0;     
    gyro->in_Ux       = (float)0.0;     
    gyro->in_Uy       = (float)0.0;     
    gyro->out_Ux      = (float)0.5;     
    gyro->out_Uy      = (float)0.0;     
    gyro->KXPhase     = (float)0.0;     
    gyro->K_PhaseScan = (float)1.0;     

    // -------------------------
    Init_DebugMode              ( gyro, &Debug );
    Init_BandPassFiltration_new ( gyro->fi_input_x, gyro->DefaultFrequency, 100.0, (float)DISCRET_TIME );
    Init_BandPassFiltration_new ( gyro->fi_input_y, gyro->DefaultFrequency,400.0, (float)DISCRET_TIME ); // Фаза задержки на 100 Гц 7 градусов
    //Init_BandPassFiltration_new ( gyro->fi_input_y, gyro->DefaultFrequency,1000.0, (float)DISCRET_TIME ); // Фаза задержки на 100 Гц 11.5 градусов
    //Init_BandPassFiltration_new ( gyro->fi_input_y, gyro->DefaultFrequency, 800.0, (float)DISCRET_TIME ); // Фаза задержки на 100 Гц 14 градусов
    Init_LowPass_IRFiltr_1rstOrder( gyro->fi_Phase, 50.0, (float)0.0, (float)1.0 / (float)gyro->DefaultFrequency );

    
    Init_UART_Param             ( gyro );

    // ------- Второстепенные иниты -------
    gyro->AlgoCounter      = 0;
    gyro->isAlgoCounter    = 1;
    gyro->CurDebugTime     = (float)0.0;
 
    // ---------
    #pragma vector_for
    for ( iCounter = 0; iCounter < SLIDER_BUFFERS_LENGTH; iCounter++)
        gyro->XBuffer[iCounter] = (float)0.0; 

    // ------
    gyro->DebugCounter = (float)0.0;
    gyro->DebugCoef    = (float)1.0;
    
    gyro->BaseAntinodePhase = (float)0.0;
    gyro->kPhase = (float)1.0;
}