Tachimetro auto (ex computer di bordo)

mmm ha scritto:

La difficoltà sta anche nel convertire uno 0.64 nel formato che dici tu. Verrebbe fuori uno 0000.1010 -> 0.625 Bisognerebbe aumentare la risoluzione dei bit della virgola...

Sembra essere più semplice adottare una notazione del genere:

1) Si stabilisce quante cifre dopo la virgola occorrono 2) Si stabilisce quante cifre prima della virgola occorrono

Esempio: contiamo fino a 99.99

99 -> occorrono 7 bit

0 0 _ _ _ _ _ _ _ _ , _ _ _ _ _ _ _

questo è il nostro numero. Se voglio rappresentare 6.5:

110.0110010 | | 6 . 50

anche se ne tuo caso somma, differenza, moltiplicazione e divisione sono molto più semplici, basta shiftare, mentre nel mio caso è un pò più complesso.

10 successive, ovvero? Shift e Shift+somma 1?

Ottimo! Magari metto 2 zener da 14 V (perché altrimenti anche a 12 V uno dei due mi conduce), così se avrò un picco di tensione di 63 V che mi dura 500 us:

500 us * 63 = 31500 V*us

sulla resistenza cadranno 63V-14V = 49V

l'impulso verrà allungato da 500 us a:

31500 V*us/49V = 643 us 143 us in più.... sono comunque accettabili

Il datasheet ufficiale l'ho sempre avuto fin dall'inizio, non avevo letto bene :)

Vabbè con un micro a 4 Mhz, anche se non hai tanti capture, per segnali lenti bastano gli interrupt. Poi è un micro enorme, qualcosa in più rispetto a un 16F84 ce l'avrà :)

Quelle le so fare, è l'unica cosa nella quale sono riuscito. Le sottrazioni, moltiplicazioni e divisioni fanno problemi, specie se usi registri a 8 bit e devi farle su numeri a 16 bit. Già l'avere registri a 16 bit su cui fare le operazioni, avrebbe semplificato il progetto di tantissimo.

A presto

Artemis

Reply to
Artemis
Loading thread data ...

Non si fa cosi`, la virgola e` solo un accidente matematico (cfr kronecker, Die ganzen Zahlen hat der liebe Gott gemacht, alles andere ist Menschenwerk)

