Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   836 / 839
(#) Massawa válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Majd mérlegelem. Eredetileg az volt a tervem, hogy az ISR csak inditja a ciklust amit mindenképpen befejeznék mielött az ujabb ISR jönne, azaz a 2 kimenet idöösszege soha nem lehetne nagyobb mint 20 ms.
A frekvencia nem annyira lényeges ahogy eredetileg is 50 - 60 Hz-re lett minden méretezve.
Most még a HW összeállitásával vagyok elfoglalva. De az ma meglesz .

Igen 2 ( illetve 4, mert 2 független áramkört kell meghajtani ) változo PWM valami kell, de nem lehet a belsö PWMet használni hanem koddal kell kialakitani ráadásul ugy, hogy alapbol a 2 PWM egyforma ( az arányuk 1) csak az egyik a másikat követi aránylag stabil frekin (20ms periodussal). Egy külsö jelre megváltozik a 2 PWM aránya kb 5-10%-l, hogy legyen a jelben kb 2-3 V DC komponens.
(#) andyka válasza gaspa hozzászólására (») Márc 21, 2024 /
 
Helló
Sokat gugliztam a témán, de semmi konkrét dolgot nem találtam.
Egyedüli mintakód (könyvtár) amit találtam és amelyiket háromfázisra tudnám alkalmazni az a „RBDDimmer”, csak sajnos nem elég tökéletes. Nem huzza le majdnem nullára a fogyasztást (az már nem is lenne gond hogy 94% fölött összevissza vibrál).
Ma reggel pihent fejjel még dolgoztam rajta és elméletileg (seriál port kiírás meg beépített led segitségével) úgy néz ki hogy kellene müködnie az időzitő megszakításokkal. Majd a hétvégén ki is probálom.
A pillanatnyi felesleg áramot egy SDM630-as kütyüvel számitom kimérni, az már meg is van, mint ahogy a triakok is.
Mindezek melett nem keseredem el mert van B terv is -> három ilyen meg egy MCP4728. Ezeket lehet vezérelni külön-külön és nem kell bibelődni a triak gyújtási időzítőkkel.
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
Olvasom amit készítesz, elég érdekes projekt. A triakok vezérlése, meg gondolom nullátmenet stb. figyelése is kell, de ennyire nem vágom. Azonban felmerült a kérdés:
1: Olcsóbb a 230V AC-as fűtőszál, az igaz. A fűtszának mindegy, milyen áramot/feszt kap, nem kényes épp ezért lehet fázishasítással is dolgozni vele. De, nem lett volna egyszerűbb minden fázist egyenirányítani, majd PWM-et engedni rá? A PWM kitöltési tényezjét úgy szabályozni, hogy a felesleg mennyen csak fűtszálra.

2: van ilyen, de drága:
Bővebben: Link

Ezt közvetlenül rá lehetne kötni a napelem rendszerre, mondjuk nem ártana simítani kicsit, de ezt is PWM-el lehetne kapcsolgatni.

Ilyesmi is tervben volt? Ha igen akkor mi volt a gond vele? Csak okulás képp kérdezem bennem ez merült fel, nem tudom pontosan, hogy járható út vagy sem.
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Sőt lehet könnyebb lett volna, ha a 50Hz szinuszt kapcsolgatsz PWM-el, esetleg némi matekozással ki lehetne számolni mikor mekkora kitöltés kell ahhoz, hogy az átvitt teljesítmény a kívánt legyen. Nullátmeneteket kell figyelni, onnan dt időben lehet tudni a szinusz értékét, majd ahhoz a PWM aktuális kitöltéssel kapcsolgatva. Nem járható ez ilyenkor? Pl. nullátmenet figyelése, utána Graetz híd, utána FET driver utána a fűtőszál. Arduino meg felügyel. Ez nem járható út?
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 / 1
 
A tárolási szerkezet az a puffer-tartály lenne, olyan fűtőszálal, hármas-al, hasonló.
„De, nem lett volna egyszerűbb minden fázist egyenirányítani, majd PWM-et engedni rá?” - az is egy megoldás, lehet hogy az lessz a vége (kérdés mennyire melegednének az áramszabályzó tranzisztorok - FET).
Közvetlenül a DC-re nem akarok kapcsolódni, még valami gubanc lessz, nem feltétlenül emiatt és majd ráfogja a szerelő hogy én rontottam el és oda a jotállás.
A hozzászólás módosítva: Márc 21, 2024
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 / 1
 
„ 50Hz szinuszt kapcsolgatsz PWM-el, [...] Nullátmeneteket kell figyelni, onnan dt időben ... ” - ez nem pont ugyanaz mint a triak kapcsolgatás ? Az elmélet ugyanaz szerintem.
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
De, hasonló, sőt kicsit nehezebb számolni vele, de lehet olcsóbb lenne. Bár most kezdtem utána nézni, mégis ez a drágább. Olcsóbb megoldást szerettem volna, de lehet amit te csinálsz sokkal olcsóbb is. Mennyibe került a megfelelő teljesítményű Triak?
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 / 1
 
Triak, meg Triak
(#) asch válasza Massawa hozzászólására (») Márc 21, 2024 / 1
 
>nem lehet a belsö PWMet használni
Miért nem lehet? Ha tudod úgy vezérelni jelről jelre ahogy neked tetszik, akkor sem?

KoblogPerGyok: 3 timer van, és timerenként 2 kimenet. A 3 timer számlálóját ha nagyon akarjuk össze lehet szinikronizálni - persze ehhez már számolgatni kell egy kicsit. (Az újabb ATTiny-ken van dedikált funkció arra, hogy két timert egyszerre indítsunk el!) Szerintem nagyon sok fajta kombináció meg lehet valósítani, de azért nem egyszerű feladat. A software serial példánál tovább nem mentem soha én sem, csak sejtem, hogy mi mindent meg lehetne csinálni vele. Az AltSoftSerial-ból csináltam egy módosított változatot, ami tud invertált jelformát, illetve 2 stop bitet és paritás ellenőrzést. A series-1 ATTiny-khez csináltam programozót ezzel a megoldással, oda kell speckó serial. Itt van a módosításom az eredeti libhez: https://github.com/rizsi/AltSoftSerial
(#) KoblogPerGyok válasza asch hozzászólására (») Márc 21, 2024 /
 
dsPIC-ben futottam bele a motor kontroller PWM-be, de nekem nem kellett azt használnom. Ugye ott van Full-bridge, Half-bridge mód, ott akár 6 pint lehet megfelelő módon birizgálni stb.

Bővebben: Link

A 213. oldalon kezdődik az izgalmas rész, de mint mondtam nekem nem kellet ez a része. Arduino-val pedig pláne nem mentem ennyire mélyen bele a dolgokba, nem is tudom melyik jobb ebben az esetben. Azt már látom, hogy az Arduino-val is lehet csuda dolgokat csinálni azzal a módszerrel amit mutattál. Még nem próbáltam ki, de kifogom.

Andykának is jó lehet esetleg a link, mert lehet át lehetne kalapálni a 3 fázisú motor vezérlést erre, bár nem biztos, mert épp fázisonként szeretné vezérelni.

No mindegy is, kipróbálom a korábbi linken Arduino-s ComparA + ComparB-t, az tetszik.

Kösz a hozzászólásokat, én sokat okultam belőlük, bár elkalandoztam Massawa feladatától, de élvezem ezt a diskurzust.
(#) andyka válasza asch hozzászólására (») Márc 21, 2024 /
 
Hello
„Mert akkor inkább úgy vezérelném, hogy T/2-kicsire is tennék egy időzítőt, hogy a félperiódus végén mindenképpen kikapcsolt legyen már a vezérlés, nehogy lekéssük a kikapcsolás lehetőségét. Tehát valami ilyesmi: PIN ISR ->timer x idő múlva bekapcs -> timer T/2-x-bizonsági_tartalék kikapcs.”
A kérdésem az lenne hogy teszerinted, de akárki elmondhatja a véleményét,
Mennyi időt is vesz fel egy pin lekapcsolása HIGH-röl LOW-ra az ESP32-nél ?
Vagyis, ideális esetbe, 50 Hz-nél, meddig tolhatom ki a triak kikapcsolását ? hány mikrosecundummal a zero cros előtt adja ki a parancsot az időzitő a triakot hajtó pin kikapcsolására ?
(#) Massawa válasza asch hozzászólására (») Márc 21, 2024 /
 
Mert annak az alapfrekvenciája nagyságrenddel nagyobb, mint ami kell. Az szervokra, LEDekre stb lett fejlesztve.
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
A triak adatlapja tudja mennyi kell, te pedig tudni szeretnéd, hogy mennyi idő alatt jelenik meg a jelváltozás a programkód kiadása után, ha jól értem. Csodálkoznék, ha micro sec lenne. Annál kevesebb. Inkább úgy teszteld a kódodat, hogy egy ciklusban pl. 1000x meghívod a rutint, és méred a futási időt, miközben természetesen a változód, ami a pillanatnyi teljesítményhez kell (dt_gyujtas) mindig más, mintha élesben menne.

Megnézed a minimumot és a maximumot. A maximumot veheted a legrosszabbnak de ha elmented az eredményeket, akkor Excelben is megnézve átlagot, szórást (jó lenne ha ez kicsi lenne), min-max-ot lehet keresni. Abból meg meg tudod állapítani, hogy ha a max időhöz mennyit kellene tenni, hogy az esetek döntő többségében jó legyen. Már ha a fent említett kimaradás nem okoz komoly bajt, azaz, ha a triak rövidebb impulzust kap a nullátmenet előtt, mint ami kellene neki akkor mi történik...
Így el lehet érni, hogy az esetek 99.99%-ban jó legyen. Kipróbálnám, hogy 1000 futásból mennyi a max. Utána 10000-el is. Ennyi esetben tuti megtalálod a legrosszabb esetet.

Szerintem a kódod kissé ugrálós része miatt ez sokkal nagyobb lehet, mint a láb változása. De lehet tévedek, mert a kódodban ami ezt állítja nincs sok if, meg ciklus. De akkor is ránéznék, nem túl nagy meló.

Rádiós triggernél így teszteltem, bejött mert ki tudtam zárni.

A kérdésedre meg nincs pontos válasz, függ pár dologtól az emlékeim szerint, de minden esetben 240MHz órajelet feltételezve micro sec alatt marad, ami szerintem ennél a feladatnál bőven jó. (Lehet bőven alatta)
A hozzászólás módosítva: Márc 21, 2024
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Akkor élek a lehetőséggel és fel is teszem a kódot.
Ez csak elméleti/ számítási példány, hoghy kövessem a müködését.
Az a két sor a Serial-al persze el fog maradni
  1. #define TrPin_1 2
  2.   #define Zcr_1  15  
  3. volatile boolean tr_1 = false;
  4. hw_timer_t *Timer_1 = NULL;
  5. //void IRAM_ATTR ISR_1(); void IRAM_ATTR onTimer_1();
  6. portMUX_TYPE timerMux = portMUX_INITIALIZER_UNLOCKED;
  7. void IRAM_ATTR onTimer_1(){ portENTER_CRITICAL(&timerMux);
  8.                             digitalWrite(TrPin_1, tr_1);
  9.                             timerWrite(Timer_1, 0);
  10.                             timerAlarmWrite(Timer_1, 1000000, false);
  11.                             timerAlarmEnable(Timer_1);
  12.                             if(tr_1 == true){ Serial.println("timer + 2 sec");//proba
  13.                                                       tr_1 = false;  }//proba
  14.                                        else { Serial.println("timer + 1 sec");  }//proba
  15.                             tr_1 = false;
  16.                             portEXIT_CRITICAL(&timerMux); }
  17.  
  18. void IRAM_ATTR ISR_1(){ digitalWrite(TrPin_1, tr_1);
  19.                         timerWrite(Timer_1, 0);
  20.                         timerAlarmWrite(Timer_1, 2000000, false);
  21.                         timerAlarmEnable(Timer_1);
  22.                         Serial.println("ZCR + 2 sec");
  23.                         tr_1 = true; }
  24.                        
  25. void setup(){ Serial.begin(115200); Serial.println(); Serial.println("... start ...");
  26. pinMode(TrPin_1, OUTPUT);  
  27. pinMode(Zcr_1, INPUT_PULLUP);    
  28. attachInterrupt(digitalPinToInterrupt(Zcr_1), ISR_1, FALLING);
  29. Timer_1 = timerBegin(0, 80, true);  timerAttachInterrupt(Timer_1, &onTimer_1, false);  timerAlarmEnable(Timer_1);
  30. delay(1000);
  31. }
  32. void loop(){
  33.   delay(1);
  34. }
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
Egyelőre nem értem pontosan mert PIC-hez jobban értek, de nem minden világos miért van.

Én ilyesmin gondolkodnék:

-Nullátmenetbe: (interrupt)
Timer 1 indítása a megfelelő idő betöltésével, így az annyi idő után kapcsol be amit a kívánt teljesítmény igényel. (addig nulla ugye) Azaz 10ms-nél kisebb idővel ugye.

-Timer 1-ben: (interrupt) //Ez adná meg, melyik időben kell kapcsolni a pillanatnyi teljesítményhez

a triak lába bekapcsol, a láb magas.
timer1 kikapcsolása
timer1 kinullázása //úgyis a nullátmenet indítja el

itt indítanék egy timer2-t, ami mindig fixen ugyanannyi idő alatt fut le, ami a triak kapcsolás ideje

-Timer2-ben: (interrupt)
a triak lába kikapcsol. Ez a timer2 adja meg a triaknak szükséges impulzus hosszt.
timer2 kikapcsolása
timer2 kinullázása //Majd elindítja újra a timer1, mikor kella kakaó

Az egészre meg úgy figyelnék, hogy a timer1-be betöltendő idő nagyobb legyen, mint amit a teljesítmény igényel + a triak gyújtási ideje. + valami 1-2 mikroszek a lábak miatt, amit korábban kérdeztél.

Azaz a timer 1 időt NEM lehetne egy bizonyos szint alá vinni. Ezt kellene meghatározni, valamint azt, ha ez van, akkor mit tegyen a progi.

De lesznek nálam sokkal jobban értők is, szerintem tuti kapsz jó megoldásokat, ráadásul a tiéd is lehet jó, lehet csak én nem vágom.
A hozzászólás módosítva: Márc 21, 2024
(#) pipi válasza andyka hozzászólására (») Márc 21, 2024 /
 
Hali!
Interruptba ne tegyél serial print-et, mert hosszú ideig tart, gondolj bele 1 karakter a soroson mennyi idő alatt csorog ki, szétcsapja az időzítéseket. Inkább csak egy flag-et tegyél amit a főprogramból figyelsz és printelsz, Vagy csak gyújtogass ledet az irqban.
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 / 1
 
Összesen 4 időzítő van amiből 3 elmegy a 3 fázisra, még marad 1, az megtenné.
Úgy probáltam összeállítani hogy
1. előszőr a nullátment elinditja, de csak egyszer fut onnan 2 sec,
2. aztán mikor lefut (eltelik a 2 sec), ekkor inditaná a triakot,
3. Triak inditása után újraindítom ugyanazt, 1 sec értekkel, ez is csak egyszer fut,
4. mikor lefut, kikapcsolná a triakot.
(persze, az 2 ás 1 sec ember által érzékelt értékek, a triaknak mindkét érték összege 10 msec alat kell hogy legyen).
Látszólag müködik.
A hozzászólás módosítva: Márc 21, 2024
(#) andyka válasza pipi hozzászólására (») Márc 21, 2024 /
 
Azt írtam is, röviden igaz, hogy a Serial.print, csak kisérleti, nmyomonkövetési okbol van ott most.
Élesbe majd nem lessz ott
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Ez lenne az alapkoncepció, majd gondolkodnék azon, mi van, ha zavar van a hálózatban, vagy elszámoltam valamit, azaz időközben beüt egy másik nullátmenet. Első körben a nullátmenet beérkezésekor elindítanék mindent, majd az utolsó sorában leválasztanám a függvényt róla, azaz kikapcsolnám a detektálást. A timer2 lefutása után pedig engedném újra.

Vagy: logikai változókkal oldanám meg, azaz mindig lenne detektálás, de csak akkor indítanék timer1-et, ha a timer2 lefutását és így mindennek a kinullázását jelző változó 1. persze akkor ezt a változót a megfelelő helyeken kell beállítani és kinullázni. Így elkerülném szoftveresen, hogy ráindítson 2x. Az más kérdés, hogy utána olyan beállításokkal kellene mennie, hogy ne csak minden második félperiódusban működjön, és tényleg azt tegye amit szeretnék.
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 / 1
 
Minden nullátmenetet számitásba probálok venni, csak most irodába vagyok és egy gémkapoccsal váltom ki a nullátmentet, azert FALLING, még a frekvencia ingadozásra is gondoltam, úgy 49,5-től 50,5-ig, persze ezeket mind kimatekolom.
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
Pfú!

ezt elfelejtetem, még agyalok kicsit, hátha megvilágosodom hogyan lehetne ezt ennyi timerrel jól megoldani.
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Volna még egy kérdés, a
Idézet:
„Serial.println(micros());”
, mennyi időt vesz fel ?
Ha egymás után nyomtatom, akkor 37 micro sec a külömbség
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
Kezdem érteni a kódod mi mért van.

Épp ma asch kolléga vetette fel a timer compare módokat. Csak egy ötlet:

Mi van, ha a timer ad interruptot a comparra is, meg mikor letelt arra is? Ok ez Arduino-nál esetleg működhet, de csak egy béna ötlet:

Azaz: Nullátmenetnél timer indít, akkora értékkel ami a kívánt teljesítményhez kell + a triak gyújtása.

De! A triak láb a compar eseménynél kapcsol be, azaz a compar értéke a timer értéke- a triak gyújtása, majd a timer lejártát jelző interruptnál meg a triak láb alacsony. A timer lejártát jelző interruptban a timer kikapcsol.

Érdekes lenne, ha ez Arduino-ban működne! Persze ESP-töl ez jelenleg messze van.
A hozzászólás módosítva: Márc 21, 2024
(#) andyka válasza KoblogPerGyok hozzászólására (») Márc 21, 2024 /
 
Értem, az Arduino-tól van messze szerintem, IDF-be szerintem lehet, csak 50 éves fejemnek elég az Arduino
A hozzászólás módosítva: Márc 21, 2024
(#) KoblogPerGyok válasza andyka hozzászólására (») Márc 21, 2024 /
 
Úgy értettem, hogy asch Arduino-ban említette, te pedig ESP-ben nyomod nem? Ahhoz nem értek sajnos.

De Arduino-ban lehet menne. A két regiszter érték egymástól független lehet, így a ráaggatott interruptok is. Esetleg ESP-ben is érdemes lenne ezt megnézni, mert akkor jelentősen egyszerűbb lenne és 3 timer elég lenne a 3 fázisra.
A hozzászólás módosítva: Márc 21, 2024
(#) pipi válasza gaspa hozzászólására (») Márc 21, 2024 /
 
Hali!
Tesztelgetem a JSY-MK-194T-t. Van egy nagy hibája, legalábbis nálam.... A teljesítmény irány bájtja (mindkét csatornán) mindig nulla, Az adatcsomagban nincs hiba, a crc stimmel, a fesz és áramértékek is helyesek a válasz csomagban. a 27-28 bájt a két csatorna iránya.
A válasz (100W izzó) :
0x01H,0x03H,0x38H,0x00H,0x24H,0x34H,0xaaH,0x00H,0x00H,0x10H,0x3eH,0x00H,0x0fH,0x16H,0xcbH,0x00H,0x00H,0x00H,0x0aH,0x00H,0x00H,0x03H,0xe8H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x13H,0x84H,0x00H,0x24H,0x34H,0xaaH,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x6aH,0x1aH
A kábelt másik irányból befűzve az áramtekercsbe a válasz gyakorlatilag ugyanaz
0x01H,0x03H,0x38H,0x00H,0x24H,0x18H,0x28H,0x00H,0x00H,0x10H,0x3aH,0x00H,0x0fH,0x06H,0xc6H,0x00H,0x00H,0x00H,0x14H,0x00H,0x00H,0x03H,0xe8H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x13H,0x85H,0x00H,0x24H,0x18H,0x28H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x00H,0x3dH,0x77H
Tesztelte már valaki ezt a modult? Köszi
(#) gaspa válasza pipi hozzászólására (») Márc 21, 2024 /
 
Szia
Csak tegnapelőtt kaptam az enyémeket,még nem volt időm rá.Eladtam a napelem forgatóimat és a napelemeket most rakom át a tetőre.Egyébként,ha kicsit terhelve járatod,a negatív/pozitív energia regiszterekben látható a változás?
(#) Sick-Bastard hozzászólása Márc 21, 2024 /
 
Elnéézést nem tudok hozzászolni....mndent mindig kitöröl...
A hozzászólás módosítva: Márc 21, 2024
(#) pipi válasza gaspa hozzászólására (») Márc 21, 2024 /
 
Sokat még nem járattam, nem mozdultak azok a regiszterek. Úgy látom a feszültséget, áramot elég pontosan méri, rosszabbra számítottam...
Amúgy látok káoszt az erőben több verziójú doksit is találtam a JSY-MK-194T-hez, és most összehasonlítgatva vannak ám jelentős különbségek a regiszterek kiosztásában...
Írtam a gyártónak, kiváncsi leszek lesz-e reagálás. A gyártónál semmi letölthető doksit/progit nem találtam, innen-onnan gyűjtögettem, meg néztem a gyári saját tesztprogijával amiről van kép a pdfben(éppen negatív ott), de nálam az is csak "pozitívot" jelzett. Ugyanazt a madzagot fűztem be a 2 tekercsbe, de egymáshoz képest fordítva , így tuti az egyiknek fordított előjelűnek illene lenni.
(#) KoblogPerGyok válasza pipi hozzászólására (») Márc 21, 2024 /
 
Kösd be rosszul a két vezetéket. Azaz a két vezetéket nem fordítva.
A hozzászólás módosítva: Márc 21, 2024
Következő: »»   836 / 839
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem