Example code 09

Dependencies:   mbed

Il controllo della velocità di rotazione di un motore in continua

Il controllo della velocità di rotazione di un motore in continua può essere realizzato sostanzialmente in quattro modi:

1) Utilizzando ingranaggi meccanici per raggiungere la velocità desiderata. Questo comporta, a meno di poter variare i rapporti degli ingranaggi, una velocità fissa e ciò generalmente va oltre le possibilità di chi vuole realizzare piccoli manufatti.

2) Variando la tensione applicata al motore disponendo in serie dei resistori. Questo comporta che incrementando il carico del motore aumenta anche la corrente nei resistori e quindi l'energia che andrà dissipata sotto forma di calore (I^2R). Più corrente significa maggiore caduta di tensione sui resistori e quindi meno tensione ai poli del motore.

3) Utilizzando un transistor che continuamente vari la tensione ai poli del motore. Questo meccanismo funziona bene, anche se un sostanzioso ammontare di calore viene dissipato nel transistor.

4) Applicando la piena tensione sotto forma di un treno di impulsi, eliminando cosi cadute di tensione nelle resistenze in serie. Questo treno di impulsi e' chiamato Pulse With Modulation (PWM).

Pulse With Modulation

Si tratta di un metodo molto efficiente di fornire frazioni di potenza elettrica intermedi tra il sempre acceso ed il sempre spento. Il vantaggio principale del PWM rispetto ad un controllo resistivo e' l'efficienza.

Regolando il duty cycle del segnale (modulazione della larghezza dell'impulso, da cui il " PWM " ) ovvero la frazione di tempo in cui è "on", la potenza media può essere variata, e quindi la velocità del motore. Si tratta di una tecnica di controllo in cui l'alimentazione al motore viene accesa e spenta rapidamente, a frequenza abbastanza elevata, tale che gli effetti della commutazione possono essere trascurati. La tensione efficace risultante è quindi la frazione mediata nel tempo in cui il segnale e' on. Questa tecnica è utilizzata anche in molte altre applicazioni.

/media/uploads/perlatecnica/dutycycle50-.png

Nella figura 1 sulla sinistra viene mostrato il segnale PWM con un duty cycle del 50%, mentre sulla destra viene mostrato l'effetto percepito dal motore.

l segnale viene acceso e spento con un dato periodo ed è in stato "on" a tensione VON per una frazione fissa del periodo . Questo tempo viene indicato come il " duty cycle " e viene indicato cone una percentuale, calcolata come :

/media/uploads/perlatecnica/dutycycleformula.png

Modificando il duty cycle di un segnale PWM cambia la media, o il livello di tensione percepito. Per esempio, la regolazione del duty cycle illustrato in figura (2) in modo che sia in stato "on" per l'80 % del periodo, cambierà la percezione come quella mostrata a destra in figura(2). Aumentando il duty cycle al 80 % , la tensione percepita aumenta al 80 % di VON .

/media/uploads/perlatecnica/dutycycle80-.png

Se il segnale PWM è implementato con una frequenza troppo bassa, il risultato sarà un movimento a scatti del motore poiché gli effetti della commutazione non sono più trascurabili. Invece, il risultato desiderato è quello di approssimare il segnale alla "tensione percepita" più fedelmente possibile con un minimo di ripple percepibile. Quando si controlla il magnete permanente di un motore DC con spazzole con PWM, il filtraggio viene eseguito in modo molto efficace dall'inerzia fisica del sistema meccanico. Per applicazioni diverse dal controllare la velocità di un DC, circuiti di filtraggio possono essere utilizzati per rispondere alla richiesta smoothing dell'uscita PWM. Nel caso estremo in cui viene scelto, un periodo molto lungo rispetto alla costante di tempo meccanica, il motore tenderà ad avviarsi ed a fermarsi. Nel caso ad esempio di periodo di PWM pari 2sec (che è una frequenza PWM 0,5 Hz): il motore quasi certamente accelera e decelera sensibilmente durante ogni periodo. Questo è un indesiderabile "ripple di coppia", che diventerà molto meno evidente a frequenze superiori Di solito, per il controllo dei motori DC, le frequenze PWM variano nella gamma di 100Hz a 1000Hz. In generale possiamo dire che frequenze superiori provocano certamente meno ripple, ma che comunque la dinamica del motore non gli consente di seguire le variazioni del segnale di tensione in ingresso.

main.cpp

Committer:
MikGa87
Date:
2016-11-21
Revision:
4:b69c993bb0e7
Parent:
3:aecdaed3e772

File content as of revision 4:b69c993bb0e7:

/****************************************************
*            FAST PROTOTYPING WITH NUCLEO           *
* Example Code 09: DC motor control                 *
* Author: Mauro D'Angelo                            *
* Organization: Perlatecnica no-profit organization *  
*****************************************************/
#include "mbed.h"

#define PWMB PA_7
#define DIRB PA_5

#define PWMA PB_3
#define DIRA PA_6

// Instanzia un oggetto di tipo PwmOut  e gli da il nome mypwm
PwmOut mypwm(PWMB);
// Definisce il pin che indica la direzione
PwmOut mypwm2(DIRB);

// Instanzia un oggetto di tipo DigitalOut sul pin LED1 e gli da il nome myled
DigitalOut myled(LED1);

// Instanzia un oggetto di tipo Serial sui pin Tx e Rx della porta USB e gli da il nome pc (trattandosi della porta USB connessa al PC)
Serial pc(USBTX, USBRX);

// Entry point
int main() {
    //motordir = 1;
    
    //Set pwm signal period: The period needed to control the motor in the servo datasheet
    mypwm.period_ms(10); 
    mypwm.pulsewidth(0.01); // 100%
    //mypwm.pulsewidth(0.005); // 50%
    //mypwm.pulsewidth(0.002); // 20%
  
    while(1) {;}
}