Da un cliente ci perviene la richiesta di realizzare un blocco funzione per la generazione di una onda sinusoidale, approfitto della richiesta per aprire un topic che tratta l’intero argomento della generazione di onde di vario genere.
Iniziamo con la richiesta pervenuta, per generare un’onda sinusoidale si utilizza la funzione SIN che ritorna il seno di un angolo virtuale che varia da 0 a 2*Pigreco radianti, di seguito le due formule utilizzate per il calcolo dell’angolo e per il calcolo del valore in uscita.
Angle:=(6.28318*TO_REAL(TimePsd))/Period; (* Omega vector angle (Rad) *)
Out:=SIN(Angle)*Amplitude;
Allego il progetto completo con la FB SineWaveGenerator che eseguita in un programma FBD nella task Fast genera in uscita l’onda sinusoidale. Ecco come si presenta il valore in uscita visualizzato nella utility oscilloscopio di LogicLab (Screenshot).
Ricordo che il campionamento dell’oscilloscopio è molto lento essendo eseguito in modbus e quindi se si definisce una frequenza elevata si vedrà una pessima forma d’onda, il modo migliore per valutare l’onda in uscita è di inviarla ad un convertitore D/A ed acquisire il valore con un oscilloscopio reale. Programma generatore onde sinusoidali, stampa e programma sorgente.