Modifica firmaware

Aperto da auriga, 17 Febbraio 2012, 22:56:19

Discussione precedente - Discussione successiva

0 Utenti e 1 Visitatore stanno visualizzando questa discussione.

auriga

Salve a tutti, chiedo lumi a chi ne sa più di me.
Vi riassumo brevemente il mio progetto: sto realizzando un rotore per azimuth ed elevazione tipo questo
e sto costruendo l'interfaccia che ha come cuore e cervello il pic 16f688, il firmaware è stato realizzato per il range di  tensione in uscita dal potenziometro per il controllo della posizione dei rotori g5400 e 5500.
Io sto usando motori dc ed i potenziometri li ho sostituiti con degli encoder magnetici che non hanno il range di tensione uguale ai g5400 e 5500.
Sono in possesso del file sorgente e penso di aver trovato la riga che riguarda il range della tensione solo che a questo punto non so più come procedere.
Attendo lumi.
Grazie.
73' Auriga


Santo iw9hlk

La cosa non è tanto semplice... quindi se ho capito tu hai due motori dove ci sono montati due potenziometri, e da questi vuoi sapere la posizione in tempo reale sfruttando la variazione dei volt... Ho capito bene??
Nulla è per caso

auriga

Ciao, si e no, i potenziometri così come li conosciamo sono utilizzati sui rotori commerciali, io uso un'evoluzione che si chiama "encoder magnetico rotativo" , in sostanza un magnete collegato all'asse del rotore gira su un tipo particolare di integrato che "leggendo" il movimento del magnete fa variare la sua tensione in uscita a mò di potenziometro.
Ma se al potenziometro posso dare la tensione che voglio, l'encoder accetta solo 5v  e quindi a 0 gradi mi darà 0 volts a 360 gradi me ne darà 5 Volts.
Questi valori sono leggermente diversi da quelli dei rotori commerciali dunque da qui l'esigenza di modificare almeno il valore dell'encoder collegato all'elevazione che ha un valore distante da quello scritto nel firmware, io a 180 gradi avrei 2,5v il firmware ne prevede 4,5.
Ho trovato una guida che spiega come sono stati calcolati i valori usando degli algoritmi ma non è robba mia!
ecco la spiegazione in inglese, paradossalmente capisco la lingua ma non la matematica!!



When am I ever going to use this stuff? I don't know how many times I have heard this lament during my teaching career. Well, to understand the conversion of degree data to scaled digital data, you have to use basic algebra skills. Here is a use for this stuff!

One complicating factor in making this conversion is that the BASIC Stamp is limited to integer mathematics. This means that even for simple mathematical operations, decimal parts of the computations are truncated and the resulting answers are rounded down to the nearest integer. This can inject unacceptable errors into computations. I will deal with the integer math limitations later.

To make the conversion from degrees to digital, you will have to dust off some basic algebra skills for linear equations. The output of the ADC is linear and follows the algorithm:Y=mX+B



Where m is the slope of the line Y2-Y1/(X2-X1)    and b is the Y-axis intercept. In terms of satellite position in degrees and digital word, Y is the converted value in digital word and X is the position in degrees. By using the little program called ADC_Checkout.bs2 (available from the author), you can determine the digital word value for the end points (0o  and 450o or 180o as appropriate) of the rotor. Once armed with these two data points, you can determine the slope
and Y intercept values for the two equations needed to convert the azimuth and elevation degrees into digital words.

The following computation example uses the data gathered with the prototype satellite tracker interface. You should not need to go through these steps to calibrate your interface, this is provided only for those who have the desire to know.

Satellite Tracker Interface ADC Data
AZ Degrees   AZ Digital Word
X1   0   Y1   30
X2   450   Y2   3710
EL Degrees   EL Digital Word
X1   0   Y1   12
X2   180   Y2   3712



Azimuth: slope   Y- intercept b = 30


Elevation: slope  Y-intercept b=12

Because the BASIC Stamp uses integer math, if we were to multiply the number of degrees by these slope values, 8.18 or 20.56, the fractional part would be truncated and result in error. The BASIC Stamp has a math operator that takes care of this situation, the Multiply Middle operator (*/). The Multiply Middle operator multiplies variables and/or constants, returning the middle 16 bits of the 32-bit result. This has the effect of multiplying a value by a whole number and a fraction. The whole number is the upper byte of the multiplier (0 to 255 whole units) and the fraction is the lower byte of the multiplier (0 to 255 units of 1/256 each). The */ (starslash) instruction gives you an excellent workaround for the BASIC Stamp's integer-only math. It is helpful to use hexadecimal notation for the multiplier so that you can keep track of the upper (whole number) and lower (fractional part) byte. You can use the WINDOWS calculator in the scientific mode as a convenient way to convert decimal numbers into the hex equivalent.

