I motori interferiscono con il sensore ad ultrasuoni

Salve a tutti, sto avendo un problema con il sensore HCSR04 ad ultrasuoni collegato ai pin 4 e 7 della mia motor shield alla quale è collegato anche un servo (pwm 6) e due motoriduttori.

Il sensore dà buoni risultati se scrivo uno script che legge solo le misure, ma quando attivo i motori inizia a dare solamente 0cm e 1149 cm come risultati. Ho letto che questi numeri danno problemi a molti altri utenti, che però hanno semplicemente cambiato il pezzo. Ma il mio funziona se usato da solo!

Uso una UNO con motor shield, e la libreria Servo e NewPing.

Come posso risolvere?

E' sicuramente un problema di alimentazione: i disturbi e l'assorbimento dei motoriduttori alterano il livello dei 5V regolati dallo stabilizzatore interno di Arduino.

Se non vuoi/puoi alimentare a parte i motori (consigliabile), prova a mettere un condensatore elettrolitico da 470μF 25V sui morsetti Vin e Gnd della shield (rispettando le polarità).

Inoltre, ognuno dei due motoriduttori dovrebbero avere due condensatori ceramici da 100n saldati sullo chassis metallico e collegati ai due poli del motore oltre ad un terzo tra i due poli, con lo scopo di limitare i disturbi.

Allora, sto alimentando i motori con batterie per un totale di 7.5 volt collegata ai morsetti della motor shield (tu intendi di alimentarli collegando la batteria ad essi senza passare dalla motor shield quando dici "a parte", giusto?), e la arduino è comunque collegata via USB al computer. Inoltre avevo già messo i condensatori ai due poli per ogni motore, dovrei metterne ancora uno tra i due motori?

Quanto al condensatore elettrolitico, se lo trovo provo a metterlo, se no prima di comprarlo aspetto chiarimenti sulla alimentazione separata dei motori.

Grazie :slight_smile:

Intendi che adoperi 5 batterie alcaline (non ricaricabili) AA (stilo) da 1.5V collegate in serie?

Le batterie AAA (ministilo) non erogano sufficiente corrente e quelle ricaricabili NiMH da 1.2V forniscono solo 6V.

Per funzionare bene la motor shield necessita di almeno 7V con una capacità delle batterie adeguata ai motori da utilizzare: considera che hai motori arriva una tensione diminuita di almeno 1.2-2V.

Se è questo il problema, usa 6 batterie AA ed il condensatore elettrolitico può essere evitato.

Il condensatore sui due poli migliora la soppressione dei disturbi:

http://www.baronerosso.it/modellismo_articoli/show/412/filtri-antidisturbo-per-motori-elettrici.html

cyberhs:
Il condensatore sui due poli migliora la soppressione dei disturbi:
Filtri Antidisturbo per motori elettrici - Articoli di modellismo

Quello schema si può usare solo con controllo velocità analogico, come erano i vecchi ESC usati nel modellismo, con il controllo pwm non si deve assolutamente mettere i condensatori sul motore, pena la distruzione del H Bridge.

Astro, ti riferisci al solo condensatore intermedio od anche a quelli di by pass?

Sull'intermedio ho anche io delle perplessità, tuttavia 47nF mi sembrano pochi per compromettere l'integrità del ponte.

Ovviamente, mi rimetto alla tua esperienza.

cyberhs:
Astro, ti riferisci al solo condensatore intermedio od anche a quelli di by pass?

Tutti quanti, nel caso del pwm il motore deve essere collegato direttamente al ponte senza induttori/condensatori, sono ammesse solo delle VDR per la protezione contro extratensioni.
Purtroppo quella dei ponti H che esplodono, letteralmente, con i condensatori su i motori è una cosa che in passato è stata verificata da un amico del forum roboitalia, ha avuto una moria enorme di L298 durante lo sviluppo di un rasaerba robot, all'inizio non si capiva il motivo, poi ci siamo accorti che i motori utilizzati, erano gli E192 di micromotors, integravano, dentro il case, i condensatori, una volta eliminati gli L298 non sono più esplosi.
Da notare che Micromotors, ottimo produttore Italiano di motoriduttori, per gli E192 sono diversi anni che ha differenziato il prodotto con la versione WOC (WithOut Capacitors) per l'uso con il pwm.

Astro, sei un pozzo di esperienza! :slight_smile: C’è sempre da imparare da te.

In effetti, in un mio progetto che usava in PWM un motoriduttore DC da 24V 1.4A, mi sono stupito di non aver trovato condensatori di filtro e mi sono limitato ad inserire un TVS bidirezionale sul ponte H.

Perciò, ritornando al problema di Federico, se usi il PWM per variare la velocità dei motoriduttori, NON usare i condensatori: usali solo se ti limiti ad invertire la loro rotazione.

Resta il problema dell’alimentazione: attendo una tua risposta.

