Controllando un motore DC molto piccolo con PWM?


8

Ho un motore DC molto piccolo (da un Walkman), vorrei controllare la velocità da un microcontrollore. Per questo vorrei collegare un MOSFET in serie e applicare un segnale PWM al suo gate per cambiare la velocità del motore.

Ho misurato L & R del motore = 4,7 mH, 11,5 Ohm (Tao 0,41 msec).

Dall'esecuzione di alcuni esperimenti con il motore utilizzando un alimentatore da banco, posso vedere che funziona bene da una tensione di 0,2 V fino a qualche punto intorno a 0,4 V - che è tutta la gamma che mi serve.

L'alimentatore che ho per questo è impostato su 1,8 V (usato per la parte digitale del circuito), quindi questo rende un po 'difficile usare MOSFET standard perché non posso fornire la tensione richiesta per la saturazione del gate. Ho comprato alcuni MOSFET a canale P come questo .

Quindi, anche se avrei pensato che questa configurazione avrebbe funzionato (Vcc -> motore -> FET -> GND) Non riesco a ottenere una buona risoluzione sul controllo e non riesco a ottenere la stessa coppia dal motore che ho usato per ottenere quando eseguito da un alimentatore CC.

Non sono sicuro di quale freq. Dovrei usare e non sono sicuro di quali altri parametri debbano essere controllati per far funzionare questo come previsto. Qualsiasi aiuto su questo sarà apprezzato.

* AGGIORNAMENTO * Dopo la risposta di Olin ho costruito il circuito che mi ha suggerito. Ho usato un transistor 2N3904, una resistenza da 180 Ohm in parallelo con un cappuccio da 4,7 nF. In allegato è la tensione del collettore quando si esegue dal codice PWM 100 (su 256). Vcc è 1,8 V.

inserisci qui la descrizione dell'immagine


1
perché non usare invece un BJT: è un piccolo motore e riceverai facilmente un segnale da 0,6 V per accenderlo.
JIm Dearden,

@JImDearden Ho provato alcuni 2N5088 che avevo in giro, ma la caduta di tensione attraverso il transistor era così grande che quasi nessuna tensione è stata applicata al motore, quindi ha solo canticchiato e non si è mosso.
user34920

1
Prova un transistor di commutazione come il 2N3904 con un resistore di base 1k. Inoltre avrai bisogno di un diodo flyback sul motore con così tanta induttanza e sovratensione. 1kHz dovrebbe andare bene per il PWM.
Jon,

Risposte:


8

La soluzione più semplice sarebbe quella di utilizzare un interruttore NPN lato basso:

Dici che la resistenza CC del motore è 11,5 Ω, quindi la corrente massima che può assorbire è 1,8 V / 11,5 Ω = 160 mA. In realtà il transistor consumerà qualche 100 mV abbassando la massima corrente possibile, quindi questo è un massimo sicuro su cui progettare. Figura che il transistor è buono per un guadagno di 50 minimo, quindi abbiamo bisogno di almeno 160 mA / 50 = 3,2 mA di corrente di base. 5 mA è quindi un buon obiettivo per assicurarsi che il transistor sia solidamente saturo quando acceso. Calcola che la caduta di BE sia di 700 mV, in modo da lasciare 1,1 V sul resistore quando acceso. 1,1 V / 5 mA = 220 Ω.

C1 è lì per accelerare l'accensione e lo spegnimento. (220 Ω) (4.7 nF) = 1 µs, che è la costante di tempo C1-R1.

La frequenza PWM dovrebbe essere abbastanza veloce in modo che la corrente attraverso il motore cambi poco ogni fase di accensione e spegnimento. L'ondulazione causata dal PWM è una tensione CA sovrapposta alla tensione CC media. Solo la tensione CC va a spostare il motore. Il componente CA non provoca coppia, solo calore, quindi si desidera mantenerlo basso rispetto al CC. Generalmente si azionano i motori un po 'al di sopra del limite dell'udito umano, che di solito è abbastanza veloce da mantenere piccolo il componente CA. A 25 kHz, ad esempio, il periodo PWM è di 40 µs, il che dovrebbe darti molta risoluzione da qualsiasi ragionevole periferica PWM in un microcontrollore.

Aggiunto in risposta alla traccia dell'ambito del raccoglitore

La forma base della forma d'onda sembra buona, quindi sembra che il transistor stia commutando correttamente e che la tensione sia applicata correttamente attraverso il motore.

I picchi allo spegnimento sono preoccupanti. Potrebbero essere artefatti dell'ambito, ma se la traccia dell'oscilloscopio è accurata, il diodo non funziona o non è collegato correttamente. I picchi non dovrebbero essere più di un volt o più al di sopra della fornitura.

D1 non solo impedisce al transistor di friggere, ma conserva gran parte della corrente del motore durante il tempo di spegnimento. Il primo è necessario e il secondo aumenta l'efficienza.

Aggiunto 2

Osservando più da vicino la traccia dell'oscilloscopio, vedo che la tensione del collettore quando il motore è spento è 2,48 V. Dici che l'alimentazione è 1,8 V, quindi la tensione di disattivazione è 680 mV sopra l'alimentazione. Ciò significa che non hai costruito il circuito come ho detto. Ovviamente hai usato un normale diodo al silicio, probabilmente uno lento come un 1N400x. Il tempo di accensione lenta del diodo spiega il picco di tensione e riduce leggermente i livelli complessivi di azionamento in uno specifico ciclo di lavoro PWM. Provocherà anche lo sparo per un momento in cui il transistor viene riacceso, poiché il diodo sta ancora conducendo. Un diodo Schottky avrà una caduta in avanti più bassa e un recupero inverso istantaneo nel contesto di questo circuito.

Il sistema dovrebbe comunque funzionare generalmente, ma prova con un diodo Schottky come ho specificato.


In realtà ho assemblato questo circuito proprio ora. PWM freq. è di circa 31 KHz. Ho usato un transistor 2N3904 con un resistore da 180 Ohm alla base e un cappuccio di accelerazione da 4,7 nF. Ho una risoluzione PWM a 8 bit dal mio MCU. A circa il codice 100 (su 256) vedo che il motore inizia a girare. Qualche idea su come aumentare la risoluzione? Forse aggiungendo qualche offset DC alla base? Vorrei anche sottolineare che i motori funzionano con il codice 100, tuttavia funziona un po 'più velocemente del min. velocità che richiedo. Non riesco ad abbassare il codice PWM poiché si fermerà.
user34920

grazie Olin per la bella risposta. vorresti approfondire la scelta di C1? Parli della costante di tempo, capisco che dovrebbe essere circa 1/10 del periodo di commutazione, ma mi aspetto che la dimensione C1 da sola dovrebbe avere importanza per il tempo di accensione / spegnimento poiché fornisce una carica "istantanea".
Vladimir Cravero,

1
@vlad: scaricare extra nella base all'accensione e risucchiare alcuni dei vettori liberi allo spegnimento sono entrambi eventi a breve termine. Probabilmente durano solo poche 100 ns dopo ogni fronte. Volete che la costante di tempo sia un po 'più lunga di quella, ma anche abbastanza corta in modo che il cappuccio "si reimposti" prima del bordo successivo. Sembravamo un buon compromesso, ma molti fattori possono essere difficili da prevedere. Comincerei con i valori mostrati, quindi guarderei le forme d'onda e, se necessario, mi adeguerei.
Olin Lathrop,

@utente: dai un'occhiata alla forma d'onda del collettore. Forse le cose non stanno accadendo come previsto. Cosa fa il motore con una tensione continua variabile? C'è una tensione dove inizia ma poi non va troppo veloce una volta che va?
Olin Lathrop,

@OlinLathrop Ho aggiunto una foto della forma d'onda del collettore (questa misura è presa attraverso il CE del transistor). Quando si utilizza un'alimentazione CC, il motore inizia a girare a 0,2 V e quella velocità è quella che vorrei almeno (circa 50-60 RPM).
user34920

0

Supponiamo che tu abbia esperienza di base con i microcontrollori e che tu possa costruire un circuito.

Il modo più semplice per guidare il motore è usare H-bridge, resistore di rilevamento corrente e PWM. Fondamentalmente H-bridge consentirà l'utilizzo di 3,3 V o 5 V, qualunque sia la più conveniente.

In effetti, a seconda dell'applicazione, è anche possibile saltare il controllo corrente, probabilmente non si causerà alcun danno anche se il motore verrà bloccato.

A proposito, hai bisogno di controllo della velocità o della posizione?

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.