For example, to convert the azimuth value of degrees into the ADC digital word equivalent we need to multiply the number of degrees by the slope of the line and add the y intercept.


Y=8.18X+30

8=08in hex.18*256=46.08   rounded to46=2   in hex. Multiplier in hex is $082therefore: Y=$082e*X+30 . The line of code to reflect this algorithm is: new_az=new_az*/$082e+30. In a like manner, the multiplier for the elevation conversion is $148f (20 decimal in hex is 14). The line of code to reflect this conversion is: new_el=new_el*/$148f+12.



Ti ringrazio per ogni aiuto.
73' Auriga

Alinghi

Ci ho capito poco e niente, nella parte dei calcoli.
Ma non mi è chiara una cosa.
Il pic tramite un suo ingresso ADC legge il valore di tensione, e poi lo converte e lo elabora.

Se il firmware originale a 180° legge 4,5v a 360° quanto legge?
Supearti i 180° la tensione torna a diminuire?
Perchè i pic possono accettare in ingresso una tensione massima di 5 volt.





auriga

Ciao, a quanto ho capito i potenziometri dei due assi sono differenti, in azimuth l'ADC ha un range di 0volt a 0° e 3,6v a 360° mentre in elevazione siamo su quei valori lì 0v a 0° e 4,5v a 180.
La soluzione per l'azimuth l'ho trovata, visto che l'encoder lavora a tra 0 e 5v gli do in pasto 3,6 v così mi darà 0v a 0° e 3,6v a 360°, ma per l'elevazione il discorso cambia, perchè se volessi avere i 4,5v a soli 180° dovrei alimentarlo a 9 V ma lo friggo!!
Ecco il nocciolo della questione, ma del resto sono aperto a soluzioni alternative per ottenere quei valori...in verità avevo anche pensato di alimentare l'encoder a 4,5v e collegarlo ad un asse parallelo a quello vero e proprio con un aumento del 50% dei giri, in pratica se l'ingranaggio dell'elevazione ha fatto mezzo giro quello che è collegato all'encoder aumentato del 50% mi farà un giro sano e qui avrei quel valore di 4,5V.
Spero di essere riuscito a spiegare questa pazza idea!
tnx
73'Auriga

Alinghi

Mi viene in mente l'amplifgicatore operazionale, piccolo integrato in grado di amplificare segnali.
In pratica puoi provare ad alimentare il tuo encoder con una tensione di 4,5v, e quindi a 180 gradi ti restituira una tensione di 4,5/2=2,25v.
A questo punto invi questa tensione di 2,25v all'ingresso dell'operazionale, progettato per avere un amplificazione =2, e in uscita dovresti ottenere 4,5v.
Quà puoi vedere il semplice circuito dell'amplificatore operazionale http://it.wikipedia.org/wiki/Amplificatore_operazionale , guarda l'amplificatore non invertente, utilizzando 2 resistenze di uguale valore(meglio una resistenza ed un trimmer per correggere le varie tolleranze), dovresti avere un amplicazione=2, in pratica la tensione in uscita è il doppio di quella in ingresso.




Santo iw9hlk

forse così è meglio con l'operazionale, altrimenti devi trovare la routine che ti fa la conversione o meglio sostituire il tutto con dei trimmer multigiri (10 giri) mettendo i due estremi uno a +5 e l'altro a massa, quello centrale in un ingresso analogico  e modificare totalmente il software e accoppiando la parte meccanica per far coincidere i giri.
Nulla è per caso


Lino

Buona serata.

Mi permetto di fare qualche osservazione.

Il testo in inglese, se non sbaglio, dà solo una linea guida sulle modalità di conversione dei gradi angolari in sistema binario perchè, molto probabilmente, l'autore del progetto prevede di effettuare l'inseguimento automatico dei satelliti. Altro discorso è la conversione della tensione letta dall'ADC del PIC.

Per quanto riguarda la lettura della rotazione orizzontale hai già, secondo me giustamente, risolto limitando il fine corsa a 3,6 volt ma...c'è un "ma" non di poco conto. I rotori commerciali hanno il riferimento (fine corsa) a Sud; il software questo lo prevede?

Per quanto riguarda l'elevazione, se ho ben capito il firmware prevede una lettura di 4,5 volt a 180°. Direi che sei a posto, normalmente la massima escursione "coast-to-coast" dell'elevazione dovrebbe essere proprio 180°.

Se vuoi approfondire la conoscenza delle operazioni matematiche e delle conversioni tra i vari sistemi la rete offre tanto, ovviamente in inglese.

Saluti, Lino