@Astro in passato aveva già accennato a questo problema e io nel frattempo mi sono documentato.
I motori generano disturbi e spesso causano problemi alla mcu o ai suoi sensori, per sopprimere tali disturbi si possono usare 1/2/3 condensatori e fin qui tutto ok.
Ora però entra in gioco il pwm, quando il transistor/MOSFET sono in on vedono il condensatore come una massa e riversano tantissima corrente questo può portare alla rottura del circuito che pilota il motore.
Questo però non è sempre vero, a 20khz e motore a 6v tale potenza è di soli 4mW e dunque non mette in crisi il driver.
Naturalmente alzando la tensione e/o la frequenza i watt crescono con devastanti conclusioni.
Ma non bisogna togliere il filtro, altrimenti ci ritroveremmo sempre con i disturbi, ma bisogna modificarlo. Detta in soldoni andrebbe aggiunta un'ulteriore induttanza prima dei condensatori che limiti la corrente assorbita dal condensatore, esistono anche altri metodi ma io non sono la persona più adatta a spiegarli.
Discorso diverso per gli esc, li non vanno mai e poi mai montati i condensatori.
Fonte 1
Fonte 2

vbextreme:
@Astro in passato aveva già accennato a questo problema e io nel frattempo mi sono documentato.

Prima di tutto, come la maggioranza delle persone che affrontano questo problema, pensi solo alla frequenza del pwm, ed è un grave errore perché non fa testo, quello che devi guardare è la ripidità dei fronti del PWM, già perché se metti un DSO sul motore non vedi una tensione continua, vedi un'onda quadra più o meno distorta.
Sono proprio i fronti del pwm che fanno passare correnti enormi su i condensatori, non certo la frequenza di carrier visto che che anche se lavori a 20 kHz la reattanza di un condensatore da 100 nF è circa 80 ohm, troppo alta per far scorrere correnti significative, però i fronti hanno una frequenza equivalente di molte centinaia di kHz, se non MHz, qui si che la reattanza crolla a pochi ohm con effetti devastanti sulla corrente.
Il filtraggio dei disturbi va fatto sul ponte H e non sul motore, se ci fai tutti i ponti fatti bene prevedono abbondanti condensatori sull'alimentazione, spesso abbinati a delle impedenze pere implementare un filtro a pi greco clc, proprio per eliminare i disturbi sull'alimentazione.
I condensatori montati tra elettrodi del motore e la cassa dello stesso servono per spegnere lo scintillio delle spazzole, e non per i disturbi sulla alimentazione, purtroppo queste si traducono una quantità elevata di emi che a breve distanza possono far impazzire un micro, esistono soluzioni alternative, molto più efficienti dei condensatori, che sono l'utilizzo delle VDR e appropriate schermature sulla cassa del motore, probabilmente avrei notato che su molti motori dc c'è un anello metallico regolabile, il suo scopo è schermare le emi.
Poi c'è da anche da prendere in considerazione il tipo di controllo del motore, se è a due quadranti, PWM in modo S/M, oppure a quattro quadranti, PWM in modo LAP.
Il modo LAP è da preferire se serve un controllo preciso del motore, con tanto di frenatura elettrica, e genera molti meno disturbi sulla alimentazione perché i poli del motore sono sempre alimentati, invece di essere alimentati solo per una parte del PWM come avviene nel modo S/M.
Il discorso è abbastanza complesso e non posso riassumere il contenuto di diversi testi, per un totale di molte migliaia di pagine, che parlano del controllo motori DC in poche righe di un post un forum. :slight_smile:
Attenzione che stiamo parlando di motori DC, con quelli AC il discorso è molto diverso, a partire dai metodi di controllo.
Qualche anno fa, sul vecchio forum Arduino, avevo postato le misure fatte col DSO su un ponte L298 utilizzato in modo S/M (da evitare assolutamente) e in modo LAP (ottimale per il 29x), con e senza condensatori sui motori, si vedevano benissimo i picchi di corrente in corrispondenza dei fronti.

@Astro io in elettronica non sono una cima, ma una cosa l'ho capita, il motore con tutto quello che lo circonda è come un trasmettitore RF e i disturbi si propagano ovunque perfino in aria (nel TV come dal link).
Bisogna in qualche modo sopprimerli.

Per spiegare quello che intendo:
Avevo fatto una scheda con un Servo un sensore di temperatura e un motore, preso dalla fretta ho collegato il tutto pari pari senza aggiungere niente ma il risultato fu pessimo, l'unica cosa che andava era il motore, il servo sembrava posseduto in una stanza con sbalzi di temperatura di 100° in qualche ms.
Ho così montato il famoso filtro a 3 condensatori sul motore e magicamente inziava a funzionare discretamente, il servo non impazziva quasi piu e il sensore di temperarura sembrava andare benone.
ho così aggiunto un filtro al sensore di temperatura e finalmente avevo pochissimi valori errati ma il servo sporadicamente si muoveva di qualche grado, ho inserito pure lì un filtro e finalmente tutto ha iniziato a funzionare correttamente.
Da questa mia esperienza ho dedotto che i filtri vanno ovunque, naturalmente quando servono.

Indi per cui io consiglio a tutti di montare i filtri ma di farlo con cognizione di causa.
Per i meno esperti ci sono siti come adafruit che spiegano bene come quando e perché.
Quindi scaricare il datasheet ed informarsi bene come è meglio collegarli.

