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); } }
/*! \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); }