Salve a tutti, sto cercando di programmare una freescale mkl25z. Fin ora sono riuscito a far funzionare la SPI per comunicare con un DAC esterno e ad attivare l' ADC integrato nella scheda per leggere una determinata caduta di tensione su una resistenza. Il mio problema è che ora devo utilizzare il valore del registro ADC0_RA, cioè il registro dati del ADC dove vengono salvati i valori, facendo per esempio sottrazione, divisione ecc.Mi spiego meglio: a me serve che, conoscendo un certo valore di corrente, io possa conoscere il valore di una resistenza, quindi leggo la caduta su tale resistenza grazie all'ADC e la divido per la corrente e ottengo la resistenza. Prima di tutto non so come ottenere la corrente,noi abbiamo due resistenze: R1 che regola la corrente e R2 è la resistenza della quale voglio conoscere il valore. Quindi nella pratica la corrente è uguale a (V2-V1)/R1 cioè per esempio (3.3V-1v)/0.5ohm, con V1 e V2 le tensioni ai suoi capi e R1 il valore di tale resistenza.Il codice che ho scritto è il seguente ma dubito che possa funzionare:
uint16_t supply=0XFFFF; // Valore dell'alimentazione 3.3 V (16 bit)
uint16_t resistor= 0X26C9; // Ipotizzo una R1 da 500 mohm (16bit)
uint16_t current; //corrente sull heater
uint16_t Control_Voltage=19859; //1V (16bit)
current=(supply-Control_Voltage)/resistor; //(3.3-1)/0.5=2.6A
A questo punto dovrei utilizzare questo "current" :
R2=ADC0_RA/current;
Il problema è che non so si possano fare queste operazioni matematiche tra binari e esadecimali come ho fatto io o eventualmente come vanno fatte.
Grazie anticipatamente x l'aiuto.
Operazioni matematiche tra binare e esadecimali
Moderatore:
Paolino
20 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
Se ho ben capito, devi misurare due tensioni (la V1 e la tensione sull'altra resistenza) quindi usare 2 canali dello ADC.
Su 16 bit la risoluzione non è molta e facendo divisioni diventa davvero troppo poca, quindi devi scegliere fra destreggiarti con gli shift per sfruttare sempre al meglio la risoluzione o usare il formato floating.
Su 16 bit la risoluzione non è molta e facendo divisioni diventa davvero troppo poca, quindi devi scegliere fra destreggiarti con gli shift per sfruttare sempre al meglio la risoluzione o usare il formato floating.
0
voti
O usi i tipi float, o casti i valori con (float), o se non ti serve una gran precisione, puoi sommare b a sè stesso n volte fino a che non diventa maggiore di a, a quel punto n è il risultato della divisione.
Es:
a = 3
b = 2
n=1 b=b+b a=3 ; n=1 b=4 a=3 ; b>a -> n=1 è il risultato della divisione
Es:
a = 3
b = 2
n=1 b=b+b a=3 ; n=1 b=4 a=3 ; b>a -> n=1 è il risultato della divisione

0
voti
No devo calcolare solo una tensione. Ho allegato un semplicissimo schema di quello che devo fare.Il MOS lo controllo io dalla scheda tramite op-amp, quindi prima di tutto devo calcolare l corrente
current=(supply-Control_Voltage)/resistor; //(3.3-1)/0.5=2.6A
ipotizzando una tensione V2 di 1 volt, a questo punto che so la corrente voglio sapere quanto è la resistenza in basso nello schema e faccio il valore che leggo dall adc fratto la corrente, ma non so come fare tutti questi passaggi avendo numeri binare o esadecimali e il regitro adco_ra
current=(supply-Control_Voltage)/resistor; //(3.3-1)/0.5=2.6A
ipotizzando una tensione V2 di 1 volt, a questo punto che so la corrente voglio sapere quanto è la resistenza in basso nello schema e faccio il valore che leggo dall adc fratto la corrente, ma non so come fare tutti questi passaggi avendo numeri binare o esadecimali e il regitro adco_ra
- Allegati
-
- AA.png (10.79 KiB) Osservato 3893 volte
0
voti
GLi schemi disegnali giusti, e al posto di allegare l'immagine allega il sorgente del disegno fidocadj, che viene molto meglio.
Se il circuito e` quello del riscaldatore, stai impostando male il problema. Inoltre nel mio circuito avevo messo degli ampli da strumentazione: sono indispensabili!
Se il circuito e` quello del riscaldatore, stai impostando male il problema. Inoltre nel mio circuito avevo messo degli ampli da strumentazione: sono indispensabili!
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
Ok la prossima volta metterò il file sorgente, comunque gli amplificatori da strumentazione non li ho messi nel disegno perché ho pensato che non fosse necessario inserirli dato che si tratta di una domanda riguardo al firmware. perché sto impostando male il problema?
0
voti
Perche' stai tirando fuori delle tensioni da 3.3V che non dovrebbero esserci. La misura della corrente non la si fa, per definizione e` la corrente che comandi con il DA. L'errore che ci puo` essere nel sistema e` la tolleranza della resistenza di sense R1. Anche se misurassi la tensione ai capi di R1, che e` un errore perche' fra l'altro non hai la stessa alimentazione, la corrente sarebbe sempre indeterminata dalla tolleranza di R1.
Non misuri la corrente: dai il comando con il DA e sai che corrente passa. Al piu` potresti misurare l'uscita dell'ampli da strumentazione su Rs per verificare che funzioni tutto bene.
Non misuri la corrente: dai il comando con il DA e sai che corrente passa. Al piu` potresti misurare l'uscita dell'ampli da strumentazione su Rs per verificare che funzioni tutto bene.
Per usare proficuamente un simulatore, bisogna sapere molta più elettronica di lui
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
Plug it in - it works better!
Il 555 sta all'elettronica come Arduino all'informatica! (entrambi loro malgrado)
Se volete risposte rispondete a tutte le mie domande
0
voti
Mah. Io dico che mancano concetti bade. Prima di tutto la corrente deve essere nota in ubo schema come il tuo, e magari anche variabile a comando per rimuovere degli offset di misura.
Poi non capisco il problema. Il convertitore restituisce un valore decimale in un registro. Se programmi in assembly dovrai scalarlo alla corrispondente grandezza. Se per farlo vuoi anche ottenere il dato in un formato diverso, o lo converti od usi un linguaggio che converta implicitamente.
Di che linguaggio stiamo parlando?
Poi non capisco il problema. Il convertitore restituisce un valore decimale in un registro. Se programmi in assembly dovrai scalarlo alla corrispondente grandezza. Se per farlo vuoi anche ottenere il dato in un formato diverso, o lo converti od usi un linguaggio che converta implicitamente.
Di che linguaggio stiamo parlando?
-

Candy
32,5k 7 10 13 - CRU - Account cancellato su Richiesta utente
- Messaggi: 10123
- Iscritto il: 14 giu 2010, 22:54
0
voti
Ok la corrente la so cke la imposto dal DAC, ipotizziamo una reistenza iniziale del riscaldatore di 350 milli ohm e 500 m ohm a 80 gradi, quindi io fisso una certa corrente per esempio 1A quindi io saprò di aver raggiunto gli 80 gradi quando l adc legge un valore di 500mV. A questo punto voglio scendere a 60 gradi ( ipotizzo 400m ohm), quindi le soluzioni che mi vengono in mente sono o tengo costante la corrente ma la spegno e l accendo così da ottenere un "valor medio" piu basso, oppure per esempio porto la corrente ad 0.8A, ma a questo punto sull adc devo leggere una caduta data dalla nuova corrente per la resistenza, quindi devo conoscere a priori sempre la corrente e l unico modo che mi viene in mente è definire il valore della resistenza in alto ( nn quella del riscaldatore per capirci) e fare 3.3 meno l uscita del dac fratto la resistenza in alto. Questa è la mia idea, se c'è un metodo mogliore ditemi pure...per quanto rigurda il linguaggio di programmazione è c, e il registro del adc mi restituisce 16 bit, nn un decimale
20 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 4 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)





