Là, j'ai vachement bien simplifié le calcul de l'offset et du coup amélioré la stabilité de la mesure :-)
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
-- Lit le convertisseur ADC connecté sur le transformateur de courant
|
||||
-- pour mesurer le courant électrique de l'installation PV
|
||||
print("\n 0_get_data.lua zf190916.1904 \n")
|
||||
print("\n 0_get_data.lua zf190916.1925 \n")
|
||||
|
||||
-- Astuce de mesure:
|
||||
-- au lieu de découper la sinusoïde en 100 parties, c'est à dire toutes
|
||||
@@ -13,13 +13,12 @@ print("\n 0_get_data.lua zf190916.1904 \n")
|
||||
-- quelque soit sa forme !
|
||||
-- On le somme sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
|
||||
|
||||
zadc_offset=550
|
||||
zadc_offset=548
|
||||
zpow_cal=401
|
||||
zadc_cal=189
|
||||
zadc_err=-5
|
||||
|
||||
zadc_min=zadc_offset zadc_max=zadc_offset
|
||||
zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
|
||||
zadc_sum=0 zadc_offset_sum=0 znb_mes=0
|
||||
zadc_rms1=0 zadc_rms2=0 zadc_rms3=0
|
||||
|
||||
if adc.force_init_mode(adc.INIT_ADC)
|
||||
@@ -40,10 +39,7 @@ end)
|
||||
|
||||
function read_adc()
|
||||
zadc=adc.read(0)
|
||||
if zadc<=zadc_min then zadc_min=zadc end
|
||||
if zadc>=zadc_max then zadc_max=zadc end
|
||||
zadc_min_sum=zadc_min_sum+zadc_min
|
||||
zadc_max_sum=zadc_max_sum+zadc_max
|
||||
zadc_offset_sum=zadc_offset_sum+zadc
|
||||
zadc=zadc-zadc_offset if zadc<=0 then zadc=zadc*-1 end
|
||||
zadc_sum=zadc_sum+zadc znb_mes=znb_mes+1
|
||||
end
|
||||
@@ -51,16 +47,11 @@ end
|
||||
function calc_rms()
|
||||
zadc_rms=math.floor(zadc_sum/znb_mes)+zadc_err
|
||||
if zadc_rms<=0 then zadc_rms=0 end
|
||||
zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
|
||||
zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
|
||||
|
||||
zadc_min=math.floor(zadc_min_sum/znb_mes)
|
||||
zadc_max=math.floor(zadc_max_sum/znb_mes)
|
||||
zadc_offset=math.floor((zadc_min+zadc_max)/2)
|
||||
|
||||
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
|
||||
print(zadc_min,zadc_max,zadc_max-zadc_min,zadc_offset,zadc_rms,zpower.."W")
|
||||
-- zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
|
||||
-- zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
|
||||
zadc_offset=math.floor(zadc_offset_sum/znb_mes)
|
||||
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
|
||||
print(zadc_offset,zadc_rms,zpower.."W")
|
||||
zadc_min=zadc_offset zadc_max=zadc_offset
|
||||
zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
|
||||
|
||||
zadc_sum=0 zadc_offset_sum=0 znb_mes=0
|
||||
end
|
||||
|
||||
66
Mesures/solar_pv_energy/0_get_data.lua.190916.1911
Normal file
66
Mesures/solar_pv_energy/0_get_data.lua.190916.1911
Normal file
@@ -0,0 +1,66 @@
|
||||
-- Lit le convertisseur ADC connecté sur le transformateur de courant
|
||||
-- pour mesurer le courant électrique de l'installation PV
|
||||
print("\n 0_get_data.lua zf190916.1904 \n")
|
||||
|
||||
-- Astuce de mesure:
|
||||
-- au lieu de découper la sinusoïde en 100 parties, c'est à dire toutes
|
||||
-- les 0.2ms (5'000x /s), pour en faire l'intégrale. On lit l'adc toutes
|
||||
-- les 11ms (91x /s) beaucoup plus lentement.
|
||||
-- Comme la sinusoïde fait 20ms et est répétitive, on balaye (par décalage)
|
||||
-- statistiquement la sinusoïde.
|
||||
-- On redresse l'alternance par rapport à la masse fictive (env 0.5),
|
||||
-- ce qui nous permet d'estimer une valeur RMS du courant
|
||||
-- quelque soit sa forme !
|
||||
-- On le somme sur 2.1 secondes avec une moyenne glissante sur 3 valeurs
|
||||
|
||||
zadc_offset=550
|
||||
zpow_cal=401
|
||||
zadc_cal=189
|
||||
zadc_err=-5
|
||||
|
||||
zadc_min=zadc_offset zadc_max=zadc_offset
|
||||
zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
|
||||
zadc_rms1=0 zadc_rms2=0 zadc_rms3=0
|
||||
|
||||
if adc.force_init_mode(adc.INIT_ADC)
|
||||
then
|
||||
node.restart()
|
||||
return
|
||||
end
|
||||
|
||||
tmr_read_adc=tmr.create()
|
||||
tmr_read_adc:alarm(11, tmr.ALARM_AUTO, function()
|
||||
read_adc()
|
||||
end)
|
||||
|
||||
tmr_calc_rms=tmr.create()
|
||||
tmr_calc_rms:alarm(2.1*1000, tmr.ALARM_AUTO, function()
|
||||
calc_rms()
|
||||
end)
|
||||
|
||||
function read_adc()
|
||||
zadc=adc.read(0)
|
||||
if zadc<=zadc_min then zadc_min=zadc end
|
||||
if zadc>=zadc_max then zadc_max=zadc end
|
||||
zadc_min_sum=zadc_min_sum+zadc_min
|
||||
zadc_max_sum=zadc_max_sum+zadc_max
|
||||
zadc=zadc-zadc_offset if zadc<=0 then zadc=zadc*-1 end
|
||||
zadc_sum=zadc_sum+zadc znb_mes=znb_mes+1
|
||||
end
|
||||
|
||||
function calc_rms()
|
||||
zadc_rms=math.floor(zadc_sum/znb_mes)+zadc_err
|
||||
if zadc_rms<=0 then zadc_rms=0 end
|
||||
zadc_rms1=zadc_rms2 zadc_rms2=zadc_rms3 zadc_rms3=zadc_rms
|
||||
zadc_rms=math.floor((zadc_rms1+zadc_rms2+zadc_rms3)/3)
|
||||
|
||||
zadc_min=math.floor(zadc_min_sum/znb_mes)
|
||||
zadc_max=math.floor(zadc_max_sum/znb_mes)
|
||||
zadc_offset=math.floor((zadc_min+zadc_max)/2)
|
||||
|
||||
zpower=math.floor(zadc_rms*zpow_cal/zadc_cal)
|
||||
print(zadc_min,zadc_max,zadc_max-zadc_min,zadc_offset,zadc_rms,zpower.."W")
|
||||
zadc_min=zadc_offset zadc_max=zadc_offset
|
||||
zadc_sum=0 zadc_min_sum=0 zadc_max_sum=0 znb_mes=0
|
||||
|
||||
end
|
||||
Reference in New Issue
Block a user