
-----------------------------------
nobody
11 Feb 2024 00:08


-----------------------------------
Felicitari pentru progresele de la Layer 1 !

Acu' la layere superioare:
Measuring voltage, current, power and total power consumption

Since we are dealing with mostly PWM controlled power, calculating the current usage without implying a means to average out the readings will yeld to very jumpy and innacurate results. Therefore, I have implemented an array that gets updated over time, then average the sum of all the values in the array to obtain the average current usage over 150 cycles. The GET_POWER() function runs in a loop everytime.

To determine the total power consumption since device has been connected, we need to measure the total power consumption in W*h per each cycle, then add that up to a total. Since the Arduino Nano floating point only allows for 2 decimals of precision, we need to first calculate the power in milliseconds, then divide that power by 3600000 (number of milliseconds in an hour).

Nu prea am inteles la ce te referi cand zici ca float are numai 2 zecimale precizie.
In principiu are 23 de biti brut (fara semne si exponent).
Dar poti folosi intregi daca alegi subunitati de masura mai potrivite si mai intuitive, de ex. mV, uV, mA, uA ...
Asa eviti si multe impartiri, coversii de tip (multe implicite/ascunse), confuzii si alte complicatii inutile.

Cu un layer si mai sus, mie mi se pare ca functia GET_POWER() face altceva decat crezi sau intentionezi.
Poate am inteles gresit, te rog sa ma corectezi daca-i cazul.

PWR_TOTAL vrea sa fie energia in Wh consumata/acumulata pe tot timpul functionarii ca un contor de consum de la instalatia electrica.
Iei un timestamp 'time1' la inceputul masuratorii.
Iei un burst 150 de samples de tensiune si faci media aritmetica in V.
Iei un burst 150 de samples de curent si faci media aritmetica in A.
Valoarea asta medie o salvezi intr-un array (wrap arround) care tine ultimele 150 de medii.
Parcurgi tot array-ul si calculezi media pe ultimele 150 de medii ca un filtru pentru fluctuatiile date de PWM.
Calculezi puterea mendie PWR = VOLT * AMP in W.
Iei un timestamp 'time2' la sfarsitul masuratorii.

Apoi integrezi energia consumata inmultind puterea medie PWR cu timpul cat a durat masuratoarea (time2-time1) si adaugand-o la consumul cumulat anterior in Ws (PWR_TOTAL_S). Aici poate mai bine folosesti submultiplii zeicmali de genul mWh, uWh. Dar nu asta e problema, ci acel interval de timp subliniat mai sus. Tu acumulezi numai energia doar din timpul masuratorii, nu de la o masuratoare la alta. asta se poate corecta usor folosind un timestamp anterior de cand ai apelat ultima data PWR_TOTAL.
Cred ca mai poti simplifica masuratorile si mediile intr-un singur ciclu, masori alternativ curentul si tensiunea (si la tensiune poti avea fluctuatii in timpul PWM) sa fie cat mai apropiate si faci o medie generala de putere, sau energie consumata.
