Fórum témák
» Több friss téma |
Fórum » PIC - Miértek, hogyanok haladóknak
2 motort szeretnék vezérelni teljesen különállóan PWM-el. Az egyes motorok sebességét tudom mérni encoderrel. Szeretnék egy olyan mikrovezértlőt keresni, amivel ezt a 2 PWM-jelet ki tudom küldeni és a 2 encoder jelet tudom számlálni, hogy meg tudjak írni valamilyen szabályozást is rá, ne csak vezéreljem. Közben persze rájöttem, hogy nem muszály a PWM értéket kiküldenem a PICnek elég a rendelkező jelet (pl a két mérés között ennyi encoder jel legyen, a többit a PIC elintézi)
Tehát röviden a lényeg: 2 különálló PWM és 2 különálló számlálóra van szükségem egy eszközben. Remélem megválaszoltam a kérdésedet. Köszi a választ előre is ![]()
Egyszer már kérdeztem, de nyár volt, hátha csak szabadságon volt, aki válaszolni tudna....
![]() Foglalkozott már valaki OneWire/1-Wire kapcsolattal pic32-n? Próbáltam guglizni, de csak 16-osra, 18-asra látok megoldásokat.
Köszönöm, áttanulmányozom.
Sajnos régi tapasztalatom, hogy sokszor nem találom meg a megfelelő kulcsszavakat egy kereséshez. ![]()
A részleteket tekintve nem vagyunk előrébb sokkal...
Ha nem mondod meg, hogy a PIC és a motor között mi van, akkor nem tudjuk, hogy milyen formában kellene a pwm jelet előállítani. Ha diszkrét H híd, akkor lehet, hogy 4 különálló pwm jel kell a megfelelő dead-time-okkkal (2db motor esetében ez már 8 kimeneti láb a PIC-en). Ha félhíd meghajtók, amik biztosítják a dead-time-okat, akkor elég lehet 2 pwm. Ha valami teljesítmény cél IC, akkor megint más kell. A DC motorok korrekt szabályozásához 2-3 szabályozó kör kell; áramszabályozó, fordulatszám szabályozó, pozíció szabályozó hurok. Ezek egymás alatt vannak, azaz legbelül az áram, legfelül a pozíció szabályzó. Az már tudjuk, hogy a fordulatszám, pozíció mérésére mi lesz, de jó lenne. ha az enkóder jellegét és felbontását is megadnád, mert az egyszerűbb PIC-ek nem jeleskednek az enkóder jeleket kiszolgáló perifériában (főleg nem mindjárt 2-vel), szoftveresen meg csak adott sávszélességig van rá esély. Esetleg megmutatnád a motorod képét, vagy valamilyen blokkvázlatot, kapcsolási rajzot?
Egyébként ilyen dolgokban szerintem tök feleseleges az, hogy PIC32-höz legyen a kód.
Megnézed egy PIC18, arduinio, stb... re a kódot és utána átírod nagy különbség nem lesz csak a hw beállítást kell tudnod megírni. És a példánál maradva 32 biten az összes lábon van ODC (Open Drain Control) nem kell a TRIS-el se szenvedned 1Wire-höz (Bár már lehet a 8 bitesek is kaptak ilyet nem tudom).
Azért a PIC32, mert lényegében nem sokkal drágább, mint a többi sorozat, viszont van benne sok memória. Összeraktam Arduinoval deszkamodellben TEA5767, illetve RDA5807M chipes rádiót, és még volna vele jó pár ötletem, de már nincs hozzá memória.
A PIX32MX-el próbálok menni szép sorjában: - Kreáltam valami megoldást arra, hogy az IOPORT-okat ne kelljen fixen beépíteni az osztályokba, hanem mint az Arduinonál paraméterként lehessen megadni a konstruktornak. Nem igazán vagyok megelégedve a megoldásommal, de egyelőre használható. - A karakteres LCD kezelő class-t átvettem az Arduinoból, egész keveset kellett alakítani rajta, lényegében csak az IOPORT lábak kezelését. - Az I2C-t megírtam több mintának használt program segítségével. - Írtam osztályt az I2C-s EEPROM-hoz. - Írtam osztályt a DS1307 RTC-hez. - Utána az LCD kezelőből csináltam I2C-s és 74HC595-ös változatot. Ez utóbbi meglepett, mert azt vártam gyorsabb lesz az I2C-nél, de jóval lassúbb lett. Majd ennek még utánajárok, nem szúrtam-e el valamit. - Most a keypad-del "szórakozom", ennél is puskázok az Arduinos változatból. Kicsit megviccelt a digitális input, de úgy tűnik, már legyűrtem. - A további tervek: megnézni, az EERAM kezelés különbözik-e az EEPROM kezeléstől, ha igen ahhoz is osztály írása. - Ezután jönne a OneWire, SPI, grafikus LCD kezelése. Arduinora valóban minden található, ami csak az ember eszébe jut, de sajnos nem vagyok annyira otthon a C++-ban, hogy a kacifántosabb megoldásokat is vissza tudjam fejteni. Ezért van, ahol inkább mintának használt programok, doksi, és gugli fordító segítségével magam próbálom megírni amire szükségem lenne. Szóval elleszek még egy darabig. ![]()
(Csak tanács saját tapasztalat alapján) Alapvetően én elfelejteném a global class-okat "" jelesen.
Mivel a c++ nem mikrovezérlőhöz lett kitalálva gépen mikor egy global class csinálsz a program indulásakor a main előtt lefut a ctor na most ott mindegy mert már egy initelt kód fut. MCU-n kicsit más oké, hogy van _on_reset fv. de szerintem ez MCU-n nem az igazi, hogy objektumok a main előtt jönnek létre. Megoldások hogy hordozható legyen a dolog, de ne olyan sz*tyok módon mint az arduinóban. A global classokat indirekten hozd létre és utána dinamikusan allokáld (persze lehet a dinamikus memória kezeléssel is hogy miért, de ez csak egyszer fut le aztán jó, csak a heap-et be kell állítani). Pl: LiquidCrystal* Lcd; ennek nem fut le a ctorja csak akkor amikor a main-en belül beírod hogy Lcd = new Lcd(); Esetleg ha ilyen félig global félig local objektumról beszélünk bármely másik classnak is szépen át tudod adni, hogy ezt használja. (remélem nagyjából érthető) A perifériákra legyen egy InitalizeMain, IniatalizeSystem vagy ilyesmi nevű függvényed ahol globálisan beállítasz minden regisztert. Csinálj struktúrákat a hw regeknek UART-hoz így pl.:
Ezzel a perifériák is hordozhatóak lesznek, nagyjából. Az init fv.-ben beállítod az UART1-et majd átadod annak a class-nak akinek használnia kell és onnantól dinamikusan használható a kód bármikor átrakhatod mondjuk az UART2-re. Na most az IO-k cipelgetése egy nehézkes dolog. ARM-on van bit-banding register amivel adott bitet érsz el adott memória címen így hw-san lehetséges "számként" cipelni egy IO-t. PIC32-őn csak SET CLR és INV registerek vannak, ezzel sajnos bit maskot nem tudsz tárolni. Viszont adok egy kódot (ami még fejlesztés alatt áll, itt még a main előtt fut le a ctor-ja az IO-knak) de ott objektum ként van minden egyes IO láb definiálva. Ha esetleg ez az IO kezelő módszer érdekel, de nem világos a source akkor összeírok egy kicsi leírást, hogy mit hogy lehet benne csinálni.
Áách már kezdem érteni.
![]() a motor linkje Sajna ennyit tudok a motorról, nem többet egyenlőre. Szeretnék majd mérni de még nem jutottam be olyan laborba. Remélem így már érthetőbb lett. ![]()
Tanácsot szeretnék kérni touch-al egybe szerelt tft képernyőre. Legalább 240x200-as felbontás, legalább 2.5" képátló, szín nem fontos, monokróm is elegendő. Ami nagyon fontos, hogy egyetlen spi-ről teljes funkcionalitásnak elérhetőnek kell lennie. Az spi-nek 3.3v-on kell tudnia mennie, és pozitívum, ha háttérvilágításra is elég az egy szem 3.3V. Túl nagy fényerő, vagy fényerő fokozatok egyébként nem fontosak. Lévén a fentihez hasonló minimalista cuccok úgysem lesznek a piacon, a legközelebbi lehetőségre kérnék tippet. Előre is köszönöm.
Én sok kijelzőt kipróbáltam, ezek alapján ezt tudom neked ajánlani:
Bővebben: Link Vagy pedig ezt: Bővebben: Link Az első 3,2 colos 320x240 felbontású, a második pedig 3,5 colos és 480x320-as. Mindkettő rendelhető rezisztív és kapacitív touchpaddal is és vezérelhetőek SPI-al. A kisebbiket a Chipcad is forgalmazza: Bővebben: Link
A megadott adatok szerint a motor névleges áram 1A körül van, de rövid ideig (pl.: induláskor) akár 3A-rel is terhelhető. A névleges feszültsége 6V. Nem adtad meg, hogy milyen táp lesz, de szerintem ide nem a legjobb választás az L293. Az egyes típusváltozatok eltérnek, de 1A-nél már több mint 1V esik egy kapcsoló eszközön. A hídban meg ugye egyszerre kettő kapcsolón keresztül van a motor a tápra kötve.
Szerintem valami erősebb meghajtást kellene választani. Az integrált meghajtók közül a DRV8833 duál motor párhuzamosan is köthető, így ezzel a 3A elérhető lenne. De használhatsz egy IC-t a kettő motorhoz, így 1,5A-ig tudsz elmenni. Ez egy áramvédelemmel rendelkező meghajtó, ami pwm jelekkel vezérelhető. Ha mégis azt mondod, hogy elég az 1A, és a táp 6V körüli, akkor meg nézd meg a DRV8830-es IC-t. Szinte minden benne avan, ami neked kellene. Ha sikerült választani (a fentieken kívül még nagyon sok lehetőséged van), akkor lehet a meghajtáshoz szükséges perifériát/lábszámot meghatározni. A kódadó jelének a feldolgozása lesz szerintem a nagyobb probléma, ha korrekten akarod megcsinálni. Persze lehet csak simán egy számlálóra rákötni az A vagy B csatornát, de akkor nincs irányjel, és a jitterek is problémát okozhatnak A legújabb PIC-eket nem ismerem, de inkrementális kódadó modul tudtommal csak a 16 bites procikban van, és általában csak egy. Viszont a maximális freki, ha jól értelmezem 1kHz. Ekkora frekikre akár szoftverből is kezelhető még kettő kódadó is, de ez elég erőforrás igényes. Itt is kell egy-kettő döntést hoznod, mielőtt a PIC-et kiválasztod.
Árban tényleg jók, csak húzom a számat miatta, hogy az interface el lett micsodálva. Külön kér d/cx jelet (data / command selection), nem építették azt bele egységes parancs regiszterbe. Ahol olyan board felületed van, hogy az uext csatolón csak normál spi vonalakat használhatsz, ott nincs +1 vonal annak a d/cx-nek. Valami designer azt nagyon benézte
![]()
A pozitív és negatív impulzusokból ítélve én azt mondanám, hogy RS485 protokol is lehet. Ha az offszet nem 0 lenne akkor azt mondanám, hogy CAN protokol viszont ahhoz nagyon kevés az 5k baud...
Az az 5k baud mindenhez kevés, ami jelenkori. Valami egykori postai távíró ketyeréből kerülhetett talán elő holmi őskövület.
Nézegettem, de egyelőre nem látom át, hogyan is működne. Sok a hiányosságom a c++-ban.
Általánosságban meg az a helyzet, hogy én csak hobbizgatok, adott esetben megelégszem egy könnyebb megoldással a szuperprofi helyett. ![]() Ami nekem lényeges, hogy egy-egy program esetén ne kelljen magában az LCD, EEPROM stb. kezelőjébe belenyúlni, és ott átírni, hogy épp melyik lábakat használom hozzá.
Közben készítettem egy videót a jelalakról:
Bővebben: Youtube Az eredeti jelalak a sárga, a szkópernyőn legalsó jelet pedig egy ablakkomparátorral állítom elő belőle. Gyakorlatilag a pozitív és a negatív impulzusokból is pozitívat csinálok. Nos, gyönyörűen látszik hogy az első két impulzus (köztük két impulzusnyi szünettel) és a legutolsó impulzus mindig fixen megvan, ez keretezi hát az adatbiteket. Ezek már ugrálgatnak össze-vissza, viszont nagyon sok képernyőmentést csináltam és megnéztem az összesen, hogy a pozitív-negatív impulzusok és az impulzushiányok száma mindig azonos! Mindig 9 pozitív és 8 negatív impulzus van, illetve mindig 7db üres rész. Volt egy tippem is hogy lehet hogy az egymást követő két impulzus lesz az 1, az egy impulzus plusz egy üres rész lesz a 0 mondjuk, mint a mellékelt képen. De így mindig 5db 1-es és 7db 0 lesz. Vagyis csupán 32 variáció lehetséges egy ilyen kis csomagban. Persze az is lehet hogy teljesen másról van szó. ![]() Idézet: „Vagyis csupán 32 variáció lehetséges egy ilyen kis csomagban.” Dehogyis 32, sokkal több! Na ezt viszont szép fejtörő lesz kiszámolni hogy mennyi lehetőség van... ![]()
Lehet én számoltam el, de én 10 darab pozitív, és 10 darab negatív impulzust számoltam meg.
Ha sikerült arról filmet csinálnod, hogy milyen adatok jönnek, miért nem fordítod oldalra egy kicsit azt a kamerát, és mutatod meg a forrást is? ![]() Apropó forrásként még valami eszembe jutott. Lehet egy magnófej kimenete is a Commodore időkből, vagy akár egy floppyé a 8"-as időkből.
Igen, 10db pozitív és 10db negatív impulzus van összesen, de mint írtam a videón is látszik hogy az első pozitív, az első negatív és a legutolsó (negatív) impulzus mindig ugyan ott van, ezért gondolom hogy eme három impulzusnak nincs információtartalma hanem csak a bitcsomagot keretezi.
A berendezésről annyit, hogy egy olyan eszköz amely pár száz információt továbbít ezen a csavart érpáron. Ezen információk 0/1 állapotok csupán, tehát például vagy van a 287. információ, vagy nincs. Egy csomót agyaltam rajta, de nem találtam rá matematikai megoldást hogy hogyan lehet kiszámolni hogy hány variáció van amelynél a 11 bitből 5db bit 1-es. De Excellel kiszámoltattam: 462db. ![]() A hozzászólás módosítva: Okt 2, 2017
Ha helyettesíteni akarod azt az eszközt, és azért kell dekódolnod az információt, kellene egy mérőeszköz rá, ami figyeli, hogy milyen csomagokat dobál összesen a forrás, és milyen eredményt dekódol abból a végberendezés. A módszer egyszerű, vannak a kimeneteiden a 0/1 kapcsolók, és amikor jön egy csomag, valami megváltozik a kimeneten. Azokat aa változásokat, és a csomagokat logolni kellene. Ha elég sok adatot tudsz feljegyezni, abból ki lehet következtetni, hogyan is működik az adatkódolás. Ha hímestojás, és nem nyúlhatsz hozzá, akkor meg hagyd a fenébe
![]() Egy kicsit könnyebb lenne, ha nem akarnál James Bondot játszani, és leírnád annak az eszköznek a gyártóját, a jellegét, a típusát / típusszámát, és a sorozatszámát.
A matekja: ismétléses permutáció
Fakt(11)/(Fakt(5)*Fakt(6)) = 462 mert 5 db 1-es bit és 6db 0-ás bit van benne. Idézet: 5 kbit/s egy floppy-n? 250 vagy 500 kbit/s. „vagy akár egy floppyé a 8"-as időkből”
Egy nagyra nőtt floppy -n... ST506 MFM Winchester: 5kbit/sec, MFM kódolás. A fejről levehető jelre hasonít a legjobban.
Marmint 5 Mbit/s. Volt szerencsem dolgozni i8271-gyel es i82062-vel is. Marmint epitettem veluk floppy (igen 8"-os) es Winchester illesztot.
A hozzászólás módosítva: Okt 2, 2017
Érdekelnek a fejtörők
![]() Idézet: „Egy kicsit könnyebb lenne, ha nem akarnál James Bondot játszani, és leírnád annak az eszköznek a gyártóját, a jellegét, a típusát / típusszámát, és a sorozatszámát.” Sajnos ezt nem igazán tehetem meg. A típusát egyébként ha beírom a google keresőjében akkor nem ad rá találatot, szóval sokra nem mennénk vele.
Sziasztok!
Nem tudom, hogy jó helyre írok-e, de szakértő segítségeteket kérném! Egy George Foreman márkájú grillsütőm elektronikája bedöglött. 220-ba dugva is sötét volt a kijelzője és nem melegedett a fűtőbetét sem. Mikor megpróbáltam rámérni, hogy a vezérlőpanel kap-e tápfeszt, egy csattanást követően elfüstölt egy alkatrész (érdekes módon a nyák felöli oldalon lett füstös, míg magán az alkatrészen nem látható semmi nyom). Mint utólag kiderült egy mikrokontroller EM78P156ELP-G típus amit megrendeltem, meg is érkezett és egy szaki ismerős beépítette egy általa beforrasztott foglalatba. (gyárilag közvetlenül a NYÁK-ba volt forrasztva!) Minden alkatrészt megvizsgált, szerinte hibátlan. De azt mondja nem fog működni, mert a mikrokontrollert a gyárban felprogramozzák és miután az új „bután” került bele nem érek vele semmit. Kérdésem : van még egy ugyanilyen grillsütőnk (apámé) abból valamilyen módon kiolvasható a mikrokontroller programozása és az alapján betanítható az új, vagy felejtős? Egyébként az egész vezérlés abból áll, hogy konnektorba dugva a kijelzőn -- jelenik meg (készenléti állapot). A bekapcsológomb megnyomása után csipog, majd 5 perc látszik a kijelzőn. Ha letelt, 4-szer csipog és „ON” feliratot mutat. Ez volt az előmelegítés! A hús berakása után a „>” gombot megnyomva max. 20 percre lehet beállítani az időzítőt ( minden egyes megnyomáskor csipog egyet). A „<” gombbal csökkenti lehet a sütési időt. Elindul a sütés és a beállított időnek megfelelően visszaszámol, majd mikor letelt az idő csipog 4-et és „ON” feliratot mutat. Innentől még lehet folytatni a sütést, ha nem kell akkor a bekapcsológomb ismételt megnyomására készenléti helyzetbe áll és a kijelzőn -- jelenik meg. Sajnos Magyarországon szervize nincs, a bolt garancia időn belül cserélte volna, de hát 9 éve vettem. Nagyon jó készülék, sajnálnám! Bocs, ha hosszú voltam. A hozzászólás módosítva: Okt 18, 2017
Szia!
Próbálkozhatsz PIC mikrovezérlővel helyette. Persze a készülékről kell egy kapcsolási rajz, az adott mikrovezérlő adatlapját áttanulmányozni és megtanulni programot írni a mikrovezérlőre. A készülék annyira egyszerűnek tűnik hogy szerintem PIC-el kiváltható, az lehet hogy egy segéd panelra lesz szükség, mert a két vezérlő lábkiosztása eltérő. |
Bejelentkezés
Hirdetés |