Atmega328 in blocco con motore DC

Ragazzi ho questo problema che non riesco proprio a capire, spero di essere esauriente.
Ho realizzato un piccolo circuito con un atmega328 che deve pilotare un motore dc in PWM che assorbe circa 2A e 2 Servo Motori Sg90
Sto usando un 7805CV per l'atmega328 e un IRLZ44N per comandare il motore, il gate di questo è pilotato dal pin arduino.
I servo motori hanno il collegamento essenziale massa Vcc e relativi pin PWM
Il problema è che appena parte il motore mi manda in blocco l'atmega, tutto funziona perfettamente con motorini ad assorbimento inferiore.
Premetto che il motorino si alimenta direttamente dalla lipo a 7.4V, l'atmega si alimenta dal 7805 che a sua volta è collegato alla lipo.

Dopo varie prove e semplificando i passaggi mi sono accorto che:

Al mio circuito lascio collegato il solo motorino, inoltre, sempre da mio circuito, alimento la board arduino (scollegata dalla USB)
il circuito procede bene, appena scollego la scheda arduino il circuito si blocca.
Inoltre se oltre al motorino collego i Servo, sia con arduino collegato che non ,il circuito torna a non funzionare,
se stacco questo motore, il circuito riprende a funzionare anche senza arduino collegato.

Deduco che sia una questione di filtri tra alimentazione e massa e correnti di spunto o inverse del motorino e servo motori.
Che prove posso fare, sono ad un punto morto.

Attacca Arduino, stacca Arduino...... mica ci ho capito qualcosa
Non è che hai uno schema dei collegamenti o qualche foto ?
Condensatori elettrolitici ne hai usati ?

Lo schema è quello in basso.
In effetti non saprei come spiegare, forse il nervoso.
Vado per passi, un problmea alla volta.
Ho realizzato un circuito su pcb con un'Atmega328. A questo circuito ci sono due servo motori ed un motore brushed. Il motore brushed ha già incorporato una sua schedina di filtraggio.
Ora il mio circuito lo sto testando con il solo motore brushed.
Appena alimento il mio circuito il motore parte a palla per un secondo e poi si blocca tutto.
Ora, per caso, mi sono accorto che se col mio pcb alimento anche la board di arduino (come se fosse un carico), il motore brushed non da problemi.

Secondo problema, se con questa configurazione ovvero, pcb+board arduino+motore brushed, ci collego anche i due servo motori, ho lo stesso identico problema di prima, ovvero, il motore parte a palla per un secondo e poi di nuovo tutto bloccato.

Non hai detto che capacità ha la LiPo.
Comunque, visto che codesto motore nello spunto assorbe molto di piu' dei dati di targa, pare appunto un problema di alimentazione e codesti valori di capacità che hai usato sono troppo piccoli per ovviare a un problema del genere.
Ti ricordo che i condensatori tra l'altro servono come serbatoio di energia supplementare, energia che serve a coprire ( per tempi brevissimi ) i picchi di consumo.
c'era una regola non scritta che diceva ( nella costruzione di un alimentatore ) 1000µF ogni Amper di assorbimento.
Non dico di arivare a tanto, ma vanno discretamente aumentati sia quello in ingresso al regolatore ( in parallelo alla batteria ) sia quello in uscita.
va' anche visto come sono settati i fuse del BOD sull' ATMEGA

La corrente di spunto del motore c'entra molto infatti, sto facendo delle prove e vedo che l'intensità di un led che ho inserito tra alimentazione e massa scende e quando risale il circuito è ormai bloccato.
La capacità della lipo è di 1Ah.
Non riesco a capire il legame con la board di arduino.
Riguardo i fuse del BOD ATMEGA, sinceramente non li ho mai considerati.
In genere io carico lo sketch e uso i pin che mi servono

La tensione della batteria si abbassa perché il motore chiede troppa corrente per quella batteria. La tensione bassa é troppo bassa per far funzionare il ATmega e quello si blocca.

Ciao Uwe

Ho sostuituito i condensatori elettrolitici con condensatori da 470uF, il tutto è alimentato ora con un alimentatore in grado di fornire la corrente che serve.
Funziona tutto alla perfezione, quindi grazie Brunello, ma ora, appena raggiungo il massimo dei giri,
si spegne tutto e il condensatore in ingresso al regolatore di tensione scalda.

Che vul dire che si spegne tutto?
Non e' che l'alimentatore va' in protezione perche' non ce la fà ?

Innanzi tutto voglio precisare che questo motorino funzionava con la stessa lipo che sto utlizzando ora ovvero una 7.4V 1000mAh e che nella vecchia scheda di controllo di questo motore vedo solo condensatori elettrolitici da 100uF.
Detto questo e tornando al mio progetto, quando alimento il circuito può succedere che:
1 - il motore va per un secondo su di giri e poi si ferma bloccando il controllo
2 - il motore va su di giri e ci rimane bloccando ugualmente il controllo
3 - il motore parte normalmente e quando arrivo al massimo del PWM si arresta bloccando il controllo

Sul mio pcb non ci sono cortocircuiti ecc, anche perchè ripeto con motorini che assorbono meno tutto fila liscio e non si blocca nulla.
Ho aggiunto anche due ceramici da 100nF in ingresso ed uscita al 7805

Santa pazienza!

:frowning:

Proseguendo con le prove, ho escluso tutto, solo l'atmega328 alimentata dal 7805 quindi dalla lipo e solo un servo motore.
Mettendo il servo in loop, cioè dal massimo al minimo e viceversa, ad un certo punto tutto si blocca.
Nussuno a qualche idea da provare?

Alimenta il ATmega con un alimenazione indipendente dalla LiPo e prova se si blocca.
Ciao Uwe

Con alimentazioni separate, vedo che i servo non hanno un movimento scorrevole ma a scatti,
però non si blocca l'atmega.
Con alimentazione singola e i servo in movimento, noto che la tensione in uscita dal 7805 scende fino ai 3V e a questo punto si blocca.
A me necessita avere una sola alimentazione, è questo il punto.

il 7805 pero' ha bisogno di minimo 7v per darti i 5v in uscita
quindi tu avendo 7.4v nella migliore delle ipotesi (batteria al 100%) sei giusto giusto, probabilmente quando chiedi corrente dal motore scendi sotto i 7v e il regolatore inizia a farti storie....
in piu' il 7805 "butta" via l'eccesso di tensione dissipandolo in calore quindi se eroghi 1a 5v dovresti consumarne circa 1.5 dai 7.4 (qualcuno mi corregga se sbaglio) che sommati ai motori per quella batteria piccola piccola che hai inizia a diventare proprio tanta roba...

EDIT

mi correggo da solo, 1a @ 5v sono 5w
il regolatore se lo alimenti a 7,4v assorbira' 1a che pero' sono 7,4w quindi dovra' dissipare 2.4w in calore

Attualmente sto provando con una Lipo da 11.1V a 2600mAh,
Risultato,
20% delle volte procede tutto bene ma il mosfet e il 7805 scaldano molto scottano.
60% delle volte il motore parte e rimane a velocità fissa senza poterlo controllare
15% delle volte il motore parte, rimane a velocità fissa senza poterlo controllare ad un certo punto si sblocca l'atmega e posso riprendere il controllo.
5% delle volte il motore parte e lo guardo girare come ipnotizzato accompagnato dalla musica dei Dire Straits

allora, riagganciandomi alla modifica del mio messaggio sopra:

Se tu porti a 11,1 la Vin e mettiamo che hai un assorbimento di 1a dopo il regolatore dovrai dissipare in calore 6,1w, quindi e' normale che il regolatore scaldi molto di piu' di prima.

Non capisco dove tu abbia tutto questo assorbimento, nello schema che hai postato pero' non si vedono gli stepper, li hai messi diretti sulla scheda arduino o cmq dopo il 7805?

Per il fatto che il MOS scaldi entro un certo limite e' normale ma mi viene il dubbio che tu non stia pilotando adeguatamente il MOS e che quindi quando fai passare corrente la rdson (resistenza tra drain e source) non sia minima e quindi ti tocca di dissipare un sacco di potenza in calore per far passare quello che serve al motore (calore che va anche lui a scaricare la batteria)

leggi questo magari ti aiuta

I servo sono alimentati dal 7805, comandati direttamente da due pin PWM arduino.
Il gate del mosfet si connette al pin PWM dell'atmega tramite la sola resistenza da 1K.
Il mosfet non è un ON/OFF ma è comandato in PWM, al massimo potrei aggiungere una resistenza da 10k tra gate e massa per far scaricare prima la tensione di gate.
Continuando con delle prove sto verificando che: se faccio partire gradualmente il motore rischio che l'atmega si blocchi a regimi bassi, se gli do da subito una buona dose di giri, noto che riesco a comandarlo senza blocchi.
E questo mi funziona anche riducendo le capacità degli elettrolitici e tornando alla batteria da 7.4V.

Si ok, MA

Per prima cosa
http://www.leonardomiliani.com/2013/10-modi-per-distruggere-un-arduino/
leggi il punto 10, io non so quanto assorbano gli stepper ma secondo me tra il pilotaggio del mos (5mA grazie alla 1k) e gli stepper tu stai gia sopra i 200mA massimi per il micro :wink:

Seconda cosa ok che tu piloti il mos in pwm ma il mos fa proprio un ON/OFF per regolare la corrente che tu fai scorrere o allo 0% o al 100% con frequenza fissa ma duty variabile.

Io non sono un elettronico esperto o professionista ma ti suggerisco di dotare gli stepper di opportuni driver, di non collegare gli stepper al 7805 a meno che non siano proprio minuscoli perche' non e' il regolatore che fa per te se hai bisogno di potenza, soprattutto se sei su batteria, perche' come ti dicevo spreca un sacco di w in calore, ci sono sistemi piu' efficienti da usare.

Magari dotati anche di un integrato MOSdriver, potrebbe sempre farti comodo, io uso spesso tc4427.

In ogni caso si, metti la 10k a massa, poi forse potresti provare (dopo aver tolto assorbimento al chip) a mettere una 470ohm tra il pin e il gate e una 1k tra gate e gnd (conferma di elettronici piu' ferrati?) per aumentare le correnti di carica e scarica.

Poi quando hai problemi di questo genere cerca sempre di effettuare dei test a blocchi di singoli componenti, cosi' man mano che li metti insieme diventa piu' facile identificare gli inevitabili guasti o malfunzionamenti.

EDIT, ma sei poi sicuro che il sw funzioni senza bug?
Provalo con dei led al posto dei motori, se funziona e' di sicuro un problema di assorbimenti ecc