예제 #1
0
void _ISR _CNInterrupt(void)
{
    _CNIF = 0;
    
   if (_RC1)
   {
       led1 = 1;
       led2 = 0;
       SetDCMCPWM1(1,0,0);
   }
   else
   {
       led1 = 0;
       led2 = 1;
       SetDCMCPWM1(1,6,0);
       //SetDCMCPWM1(1,86,0);
   }
    
}
예제 #2
0
/*!
  \param void
  \return void
 */
void GestioneSetpoint(void)
{
    float Setpoint_M1, Setpoint_M2;



    if (VarModbus[INDICE_STATUSBIT1] & FLG_STATUSBI1_PID_EN)
    {
        LED2 = LED_ON;
    }
    else
    {
        LED2 = LED_OFF;
    }


    if (VarModbus[INDICE_STATUSBIT1] & FLG_STATUSBI1_PID_EN)
    { //Funzionamento in modalità PID

        if (OLD_INDICE_STATUSBIT1 == 1) // Esco dalla modalità PWM e passo a quella PID
        {
            OLD_INDICE_STATUSBIT1 = 0;
            // Disattivo il PID
            PidReset(&PID1, &Motore1);
            PidReset(&PID2, &Motore2);
        }

        /* **************************************************************** */
        /* ************ SONO IN MODALITA' PID, ROUTINE "MAIN"  ************ */
        /* **************************************************************** */
        // Converto Vlineare in Giri al secondo per il PID
        Setpoint_M1 = Motore1.FL_Costante_Conversione_Vlin_to_Vang * ((float) VarModbus[INDICE_PWM_CH1]);
        Setpoint_M2 = Motore2.FL_Costante_Conversione_Vlin_to_Vang * ((float) VarModbus[INDICE_PWM_CH2]);
    }
    else
    {
        /* **************************************************************** */
        /* ************ SONO IN MODALITA' PWM, ROUTINE "MAIN"  ************ */
        /* **************************************************************** */

        if (OLD_INDICE_STATUSBIT1 == 0) // Esco dalla modalità PID e passo a quella PWM
        {
            OLD_INDICE_STATUSBIT1 = 1;
            // Disattivo il PID
            PidReset(&PID1, &Motore1);
            PidReset(&PID2, &Motore2);
        }

        // In modalità PWM il dato delle word INDICE_PWM_CHx lo mando direttamente 
        // al modulo PWM del micro perchè rappresenta già un PWM.
        SetDCMCPWM1(1, 2048 + (int) (VarModbus[INDICE_PWM_CH1]), 0); // setta il PWM  del motore
        SetDCMCPWM1(2, 2048 + (int) (VarModbus[INDICE_PWM_CH2]), 0); // setta il PWM  del motore
        VarModbus[INDICE_RD_PWM_CH1] = VarModbus[INDICE_PWM_CH1]; // aggiorno PWM in lettura
        VarModbus[INDICE_RD_PWM_CH2] = VarModbus[INDICE_PWM_CH2]; // aggiorno PWM in lettura
    }

    // A prescindere che sia in modalità PID o PWM chiamo sempre le funzioni PID
    // che mi servono in ogni caso per il calcolo dei dati di velocità.
    if (!Motore1.UC_Fail)
        PID1.Setpoint = (long) (Setpoint_M1);
    if (!Motore2.UC_Fail)
        PID2.Setpoint = (long) (Setpoint_M2);

}