Fórum témák
» Több friss téma |
Szia!
Ha elég lehet a fordulatszám harmadolás, akkor a hivatkozotthoz hasonló triakkos kapcsolással is lehet "frekvenciaváltót" készíteni. Már több témában volt róla szó, pl.: az aszinkron motoros elektromos kapuk motorjának is ilyen módon csökkentik harmadára a fordulatszámát. Elvileg lehet más fordulatszámokat is elérni, de azok esetében nagyobb lesz a kimeneti felharmonikus tartalom. Ha ez érdekes lehet, akkor az egyfázisú ciklonkonverterek világában kellene elmerülnöd.
Köszi.
Én a PICkitminus -t használom és egyenlőre úgy tűnik együttműködik az MPLAB X V6.15-el. De még tesztelem.
Sziasztok!
Egy ellenállás hőérzékelővel működő hőmérőt szeretnék építeni, ehhez PIC16F877A mikrovezérlőt használok. Eddig még csak olyan vezérlőket használtam, amiben volt belső óra. Ebben nincs. Ehhez vettem egy 20 MHz-es kvarckristályt, amit az OSC1 és OSC2 lábakra tettem. A kvarc és az OSC2 közé egy 470 ohmos ellenállást. A kvarc mindkét végére egy-egy 33 pF-os kondit, amiket földre kötöttem. Pont úgy, ahogy az adatlapjában szerepel. Ld. melléklet. DE nem működik a PIC. Ezek után letöröltem a programot és egy egyszerű kapcsoló--LED programot írtam rá és az sem fut. Tehát itt a külső kvarcban keresném a hibát. A konfig biteknél a HS-t választottam. Még arra gyanakszom, hogy lehet, hogy a kondenzátoroknak több hőt adtam, mivel csak SMD kialakításút kaptam, így azzal megküzdöttem. De sajnos nem tudom kimérni és a kvarcot se, mert nincs oszcillátorom. Tudtok valami okosságot javasolni? Az ellenállás és a kondi értékek jók lehetnek? Köszönöm! A hozzászólás módosítva: Jan 6, 2024
MCLR (1-es) láb felhúzva tápfeszültségre? Konfigurációban LVP kikapcsolva (ha nem használod), Watchdog kikapcsolva (ha nem használod)? Soros ellenállás nélkül is próbáld ki. Azok az esetek ritkábbak, amikor kell.
szerk.: Nyílván a te dolgod, de vannak sokkal újabb, olcsóbb és jobb kontrollerek, mint ez az őskövület. A hozzászólás módosítva: Jan 6, 2024
Sajnos minden úgy van ahogy írod.
A jövőbeni munkák miatt, melyik kontrollert javaslod?
Van másik, biztosan működő kontrollered? Mutasd meg az egyszerűbb programod, mert mire végigkérdezzük, mit hogyan állítottál be, szkállat ereszt mindenki.
Perpillanat a Q csalág a legújabb, sok hasznos beltartalommal. 40 lábú pl. PIC18F47Q43, 28 lábú pl. PIC18F27Q43. Családtagok közt van olyan, amelyik ismeri az USB/CAN kommunikációt. Megnéztem egy magyar boltot. PIC16F877A: 2500.- Ft (nettó) PIC18F47Q43: 1060.- Ft (nettó) A kettőt nem is nagyon lehet összehasonlítani. Utóbbi kisujjában van mindaz, ami az előzőben megvan. Vagy PIC16F18877 (970.- Ft nettó).
Ez volna a próbaprogram:
Első körben kapcsold ki az LVP-t és a BOREN-t. A kvarcra sok a 33pF, nagyjából 10-15pF az oda való 20MHz esetén.
Megnéztem ezt az új Q családot. Újra kell tanulni az egészet, elszomorodtam. Maradok az ősréginél, amíg kapható!
Az LVP-t végül kikapcsoltam, mert használtam digitális bemenetként az RB3 lábat.
Az adatlapja azt írja, hogy 20 MHz-nél 15-33 pF megfelelő. Ezért választottam 33-t. Gondolod, hogy ez okozhat ilyen hibát, hogy semmit sem csinál a kontroller?
Mennie kellene akkora kondenzátorral is. Oszcilloszkóppal lehet ellenőrizni, hogy megy-e a kvarc egyáltalán.
Ugyan ebben a programban nem érdekes, de az összes analóg láb analóg üzemmódban maradt (ADCON1 regiszter). Teszt alatt az RD4 kimenet átvált H szintre? A Timer 2 megszakításban 1 perc szerepel a megjegyzésben, de az valójában 10 perc lesz (30 000 / 50 Hz).
Nem vált szintet az RD4.
Az időt úgy számoltam, hogy a 20.000.000 Hz-t osztottam 4-gyel (egy művelet) aztán előosztó és utóosztó 4 és 10. Ennek vettem a reciprokat. Ezt 250-szer veszem, ez 2 ezred másodperc. 500-szor ennyi az 1 másodperc és azt 60-al szorozva ( tehát összesen 30.000-szer véve) 1 perc. Lehet hogy bonyolult, de szerintem logikus. De ez legyen a legnagyobb problémám! Sajnos ez nem segít a dolgon.
Ezt nem tudom, hogy mit jelent.
De most először config2. módban tömörítettem az MPLAB X IDE felületen belül, majd ezután csináltam hex fájlt. Ez nem tudom okoz-e problémát. (Bár a próbaprogramot nem kellett tömörítenem és az se fut...)
Találtam ezt a projektet.
Csak a működése kicsit magyarázatra szorul nekem. Sajnos a forráskód nem hozzáférhető. A pwm frekvencia vajon miért 4,88kHz? A színuszhoz közelítő jelalak, hogyan érhető el?
Nem tudom, miért 4.88 kHz, valószínűleg így jön ki a matek egyszerűen. Egy fix PWM jel mindig állandó kitöltésű. Ha a kitöltést változtatod egy szinuszhullám függvényében (modulálod), akkor az "átlag" megközelíti a szinuszhullám alakját. Így működnek a frekvenciaváltók. Ezzel a kapcsolgatással érhető el a legkisebb veszteség készüléken belül, ezért használják ezt a módszert.
A "config2" jelenthet bármit, ez csak az aktív konfiguráció neve. Próbáltad a "megszokott" módon beállítani az MPLAB programot (talán config1 vagy default néven fut)? Egyébként igen, okozhat problémát.
Ezt a kísérleti áramkört én követtem el. A PWM frekvencia azért ennyi, mert 20Mhz a külső órajel, ezt négyel osztva megkapjuk a belső órajelet, amit 1024-el osztva kijön a 4.88kHz. Az 1024 órajel van a PWM egy periódusának kiszámolására és kiküldésére. (Ennél persze kevesebb olyan 750 belső órajel kell a valóságban.)
Az áramkörben lévő PIC a két szimmetrikus PWM jelet teljesen software-ből generálja, manapság biztos találni olyan kontrollert, ami ezt megteszi hardverből, meg eleve gyorsabbat is könnyű találni, így feljebb lehetne menni frekvenciában a nem hallható tartomány fölé. Meg lehet venni ILYEN modult (EGS002), és programozni sem kell és az áramkör nagy része is megvan. A hozzászólás módosítva: Jan 6, 2024
Megnéztem ezt a modult. Ha jól értem ebben a kimeneti frekvencia fix 50 vagy 60 Hz. Nekem pont a változtatható frekvencia lenne a lényeg, tehát ez nekem nem lesz jó. Jól értem?
Igazából a kristály adatlapját is érdemes megnézni, (ha ismert a gyártója és pontos típusa) mert a gyártója tudja, hogy milyen kapacitásokkal fog a legstabilabban és a névleges frekin rezegni. Ha a PIC adatlapja közli az oszcillátor lábak kapacitását, akkor azt természetesen kivonni belőle. Ha nem közli, akkor marad a hasraütés.
Nem PIC-cel, hanem más kontrollerrel jártam már úgy, hogy szobahőmérsékleten rendben ment a szerkezet, de pár tíz fokot melegedve leállt a kristály oszcillátor, mert a kontroller adatlapján ajánlott kapac kevés volt a kristálynak a stabil működéshez.
Az LVP-t és a BOREN-t kikapcsoltam. Default módra állítottam vissza, de semmi nem változott. A kis kondik beforrasztásánál sokat bénáztam, mert csak SMD kialakításút kaptam. Akkor már be volt forrasztva a kvarc is. Nem lehet, hogy vagy a kondi vagy a kvarc sok hőt kapott és tönkre ment? Ezt hogy tudnám csekkolni? (Tudom oszcilloszkóppal, de sajnos nincsen...)
Idézet: Lehetséges. Ha multiméterrel nem mérsz zárlatot, attól még szakadt lehet. „Nem lehet, hogy vagy a kondi vagy a kvarc sok hőt kapott és tönkre ment?”
Idézet: „Megnéztem ezt a modult. Ha jól értem ebben a kimeneti frekvencia fix 50 vagy 60 Hz.” A modul így van megcsinálva, de a raja lévő EG8010 tudja a 0..100Hz vagy 0..400Hz tartományt is csak a 19-es lábat a GND helyett a tápra kell húzni és a 16-os lábra kell beküldeni a kívánt frekvenciával arányos jelet.
Szia!
Ez biztosan jó? T2CON= 0b01001001 ; A jobb olaláról haladj a bal felé, mert ez a regiszter csak 7 állítható bittel redelkezik, a legmagasabb helyiértéken 0-nak kell lenie, de épp kikapcsolod a timer2-t! A datasheet 61.oldalán van. Datasheet Már ha jó adatlapot nézek. Szóval jobboldalról nézve az első két bit Prescale utána a Timer2 on/off bit, ami nálad nulla utána 4 bit Post scale Ez mindösszesen 7 bit. Elcsúsztál szerintem egy bittel! De tévedhetek is. Én ezért szoktam a megfelel biteket külön a nevével állítgatni. Tudom hosszabb és az MPLAB-nak is ismernie kell, de jobb néha szerintem. De csak gyorsan ránéztem, lehet nem ez a gondod.
Ok, benéztem, bocs, már nemengedte törölni.
Látom, hogy a while-ban éppen ezt a bitet állítod 1-re. Bocs mégegyszer, elnéztem!
Ez pontosan hogyan működik?
Az uzemmód változód 1 értékkel van. Elvileg elindul a timer2. Utána pillanatok alatt megint erre a kódra fut a vezérlés. Ha az uzemmód2 változód megint 1 maradt, akkor ha újra bekapcsolod a timer2-t, az nem okoz gondot? dsPIC-nél ilyenek azért okoztak nálam galibákat. Csak azért kérdezem, mert a szoftverhibát könnyebb javítani, mint a hardvert, hátha szerencsés vagy és ilyen a gond csak... Szóval a T2CONbits.TMR2ON=1; nem vonja maga után a timer resetet is? Mert ha igen, akkor soha nem éri el a beállított értéket, ezért az interrupt függvény sem fut le soha. Esetleg egy segédváltozót Volatile-ként defniálva, és azt betenni az if-ekbe is, ha nem fut a timer, akkor indítsa el. Az interrupt függvényben meg ez a változó 0-ra, ha lefutott a counter. No meg még egy gond is van. Az interruptban lévő változók NEM Volatile-ok!! t2cnt NEM Volatile, azaz össze vissza változik. Ezzel kezd, ez nagy baj. Ha utána sem megy, akkor a plusz változóval csak akkor indít, ha nem fut a timer2. Ez a plusz változó is Volatile. Ha ekkor sem megy, akkor a hardveres hiba. dsPIC-nél ezekre nagyon kellett figyelni, szerintem itt is fontosak, főleg a Volatile! no meg persze a flag-et is állítod interruptban, annak is volatile-nak kell lennie! A hozzászólás módosítva: Jan 9, 2024
Attól, hogy egy változót megszakításban használsz még nem szükséges volatile -nak definiálni. Csak akkor kell, ha a változót a megszakítás függvényen kívül is felhasználod. Magyarul: ha több független programszálban is használva van az a változó. Jelen esetben t2cnt nem kell, hogy volatile legyen, mert csak a megszakításban van felhasználva, a flag-nek viszont annak kellene lennie.
És a flag?
Továbbá sokkal egszerűbb kideríteni, hogy a külső oszcillátor megy-e, ha a beépített delay-el a while-ban villogtat egy LED-et, azaz eldönti megy-e egyáltalán, illetve ha láthatóan nem 1s, akkor a beállításokkal van gond.
A másik, hogy sokszor a Timer2 külső oszcillátorról is mehet a belső órajeltl függetlenül, nem a belső sínről, amit most a külső oszcillátor hajt meg. A két dolog lehet független egymástól, ennek is utána kellene járni, hogy melyik van beállítva. De ezt a PIC-et fejből nem ismerem, simán lehet jó is. Elsőre szoftveresen próbálkoznék mindenképp, utána ha nincs szerencsém, akkor hardver hiba.
Látom írod is a flag-et, azt nem vettem észre, bocs!
De ennek ellenére szerintem, ha a flag is az, akkor is éremes meg gondolni, hogy ha nem megy így sem, akkor nem indítom a timert folyton, mert ami indítja változó simán nem vált, lehet reseteli. Szerintem egy sima led vilogtatás kellene megfelelő ellenállással és akkor a leosztásoknak és a kvarc frekijének ismeretével egy sima másodpercet is mutató órával nagy vonalakban elleőrizhető is lenne. A timert-t elindítanám a main-ban, az interruptban meg negálnám a LED lábát. Persze ekkor sokszorosan le kell osztani az órajelet. 20MHz/(256*256) lehet ide nem lesz elég sajnos. De legalább villogna Másik meg, hogy nem indítok semmit, a delay-t a while-ba ahol negálnám a LED lábát és kész. Ha az oszcillátor nem megy, akkor ott kibukik a hiba rögtön. A hozzászólás módosítva: Jan 9, 2024
|
Bejelentkezés
Hirdetés |