Ricerca…


Controllare un motore CC attraverso la porta seriale usando PWM

In questo esempio miriamo a realizzare uno dei compiti più comuni: ho un piccolo motore DC in giro, come posso usare il mio Arduino per controllarlo? Facile, con PWM e comunicazione seriale, utilizzando la funzione analogWrite() e la libreria Serial .

Le basi

Pulse Width Modulation o PWM in breve è una tecnica per imitare i segnali analogici usando l'uscita digitale. Come funziona? Utilizzando un treno di impulsi la cui relazione D (duty cycle) tra il tempo ad alto livello (digitale 1, solitamente 5V) e il tempo a basso livello (digitale 0, 0V) in ciascun periodo può essere modificato per produrre una tensione media tra questi due livelli:

inserisci la descrizione dell'immagine qui

Usando la funzione analogWrite(pin,value) Arduino possiamo variare il value del ciclo di lavoro dell'output del pin . Si noti che il pin deve essere messo in modalità output e il value deve essere compreso tra 0 (0V) e 255 (5V). Qualsiasi valore intermedio simulerà un'uscita analogica intermedia proporzionale.

Tuttavia, lo scopo dei segnali analogici è in genere correlato al controllo di sistemi meccanici che richiedono più tensione e corrente rispetto alla sola scheda Arduino. In questo esempio, impareremo come amplificare le funzionalità PWM di Arduino.

Per questo viene utilizzato un diodo MOSFET. In sostanza, questo diodo funge da interruttore. Permette o interrompe il flusso elettrico tra i suoi terminali di source e drain . Ma invece di un interruttore meccanico, presenta un terzo terminale chiamato gate . Una corrente molto piccola (<1mA) "aprirà" questo gate e permetterà alla corrente di fluire. Questo è molto conveniente, perché possiamo inviare l'uscita PWM di Arduino a questo gate, creando così un altro treno di impulsi PWM con lo stesso ciclo di lavoro attraverso il MOSFET, che consente tensioni e correnti che potrebbero distruggere l'Arduino.

Distinta base: di cosa hai bisogno per costruire questo esempio

  • Diodo MOSFET: ad esempio, il popolare BUZ11
  • Diodo di protezione per il motore: Schottky SB320
  • Resistenza: qualsiasi cosa 10K ~ 1M Ohm
  • Motore: un tipico piccolo motore (uno tipico può essere 12V)
  • Una fonte di alimentazione compatibile con il motore che hai selezionato
  • Una breadboard
  • Cavi colorati!
  • Un Arduino, ma lo sapevi già.

La build

Metti tutto insieme! Alimentare i binari della breadboard e posizionare il diodo MOSFET in esso. Collegare il motore tra la guida positiva e lo scarico MOSFET. Collegare il diodo di protezione allo stesso modo: tra lo scarico MOSFET e la guida positiva. Collegare la sorgente del MOSFET alla sbarra di terra comune. Infine, collega il pin PWM (stiamo usando il pin 10 in questo esempio) al gate del MOSFET e anche alla massa comune attraverso il resistore (abbiamo bisogno di una corrente molto bassa!).

Ecco un esempio di come appare questa build. Se preferisci uno schema, eccone uno.

Schema fisico

Il codice

Ora possiamo connettere l'Arduino a un computer, caricare il codice e controllare il motore, inviando i valori attraverso la comunicazione seriale. Ricorda che questi valori devono essere numeri interi tra 0 e 255. Il codice reale di questo esempio è molto semplice. Una spiegazione è fornita in ogni riga.

int in = 0;                   // Variable to store the desired value
byte pinOut = 10;             // PWM output pin

void setup() {                // This executes once
  Serial.begin(9600);             // Initialize serial port
  pinMode(pinOut, OUTPUT);        // Prepare output pin
}

void loop() {                 // This loops continuously
  if(Serial.available()){         // Check if there's data
    in = Serial.read();           // Read said data into the variable "in"
    analogWrite(pinOut, in);      // Pass the value of "in" to the pin
  }
}

E questo è tutto! Ora è possibile utilizzare le funzionalità PWM di Arduino per controllare le applicazioni che richiedono segnali analogici anche quando i requisiti di alimentazione superano i limiti della scheda.

PWM con un TLC5940

Il TLC5940 è un utile oggetto da avere quando si esauriscono le porte PWM su Arduino. Dispone di 16 canali, ciascuno controllabile individualmente con 12 bit di risoluzione (0-4095). Una libreria esistente è disponibile su http://playground.arduino.cc/Learning/TLC5940 . È utile per controllare più servi o LED RGB. Basta tenere a mente, i LED devono essere anodo comune per funzionare. Inoltre, i chip sono collegabili a margherita, consentendo un numero ancora maggiore di porte PWM.

Esempio:

// Include the library
#include <Tlc5940.h>

void setup() {
    // Initialize
    Tlc.init();
    Tlc.clear(); 
}

unsigned int level = 0;
void loop() {
    // Set all 16 outputs to same value
    for (int i = 0; i < 16; i++) {
        Tlc.set(i, level);
    }
    level = (level + 1) % 4096;
    // Tell the library to send the values to the chip
    Tlc.update();
    delay(10);
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow