Fórum témák
» Több friss téma |
Ez nem a klasszikus 3 fázisú szinusz, mert csak 60 fok van a csúcsok között.
Lassítsd le a jelalakot a programban (minden ciklus tovább tartson), így pontosabban lehet látni, hogy a tüske egyszeri hiba vagy számítási anomália.
Próbáld meg a PWM ciklusához szinkronizálni a kitöltési tényező beírását.
Ez eléggé lehetetlen, 19,5kHz el megy a PWM és annyi trükközök, hogy alacsony frekvencián több jelet használok a szinusz táblázatból magasabb frekvencián kevesebbet. Van erre is egy külön programrészlet amiben ezzel bűvészkedek. Plusz a számítások ideje is változik a szorzótényezők értékének függvényében és ezzel beállni a PWM frekijének valamennyi egész számú többszörösére, hát nem igazán egyszerű.
A hiba pontszerű 200-300 usec között van. A hozzászólás módosítva: Márc 3, 2017
Erre való az IT. Még utóosztót is lehet állítani hozzá, hogy pl. minden 16. ciklusra adjon IT-t, és itt állítani a PWM-et. Ilyenkor viszont azt kell figyelni, hogy ne pont a számítások félállapotából számoljon új PWM-et. Itt még időt is lehet mérni, hiszen ez a megszakítás azonos időnként jelentkezik.
Nem tudom mi a PWM min./max. értéke lehet érdemes mondjuk 10-90% közé rakni, de ez a FET meghajtástól is függhet.
Szia HP41C
A kuldött fájlt lefordítottam. Eredmény: succesful, Errors: 0kB A beégetés során nem jöttek a korábbi hibák. (No device ID és Not contain config bits.) A próba során a kijelző alsó sora jónak tűnik, de a felső sora elég zavaros Hamarosan próbálom a második fájlt amit küldtél. Köszi a fárdozást. ramok UI: töltöttem képeket is. A hozzászólás módosítva: Márc 4, 2017
Két szinusz jel közötti időt a timer1-el mérem (a timer0-t használom a poti beolvasására és az lcd kijelző írására, mert azokat elég csak időnként olvasni/írni). Na szóval annyi csináltam, hogy a timer1 prescale-jét átállítottam 1:4-re és minden hülyeség megszűnt. Szóval valahol itt lesz a galiba. Ha átállítom a prescale-t akkor rövidebb időközönként frissíti a PDC-t és az interruptban is több idő van a következő frissítésig. Még azt kellene kitalálni, hogy mit kellene kezdeni.
Ez az interrupt ahol a számítások és miegymás történik kb. 43usec futásidejű. Lehet mégis csak az a baj, hogy a PWM 19,5kHz frekvenciája amely kb. 51usec összemérhető az megszakítás idejével, így csúszások lehetnek. Mindjárt kigondolok valamit hogy lehetne a kettőt összehozni. Esetleg még azzal is lehetne trükközni, hogy mivel alapból a frekvencia függvényében változtatom a szinuszhoz felhasznált jelek számát valahogy össze lehetne kombinálni vagy akkor tényleg lesz még egy megszakítás. Van még pár kétségem, de nekilátok hátha összejön.
Minél inkább gondolkodok annál kevésbé értem a hiba okát. Próbáltam számolgatni is, de ez a szinkronizálás hiány maximum olyat csinálhatna, hogy az adott frekvencia kicsit kevesebb, megnyúlik a periódusidő a csúszás miatt, de kitöltési tényező érték hibát nem okozhatna, letiltottam a pdc írása előtt a frissítést utána egyből engedélyezem. A hiba pedig egyértelműen az, hogy rossz érték kerül a PDC-be. Ez a szinkronizálás csak a periódusidő pontosságán javítana, legalább is szerintem.
Az is érdekes, hogy csak a PWM0 PWM2 és PWM4 moduloknál jön elő a hiba, amik lényegében pont a komplementerek. Próbáltam azt is, hogy a táblázat pozitív és negatív félperiódusát megcserélem, de ugyan úgy csak a páros PWM moduloknál van a hiba. Az is látszik, hogy a hiba hossza pont a következő megszakításig tart. Mintha az adott pillanatban rosszul számolná ki a PDC értékét vagy rossz érték kerülne bele. Egyszerűen nem értem. Ha nem 255-tel vagy 254-el szorzom a táblázat értékét akkor nincs ez a hiba, ha nem 19,5kHz e PWM kapcsolási frekije hanem a negyede akkor szintén nincs ilyen hiba. Nem látom az összefüggést, pedig valószínűleg egy a hiba.
Ha a hiba ciklikusan és reprodukálhatóan fordul elő, akkor egy külön függvénnyel meg tudod határozni konstansként is, hogy mit kellene végeredményként kiszámolnod a pwm bemenetére, és ha az az érték nem egyezik az elméletivel, pld felkapcsolhatsz egy piros ledet a pic egyik kimenetén. Úgy legalább a számítási hibákat kiszűrheted.
Néhány napot kihagytam. A régi nyáklapot letakarítottam.
Két külön álló lapra újból elkészítettem a függöny projekt javított kiadását. A PIC tápját simítani kellet (100 mF +100uF) met csak rángatta a reléket. Most simán működik egy kivétellel: A belsőleg felhúzott PORTB2-re jön egy föld jel. Ezt a PIC érzékeli és indul a motor. A PORTB3-ra jönne szintén egy föld jel, ha megakad motor. Már több, mint 5 sec. késleltetés után újra figyeli a bejövő jeleket. A PORTB3 lábon a fesz. már 4 Volt fölé megy, de földnek érzékelve elmegy a program a LEÁLLÁS részre. Mit tegyek, hogy a PORTB3 a lábán közel 5 Volt értéknél ne érzékelje 0 állapotúnak? ![]()
Sziasztok!
8 bites PIC komparátorával és feszültség referencia moduljával akarok egy 4 bites a/d-t csinálni. Első gondolatom egy if-else szerkezet végig bontva mind a 16 esetre, de elég erőforrásigényesnek tűnik. Ha jól értelmeztem, akkor az összes feltételt végig vizsgálja.
(VRCON utolsó 4 bitje a Vref bitek) Ez a megoldás működőképes e, vagy tudtok e ajánlani egy jobb megoldást? válaszokat előre is köszönöm. A hozzászólás módosítva: Márc 4, 2017
4 lépésben: szukcesszív approximáció
Akkor gyorsítani kell a számolást, és figyelni, hogy mindig szinkronban legyen. Lehet a táblázatba érdemes befoglalni számításokat, legfeljebb int típusú lesz, de egyszerűsödik. Meg kellene nézni a fordító a >>8 parancsot byte cserére fordítja-e, mer ha igen akkor a kisebb tologatások helyett érdemesebb lehet úgy számolni, hogy mindig egy byte-nyi eltolás jöjjön ki.
Tehát akkor más a jelalak a PWM két komplementer kimenetén?
Most kifejezettem csak a PWM1-et működtetem (PWM0 és PWM1 komplemeterként).
A két jelalak nem egyezik meg vagyis ha a 180°-onkénti váltást nézzük akkor nem. A PWM1 megy 0-179°-ig a jelalak jónak tűnik, a PWM0 180-359° között hibás. Annyit csináltam, hogy írtam egy feltételt, hogy amikor a kitöltési tényező eléri a maximumot külön az egyik félperiódusban külön a másikban a két led kimenetre ráküldök egy 1-est amíg a feltétel igaz, ha nem 0-t. Szóval látom hogy közvetlenül a számítás után mikor kellene maximális kitöltési tényezőnek lennie és mindkét esetben egyforma. A számítások szerintem helyesek amikor 2032-t kell kapnia a PWM1-nek megkapja amikor 0-t a PWM0-nak az is ok. Olyan mintha a PDC beírásakor lenne valami galiba vagy néha csak úgy valami miatt a komplementer pár hibázna. Próbáltam 0 és nulla közeli értékeket beírni a PDC-be hátha nem szereti, de akkor hozta a PWM0 a maximális kitöltést.
Még egy észrevétel:
Írtam, hogy csinálok olyat, hogy bizonyos frekvencia felett nem használom ki a 360 jelből álló szinuszt hanem fokozatosan "eldobok" belőle. Azt még észrevettem, ha több jelet dobok el akkor van hogy kiesik 1db hiba. 41Hz alatt 3 helyen van ilyen tüske 41-50Hz között pedig 2db. (Felette nem nagyon vizsgálódtam eddig, mert ott már az egyszerűsített programrész fut ahol nincs szorzás, de 55Hz-ig ott is van 1db hibás jel. 55Hz-től pedig megszűnik.) Elég nehéz következtetéseket levonni, olyan mintha mégis szinuszjel hiba lenne és amint kiesnek a hibás elemek minden jó lesz, de nem biztos, hogy nem ilyen jellegű a hiba. A hibák úgy néznek ki a csúcsok közelében vannak és csak a PWM páros moduljait érintik, és mint említettem csináltam egy összehasonlítást a páros és a páratlan modulhoz tartozó a moduloknak megfelelő maximális kitöltési tényezőket vizsgálva és ott jónak tűnnek. Számomra kezd ilyen megmagyarázhatatlan hibának tűnni, de az is érdekes, hogy a PDC frissítésének tiltása nincs hatással a hibákra. A hozzászólás módosítva: Márc 4, 2017
Én megcsinálnám azt, hogy extrém módon lelassítanám a léptetés sebességét (mondjuk 1/sec-re), ekkor ugye a teljes hullám 360sec alatt fog lezajlani. Ha ekkor nem jelentkezik a hiba, akkor valami tranziens jelenség van a háttérben, ha így is jelentkezik, akkor meg jobban meg tudod állapítani hol tartasz (mondjuk egy terminálra soros porton kiküldöd az aktuális pozíciót, esetleg a PWM értékét is).
A portb3 egyáltalán digitális bemeneti üzemben van? A/D átalakítód ha van azon a lábon, ugye kikapcsoltad? Milyen egyéb spec pic funkció van még a b3-on? Nyák elkötéseket meg hasonlókat meg kellene kukucskálni.
Üdv! Csak egy kérdésem lenne. Ha egy PIC-en beállítok az +ref bemenetre 4,5V-ot, a -ref a GND-n, akkor ha a bemenetre 5V kerül, akkor is '11111111' lesz az eredmény pl. AN0-n? Gondolom 4,5V felett mindig?
Nyilván többször átnéztem. Az még gyanús nekem, hogy lassan mászik vissza a feszültség és akkor sem éri el a kiindulási 5,03 voltot, hanem csak a 4,6-ig megy föl. Lefelé, a motor indulásakor egyből leesik 1,23-ra.
Induláskor, amíg nem hozom működébe a motort az 5,03-at simán 1-nek értékeli, de az újból visszatérő 4,6-ot már nem.
Szia!
Igen, a +Uref-nél nagyobb jeleket "levágja" ![]()
Ha "anlóg" jel van azon a lábon, miért nem használsz analog bemenetet?
Aztán programból beolvasod az értéket, kiértékeled, és ott dontod el hogy 1 vagy nulla.
Azokban a kontrollerekben nincs A/D konverter.
Ha nem mutatod meg a forrást mindenki csak találgat...
![]()
Itt a PORTB,3 láb kapcsolása
Sziasztok!
Van arra valami megoldàs hogy egy pic 2 darab 2x16 LCD kinelzöt hajtson meg?
Szerintem van. Az LCD modulokat lehet 4 bites adattal hajtani (8 bit két lépésben)
Van ezenkívül egy Chip Enable, egy Data/Instruction és egy Read/Write lába. Ez utóbbi kettő csak bemenet, és akár párhuzamosan is használhatod a két LCD-n. Az adatbitekt nem tudom pontosan, végig kellene olvasni az LCD doksiját, talán azt is párhuzamosan lehet kötni, ha kijelöletlen LCD modulon azok nagyimpedanciás állapotban vannak. De így vagy úgy 14 kimenettel mindent külön tudsz kezelni. Ha a fenti két bemenetet párhuzamosan kötöd, elég 12. Ha az adatbiteket is lehet párhuzamosítani akkor 8 port elég. A kedvencemnek (16f628) van 16 ki/bemenete, az mindenképpen elég, 2 marad is. A hozzászólás módosítva: Márc 5, 2017
Ez tud két kijelzőt: Karakteres LCD driver. Az E lábakat leszámítva párhuzamosan kötheted a lábait, így csak egyetlen plusz lábat igényel a két kijelző az egyhez képest.
Forrás alatt forrásfájlra gondoltam, amiből a hex-et fordítod...
Szerintem semmi akadálya. Az LCD akkor olvassa be az adatvonalak tartalmát ha az E-t magas szintre állítod, így elméletileg akárhány LCD-t köthetsz ugyanarra az adatvonalra, csak az E-ket kell külön vezérelni. Persze ezt is csak akkor ha eltérő információt akarsz kijelezni, mert ez ugyebár nem derül ki a kérdésből. Ha csak duplikálni akarod a kijelzést akkor csak kösd párhuzamosan!
|
Bejelentkezés
Hirdetés |