Pages: [1]   Go Down
Author Topic: Problema uscite PWM  (Read 1660 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a Tutti,
volevo presentarmi nell' apposita sezione ma non ci sono riuscito... non appare il bottone "rispondi", quindi lo faccio qui.
Mi chiamo Marco, sono appassionato di elettronica e programmazione, ho scoperto arduino da alcuni mesi e ci ho speso parecchie ore di lavoro, sto completando infatti un progetto da applicare sulla mia automobile.

Tutto quanto funziona perfettamente... ma, c'è un piccolo problema:

Sostanzialmente uso arduino per leggere 4 segnali analogici, e poi li "rigenero" in PWM opportunamente modificati o meno.
Il problema nasce quando da auto accesa, passo ad automobile spenta.
Sembra che, nonostante il software continui a ciclare regolarmente (tutto monitorato dalla seriale), le uscite generate in PWM, non siano davvero "uguali" agli ingressi.

Il mio sospetto è naturalmente sul calo della tensione di alimentazione, che da 14 volt circa scende ad 11.5. Possibile che questo influisca sulla tensione di riferimento di 5V generata da Arduino? Secondo l'errore che trovo, dovrebbe scendere a 4,6 V. Purtroppo non mi è semplice monitorare questa condizione, che si verifica dopo ore che l'auto è ferma, chiusa e naturalmente spenta (sono in attesa di un datalogger).

Quindi Vi chiedo:
Esiste un sistema per monitorare la tensione di alimentazione in ingresso usando una delle entrate analogiche ancora libere (montando resistenze etc..)?
Come posso costruire eventualmente un regolatore da 5V più "stabile" ed usarlo come tensione di riferimento?
Volendo cercare nella sezione inglese, quali parole chiave mi suggerite di usare per trovare topic che parlano dell' argomento?

Premesse:
Arduino UNO SMD è sempre acceso (non si riavvia mai).
Ho provato a modificare il modo in cui faccio i calcoli (interi, float) ma senza miglioramenti, usando la funzione "millis" per intervallare i messaggi sulla seriale sembra essere peggiorata l'affidabilità del sistema (capitati diversi riavvii di arduino!!).
Ho notato che al banco, quando alzo una tensione su un uscita PWM, le altre 3 si riducono leggermente (nell' ordine di 0,03-4 Volt).
Sempre al banco la tensione Vref di arduino è 4,95 V se alimentato con un trasformatore da 12 V e 800 mA (quindo dubito che sia davvero questo il problema).
Le uscite PWM che uso sono la 5,6,10,11 e quelle che sembrano "calare" maggiormente, e creare il problema, sono la 10 e la 11.

Grazie in anticipo a tutti quanti sapranno aiutarmi in questo rompicapo...

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cosa hai attacato alle uscite PWM? Quanta corrente assorbe il circuito?

11,5V mi sembra poco per una batteria di un automobile. Sará necessario sostituirla per far funzionare in modo affidabile l' automobile?

A Arduino serve una tensione superiore a 7V percui non fa differenza se l' aliemtnazione é 11 o 14V.

Vedo il problema sul consumo troppo alto del circuito collegato a Arduino.
L' automobile é un posto sottoposto a tanti disturbi provenienti dall' accensione del motore e di altri componenti della macchina.

Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao UWE,
grazie per la risposta.
Il circuito a valle dei PWM legge semplicemente i valori che genero. E tutto funziona perfettamente ad automobile accesa. Che differenza puo fare per arduino l'assorbimento da accesa a spenta?
Mi spiego meglio:
Cè una ECU che invia 5 volt ad un potenziometro, io intercetto il segnale di ritorno mettendolo su un ingresso analogico, lo elaboro e lo rigenero su un PWM in uscita... quanto puo assorbire un chip a valle che legge il mio PWM? Perchè dovrebbe cambiare il risultato a macchina spenta?
Interferenze: sì possibile... ma proprio a motore spento? Mi aspetterei i l contrario...

Una precisazione, il rilievo della tensione calante sulle PWM è fatto al banco, a vuoto (ovvero senza alcun carico sulle uscite) quindi ad assorbimento praticamente nullo....
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23132
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Che cosa usi per abbassare la tensione e rientrare nel range 0-5V di Arduino?
Come alimenti Arduino?

Se usi l'ingresso jack lì c'è un regolatore di tensione, e come dice Uwe non ha importanza se arrivano 11 o 14V: sempre 5V in uscita ci sono, quindi il riferimento è stabile.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao UWE,
grazie per la risposta.
Il circuito a valle dei PWM legge semplicemente i valori che genero. E tutto funziona perfettamente ad automobile accesa. Che differenza puo fare per arduino l'assorbimento da accesa a spenta?
Mi spiego meglio:
Cè una ECU che invia 5 volt ad un potenziometro, io intercetto il segnale di ritorno mettendolo su un ingresso analogico, lo elaboro e lo rigenero su un PWM in uscita... quanto puo assorbire un chip a valle che legge il mio PWM? Perchè dovrebbe cambiare il risultato a macchina spenta?
Interferenze: sì possibile... ma proprio a motore spento? Mi aspetterei i l contrario...

Una precisazione, il rilievo della tensione calante sulle PWM è fatto al banco, a vuoto (ovvero senza alcun carico sulle uscite) quindi ad assorbimento praticamente nullo....

Sí, i disturbi dovrebbero esserci a macchina accesa non spenta.
Ai PWM hai messo un RC per avere una tensione continua?

Le specifiche del ATmega danno un range di tensione d'uscita che é sopra 4,2V con 5V di alimentazione. Se vuoi avere una tensione che é indipendente da Arduino devi mettere un transistore e una resistenza pullup oppure un DAC.
Ciao Uwe


Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che cosa usi per abbassare la tensione e rientrare nel range 0-5V di Arduino?
Come alimenti Arduino?

Se usi l'ingresso jack lì c'è un regolatore di tensione, e come dice Uwe non ha importanza se arrivano 11 o 14V: sempre 5V in uscita ci sono, quindi il riferimento è stabile.

Ciao Leo72
La tensione è già sotto i 5 volt. La ECU li manda a 4 potenziometri, io leggo il valore del segnale di ritorno tra i 5 e GND, tipicamente lavora tra 1,5 e 3 Volt.
Non uso il Jack, ho realizzato una shield apposita e lo alimento sul piedino Vin... non è la stessa cosa? Prelevo i 12 nominali della batteria dalla stessa fonte della ECU (sempre presenti, no sottochiave). Anche secondo me i 5 dovrebbero essere stabili. MA allora cosa puo essere il calo in uscita sulle PWM?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


Ai PWM hai messo un RC per avere una tensione continua?

Le specifiche del ATmega danno un range di tensione d'uscita che é sopra 4,2V con 5V di alimentazione. Se vuoi avere una tensione che é indipendente da Arduino devi mettere un transistore e una resistenza pullup oppure un DAC.
Ciao Uwe


Cosa mi suggerisci per RC?
Sull' uscita PWM ho una resistenza da 100K in parallelo con GND. Ho provato a rimuoverla. Nessun effetto.
Quindi suggerisci di amplificare il segnale PWM o passare ad un dac? Ma possibile che ad auto in moto tutto funzioni perfettamente?
Dal comportamento dell' auto, mi mancano 0,4 Volt circa, ovvero 10/256 punti di PWM. Mi sembrano un enormità. Purtroppo però è un difetto ripetitivo, sono 15 giorni che ci stò lavorando, e non riesco a capire. Se solo riuscissi a misurare cosa succede davvero sulle uscite dopo ore che l'auto è spenta e chiusa  smiley-mad smiley-mad

PS: con 5 volt di alimentazione (ovvero solo la USB) i PWM non vanno oltre 4,8 V (4 uscite) l'ho misurata, a vuoto!!
Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23132
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Che cosa usi per abbassare la tensione e rientrare nel range 0-5V di Arduino?
Come alimenti Arduino?

Se usi l'ingresso jack lì c'è un regolatore di tensione, e come dice Uwe non ha importanza se arrivano 11 o 14V: sempre 5V in uscita ci sono, quindi il riferimento è stabile.

Ciao Leo72
La tensione è già sotto i 5 volt. La ECU li manda a 4 potenziometri, io leggo il valore del segnale di ritorno tra i 5 e GND, tipicamente lavora tra 1,5 e 3 Volt.
Non uso il Jack, ho realizzato una shield apposita e lo alimento sul piedino Vin... non è la stessa cosa? Prelevo i 12 nominali della batteria dalla stessa fonte della ECU (sempre presenti, no sottochiave). Anche secondo me i 5 dovrebbero essere stabili. MA allora cosa puo essere il calo in uscita sulle PWM?
Se fai entrare la tensione della batteria dentro a Vin allora: sì, è la stessa cosa perché sei a monte del regolatore di tensione integrato sulla scheda, per cui hai i 5V stabilizzati sull'Arduino.
Logged


BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che cosa usi per abbassare la tensione e rientrare nel range 0-5V di Arduino?
Come alimenti Arduino?

Se usi l'ingresso jack lì c'è un regolatore di tensione, e come dice Uwe non ha importanza se arrivano 11 o 14V: sempre 5V in uscita ci sono, quindi il riferimento è stabile.

Ciao Leo72
La tensione è già sotto i 5 volt. La ECU li manda a 4 potenziometri, io leggo il valore del segnale di ritorno tra i 5 e GND, tipicamente lavora tra 1,5 e 3 Volt.
Non uso il Jack, ho realizzato una shield apposita e lo alimento sul piedino Vin... non è la stessa cosa? Prelevo i 12 nominali della batteria dalla stessa fonte della ECU (sempre presenti, no sottochiave). Anche secondo me i 5 dovrebbero essere stabili. MA allora cosa puo essere il calo in uscita sulle PWM?

Non é neanche a me chiaro. Usi uno stabilizzatore 5V e mandi i 5V al pin Vin?
Questo é sbagliato. Vin deve ricevere una tensione superiore a 6,5V. I 5V devi metterli sul pin 5V.
Ciao Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Che cosa usi per abbassare la tensione e rientrare nel range 0-5V di Arduino?
Come alimenti Arduino?

Se usi l'ingresso jack lì c'è un regolatore di tensione, e come dice Uwe non ha importanza se arrivano 11 o 14V: sempre 5V in uscita ci sono, quindi il riferimento è stabile.

Ciao Leo72
La tensione è già sotto i 5 volt. La ECU li manda a 4 potenziometri, io leggo il valore del segnale di ritorno tra i 5 e GND, tipicamente lavora tra 1,5 e 3 Volt.
Non uso il Jack, ho realizzato una shield apposita e lo alimento sul piedino Vin... non è la stessa cosa? Prelevo i 12 nominali della batteria dalla stessa fonte della ECU (sempre presenti, no sottochiave). Anche secondo me i 5 dovrebbero essere stabili. MA allora cosa puo essere il calo in uscita sulle PWM?

Non é neanche a me chiaro. Usi uno stabilizzatore 5V e mandi i 5V al pin Vin?
Questo é sbagliato. Vin deve ricevere una tensione superiore a 6,5V. I 5V devi metterli sul pin 5V.
Ciao Uwe

Scusate, chiarisco:
12V Batteria diretti a Vin (effettivi da 11,5 a 14).
L'uscita 5V di Arduino non la uso proprio, da quel che ho capito è usata internamente da Arduino come tensione di riferimento per leggere i segnali analogici.

Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate, chiarisco:
12V Batteria diretti a Vin (effettivi da 11,5 a 14).
L'uscita 5V di Arduino non la uso proprio, da quel che ho capito è usata internamente da Arduino come tensione di riferimento per leggere i segnali analogici.
ok, é giusto.
I 5V vengono usati per alimentare gli integrati sulla scheda Arduino. Il ATmega usa la tensione di alimentazione come tensione di riferimento per la conversione analogica - digitale.
Ciao Uwe
« Last Edit: November 03, 2012, 07:26:46 pm by uwefed » Logged

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 335
Posts: 23132
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora se i 5V sulla scheda sono stabili, questo può solo significare che a fluttuare è il segnale in arrivo dalla centralina. Forse l'abbassamento di tensione della batteria a 11V influisce sul segnale che lei spedisce. Ecco perché vedi i valori scendere quando l'auto è spenta da diverso tempo.
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora se i 5V sulla scheda sono stabili, questo può solo significare che a fluttuare è il segnale in arrivo dalla centralina. Forse l'abbassamento di tensione della batteria a 11V influisce sul segnale che lei spedisce. Ecco perché vedi i valori scendere quando l'auto è spenta da diverso tempo.

Dunque,
ho brutalmente risolto il problema delle misure: ho portato tutti i contatti fuori dall' auto per poterli misurare:
- La tensione in ingresso ad Arduino è di 12,43 V a batteria e 13,87 a macchina accesa
- La tensione che la ECU manda ai sensori è a 4,85 sia a macchina accesa che spenta
- Le tensioni analogiche in ingresso e le PWM in uscita variano regolarmente
- Ho provaro ad usare i 4,85 sul pin AREF ed impostato  analogReference(EXTERNAL); tutto ok.... ora i PWM sono sfalsati e le uscite sballate, è ovvio la scala dei PWM è sempre da 0 a 5, mentre gli ingressi analogici vanno da 0 a 4,85, ora il rapporto di 1 a 4 (1024/256) non è più valido...
- La tensione interna di arduino è stabile a 4,95 V sia a macchina accesa che spenta.
- Appena spengo la macchina leggo un valore di 1,88 su una analogica, la ECU poi si spegne e va a 0, dopo 2 ore si riaccende e fa in modo che il segnale scenda a 1,75 . Poi metto in moto e la ECU rimodula il segnale e lo porta a 1,89.

Adesso devo rifare tutte le misure senza l'Arduino collegato per testare cosa fà la ECU senza intromissioni esterne.
« Last Edit: November 02, 2012, 10:24:51 am by marcolino76 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bene,
credo di aver capito dove stà il problema.
Penso che sia dovuto alla bassa frequenza di uscita dei PWM, cercando in rete ho trovato un interessante articolo per aumentarla sfruttando i registri interni del precessore variando solo il prescaler:

http://www.settorezero.com/wordpress/come-arduino-gestisce-il-pwm-esempio-pilotaggio-cent4ur-con-arduino/

Qualcuno conosce metodi ancora più avanzati per gestire i PWM per simulare segnali analogici?
Qualche esempio pratico?
Consigli per evitare gliu effetti collaterali sulle funzioni delay() e millis() ?
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 271
Posts: 21939
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Perché non usi un DAC per esempio il MCP4922?
Ciao Uwe
Logged

Pages: [1]   Go Up
Jump to: