Fórum témák
» Több friss téma |
Sziasztok!
Segítségeteket szeretnem kérni egy problémában... Egy 18f46k22-es PIC-kel szeretnék kapcsolni egy relét. A PIC egy 6V-os zselés akksiról kapja a tápot egy low drop stabkockán keresztül (1000 µF puffer és 100nF-os kerámiakondik a helyükön). A relé 12V-os, tekercse 360 Ohm. A relé tekercse egy 12V-os trafóról megy. Az akksi és a trafó közös GND-n van. A relét a PIC egy tranzisztor mezőn keresztül kapcsolja. A relé tekercsével ellenpárhozamosan elhelyeztem egy 1N4007-es védődiódát. A problémám az, hogy a PIC a relé sokadik számú kapcsolása után véletlenszerűen lefagy. Valószínűleg a relé kapcsolásakor keletkező tranziens okozza. Optocsatolós galvanikus leválasztást nem tudok beletenni, mert a NYÁK már adott. Mellékeltem egy vázlatos, egyszerűsített rajzot is. Tudnátok valami tippet adni, hogyan küszöbölhetném ki ezt problémát? Előre is köszönöm a segítségeteket!
Nincs semmilyen más külső eszköz rárakva? (nyomógomb, LCD, stb...)
Mit kapcsol a relé? Lehet onnan jön vissza valami zavar.
6db mikronyomógomb van rákötve billentyűzet gyanánt, egy 2×16-os LCD kijelző és egy RTCC modul I2C-vel.
Egy kis 230V-os motort kapcsolgat (kalickás forgórészű). De próbáltam már LADA ablaktörlő motort is kapcsolni, ami szintén ezektől külön tápról ment, ugyanígy fenn állt a probléma.
Szia
Pont nemrég (2 orája) hasonlo problémába ütköztem én is, nálam az LCD is megbolondul. A tesztelgetések alkalmával rájöttem hogy több hibát is vétettem, 1 az ICSP programozó csati tul közel van a trafohoz, 2 a pic illetve a gyengeáramú vezetékek tul közel vannak a kapcsolt áramhoz. Megoldás egy térelválasztó alulemez illetve az egész gyengeáram beleértve az ICSP csatlakozot, el kell távolitani az erösáramú résztöl legalább 6 cm-re és akkor tökéletesen müködik.
És nem kötsz rá semmit, akkor is lefagy? Ha igen akkor nem a zavar okozza.
Ha nem kell a PIC-nek relét kapcsolnia, akkor semmi baja, elég stabil a program. Kipróbáltam úgy is, hogy csak simán, kézzel érintgettem a relé tekercsének tápvezetékét a táphoz és le is fagyott rögtön... (mivel kézzel odaérintve alapból nem olyan határozott a kapcsolás, mint mikor a PIC kapcsolja)
A kapcsolt motor kb. 5 méterre van a relétől, a PIC-től meg még messzebb. Pedig a tranzisztormezőben is van védődióda gyárilag a tokban (ULN2004) plusz még én is tettem a relé közvetlen közelébe, mint ahogy azt írtam is. Lehet, hogy inkább Schottky dióda kellene, vagy olyan, ami gyorsabb? Esetleg a BOR-t is kikapcsolni a PIC-ben? (ígyis nem a legérzékenyebbre van állítva)...
Sziasztok!
Időközben sikerült megoldani a problémát. Volt itthon egy SB160-as Schottky diódám, amit ellenpárhuzamosan beforrasztottam közvetlenül a relé tekercskivezetéseihez. A PIC akkor sem fagy le így, ha a relé tápvezetékét csak kézzel oda-oda érintgetem a táphoz. Úgy látszik az általános célú dióda bizonyult lassúnak tranziensszűréshez.
Ez hasznos infó, köszi!
Helosztok.
Adott lenne egy tachoszenzoros kefés mosógépmotor, ennek a fordulatát kellene nyomatéktartó módon szabályozni. C ben, 12F683 al gondoltam megoldani, a forulatmérő és a tm1618 kijelző meghajtó programrészlet készen is van, működik is. Ha az aktuális fordszámot ki akarom íratni probléma van, mert késleltetést visz a szabályzókörbe. Ezért sajnos szerintem csak a cél fordulatot tudom kijeleztetni, legalább is closed loop módban. Gondolom ez ellen nincs mit tenni. A másik problémám a zárthurkú szabályzás kialakítása. Hogy lehetne ezt a legjobban megoldani. Próbáltam úgy hogy ha a jelenlegi fordulat kívül esik a megengedett cél fordulat tartományon (pl2500+-50) akkor kivonom a cél fordulatból a jelenlegit és elosztom százzal. Az eredményt hozzáadom a pwm re kirakandó változóhoz. (persze úgy hogy ne legyen 0 nál kisebb vagy 255 nél nagyobb) Így elérném azt, hogy ahogy közeledik a cél fsz ablak, úgy egyre finomabban változzon a kitöltés. Szerintetek hogy kellene ezt megoldani?
Még egy kis segítséget kérnék. Gondoltam letesztelem a 8 bitet szétválasztó részt, de némi problémám akadt így a programmal. Az mplab furcsán viselkedik teszteléskor, már a kurzorbeállítás résznél nem ugrik rá a call waitingre hanem még előtte átmegy a waiting függvényre. Később meg össze-vissza megy a processzor kihagyja a return-t vagy sorokat ugrik át csak úgy. Persze a valóságban sem működik, szóval én hibáztam, csak nem tudom mit.
A másik problémám, hogy az RA3 nem input, hiába annak konfiguráltam, kb a tápfeszültség van rajta, valamit ott is kihagytam volna? Egyébként tényleg az volt a baja amit írták ktamas66, kösz a segítséget. Azt nem tudom mi történt a piccel látszólag működik kiadja a portjain az utasításokat, de az a példány már nem hajlandó működtetni az lcd-t. A hozzászólás módosítva: Jan 4, 2014
Most látom az RA3-nál az Option_reg,7-et H-ba kéne állítani? A lemaradt programot is mellékelem.
Megtaláltam mi kéne nekem: pid szabályzás. Ha a lényegét meg is értem, hogy fog ez beleférni ebbe a pic be?!
Szia! Lehet, hogy csak én nem látom, de miután CALL-al belépsz a SETTINGS rutinba, nem térsz vissza sehol RETURN-nal, sőt még rá is hívsz várakozásokat.. SZerintem ezért ugrál a progi minden felé. Üdv: Balázs (látok ott egy return-t de azt szerintem cimkének fordítja a fordító, mert nem az utasítások helyén van)
A hozzászólás módosítva: Jan 4, 2014
Igaz, de ha kijavítom, akkor is ugyan az a helyzet. A 2 soros mód beállítástól kezdi el a hülyeséget. Nem ugrik rá a call waitingre és mégis utána átmegy a waiting függvényre. A command fv-be már teljesen össze vissza megy, bár nem tudom mennyire szereti, ha egy függvénybe meghívok egy függvényt amibe meghívok még egyet. Tehet goto utasítást kéne használni?
Lehet túl összetett ez a settings rutin és azért nem szereti? A hozzászólás módosítva: Jan 4, 2014
A verem 8 szintes ennél a picnél, tehát 8 szint mélyen belemehetsz a rutin hívásokba. Egyébként ahogy látom rutinként kezelsz majdnem minden programrészt, ez nem feltétlenül jó ötlet. Én újra írnám az elejétől, és csak azt írnám rutinnak, amin többször is át kell hogy fusson a progi. A pic konfigurálása pl nem ilyen.
Felteszem egy régi lcd animáció teszt progimat, ebben találhatsz hasznosat.
Ok, kösz. Bár ha ilyen mélyen bele lehet menni akkor még működnie kellene. Persze a program egy ilyen tesztváltozat ki tudja még milyen lesz a végső. Először örülnék ha azt csinálná amit szeretnék. Az megoldható, hogy csak a többször lefutó programrészek legyenek rutinok, de magán a programelrendezésen még nem gondolkodtam sokat.
Majd megpróbálok én is a vége felé ilyen szép rendezett formát csinálni, de az az érdekes, hogy ha a command és a settings utolsó 3 sora nincs ott akkor normálisan működik. Tegnap még kiírta az A betűt a 2 sorba, most csak vissza kéne jönnie az első sorba a kurzornak de valahol megfagy a proci. A hozzászólás módosítva: Jan 4, 2014
Lehet az egymásba ágyazott WAITING, WAITING2 rutin nem tetszik neki. A WAITING BCF-BSF-jét tedd ki a Settings-be és csak a WAITING2-t hívjad meg.
A COMMAND-ot a főprogramból hívogasd (úgysem a beállításhoz tartozik), a sok ANDWF-et hagyd ki eddig is mindent BSF/BCF-el állítottál, azt meg megteheted a C porton is mielőtt kiadod az Enable-t. Gondolom úgyis akarsz írni egy adatkiíró rutint is (mondjuk a Command is inkább címbeállítás).
Csakugyan, ebben igazad van! Úgy látszik ezt anno a tervezésnél benéztem az adatlapon... Köszönöm szépen az észrevételt!
Nekem egy olyan kérdésem volna hogy szerintetek 16f877a -ra rá akarok kötni egy ENC28J60 modult és mellette bővíteni akarom további 16f877 pic-el I2C kommunikáción keresztül hogy ez lehetséges e. Nem e zavarja a két kommunikáció egymást (Ethernet - I2C).
Szia!
A 16F877A -ban az MSSI modul kezeli az I2C és az SPI kommunikációt is. A sebességi igények miatt az ENC28J60 -at célszerű az MSSI -vel kezelni és programból megírni (másik lábakat használva) az I2C felületet. Az Ethernet kezelés adatmennyisége miatt célszerűbb nagyobb kapacitású kontrollerrel kezdeni: 18F4620, esetleg a szintillesztés elhagyását is lehetővé tevő 18F46K20. A 18F46K22 -ben pedig két MSSI modul van (a 16F877 árának 60% -áért). A hozzászólás módosítva: Jan 5, 2014
A waiting-wainting2-vel már egyszer működött, de javítottam. A commandnak más szerepe is lesz nem csak címzés, azon nem szeretnék tovább módosítani (egyelőre), de magába működik nem akad.
Megpróbáltam javítani egy kicsit ezt-azt vannak benne felesleges részek, de csak a teszt miatt ír ki egy A betűt, utána csak vissza kéne mennie az első sorba, de már a waitingnél megfagy. Nem ugrik tovább a xorlw D'200'-nál visszaugrik az waiting elejére és végig ezt csinálja. Nem értem az mplabbal lenne valami vagy én szúrtam el valamit? Csatolom a mostani a proba2, csak összehasonlításképpen a működik nevű txt az jó, alig van köztük különbség nem értem mi a baja. A hozzászólás módosítva: Jan 5, 2014
Az Enable BSF/BCF-ét kihagytad a beállításoknál.
A WAITING rutinban a XORLW és BTFSC között van valamilyen nem látható karakter ami miatt nem fordítja be a BTFSC parancsot (View/Program memory), töröld space-eket, és írd vissza tab-bal.
Az a Waiting rutint gondold végig újra, szerintem nem azt csinálja amit szeretnél.
Itt néz körül: Késleltetés generátor A hozzászólás módosítva: Jan 5, 2014
Ismét igazad van! Kösz! Ah ilyen apróságokkal mennyit lehet szívni. Na most szóköz mentesítve megy.
Ok, majd fejlesztgetem a programom, az se rossz ha visszafelé számol.
|
Bejelentkezés
Hirdetés |