Questo sito utilizza i cookie per migliorare servizi ed esperienza degli utenti. Se decidi di continuare la navigazione consideriamo che accetti il loro uso.

modulazione PWM

  • baltimora
  • Avatar di baltimora Autore della discussione
  • Offline
  • New Member
  • New Member
Di più
8 Anni 8 Mesi fa #280 da baltimora
modulazione PWM è stato creato da baltimora
salve, per una macchina che sto realizzando devo controllare alcuni relè statici tramite una modulazione a PWM, cercando in giro non ho trovato molto su come realizzare tale codice.
qualcuno ha avuto esperienza, mi può dare qualche informazioni come realizzare il codice

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
8 Anni 8 Mesi fa #281 da cisco
Risposta da cisco al topic modulazione PWM
la tua domanda è troppo generica, su quale target usi Codesys che versione dello stesso.
è difficile darti una risposta senza essere precisi con questo ambiente di sviluppo dato che viene usato da PLC ad inverter e ogni dispositivo a peculiarità diverse e piccole differenze.

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • baltimora
  • Avatar di baltimora Autore della discussione
  • Offline
  • New Member
  • New Member
Di più
8 Anni 8 Mesi fa #282 da baltimora
Risposta da baltimora al topic modulazione PWM
Grazie Cisco per la risposta.
uso codesys su un dispositivo della Lenze e devo comandare un uscita remota per dei relè statici in PWM.
la versione di codesys è la 2 e sinceramente non saprei da che parte cominciare per realizzare una logica del genere

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
8 Anni 7 Mesi fa #283 da cisco
Risposta da cisco al topic modulazione PWM
realizzare una funzione che genera una modulazione PWM per quello che hai scritto non è molto difficile, anche se personalmente non ho mai realizzato qualcosa del genere.
a memoria mi sembra di aver visto qualcosa del genere di gia fatto ma sinceramente non ricordo dove vedrò nei prossimi giorni di cercare e di rendere l'esempio disponibile per tutti

Si prega Accedi o Crea un account a partecipare alla conversazione.

Di più
8 Anni 7 Mesi fa #284 da cisco
Risposta da cisco al topic modulazione PWM
ho trovato questo codice scritto un po di tempo fa per un altra piattaforma,
è adattabile per codesys senza grossi problemi
//Variabili di ingresso
// bInit =bit di inizializzazione del modulo
// fPWMIn = Valore di ingresso da 0-100.00
// fCtrtime =Tempo di controllo in sec.
// fPlcTime =Tempo di controllo del PLC in sec


//variabili di uscita
// nTypErr =tipo di errore generato dal modulo vedi tabella in fondo
// bErr =Bit di errore modulo non inizializzato
//bPWMOut =uscita della modulazione PWM


//significato degli errori
// 0 =modulo OK
// 1 =modulo non inizializzato
// 2 = valori non validi i parametri messi valgono 0 opp. negativi
// 3 =il valore fCtrtime è piu piccolo del fPlcTime


var
 bInitDone               : boolean;
 bNewPeriod              : boolean;
 fPwmCycleTime           : real;
 nPwmCycleTicks          : integer;
 nPwmActCycleTick        : integer;
 nPowerOnCycleTicks      : integer;
 nPowerOffCycleTicks     : integer;
 nIng1                   : integer;
 nIng2                   : integer;
 nOut                    : integer;

 const

 nERR_NOERROR            =0;
 nERR_NOINIT             =1;
 nERR_INVALIDPARAM       =2;
 nERR_INVALIDCYCLETIME   =3;
 nERR_CYCLETIMEBIG       =4;

 nDIRECTION_MINUS        =-1;
 nDIRECTION_ZERO         =0;
 nDIRECTION_PLUS         =1;

begin

IF  (bInit) THEN
   begin
   //(Inizializzazione della logica
   bInitDone   := TRUE;
   bPwmOut   := FALSE;
   bNewPeriod   := FALSE;
   nPwmActCycleTick := 0;
   // controllo i valori impostati
   // in caso che valgano 0 genero un errore =2 ed esco
   IF ( fCtrtime <= 0.0 ) OR ( fPlcTime <= 0.0 ) THEN
      begin
      ntyperr := nERR_INVALIDPARAM;
      exit;
   END;

   // controllo i valori impostati
   // in caso che fctrTime sia più piccolo di fplcTime genero un errore =3 ed esco

   IF ( fCtrTime <= fPlcTime ) THEN
      begin
      ntyperr := nERR_INVALIDCYCLETIME;
      exit;
   END;

   //se arrivo qui vuol dire che non ci sono stati errori
   //setto i cicli della modulazione PWM
   nPwmCycleTicks  := ValMAX( 1,( fCtrTime / fPlcTime ) );
   fPwmCycleTime  := nPwmCycleTicks * fPlcTime;

   // setto i flag interno
   bInit   := TRUE;

END;

// fine fase di inizializzazione

//resetto la variabile di errore
nTypErr := nERR_NOERROR;


//modulo di calcolo
nPwmActCycleTick := nPwmActCycleTick + 1;
IF ( nPwmActCycleTick >= nPwmCycleTicks ) THEN
   begin
   nPwmActCycleTick := 0;
   bNewPeriod   := TRUE;
   end
ELSE
   begin
   bNewPeriod   := FALSE;
END;


//Nuova modulazione uscita PWM
IF bNewPeriod THEN
   begin
   nPowerOnCycleTicks := ( nPwmCycleTicks * VALMIN( 100.0, VALMAX( 0.0, fPwmIn ) ) / 100.0 );
   nPowerOffCycleTicks := nPwmCycleTicks - nPowerOnCycleTicks;
END;


//scrivo l'uscita digitale per la modulazione PWM
IF ( nPwmActCycleTick < nPowerOnCycleTicks ) THEN
   begin
   bPwmOut := TRUE;
   end
ELSE
    begin
    bPwmOut := FALSE;
END;

//Fine modulo

END;



Ringraziano per il messaggio: baltimora

Si prega Accedi o Crea un account a partecipare alla conversazione.

  • baltimora
  • Avatar di baltimora Autore della discussione
  • Offline
  • New Member
  • New Member
Di più
8 Anni 7 Mesi fa #285 da baltimora
Risposta da baltimora al topic modulazione PWM
scusa del ritardo nel ringraziarti, ma sono stato impegnato a sistemare il codice

ci sono alcuni parti che non mi sono molto chiare ma dalle prove fatte sembra funzionare anche se non è precisissimo ma per quello che devo fare va più che bene
grazie

Si prega Accedi o Crea un account a partecipare alla conversazione.

Moderatori: papyroby
Tempo creazione pagina: 0.067 secondi

.

.