Come creare un Pulse Width Modulation (PWM) in un modulo Verilog per l'esecuzione di un motore / Servo

April 3

Come creare un Pulse Width Modulation (PWM) in un modulo Verilog per l'esecuzione di un motore / Servo


Una modulazione di larghezza di impulso è un modo per controllare la rotazione o la posizione di un motore elettrico o servo.

Utilizzando Verilog HDL, vi mostrerò come è facile da usare contatori in modo da creare un PWM.

istruzione

1 Allora, come funziona un PWM?

Avere un segnale rettangolare di periodico, cambiamo il ciclo di lavoro (modulare) per essere più piccolo o più grande, e quindi controllare il nostro dispositivo.

Perché usare un PWM?

Si tratta di un semplice digitale tecnica di conversione analogico che non richiede un ADC.

2 Come creare un Pulse Width Modulation (PWM) in un modulo Verilog per l'esecuzione di un motore / Servo


Ok, così lascia pensare che cosa ingressi, uscite, registri e contatori che avranno bisogno, e che il design vogliamo creare.

Voglio usare gli otto interruttori sulla scheda FPGA Spartan per controllare come il mio motore / servo si muove o quanto veloce o lento che voglio di muoversi.

Ingressi: orologio, 8 interruttori
Uscite PWM
Registri: pwm
Contatori: contatore a 16 bit (spiegheranno il motivo per cui 16 bit più avanti)

3 Come creare un Pulse Width Modulation (PWM) in un modulo Verilog per l'esecuzione di un motore / Servo


Sapere cosa è la velocità di clock del vostro FPGA e quale periodo che si desidera utilizzare.

Ho una scheda FPGA Spartan con un orologio 50MHz. Vorrei aggiornare il segnale ogni 1 millisecondo (t). Noi applichiamo il seguente calcolo per trovare il periodo di forma d'onda (p)

p = t * FPGA clock

Nel mio caso:

p = .001 seconds * 50MHz = 50000

Conoscendo il mio p è importante al fine di calcolare il mio ritardo passo (sd):

sd = p / 256 = 195

Perché ho usato 256? Userò 8 interruttori per controllare il mio servo / motore, in modo 2 ^ 8 = 256.

4 Come creare un Pulse Width Modulation (PWM) in un modulo Verilog per l'esecuzione di un motore / Servo


Infine vogliamo usare il nostro contatore come il nostro ciclo di lavoro. Per calcolare il numero di bit che compongono il nostro contatore usiamo:

log2 (sd) = il numero di bit è il nostro contatore

Mentre il contatore è inferiore a sd (ritardo step) moltiplicato per il valore interruttori (che può variare da 0 a 255), questo è il nostro duty cycle.

Consigli e avvertenze

  • Quando si crea il contatore registro è necessario avere inizializzato a zero altrimenti il ​​programma non funzionerà.