Teljesitmeny szabalyozas

Sziasztok
Szeretnek egy olyan megoldast epiteni amivel egy izzo altal felvett valos teljesitmenyt tudom egyenlo lepesekben szabalyozni. Itt azt irjak hogy a szinusz negyzet integraljabol kell kindulni. Itt meg ven egy egyszeru modszer a szinusz hullam alatti resz egyenlo teruletekre valo osztasara. A kettot osszerakva lett az alabbi kod:
 

import numpy as np
from pynverse import inversefunc

n = 128
u = np.linspace(0, np.pi/2, n , endpoint=True)


integral = (lambda x: (1/2)*(x-np.sin(x)*np.cos(x)))
inverse = inversefunc(integral, y_values=u)


times=np.rint(inverse*(10000/np.pi))
print(list(times))

Ez elvileg egyenlo reszekre ossztja a szinusz negyzet grafikonja alatti teruletet es at alakitja mikro szekundumokba a kovetkezo kodhoz (ami egy arduino mega-n fut).
 

/*

AC Voltage dimmer with Zero cross detection
Author: Charith Fernanado Adapted by DIY_bloke
License: Creative Commons Attribution Share-Alike 3.0 License.
Attach the Zero cross pin of the module to Arduino External Interrupt pin
Select the correct Interrupt # from the below table 
(the Pin numbers are digital pins, NOT physical pins: 
digital pin 2 [INT0]=physical pin 4 and digital pin 3 [INT1]= physical pin 5)
check: <a href="http://arduino.cc/en/Reference/attachInterrupt">interrupts</a>

Pin    |  Interrrupt # | Arduino Platform
---------------------------------------
2      |  0            |  All -But it is INT1 on the Leonardo
3      |  1            |  All -But it is INT0 on the Leonardo
18     |  5            |  Arduino Mega Only
19     |  4            |  Arduino Mega Only
20     |  3            |  Arduino Mega Only
21     |  2            |  Arduino Mega Only
0      |  0            |  Leonardo
1      |  3            |  Leonardo
7      |  4            |  Leonardo
The Arduino Due has no standard interrupt pins as an iterrupt can be attached to almosty any pin. 

In the program pin 2 is chosen
*/
#include <Arduino.h>
int AC_LOAD = 3;    // Output to Opto Triac pin
int dimming = 0;  // Dimming level (0-128)  0 = ON, 128 = OFF

// ezt a tombot szamolja ki az elozo program
int16_t aa[] = {0,   1070, 1354, 1556, 1718, 1857, 1980, 2090, 2192, 2286, 2374, 2457, 2536, 2611, 2683, 2753,
               2819, 2884, 2947, 3007, 3067, 3124, 3181, 3236, 3289, 3342, 3394, 3445, 3495, 3544, 3593, 3641, 
               3688, 3735, 3781, 3826, 3871, 3916, 3960, 4004, 4047, 4090, 4132, 4175, 4217, 4258, 4300, 4341,
               4382, 4423, 4463, 4504, 4544, 4584, 4624, 4664, 4704, 4744, 4783, 4823, 4862, 4902, 4941, 4980,
               5020, 5059, 5098, 5138, 5177, 5217, 5256, 5296, 5336, 5376, 5416, 5456, 5496, 5537, 5577, 5618,
               5659, 5700, 5742, 5783, 5825, 5868, 5910, 5953, 5996, 6040, 6084, 6129, 6174, 6219, 6265, 6312,
               6359, 6407, 6456, 6505, 6555, 6606, 6658, 6711, 6764, 6819, 6876, 6933, 6993, 7053, 7116, 7181,
               7247, 7317, 7389, 7464, 7543, 7626, 7714, 7808, 7910, 8020, 8143, 8282, 8444, 8646, 8930, 10000};

//the interrupt function must take no parameters and return nothing
void zero_crosss_int()  //function to be fired at the zero crossing to dim the light
{
  // Firing angle calculation : 1 full 50Hz wave =1/50=20ms 
  // Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) 
  // For 60Hz => 8.33ms (10.000/120)
  // 10ms=10000us
  // (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65

  //int dimtime = (75*dimming);    // For 60Hz =>65    
  int dimtime = aa[dimming];    // For 60Hz =>65    
  delayMicroseconds(dimtime);    // Wait till firing the TRIAC  	
  digitalWrite(AC_LOAD, HIGH);   // Fire the TRIAC
  delayMicroseconds(10);         // triac On propogation delay 
				 // (for 60Hz use 8.33) Some Triacs need a longer period
  digitalWrite(AC_LOAD, LOW);    // No longer trigger the TRIAC (the next zero crossing will swith it off) TRIAC
}


void setup()
{
  pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
  attachInterrupt(0, zero_crosss_int, RISING);  // Choose the zero cross interrupt # from the table above
}
void loop()  {

for(int i=1;i<15;i++){
    dimming = (i*8); 
    delay(5000);
  }
}

A fenti kod innen van, ahogy az aramkor is linkelt leiras alapjan keszult.

 

Az a problema a fenti koddal/aramkorrel, hogy nem egyenlo lepesekbe szabalyoz. Minnel halvanyabban vilagitt az ego annal nagyobbak a fenyero esesek egy-egy lepes kozott. Ha beiktatok egy multimetert az izzo korebe es merem az aramot akkor az is azt mutatja, hogy minnel kevesebb a mert ertek annal nagyobbak az esesek egy-egy lepes kozott.

(A vegcel az lenne, hogy egy nagyobb teljesitmenyu SSR-el egy futtobetetet vezereljek a bojlerbe ami a napelem altal termelt "folosleget" viz melegiteser hasznalja. Tudom merni a haz aktualis fogyasztasat (egy shelly em-el),  1s-ent. Ha a "fogyasztas" mondjuk -2,1KW (negativ szam = hallozatra termeles) akkor a futobetet teljesitmenyet mondju 2KW ra kellene allitani. A kovetkezo meresnel korrigalni lefele/folfele az uj fogyasztasi ertek szerint.)

Hol rontom el a dolgokat? Nem vagyok annyira otthon az elektronikaban, hogy rajojek mi a problema. Lehet, hogy egy fogyastasmeron (ami az valos fogyasztast meri) egyenlok lennenek a lepesek? 
Elore is, koszonom a segitseget

 

 

Hozzászólások

Középiskolás koromban csináltam dimmert. DMX vevővel, kijelzővel, paraméterek álíítási lehetőségével.
Az a megoldás 2db mikrovezérlőből állt. (emlékeim szerint egy-egy 4Mhz-en működő PIC volt)

Az egyik mikrovezélrő gondoskodott a DMX jel vételéről, és annak a megfelelő módosításáról. Pl. előfűtés, ami lényegében minimális fényerőt jelent, és akár a maximális fényerő is illítható volt csatornánként. Ezenkívűl még karakterisztika 3 féle és ráadásképen switch üzemmód, ami felfogható 4. karakterisztikának. Ez a uC adta át a már kész értékeket a dimmer vezérlésnek. A karakterisztikák táblában voltak tárolva. A számítást így csak egy alkalommal kellett megcsinálnom, akár számológéppel, vagy abakusszal... akármivel. 

A második uC csak a nullátmenetre figyelt, és a kapott adatok szerint működött, kapcsolgatta a triakokat.
Ez a jelenség nekem is előjött akkor. Kicsi fényerőn volt úgymond állítható, a felső negyedben viszont már nem tapasztaltam számottevő különbséget.
A pontos megoldásra nem emlékszek, de mivel időzítő számolta a triakok indítási pontjait, így lehet az nem 8 bites volt, hanem akár 16bites számlálóval ment. Egy módosító tábla viszont biztosan volt.
Erre emlékszek, hogy exceles adatrögzítés, diagram rajzolás, próbálgatások utján született meg a módosító tábla.

Utána már a triak vezérlő rész úgy viselkedett, hogy szépen lehetett használni a teljes tartományt.

Tehát mindenféle számolgatás és varázslás helyett, szerintem 1-2 kompenzációs tábla kell, ami gyorsan visszaadja az értéket.

Mivel a uC nem tud sin/cos stb... függvényeket, azt a fordító amúgy is valami hasonló megoldással hozza esetleg össze. Ezt csak tippelem, majd valaki kiajvít.

(A vegcel az lenne, hogy egy nagyobb teljesitmenyu SSR-el egy futtobetetet vezereljek a bojlerbe ami a napelem altal termelt "folosleget" viz melegiteser hasznalja. Tudom merni a haz aktualis fogyasztasat (egy shelly em-el),  1s-ent. Ha a "fogyasztas" mondjuk -2,1KW (negativ szam = hallozatra termeles) akkor a futobetet teljesitmenyet mondju 2KW ra kellene allitani. A kovetkezo meresnel korrigalni lefele/folfele az uj fogyasztasi ertek szerint.)

Akkor odateszel egy PID szabályozót, aminek a vezérlő jele a napelemes szaldó és elfelejted az egészet.

nem vagyok benne nagyon mélyen, de azért egy 100W izzót sokkal könnyebbnek érzek szabályozni, mint egy 2-3kW fűtőbetétet, már csak az áthaladó áramerősség miatt is.
Én mindössze ki-be akartam kapcsolni a fűtőbetétet Blitzwolf okoskonnektorral - hát, nem működött túl sokáig az elképzelés (pedig jó ötletnek tűnt)...

nem vagyok benne nagyon mélyen, de azért egy 100W izzót sokkal könnyebbnek érzek szabályozni, mint egy 2-3kW fűtőbetétet, már csak az áthaladó áramerősség miatt is.

Hogy jön ide a teljesítmény? Ha 1 wattos, akkor meg még könnyebb szabályozni?

Én mindössze ki-be akartam kapcsolni a fűtőbetétet Blitzwolf okoskonnektorral - hát, nem működött túl sokáig az elképzelés (pedig jó ötletnek tűnt)...

Bővebben? :D

gyanítom, hogy elektronika szempontjából nem mindegy, hogy 0.1A, 1A, vagy 10A amit kapcsol/"dimmel"

A Smartplug pedig egy ideig látszólag jól ment, aztán érezhetően melegedett, hamarosan eljutott odáig, hogy (a túlmelegedés miatt?) a wifi kapcsolat nem működött, csak kézzel lehetett ki-be kapcsolni.

Persze, lehet, hogy a gyengeség oka az volt, hogy teljesítménymérést is tud.

A szilárdtestrelé tipikusan nem arra való hogy nagy áramokat szaggassál vele sokszor. Nekem van szilárdtestrelés kapcsolásom ami egy mechanikus relé primer körét vezérli. A mechanikus relé 32A-es, 10 éve megy, naponta elég sokszor (5-50) kapcsol ki-be.

Gábriel Ákos

A szilárdtestrelé tipikusan nem arra való hogy nagy áramokat szaggassál vele sokszor.

Hát pedig, de, arra való, sőt, vannak PWM vagy 0-5/10V analóg jellel vezérelhető SSR-ek, amelyek fázishasítást is tudnak, akár több száz amperre.

Nekem van szilárdtestrelés kapcsolásom ami egy mechanikus relé primer körét vezérli. A mechanikus relé 32A-es, 10 éve megy, naponta elég sokszor (5-50) kapcsol ki-be.

Annyi a baj az SSR használatával, hogy áram-arányosan viszonylag jelentősen melegszik, hűteni kell, 32A kapcsolása esetén ~30W is lehet a keletkező hő. Szokás ezért olyat, hogy párhuzamosan van kötve relével és a vezérlés bekapcsolja a terhelést az SSR-en át, majd késleltetéssel a relét is, ami így söntöli az SSR-t. Kikapcsolásnál fordítva, old a relé és aztán kikapcsol az SSR. Így nincsenek ívek, nullaátmenetnél van kapcsolás és a relé kontaktusok sincsenek igénybe véve.

Oké, pontosítsunk. Az ilyen okoskapcsolókban jellemzően levő szilárdtestrelék hűtése pocsék, vezérlése primitív, ezért ha ezeken nagy áramot kapcsolsz, akkor melegedni fog és előbb-utóbb valami tönkremegy.

De te is pontosíthatnál mert 30W az nem hő(mennyiség) hanem teljesítmény, ami jelen van x ideig, ebből adódik egy energia/hőmennyiség.

Gábriel Ákos

Az ilyen okoskapcsolókban jellemzően levő szilárdtestrelék hűtése pocsék, vezérlése primitív, ezért ha ezeken nagy áramot kapcsolsz, akkor melegedni fog és előbb-utóbb valami tönkremegy.

Amennyit láttam, ott a legtöbben egy 10 amperes relé volt, a drágábbakban vagy a dimmelésre képesekben van SSR vagy triac. A probléma ezeknél az, hogy a relé is melegszik, illetve leginkább a PCB gyatra és így a PCB is melegszik és nem tud hova szellőzni.

De te is pontosíthatnál mert 30W az nem hő(mennyiség) hanem teljesítmény, ami jelen van x ideig, ebből adódik egy energia/hőmennyiség.

Így van, akkor fogalmazok úgy inkább, hogy 30 watt melegíti és olyan hűtést kell rátenni, ami el tudja ezt a hőt vezetni.

Nem vegeztem pontos szamitasokat de meggyozheto vagyok...
Nekem csak abba az idoszkba kell ez amikor meg nem keszit eleg melegvizet a napkollektor, es ez ra tud segiteni... Nem tudok pontos szamokat mert nem reg van meg a napelem, de ugy gondolom hogy az a keves amit ra tud segiteni a melegviz eloalitasra azt keves gaz hasznalatavak ki tudom valtni. Ha draga ez a vezerlo akko sok ido mig megterul a gaz ara...
Ami vezerlot neztem volt (nem emeleszem melyiket) annak ugyan ott kell legyen az inverter ahol a haznak a betapja van mert meri mind a kettot. Nekem ezek jo messze vannak egymastol tehat meg itt is lehet buktato...
De mint mondtam nyitott vagyok...

Értem, mit szeretnél de ez egy picit bonyolultabb. Az izzószál NEM ellenállás. Utóbbira jó a szinusz alatti területed.
Az izzószál melegszik a rájutó teljesítmény hatására és ezáltal a meleg szál ellenállása jelentősen megnövekszik. Ezt az izzó-specialitást mellesleg régen oszcillátorok amplitudó stabilizálására is használták.
Fényerőnél további változó: a teljesítmény függvényében más "színhőmérsékletre" tesz szert, más lesz az infra (hő) és a látható arányban lesugárzott energia mennyisége. Először inkább hőt ad, erősebb teljesítménynél nő meg a látható fény aránya.

Tehát ha egyenletes lépésekben akarsz léptetni
   - TELJESÍTMÉNYT, akkor ahhoz meg kell mérned az izzón folyó pillanatnyi áramot és kiszoroznod a feszültséggel. Vagy fixen vagy minimum az első kalibráláskor.
   - FÉNYERŐT, akkor ahhoz fényerőt kell mérned. Vagy fixen vagy minimum az első kalibráláskor.
Vagy van varázsképleted izzó karakterisztikára?

Egy 230 V-on használatos 100 W-os izzó ellenállása hidegen (szobahőmérsékleten) kb. 30 ohm, melegen (nagyon melegen, amikor izzik) meg kb. 530 ohm.

A "futtobetet", ami igazából fűtőbetét, nem izzik úgy, mint az izzó, így ott lényegesen kisebb az ellenállás-változás, esetleg el is hanyagolható. Mérd meg, hogy az adott fűtőszál ellenállása hidegen milyen értéket mutat, a teljesítményéből és üzemi feszültségéből meg kiszámolhatod, hogy melegen mennyi lesz az ellenállása - szerintem nem lesznek túl távol egymástól az értékek.

Jogos, de nem akartam belemenni.
Viszont ha már belementünk, az ellenállás sem hőmérsékletfüggetlen, szintén megvan a pozitív (fémréteg) vagy negatív (szénréteg) hőmérséklet függése.

Itt esetünkben inkább ott van a különbség, hogy az elektronikai áramkörben a kisteljesítményű ellenállásokat legtöbb esetben 20 fok alatti hőingással használunk, míg izzószálat kb. 2500 °C körüli kikapcsolás-bekapcsolás állapotbeli eltéréssel.

Attól félek ez nem fog működni!! De lehet hogy tévedek...

Gondolom az a célod, hogy az elszámolásban a szaldó minél kisebb legyen, tehát a termelt áramot helyileg elfogyasztani.

DE: ha SSR-el kapcsolgatsz, akár fázishasítással, akár nullátmeneti kapcsolással, az igaz lesz hogy az átlag teljesítményt tudod szabályozni, nade a fogyasztásmérő hány harmonikusig mér? Fejből nem tudom a szabványt, de szerintem elég sokáig.

Ennek következményei:

fázishasítás esetén: a periódus első részében, amikor nincs bekapcsolva a TRIAC, akkor szépen visszatermelsz a hálózatra, a második részében, amikor be van kapcsolva, akkor pedig fogyasztani fogsz.

nullátmenet esetén: a bekapcsolt periódusokon plusz fogyasztás lesz, a kikapcsolt periódusokban plusz termelés.

Ezen kívül még arra is figyelni kell, ha három fázisú csatlakozásod van, hogy az inverter lehet hogy szimmetrikusan táplálja a fázisokat, de a fogyasztás nem szimmetrikus, és ekkor hiába van mondjuk 3 kW termelés és 3 kW fogyasztás. Ha a fogyasztás extrém esetben egy fázisra koncentrálódik, akkor a mérőd szépen 2 kW termelést és 2 kW fogyasztást fog regisztrálni.

Ami tényleg működhet az egy olyan fogyasztó, ami valóban változtatható ellenállásként működik. Pl. jó a fűtőbetét is, csak autótrafóval kell szabályozni. Vagy több fűtőbetét használata, de ez tudom hogy már bonyolultabb. Pl. egy 1 és egy 1.5 kW-os használatával, azok soros és párhuzamos kapcsolásaival 24, 40, 60 és 100% teljesítmények is beállíthatók.

Gondolom az a célod, hogy az elszámolásban a szaldó minél kisebb legyen, tehát a termelt áramot helyileg elfogyasztani.

Igen az a celom hogy termelt aramot helyileg felhasznalni...

fázishasítás esetén: a periódus első részében, amikor nincs bekapcsolva a TRIAC, akkor szépen visszatermelsz a hálózatra, a második részében, amikor be van kapcsolva, akkor pedig fogyasztani fogsz.

nullátmenet esetén: a bekapcsolt periódusokon plusz fogyasztás lesz, a kikapcsolt periódusokban plusz termelés.

fazis hasitasra gondoltam hogy az fog mukodni... de lehet hogy nem?

Ezen kívül még arra is figyelni kell, ha három fázisú csatlakozásod van, hogy az inverter lehet hogy szimmetrikusan táplálja a fázisokat, de a fogyasztás nem szimmetrikus, és ekkor hiába van mondjuk 3 kW termelés és 3 kW fogyasztás. Ha a fogyasztás extrém esetben egy fázisra koncentrálódik, akkor a mérőd szépen 2 kW termelést és 2 kW fogyasztást fog regisztrálni.

Egy fazis van

Nem tudom pontosan hogy működnek ezek a mai mérők, de abban egészen biztos vagyok, hogy még fázishasítás esetén a mérő rendelkezésére áll az információ, hogy a periódus egyik felében termeltél, a másik felében fogyasztottál.

De lehet hogy ezt aztán kiátlagolja egy vagy néhány periódusra. Ezt nem tudom. Viszont azt igen, hogy a hiteles méréshez jónéhány harmonikusig kell mérni, és emiatt a fázishasítás látszódni fog a mérő számára. Lehet jó lenne először kipróbálni egy ilyen fogyasztót.

Szerintem a fényérzékelésünk sem lineáris a teljesítménnyel. Tippre nagyjából logaritmikus skálát kell csinálni, az lesz érzésre egyenletes.