Elettronica e Radiotecnica > Pic micro

Modifica firmaware

(1/2) > >>

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??

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

Navigazione

[0] Indice dei post

[#] Pagina successiva

Vai alla versione completa