10-21-2022, 11:18 AM
(10-20-2022, 06:43 AM)mikikg Wrote:Code:...
float ADCCurrentRawValFinal = sqrt(ADCCurrentRawForSquareRoot);
MeasuredCurrentmA = (float)1000.00 * (( (float)ADC_REF_VOLTAGE / (float)ADC_RESOLUTION) * (float)ADCCurrentRawValFinal) / (float)CURRENT_SENS_RESISTOR; // Rsens = 0.1
...
Koliko god da je kompleksan račun, nama je diskretizovana ulazna vrednost i za 10bit A/D može da ima 1024 rezultata jer su sve ostale vrednosti u računu konstatne.
Ovaj gore račun se prebaci u tablicu i program istog momenta POLETI, tu se više ne troši vreme
I kad se tako rastereti MCU/CPU onda se "odvrne" malo sampling-rate da to sve radi sa više uzoraka u sekundi i onda se preostalo CPU vreme potroši za neku neophodnu minimalnu FP matematiku da se rezultati fino ujednače/filtriraju i eventualno poboljša preciznost rezultata.
Apsolutno si u pravu... pravili smo tabele i tabele ranije sa PIC16F628, PIC16F877 itd... ali sada je nekako došlo novo vreme i poroka na sve strane. Ja eto, podlegao da korisim float-point matematiku i na malim PIC-ovima Današnji "klinci" ne mogu da shvate o čemu pričamo, zar ne
Šalu na stranu, Mikijev pristup je najispravniji, jer je "matematika" na ovaj način extremno brza, a jedina "žrtva" je malo više kodne memorije. Dodatno, umesto float-point uvek je moguće koristiti integer kalkulacije u veći domen, pa zatim podeliti rezultat sa 1000, 1000000, itd...
P.S. STM32F4 već imaju ugrađen math koprocesor za float 32bita, dok STM32H idu i na float 64 bita...