vbextreme:
@Astro io in elettronica non sono una cima, ma una cosa l'ho capita, il motore con tutto quello che lo circonda è come un trasmettitore RF e i disturbi si propagano ovunque perfino in aria (nel TV come dal link).
Bisogna in qualche modo sopprimerli.

Che i disturbi vanno soppressi quanto possibile è fuori discussione, però non si fa con i condensatori su i motori DC in caso di azionamento PWM.
Tra parentesi su i ponti H si devono usare diodi di ricircolo molto veloci, non più di qualche ns, proprio perché oltre ad evitare la distruzione dei transistor/mos, servono anche per ridurre il rumore, se necessario si aggiunge uno snubber, che è un filtro RC, che permette di spegnere quasi completamente il rumore residuo.
Per lo scintillio, che è la causa principale dei disturbi emi, ci sono varie contromisure, però il solo modo per eliminare completamente il problema è la schermatura, fatta come si deve, del motore, tutto il resto sono solo palliativi.
Tanto per fare riferimento al caso degli E192 di Micromotors, sono gli unici motori che producono con i condensatori di serie integrati nel case, ecco il link ad uno dei rivenditori ufficiali dove puoi chiaramente leggere che per le applicazioni con controllo PWM devi ordinare la versione WOC, quella senza condensatori.
Se un produttore ha lo stesso motore in due versioni, una specifica per il PWM senza condensatori, questo dovrebbe farti riflettere non poco su quanto detto finora.

@Astro come sempre generalizzare è una cattiva cosa.
Frequenza, Potenza e molto altro per vagliare il corretto settaggio.
Ma per me, come per molti altri(vedi link) non è una regola PWM no Condensatori su motore.
Nel motore che hai linkato da 12v e quasi 2A penso che se pilotato ad alte frequenze allora solo i condensatori potrebbero effettivamente mettere fuori uso il driver, come specificato nei link, ecco perché vengono aggiunte induttanze ( nonostante il motore lo sia già), un'altro condensatore e anche un diodo ( anche se già presente sul driver).

Praticamente stiamo dicendo quasi la stessa cosa, ovvero che solo con i condensatori, un motore grosso può rompere il driver, bisogna quindi farne uno come si deve perché altrimenti è meglio non metterlo.

Va poi valutato caso per caso.

vbextreme:
@Astro come sempre generalizzare è una cattiva cosa.

Io non generalizzo nulla, su tutti i motori DC, non importa la tensione o la potenza, con il controllo PWM non si devono mettere i condensatori, punto e basta, non lo dico io, lo dicono tutti i testi, seri, che trattano il controllo dei motori DC.
Tutto il resto è solo fuffa se non supportato da documentazione tecnica, quella vera non i video su youtube o la paginetta web presa a caso, con relative dimostrazioni matematiche e misure reali.
Come ti ho già detto diversi anni fa, sulla vecchia versione di questo forum, in una discussione simile postai misure dirette fatte con gli L298 e piccoli motori DC da 12V 1A, misure che dimostravano ampiamente come la presenza dei condensatori crea notevoli picchi di corrente su i fronti di commutazione del pwm.
Non ho tenuto il link alla discussione, il vecchio forum è disponibile solo in lettura e senza ricerca, però se riesco a ritrovare la discussione posto il link, forse da qualche parte ho ancora gli screenshot DSO delle misure fatte, devo cercarli.

Allora, a proposito della questione dei condensatori, provvederò subito a toglierli, in quanto ho capito che danneggiano il ponte H. (scusate ma non ho grosse conoscenze di elettronica e quindi non riesco a seguire i vostri discorsi)

Invece @cyberhs
Io utilizzo 5 batterie AA (1.5 V) collegate in serie, quindi dovrebbero fornire corrente e tensione a sufficienza per i motori, o sbaglio? (In realtà nello chassis che ho comprato era già integrato questo portabatterie quindi teoricamente dovrebbe essere a posto, o non avevano calcolato la perdita di tensione?)

Invece a proposito dell'interferenza con il sensore, credi che con il condensatore elettrolitico possa risolvere o devo cambiare l'alimentazione?
Potrei attaccare ai morsetti uno di quei caricabatterie da cellulari con la corrente giusta?

Grazie :slight_smile:

Federico, le 5 pile forniscono 7.5V che sono sufficienti per il tuoi motori, ma quasi al limite per il regolatore interno ad Arduino: quando i motori si attivano, si ha una caduta di tensione che potrebbe compromettere il buon funzionamento dello stesso (minimo 7V).

Ecco perché ti ho consigliato di usare un condensatore (anche se è un palliativo), mentre 6 pile (9V) fornirebbero una tensione maggiore.

Puoi provare prima con un alimentatore da 9V 1A o 2A (non quelli da cellulari che erogano 5V e forse 1A o meno).

Ok, inizio a provare con il condensatore. In caso non bastasse vado a comprare un alimentatore da 9V perchè in casa non ce l'ho.

Grazie per l'aiuto, se ho ulteriori problemi mi farò risentire perchè trovo questo forum molto utile :slight_smile: