Go Down

Topic: Espandere uscite pwm di arduino (Read 2832 times) previous topic - next topic

ultrasound91

Nov 13, 2014, 03:52 pm Last Edit: Nov 13, 2014, 03:52 pm by ultrasound91
Salve, ho la necessità di alimentare dei carichi induttivi in pwm.
Però le uscite di arduino uno sono soltanto sei, quindi mi chiedevo con quale circuito potrei espanderle.
Ho il TLC5940, che ha 16 uscite e permette su ognuna di regolare il duty cycle su 4096 livelli, quindi molti più dei 256 previsti da arduino. Però non saprei cosa fare per agire anche sulla frequenza.

Martinix

il pwm disolito non varia la frequenza, per vari motivi si lascia fissa! e appunto si faria il duty cicle!
Le informazioni date, son suggerimenti, osservazioni, ma come le applicate è a vostro rischio e pericolo!

cyberhs


ultrasound91

Ho trovato qualche libreria che mi permette di variare la frequenza.
In pratica il circuito in questione ha un pin di ingresso che si collega a un'uscita pwm di arduino per seguire la frequenza. Adesso comunque studio meglio.
Ci sono motorini che vanno comandati a frequenze specifiche per funzionare meglio.
Inoltre quelli che sto usando io emettono uno strano suono nella fascia udibile (2000-20000 Hertz)
e quindi devo pilotarli a 32000 HZ, a questa frequenza non emettono strani suoni e funzionano perfettamente.

ultrasound91

Il problema non è stato risolto. Faccio il punto della situazione.
Arduino uno ha 6 uscite pwm che funzionano perfettamente, inoltre dispongono di un ampio range
di frequenze, fino a 32 khz. 6 uscite però sono poche, quindi mi serve un circuito di espansione,
che supporti lo stesso range di frequenze.
Il TLC5940 l'ho provato, può supportare al massimo 3,9 Khz. Il problema è che alle frequenze nella fascia udibile i carichi emettono un fischio. Questo problema lo hanno riscontrato anche altri utenti in vari forum, che hanno tentato di comandare ventole, motorini, lampande a led. E' sufficiente che la frequenza superi i 20 khz. Spero che qualcuno mi aiuti, indicandomi un circuito integrato adatto.
Inoltre, sempre evidenziando il TLC5940, che lo comando con un Atmega328, non c'è il rischio che le correnti induttive generate dai carichi danneggino gli integrati? Non è necessario introdurre transistor e diodi?

leo72

Veramente le uscite PWM di Arduino possono arrivare a frequenze molto maggiori di 32 KHz. Basta riprogrammare i timer. Se tocchi il timer 0, ti saltano le funzioni temporali millis e delay, ma gli altri 2, se non li usi per tuoi scopi, puoi impostarli come ti pare.
Inoltre nulla ti vieta di utilizzare un'unica uscita con cui pilotare, tramite apposito circuito driver, più di un attuatore, a meno di non voler per ogni uscita uno schema di azionamento differente. In questo caso potresti pensare ad inserire nel circuito altre MCU più piccole, tipo dei Tiny84 (che hanno 4 uscite PWM) o dei Tiny85 (3 uscite PWM) e pilotare le cose in modo indiretto gestendo tutto dalla MCU principale (via seriale). In questo modo puoi regolare le frequenze come vuoi.

Quote
Inoltre, sempre evidenziando il TLC5940, che lo comando con un Atmega328, non c'è il rischio che le correnti induttive generate dai carichi danneggino gli integrati? Non è necessario introdurre transistor e diodi?
Questo dipende dai carichi che devi pilotare, non dal driver. Se i carichi sono induttivi, devi prevedere un diodo in antiparallelo, ma vale sia se piloti il carico dalla MCU come dal driver.

ultrasound91

La soluzione di inserire dei microcontrollori mi era già passata per la testa, ma non mi sembra la migliore, perchè mi sembrano un pò sprecati per usarli solo come generatori pwm, a me in questo momento basterebbe un equivalente del TCL5940 con un più ampio range di frequenze.
Ogni carico comunque deve avere stessa frequenza ma duty cycle diverso.
Comunque in rete ho trovato questo: http://www.elcojacobs.com/shiftpwm/. Adesso lo studio e vedo se fà al caso mio.

ultrasound91

L'altra idea che mi è venuta in mente è questa: uso l'uscita pwm di arduino per alimentare i carichi.
I negativi dei carichi li collego ad un array di transistor e quest'ultimo ad uno shif register. Con arduino comando lo shift register in modo che venga decida quali carichi alimentare e quali no.

ultrasound91

Sono riuscito ad ottenere quello che volevo. Uso un'uscita di arduino (la 11) per alimentare i carichi mediante un segnale pwm della frequenza e duty cycle desiderati, e decido quale carico deve essere alimentato mediante la combinazione shift register + array di transistor.

brunello22

ok, pero' non puoi gestire due carichi contemporaneamente con PWM diversi.

ultrasound91

Si confermo, i carichi collegati alla stesso pin di arduino avranno lo stesso pwm.
L'altro limite è che l'ampiezza massima sarà di 40 mA.

Go Up