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.
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.
Risposte:
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:
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:
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.
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.
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.
Onda triangolare. Comparatore. Soglia di controllo. Questo è il modo di base per farlo.
Innanzitutto genera un'onda quadra a 50Hz. Il modo più semplice:
resistore da e un condensatore da 100nF ti daranno un periodo di 20ms.
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?
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.
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.
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.)