Dente di sega a linea retta in Simulink


0

In LabVIEW è presente un componente chiamato "Modulo inverso". Viene utilizzato per eliminare il salto discontinuo che si verificherebbe quando l'encoder DAC dell'hardware raggiunge i limiti di questo intervallo. Rendendo quindi il segnale una linea retta.

Come posso implementare questo blocco in Simulink?

Risposte:


1

L'idea generale è di tenere traccia del valore di input precedente e confrontarlo con il valore di input corrente; la differenza è la modifica che deve essere applicata all'output. Hai anche una variabile persistente che contiene il valore di output corrente.

Durante il normale funzionamento, è sufficiente aggiungere il delta alla variabile di output. Ma se il delta è negativo e la sua grandezza è maggiore della metà dell'intervallo, ciò significa che l'ingresso si è "spostato" nella direzione positiva. Regola il delta aggiungendo l'intervallo ad esso, trasformando un grande valore negativo in un piccolo valore positivo. Allo stesso modo, se il delta è positivo e maggiore della metà dell'intervallo, tenta di spostarsi nella direzione negativa. Sottrai l'intervallo dal delta.

Non ho familiarità con la sintassi specifica utilizzata in Simulink, ma in C, sarebbe qualcosa del genere:

const unsigned range = 1024;

int unwrap (unsigned x)
{
   static unsigned prev_x = 0;
   static int output = 0;

   int delta = x - prev_x;
   if (delta < -range/2) delta += range;
   if (delta > range/2) delta -= range;
   return output += delta;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.