Supponendo una rappresentazione lineare, devi guardare qual e` la dinamica massima della grandezza che vuoi rappresentare (D), e qual e` la risoluzione voluta (r). Poi calcoli il numero di bit necessari, con ln(D/r)/ln(2). A questo punto puoi fare i conti con interi che abbiano almeno quel numero di bit (piu` almeno un paio per tener conto di arrotondamenti, propagazione degli errori ecc. ecc.). Per usare gli interi devi rinormalizzare le grandezze in modo che la risoluzione voluta sia rappresentata dal valore 1, e vivi felice con l'aritmetica intera.

PS: mi serve un tuo intervento di testimonianza nel thread "simulatore di circuiti di qualche giorno fa".

--

Franco

Wovon man nicht sprechen kann, darüber muß man schweigen.
(L. Wittgenstein)
Reply to
Franco

Franco ha scritto:

Si confermo!

Ho ragionato più o meno in questi termini, sebbene poi la cosa sia differente. In base alla risoluzione voluta "dopo" la virgola ho scelto il numero di bit, ed ho fatto lo stesso per i numeri prima della virgola. Poi li ho trattati come fossero separati, tenendo conto che quelli prima della virgola incrementavano di 1 il registro dei numeri "dopo" la virgola, quando il primo raggiungeva 100 (se la risoluzione è

100), o 10 (se la risoluzione è 10). E' chiaro che è conveniente lavorare con 1/2, 1/4, 1/8 etc. prima della virgola...

Il problema è appunto la normalizzazione ed anche i registri ad 8 bit. In pratica se utilizzi soltanto interi, è difficile poi eseguire questo:

(102 * 1000)/2055

il 6 sta in un registro ad 8 bit e gli altri in registri a 8+8bit (2 registri). Ora, si potrebbe portare tutto a registri 8+8bit così:

al = 66 ah = 0

bl = E8 bh = 3

cl = 7 ch = 8

così viene:

(66h * 3E8h)/807h

Siccome le operazioni non puoi farle tutte insieme, devi scegliere se fare prima il prodotto o la divisione. Se fai prima il prodotto vai oltre i 16 bit e non conviene, per cui puoi fare 2 cose:

(66h/807h) * 3E8

oppure

(3E8/807) * 66h

il problema dove sta? Qui! Prendiamo il primo caso: volendo avere una risoluzione di 2 numeri dopo la virgola nel risultato finale, inevitabilmente lavorando con divisioni intere (mod) avrò un risultato e un resto nella prima divisione. Quando poi moltiplico il tutto per 3E8, sto moltiplicando il risultato intero, ma per tener conto del risultato dopo la virgola? Nel caso che sto considerando la divisione verrebbe:

Risultato: 0 Resto: 66h

ma se voglio il risultato decimale? Presto detto:

66h*0Ah mod 807h = 1a cifra dopo la virgola -> ris: 0 resto: 66h 66h*0Ah*0Ah mod 807h = 2a cifra dopo la virgola -> ris: 4 resto: 7BCh 7BCh*0Ah = seconda cifra dopo la virgola -> ris: 9 resto: 519h

siccome dovevo fermarmi alla 2a cifra dopo la virgola, tengo lo 0.04

ora... per moltiplicare il tutto per 3E8h, dovrei prima moltiplicare quest'ultimo per 100, poi moltiplicarlo per 4 e dividere per 10000... giusto? Con la prima moltiplicazione però arrivo sempre a 20 bit o più, quindi 3 registri. La seconda inviene è una divisione intera e per avere gli altri 2 numeri con la virgola (se mai ci dovessero essere) bisogna sempre fare quel papiello lungo del moltiplica per 10, fai il mod, prendi il resto etc. etc.

Il tutto diventa un pò più semplice se lo scrivi in asm, hai registri a

32 bit o comunque anche a 16 ci metteresti poco. Ma mettiti ad aggiustare carry ogni 8 bit in ogni singola operazione... è davvero molto snervante se pensi che di calcoli del genere ne dovrai fare almeno una decina (numero1 x numero2)/numero1.

Puoi fare una call, ma la storia è la stessa. E' qui che sono un pò perplesso...

Azz, certo vostro onore.

A presto

Artemis

PS: Comunque il progetto è finalmente terminato, ora aspetto che il professore mi risponda alla mail... cacchio il 23 ho un esame con lui scritto e orale e entro il 24 devo anche presentare questo progetto (a lui) che è un altro esame e se non lo faccio entro oggi, si accavalla tutto!

Reply to
Artemis

Il giorno Fri, 20 Jul 2007 11:01:28 +0200, Artemis ha scritto:

Non sono d'accordo sul 'non conviene'

Esiste la moltiplicazione 16*16 con risultato a 32 bits, che tra l'altro usa il moltiplicatore hardware ed è veloce.

Poi esiste anche la divisione 32/16 ed è tutto molto semplice, senza andare a cercare scorciatoie ed arzigogolamenti strani.

(66h * 3E8h) /807h >> 18E70H / 807H >> 31H resto 519H

In decimale sarà

66H = 102 3E8H=1000 807H = 2055

102*1000 = 102000

102000 / 2055 = 49,63 decimale

102000 * 100 = 10200000

oppure in HEX

3E8H * 66H * 64H = 9BA3C0H

9BA3C0H / 807H = 1363H = 4963 decimale

4963 è il 49,63 che ti veniva prima moltiplicato per 100, cioè spostando la virgola di 2 posizioni.

Hai ottenuto un risulato in virgola fissa abbastanza semplicemente, con una sola moltiplicazione in più, che il moltiplicatore hw esegue velocemente.

Non vedo perchè complicarsi così la vita, se usi la virgola fissa ti basterà considerare il dato come un intero moltiplicato per il fattore decimale.

Se invece pensi di usare la virgola mobile ti avventuri in un terreno molto infido, e non so davvero se ne vale la pena.

Boh

In bocca al lupo...

-- ciao Stefano

Reply to
SB

Il giorno Fri, 20 Jul 2007 22:37:59 +0200, Artemis ha scritto: !

Non te la prendere troppo, capita a tutti di non vedere valorizzato il proprio lavoro.

L'importante è che tu sia riuscito a creare qualcosa di funzionante e ad incominciare a capire i metodi da usare nell'approccio e nell'esecuzione di un progetto, anche perchè quell'esame e quel professore li dimenticherai presto, invece il resto dovrebbe entrare a far parte del tuo bagaglio di conoscenze personale.

In fondo alla fine resta solo quello.

-- ciao Stefano

Reply to
SB

SB ha scritto:

Ti ringrazio molto per avermi rincuorato, ora sto ritoccando il tutto così glielo porto e vediamo un pò se va bene.

Parole sante!

A presto e grazie davvero per l'aiuto, a buon rendere.

Artemis

Reply to
Artemis

Il Fri, 13 Jul 2007 21:52:26 +0200, Artemis ha scritto:

Segui le piste del quadro, è più facile di quello che sembra. Poi fai una derivazione sul connettore e sei a Parigi! Perchè dovresti tenerei lquadro smontato?

Per ora le invenzioni uscite dalla sua testa non mi sembrano così brillanti, oppure lo scambio di vedute è stato lossy! Poi, scusa se insisto, ma dal punto di vista elettrico non hai analizzato correttamente l'iniettore. Vai tranquillo che qualcosa non ti tornerà!

Scusa, ma non ti capisco!

La domanda posta così non ha molto senso. Per te cosa significa "soluzione analogica"?

Software embedded! Ordinaria amministrazione: N interupt (ovviamente asincroni, altrimenti di cosa stiamo parlando?) da gestire ciascuno con le sue priorità. Non vedo problemi da questo punto di vista, a meno che tu non voglia usare un pic da due dollari con il clock a 32KHz :-P

Come fai a sapere quando l'ad ha finito la conversione? O vai a polling (triste e bloccante) oppure usi l'interrupt di fine conversione. Ma a quel punto, usi l'interrupt e un timer e via! Per lo meno, io farei così, poi ciascuno si diverte come meglio crede!

?

Esatto! Solo che la forma d'onda non è sempre identica! Dai un'occhiata qui:

formatting link

Il tempo iniziale e la frequenza di commutazione non sono fissi, ma dipendono dalla retroazione di corrente. Il fatto che la corrente - come giustamente hai accennato - dipende dalla L del circuito (cioè dal tipo di iniettore, dalla sua temperatura, dalla caratteristica dell'equipaggio, ecc...), dalla R (cioè dalla temperatura dell'iniettore/cavi/driver) oltre che dalla V di alimentazione (che in un'auto va da 7V a 14,4V)... Vedi te...

Quello che stai costruendo!

Reply to
SilverLeo

SilverLeo ha scritto:

Perché poi da dove passano i cavi che uso per prendermi la derivazione?

Beh a dire il vero, è tornato tutto :)

Il quadrò è incassato nel cruscotto e puoi tirarlo fuori togliendo 2 bottoncini sotto ai quali vi sono 2 viti. Una volta messe i fili di derivazione del segnale, devo portarli al mio circuito che sta "sul" cruscotto, quindi i cavi devono uscire lateralmente dal quadro incassato, per cui non riuscirò più a chiuderlo fin quando non tolgo i fili.

Anziché convertire gli impulsi in "spazio" con il microcontrollore (quindi digitalmente), chiedevo se era possibile acquisire il segnale analogico della ruota fonica e sempre con circuiteria esterna trasformarlo proporzionalmente in velocità, con un convertitore frequenza/tensione. In ogni caso ora non è più un problema.

Hai scritto "Usa un GPS"... ed io ho sbagliato a scriverti "gSp?". Che vuol dire usa un GPS?

Certo che non è la stessa, cambia il tempo di iniezione! Ed è per questo che ho caratterizzato l'iniettore.

Invece si, li ho misurati con oscilloscopio e sia in accelerata, sia a minimo il tempo di "apertura" dell'iniettore (che tu chiami tempo iniziale) è 1 ms fisso, che serve a far aprire l'iniettore, gli dà una botta in continua.

La centralina non conosce a priori quanta benzina esce dall'iniettore. Infatti se la macchina deve raggiungere un certo regime e non lo sta raggiungendo (feedback che riporta i risultati) pompa più carburante. Ma questo non c'entra con quello che devo fare, perché non devo essere io a pilotare l'iniettore della macchina con il mio computer di bordo, ma devo misurare il tempo di apertura e capire quanta benzina esce. Per ogni tempo di apertura, esce una tot quantità precisa di benzina, che dipende "unicamente" dalla portata dell'iniettore. L'iniettore in teoria ha una *portata fissa* (non un'iniezione fissa) e la quantità di benzina iniettata viene fuori in base al tempo di apertura (per quanto tempo sta aperto questo iniettore). Allora siccome so che l'iniettore, come ogni cosa in natura, è non lineare, la portata non sarà perfettamente fissa ma oscillerà attorno ad un valore fisso (10 ul/pulse nel mio caso). A volte sarà 9 ul a volte 11 ul, ma la portata è grosso modo fissa. Così, per rendere più preciso il calcolo del tempo di iniezione, ho caratterizzato l'iniettore ed ho trovato la portata di quest'ultimo ai vari tempi di apertura, così da ricavarne bene la non linearità e linearizzare la caratteristica nel micro.

Errore. La corrente dipende dalla R e dalla L, che giustamente variano in base alla temperatura, ma che però non fanno variare eccessivamente I, che è dell'ordine degli A. Che la corrente vari di 10-50 mA o anche più, non importa, figurati che i giri dell'auto vengono misurati attaccando alcuni strumenti alla batteria, pensa tu che ambiente "rumoroso"! La V di alimentazione durante il funzionamento dell'auto è a 14 V o poco più, ma a 7 V non scende, tranquillo (altrimenti hai la batteria atterra alla partenza). Quando l'auto parte, ci sono i 14 V dell'alternatore e sono quelli che contano per l'iniettore. Se l'iniettore riceve una tensione inferiore, stai tranquillo che la macchina non cammina (e quindi poco importa al guidatore se il computerino di bordo spara dati a cavoli). L'iniettore una volta aperto come si deve, si blocca, è come in saturazione (più di tanto non si apre), la portata è sempre quella e il tempo di apertura è scandito da un timer, altrimenti la macchina, se avvenisse quello che dici tu, camminerebbe a singhiozzi :)

A presto

Artemis

Reply to
Artemis

Il Thu, 26 Jul 2007 15:53:59 +0200, Artemis ha scritto:

Buon per te :-)

Il segnale gps! Un navigatore! Usa un navigatore per sapere la velocità esatta...

Mi dispiace ma il tempo di 1ms che tu chiami fisso che secondo te serve per dare la botta (ROTFL) in realtà non è così fisso come credi e non serve per dare la botta come dici... Poi, visto che insisti, pensala come credi, sia tu che io viviamo felici lo stesso!

In ogni caso non mi sembra che tu abbia un gran approccio costruttivo: uno si prende la briga di spiegarti una cosa (e dal genere di domande che fai, ti assicuro che quell'"uno" ne sa più di te!) e non ti poni neanche il dubbio! Fai pure... Per curiosità, cosa studi?

Ciao!

Reply to
SilverLeo

SilverLeo ha scritto:

Non è un pò esagerato per uno che sta provando a progettare/costruire un trip computer ed a mala pena ha la macchina? Non ho il navigatore e anche se ce lo avessi, sarebbe portatile e ben chiuso, non vado a scassarlo per prendermi la velocità.

Allora spiegami a cosa serve. In realtà io sono del parere che quel ms in continua viene dato per far scorrere pian piano l'induttore (la carica normale di un induttore, la corrente aumenta esponenzialmente). Fino ad 1 ms la corrente è accettabile, oltre invece diventa elevata e così interviene il PWM, che invia un'onda quadra a frequenza così elevata da far agire l'iniettore come un filtro, che prende la componente continua (essendo il duty cycle del 50%, è come se ci fossero

6 V ai capi dell'induttore).

Ing. Elettronica (laurea specialistica).

A presto

Artemis

Reply to
Artemis

Mah, visto che hai caratterizzato l'iniettore, allora caratterizza anche il segnale tachimetrico, che è parecchio impreciso (vedi scarti tipi di

+5/+10%): ti fai prestare il navigatore da un amico e poi controlli la velocità guardandola sul display...

Ci ho provato. Ti ho postato anche un link. Riproviamo. Allora: il controllo in PWM imposta il duty, lo tiene per almeno un periodo, poi va a vedere il *valore medio* della variabile da controllare. A questo punto calcola l'errore rispetto al riferimento e attua la variabile di controllo modificando il duty. Un controllo a chopper osserva il valore istantaneo della variabile da controllare: se è minore di una soglia accende, se è maggiore di un'altra soglia spegne. Le due soglie di solito sono appoggiate attorno al riferimento con un po ' isteresi (che governa la frequenza di commmutazione). Le valvole si controllano in corrente (la forza sull'equipaggio mobile dipende dal flusso magnetico, imparentato con la corrente), non in tensione, e non puoi regolare in base al valore medio della corrente perchè intrisecamente la posizione della valvola non dipende dal valore medio della corrente, ma dal valore di picco. Poi la valvola è usata come on/off, ma è irrilevante dal punto di vista dell'azionamento.

Chi decide che la corrente resta accettabile fino ad 1ms? E se in realtà resta accettabile per 800us? Il driver non va a tempo, ma guarda la corrente. Per osservare il tempo di 1ms come hai fatto? Hai messo l'oscilloscopio e hai guardato un po' di forme d'onda?

Mala tempora currunt... Pensa che stiamo dando come specifica all'ufficio del personale di non considerare più le candidature degli ingg. nuovi ordinamenti, a meno che non siano lauree con lode.

Reply to
SilverLeo

SilverLeo ha scritto:

Non è molto impreciso. Sarà impreciso il tachimetro della velocità, ma non gli impulsi provenienti dalla ruota fonica, quello è un qualcosa di meccanico, ad ogni 3 metri esatti (ogni giro della ruota fonica che ha un rapporto opportuno, mica la ruota è di 3 metri) manda un impulso (sensore di hall o qualcosa di simile).

Mi sembra un semplice sistema a retroazione, ma forse non ci stiamo capendo. Non ti ho spiegato in quel post come avviene il controllo della quantità di carburante o come viene scelto il duty cycle, ho solo parlato di come l'iniettore reagisce a quel tipo di onda quadra (1 ms continua e poi variabile) spiegandoti che prima agisce da normale induttore, poi da filtro.

Sembra qualcosa di molto astratto, non ti seguo e non riesco a capire di cosa stai parlando. Le due soglie di cosa? Il riferimento qual è? La variabile da controllare qual è?

Che controllate mediante un mosfet le controlli in tensione. Definizione di mosfet: generatore di corrente controllato in tensione. Tu controlli il mosfet, non la valvola.

L'iniettore è principalmente un induttore. Se gli fai passare un segnale ad alta frequenza, valvola o no, agisce sempre da filtro. Se lo fai aprire ad 1 Mhz se ne infischia dei segnali di picco, non lo vede il segnale, si apre e resta aperto secondo il valor medio.

L'induttore di fabbrica :) Sai che l'induttore è caratterizzato da una certa tau = L/R, dunque la corrente dopo 5 tau raggiunge il 99% del valore di regime. Se voglio che la corrente arrivi ad un certo tot, basta fissare l'istante di apertura e poi la mantengo con il PWM a 50% di duty cycle. Il duty cycle di cui sto parlando NON c'entra con quello complessivo dell'onda quadra.

La corrente di una rete RL la calcoli con carta e penna e resta così com'è, la temperatura varia di pochissimo i parametri, e puoi considerarli trascurabili ai fini di un on-off.

Dammi la tua email, ti mando le tracce prese con l'oscilloscopio sia in accelerazione che al minimo.

Mala tempora currunt anche per le aziende, convinti che i laureati con lode siano i migliori e non sanno che sono quelli che vanno sempre a ricevimento e dicono le cazzate più assurde quando si fa un progetto e c'è gente che butta il sangue e loro prendono il merito.

Meditate gente, meditate.

Artemis

Reply to
Artemis

Il Wed, 01 Aug 2007 14:22:47 +0200, Artemis ha scritto:

Ci rinuncio. Hai ragione te.

Io faccio i colloqui tecnici. Me ne frego di come uno ha preso 110L, ma spesso chi prende 110L tende ad essere *ragionante*: gli spiego il problema e propongo una possibile soluzione. Il candidato prova a capire come funziona (se non ci arriva se ne parla assieme, mica è un esame), poi ad individuare dove potrebbero saltare fuori i problemi. I nuovi ordinamenti hanno problemi proprio qui: sanno pistolare con gli strumenti, hanno fatto laboratorio, ma il tutto in stile istituto tecnico. Quando si tratta di mettersi la matita in bocca e grattarsi la pera vanno in difficolta. Un po' come stai facendo tu. Non sai come si pilota una valvola on/off (io penso di si, ho fatto svariati driver sia per valvole proporzionali in pwm che on/off con controllo a chopper), però pretendi di misurarla e di spiegare agli altri come si fa... Mala tempora currunt, soprattuto per voi nuovi ordinamenti.

Già fatto. Ci vediamo quando trovi lavoro!

PS: chiudiamo qui l'ampio OT, in amicizia!

Reply to
SilverLeo

SilverLeo ha scritto:

Tende ad essere ragionande anche un 92 o un 103. Un 110 e lode non meritato è molto bravo ad essere diplomatico e a darti ragione (girandoti la frittata senza che te ne accorgi).

Come fanno tutti i professori che ho incontrato finora.

E' una cosa che facciamo di continuo, ormai la lezione non è più lavagna e lucidi, ma... dato il problema x, quasi soluzioni adottereste... e molti vanno alla lavagna a proporre, molti alzano la mano e dibattono, e poi a il professore parla e fa notare i bug di ogni soluzione adottata e spiega quella più corretta.

Ti confondi con quelli che fanno la triennale, lì a malappena sai cos'è un bjt, e si fa molto laboratorio. Riguardo alla mia specialistica già è partita con complementi di fisica, dove il pane quotidiano è la meccanica quantistica. Poi a seguire microcontrollori, elettronica di potenza (motori, convertitori buck, boost, e tanto altro). Circuiti a radiofrequenze (progettazione di amplificatori per circuiti a microonde), tutta roba che alla triennale uno se la sogna.

Ti ripeto, alla specialistica non è così, non so con chi tu abbia avuto a che fare durante i colloqui e non so da quali università provenivano, però posso garantirti che di progetti indipendenti che vengono severamente valutati e studiati fino al midollo, ne siamo zeppi, e la testa ce la grattiamo tante volte. Il periodo scorso abbiamo progettato un firewall hardware (eravamo in 3) ed è stata fatta una classifica di efficienza.

So soltanto che l'iniettore è collegato al drain di un mosfet e che il mosfet è pilotato in tensione da un segnale elettrico proveniente dalla centralina, segnale che ho misurato con oscilloscopio, quindi per me questi sono i dati, e risolvo in base a questi il mio problema.

Volentieri.

Artemis

Reply to
Artemis

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.