Qual è il modo più semplice per generare PWM senza un microcontrollore?


15

Qual è il modo veloce ed elegante per generare PWM senza un microcontrollore per controllare un servomotore? Con potenziometro o altri modi per controllare il duty cycle con periodo fisso.

  • scusa per il casino, voglio controllare un servo hobby.

Intendi davvero controllare un motore come parte di un sistema di controllo servo, o stai chiedendo di controllare un "servo hobby"? Vedi aggiunta alla mia risposta.
Olin Lathrop,

1
Perché vuoi PWM? PWM è spesso solo un modo per un micro di approssimare una funzione di controllo analogico. Se quello che vuoi davvero è una tensione o corrente analogica, probabilmente ci sono modi molto migliori per farlo.
The Photon,

2
@ThePhoton Se sta controllando un servo hobby, PWM è ciò che è richiesto come segnale di controllo.
Nick Johnson,

Se si elimina il requisito del periodo fisso, un oscillatore delta-sigma sarebbe una soluzione molto semplice. Ho visto implementazioni con un singolo opamp e una manciata di resistori / condensatori. Questo presuppone che tu non stia parlando di RC-servo.
jippie,

1
@jippie - Cos'è un oscillatore delta-sigma? So che un ADC delta-sigma ha bisogno di un oscillatore, ma ho sempre pensato che fosse una cosa comune, dal momento che non fa veramente parte del convertitore stesso.
Stevenvh,

Risposte:


25

Consiglio il timer (GASP!) 555 in modalità "astable" . Troverai tutto il necessario nel link, ma li ho copiati qui solo per te!

La modalità Astable offre una frequenza PWM variabile e consente anche un duty cycle regolabile (equazioni high-time e low-time nel collegamento).

Il circuito:

555 Timer, modalità astable

Nota: aggiungerei un cappuccio elettrolitico su Vcc (cavo positivo) e GND (cavo negativo) per ridurre l'effetto dei cali nella tensione di alimentazione.

La frequenza PWM:

Frequenza di uscita del timer 555 in modalità astable

Qualche difesa per la mia risposta rispetto ad altre in questo post. La maggior parte delle altre risposte richiede una forma d'onda intermedia per generare un segnale PWM variabile, ad esempio il metodo comune del triangolo a onda / comparatore. Non vedo molto senso costruire un generatore di onde triangolari (un circuito significativo in sé e per sé) proprio come un passo intermedio per risolvere il tuo problema.

Il 555 è un ottimo chip analogico e fa proprio quello di cui hai bisogno. Vorrei che le persone non li odiassero tanto.


2
Mi piacciono i 555, ma penso che @supercat abbia ragione nel fatto che un singolo 555 non sarà in grado di darti un segnale a frequenza fissa, con rapporto di servizio variabile. C viene caricato tramite R1 + R2 e scaricato attraverso R2. Se aumenti R2, aumenterai sia i tempi di accensione che di spegnimento, e quindi il periodo. Se aumenti R1, aumenti solo il tempo di attivazione, ma anche il periodo. Se aumenti C, aumenterai tutte le volte, incluso il periodo. Hai bisogno di due 555. Uno, in modalità astable, che determinerà il periodo, innescando un secondo, in modalità monostabile, che determinerà il duty ratio.
Telaclavo,

5
"Troverai tutto il necessario nel link". No. Questo non è il modo corretto di rispondere. Fornisci i dettagli qui.
Stevenvh,

1
Non odio il 555, vorrei solo che le persone non si riferissero a loro come la migliore soluzione per tutto . Un singolo 555 non è il modo migliore per controllare un servo hobby.
Stevenvh,

1
@Telaclavo - Hai ragione; non è possibile variare il ciclo di lavoro e mantenere costante la frequenza. Tuttavia, come menziona WoutervanOoijen, non è necessaria una frequenza rigidamente fissa per eseguire un servo. La variazione del ciclo di lavoro probabilmente crea una oscillazione del 10-20% (stima approssimativa) nella frequenza degli impulsi, che dovrebbe essere sufficientemente accurata per la maggior parte dei servi. E poi di nuovo, non è necessario regolare il ciclo di lavoro per controllare comunque un servo.
kevlar1818,

2
@stevenvh Fammi sapere quando Wikipedia muore. Anche se lo fa, come ha mostrato Dean con il suo commento sopra, il 555 è (era) così onnipresente che sarebbe difficile non trovare un vecchio libro, un piccolo blog o un sito Web di hobby con informazioni su di essi.
kevlar1818,

8

Il modo Ye Olde Phash accennato per creare PWM con duty cycle controllato analogico è di confrontare il segnale di controllo analogico con un'onda triangolare. Si crea un generatore di onde triangolari che funziona alla frequenza PWM desiderata. Questo viene inviato all'ingresso negativo di un comparatore e il segnale di controllo analogico all'ingresso positivo. Il risultato è full high o full low, ma il duty cycle è linearmente proporzionale al segnale di controllo. I primi amplificatori audio di classe D hanno lavorato su questo principio, ad esempio.

In molti casi il PWM non doveva essere super lineare, quindi l'onda triangolare non deve avere bordi perfettamente diritti. Consentire loro di essere un po 'esponenziali può semplificare il circuito.

Inserito il:

Mark Rages ha sottolineato che quando si dice "servomotore", ci si può riferire ai piccoli motori per hobby controllati dalla posizione utilizzati su aerei modello e simili. La mia risposta si applica al controllo di un motore supponendo che abbiate una tensione analogica proporzionale alla forza con cui volete guidare il motore. Non si applica a questi "servi per hobby". Quelli non sono controllati da PWM nel senso comune di quel termine, ma dalla larghezza degli impulsi che di solito devono essere ripetuti da 1 a 2 ms ogni 20-50 ms circa. Se questa domanda riguarda davvero i servi per hobby, allora dovrebbe essere risolto per chiarirlo.


Mentre questo compie il compito, è importante notare che @pstan vuole guidare un servo, e quindi avere un generatore di funzioni nella sua implementazione probabilmente non sarà molto portabile.
kevlar1818,

1
I cicli di lavoro del servomotore sono generalmente piuttosto bassi, come il 10% o meno. E il servo utilizza direttamente la larghezza degli impulsi, non il valore medio, quindi è meglio usare un circuito che disaccoppia la larghezza degli impulsi dalla frequenza di ripetizione.
segna

1
@kevlar: ho ricontrollato la mia risposta e ancora non vedo la menzione di un generatore di funzioni lì dentro. Tutto quello che ho detto è che hai bisogno di un'onda triangolare o qualcosa di abbastanza vicino. Certamente non è necessario un generatore di funzioni per crearne uno.
Olin Lathrop,

@Markrages: Eh? I motori vedono la media di un treno di impulsi se è abbastanza veloce. Alcuni 100 Hz sono abbastanza buoni in tal senso per la maggior parte dei motori. La parte servo è realizzata dallo schema di controllo, di cui l'OP non ha chiesto. Sembra che abbia già un livello analogico proporzionale alla forza del motore da guidare.
Olin Lathrop,

@Markrages: Mi è appena venuto in mente che stai parlando di servi per hobby, che vogliono un impulso di 1-2 ms ogni 20 ms circa? Il tuo commento ha un senso in questa luce, ma l'OP non ha menzionato affatto i servi per hobby.
Olin Lathrop,

7

Onda triangolare. Comparatore. Soglia di controllo. Questo è il modo di base per farlo.

PP

inserisci qui la descrizione dell'immagine

Innanzitutto genera un'onda quadra a 50Hz. Il modo più semplice:

inserisci qui la descrizione dell'immagine

Ω resistore da e un condensatore da 100nF ti daranno un periodo di 20ms.

REXTCEXT

T=REXT×CEXT

μΩ

ΩΩ slider.

Avrei potuto farlo con due LM555, ma avrei bisogno di più componenti esterni.

modifica (sui microcontrollori)
Concordo con Olin (vedi commenti) che escludere un microcontrollore è miope (Olin ha detto "sciocco"). C'è stato un tempo in cui lo sviluppo di un microcontrollore era complicato, ma oggi non è più vero. Puoi anche avere un'interfaccia di programmazione per pochi euro. La soluzione sembrerebbe così semplice che nessuna soluzione non controller può competere con essa: prendi un ATTiny5 (Olin prende un PIC10F220) in un SOT23-6. Collegare un condensatore di disaccoppiamento ai collegamenti di alimentazione e il potenziometro all'ingresso ADC. Questo è tutto! 3 (tre) componenti. La conversione della lettura ADC in un'uscita di larghezza di impulso è così facile che è quasi ridicola, anche per un programmatore principiante.

Una volta che inizi con loro, scoprirai che i microcontrollori spesso offrono una soluzione più semplice e flessibile rispetto ad altri circuiti integrati o componenti discreti.

una nota
Dalla tua altra domanda vedo che si fa uso microcontrollori. Perché vuoi evitarli qui?


Qual è il modo per ottenere un'onda triangolare?
m.,

1
@ m.Alin - Se vuoi un triangolo molto pulito, questo è il modo giusto. Ma l'ingresso dell'inverter nel mio oscillatore si avvicina anche a un triangolo, anche se le pendenze sono davvero esponenziali.
Stevenvh,

1
localmente parlando, 555 è più economico di 74HCT1G14 qui. +1 BTW. \
Standard Sandun

3
@stevenvh "Se vuoi un triangolo molto pulito questo è il modo giusto." Secondo la tua logica, questo è assolutamente inaccettabile. Includi questo nella tua risposta molto istruttiva e completa.
kevlar1818,

2
@pstan - Se le tue specifiche non sono troppo alte, probabilmente useresti il ​​circuito 555. È tutt'altro che perfetto: la frequenza varia con il ciclo di lavoro e il controllo non è lineare. Il generatore di triangoli + comparatore risolve questi inconvenienti.
Stevenvh,

4

Il modo più semplice per generare un segnale PWM è alimentare un'onda a dente di sega o un'onda triangolare in un ingresso di un comparatore analogico e una tensione di controllo nell'altro. Se non si riesce a ottenere un'onda triangolare pura, si può ragionevolmente approssimarne una facendo passare un'onda quadra attraverso un filtro RC in modo tale che l'uscita del filtro oscilli tra circa 1 / 4VDD e 3 / 4VDD, quindi ridimensionando la tensione di controllo andando nel comparatore in modo tale che una tensione di controllo che dovrebbe produrre un ciclo di lavoro dello 0,01% sarà tradotta nella tensione più bassa dell'onda quadra filtrata, e la tensione di controllo che dovrebbe produrre un ciclo di lavoro del 99,99% sarà tradotta nella tensione più alta del filtro onda quadra. Ciò produrrà una larghezza di impulso che non è abbastanza linearmente proporzionale all'ampiezza, ma è abbastanza vicina per molti scopi.


1
E questo è esattamente ciò che fa il circuito NE555 come proposto da kevlar1818 ...
Cees Meijer

2
@CeesMeijer: il poster ha richiesto un ciclo di lavoro variabile e un periodo fisso. Non conosco alcun modo per utilizzare un singolo 555 per convertire una tensione di controllo in un'onda di ciclo a frequenza variabile a frequenza fissa. Potrebbe servire molto bene per generare un'onda triangolare da alimentare in un comparatore.
supercat,

Sono passati 20 anni da quando ho costruito questo circuito, quindi ho dovuto cercare questo. E davvero hai ragione. Ho usato un trigger esterno per ottenere una frequenza costante. Tuttavia, potresti usare un secondo 555.
Cees Meijer,

2

Consiglio di utilizzare un IC di controllo dell'alimentazione a bassa tensione (BiCMOS) come UCC3803 . La frequenza operativa può essere facilmente impostata con una semplice R e C e il controllo del duty cycle può essere eseguito facilmente con un potenziometro. Funzionerà su una guida a 5V.

excerpt from TI UC3842 data sheet

UCC3803 è pin compatibile con i controller PWM serie UCx84x. Se vuoi fare PWM facile, puoi usare lo schema sopra, omettendo R1, il 2N2222 e il potenziometro ISENSE 5k (basta collegare il perno 3 a terra). Probabilmente puoi anche omettere i due resistori da 4.7k in serie con il pot di regolazione dell'amplificatore di errore e andare direttamente a Vref e Gnd, oppure utilizzare un partitore di tensione esplicito se la regolazione non è necessaria. (Non è stato specificato se è necessario modificare facilmente il ciclo di lavoro).

L'IC è in grado di guidare circa 1A di corrente. (Se il servomotore ha un ingresso PWM, questo è un punto controverso.)


"may need an external driver to actually power the motor". Are you sure? I always thought the PWM input is just a low-current signal level. For power a servo has a third connection.
stevenvh

Also, I just remember the duty cycle is only 5 to 10%. That can' be the proper way to supply power.
stevenvh

This is nice. But still counts lots of external components.
Standard Sandun

Looks more like an UEMIG: Unnecessary EMI Generator. :-(
stevenvh

It also seems to need a minimum 10V input. Maybe not the best choice...
stevenvh
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.