Condensatore 4n7 su pin di reset

Ciao a tutti!
Scrivo questo post per un problema che ho sul mio Arduino Uno e che non riesco a risolvere.
Sto sviluppando una scheda cambio elettronico per un kart, che lavora sul cut-off della bobina, quindi tantissimo disturbi generati dalla stessa.
Come ho letto sul post num. 1277830578 Hardware robustness... (ADC & RESET)... (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1277830578), ho pensato di seguire alla lettera i consigli indicati:

  • un filtro passa basso sul AVCC pin
  • un diodo 1N4148 dal pin di reset a vcc, un condensatore 4n7 dal pin di reset a GND.

Il problema è che con il condensatore da 4n7 la scheda si comporta in modo strano... Se applico il condensatore a scheda spenta e condensatore scarico, il mio firmware parte. Una volta che il condensatore è carico e SPENGO la scheda, quando ridò l'alimentazione comincia a resettarsi in loop. In pratica parte il bootloader (3 blink del led di stato) e poi va in reset.
Inizialmente ho pensato al fatto che il condensatore scaricasse sul pin di reset la carica accumulata, resettando la scheda. Ma quando poi a scheda accesa e reset in loop ho provato a togliere il condensatore, la scheda continuava a resettarsi!
Ho fatto anche la stessa prova alimentando la scheda con condensatore scollegato e ricollegarlo dopo che il firmware è partito, e la scheda non va in reset.

Il mio dubbio è che ci sia un bug nel bootloader, qualcosa che faccia si che legga uno stato basso del pin di reset e che ad un certo punto intervenga il watchdog.

Spero di essere stato abbastanza esaustivo :slight_smile:

Spero di essere stato abbastanza esaustivo

Si abbastanza, però non ho capito cosa accade senza la modifica, mi pare di aver capito dal post inglese che hai fatto questa modifica proprio perchè avevi reset durante il normale funzionamento.

Premessa:
Sei a bordo di un kart e alimenti arduino tramite la tensione generata a bordo e non hai alcuna batteria.

Se è così io farei il possibile per filtrare la tensione di alimentazione di arduino sia con LC che con uno stabilizzatore lineare tipo LM317 o altro, assicurandomi che la tensione ad arduino non scenda sotto i 4.5volts.

Poi chiuderei arduino in un contenitore di alluminio.
Poi su i fili che entrano dentro arduino ognuno avvolto su un nucleo ferromagnetico.

Poi metterei arduino lontanissimo dalla candela e dai fili di questa.

Poi pregherei.

Interessante progetto come comandi il la leva del cambio che immagino sia sequenziale molto simile al cambio motociclistico.

Elettromagneti? motoriduttori? servo?

Ciao.

Ciao!
Scusa è vero hai ragione, non ho specificato cosa accade senza la modifica. Quando il kart è in moto arduino va in reset dopo pochissimo.
La modifica di fatto l'ho applicata proprio per gli stessi motivi citati nel post che ho menzionato, cioè reset causati da spikes.
La scheda è alimentata autonomamente da una batteria a 9V, e l'attuatore è il classico motociclistico posto sulla leva del cambio. Giusto per citare il modello, è il dynojet.
Per ora il mio progetto si limita solamente a tagliare la corrente nel momento in cui tiro la leva del cambio :slight_smile:

Il cut-off avviene tramite un relay isolato galvanicamente con un optoisolatore (anch'esso protetto da un condensatore da 1uF e un diodo 1N4007), che ho utilizzato proprio per isolare arduino da eventuali spikes della bobina.
Ad ogni collegamento con arduino ho posizionato degli elementi di ferrite per sopprimere i disturbi, ma non sono bastati.
Il contenitore effettivamente non è in alluminio ma in normale plastica, e credo proprio che seguirò il tuo consiglio :slight_smile:

Comunque non ho detto una cosa importante: con la modifica il problema si è quasi risolto, la scheda non è più andata in reset. Dico quasi risolto perché i test li ho effettuati con il kart in moto sul carrello e mi manca il collaudo su asfalto.
Il problema è che con il condensatore poi non posso più spegnerla, perché alla riaccensione comincia a resettarsi in loop...

ciao cafo80

Il reset non é una cosa programmata via SW. Se l' entrata di reset va sotto una tensione limite il controller interompe l' esecuzione del programma e poi ritorna sopra il limite, dopo un leggero ritardo il controller continua di eseguire il programma all' indirizzo che é memorizzato nel vettore di reset (2 Byte di memoria interna).
Il reset non ha niente a che fare col watchdog.
Il watchdog serve per riconoscere un blocco del Microcontroller. Non so se nel Arduino é attivo.

Oltre al reset c'é anche un controllo di sottotensione (Brown-out) e una tensione minima di alimentazione che fa resettare l'arduino. Riparte quando la tensione ritorna di nuovo sopra il livello accettabile. Sono settabili piú livelli Brown-out via settagio con un programmatore ISP e non so quale é il settaggio nel Arduino.

pagina 46 10. System Control and Reset
pagina 318 Table 28-3 elenca ile tensioni limite del reset.

  • un diodo 1N4148 dal pin di reset a vcc

Come hai messo il diodo? (polaritá)

  • un filtro passa basso sul AVCC pin

in cosa consiste questo filtro? avcc serve per la parte analogia, metti il filtro sul alimentazione generale 5V oppure se lo alimenti con 12 V su quella. Monta l' arduino in una scatola di metallo e collega quella a massa.

il mio firmware parte.

Hai cambiato il bootloader o Ti riferisci al Sketch che hai caricato?
Ciao Uwe

Oltre al reset c'é anche un controllo di sottotensione (Brown-out) e una tensione minima di alimentazione che fa resettare l'arduino. Riparte quando la tensione ritorna di nuovo sopra il livello accettabile. Sono settabili piú livelli Brown-out via settagio con un programmatore ISP e non so quale é il settaggio nel Arduino.

Il livello di brown-out di Arduino non so quale sia sinceramente, però sono abbastanza sicuro che il problema non derivi da questo, anche perché il mio problema avviene anche mentre ci lavoravo in casa, scollegato completamente dalla bobina del kart e alimentato tramite alimentatore 12V.

Come hai messo il diodo? (polaritá)

Catodo su VCC.

in cosa consiste questo filtro? avcc serve per la parte analogia, metti il filtro sul alimentazione generale 5V oppure se lo alimenti con 12 V su quella. Monta l' arduino in una scatola di metallo e collega quella a massa.

Sono sincero: ho fatto questa modifica seguendo le indicazioni che ho trovato nel post che ho citato per dare un'ulteriore protezione alla scheda.

Hai cambiato il bootloader o Ti riferisci al Sketch che hai caricato?

Scusami hai ragione! :slight_smile: Intendevo lo sketch che ho caricato :slight_smile: Il bootloader è quello originale Arduino.

Comunque ti spiego perché avevo ipotizzato ad un reset di watchdog.
Solitamente quando accendo la scheda senza collegarla via usb e alimentandola con la batteria o con l'alimentatore, il bootloader esegue direttamente lo sketch che ho caricato.
Diversamente invece avviene quando mando in reset la scheda tramite reset automatico via usb-seriale o premendo il pulsante di reset: in questa fase il bootloader emette 3 blink del led di status attendendo un comando dal pc e poi esegue il programma.
Quando ci metto il condensatore il bootloader alla prima accensione (usb scollegato e alimentato esternamente) esegue sempre i 3 blink, e ad accensione a freddo (condensatore scarico) lo sketch parte, mentre se spengo e riaccendo ecco qui che comincia ad andare in un loop di reset continui.

Se serve comunque posso postare lo schema elettrico.
Grazie mille per risposte!! :slight_smile: