Fórum témák

» Több friss téma
Fórum » PIC - Miértek, hogyanok haladóknak
 
Témaindító: G-Lex, idő: Jan 9, 2006
Lapozás: OK   1270 / 1270
(#) mark_domonkos válasza Peter65 hozzászólására (») Szept 29, 2017 /
 
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
(#) tomi52 hozzászólása Szept 29, 2017 /
 
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.
(#) Hp41C válasza tomi52 hozzászólására (») Szept 29, 2017 / 1
 
Nicsak mit adott a Goooooogle a 1-Wire PIC32 kérdésre.
(#) tomi52 válasza Hp41C hozzászólására (») Szept 29, 2017 /
 
Köszönöm, áttanulmányozom.

Sajnos régi tapasztalatom, hogy sokszor nem találom meg a megfelelő kulcsszavakat egy kereséshez.
(#) Peter65 válasza mark_domonkos hozzászólására (») Szept 29, 2017 /
 
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?
(#) cross51 válasza tomi52 hozzászólására (») Szept 29, 2017 /
 
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).
(#) tomi52 válasza cross51 hozzászólására (») Szept 29, 2017 /
 
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.
(#) cross51 válasza tomi52 hozzászólására (») Szept 29, 2017 /
 
(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.:
  1. typedef struct
  2. {
  3.         volatile unsigned int MODE;
  4.         unsigned : 32;
  5.         unsigned : 32;
  6.         unsigned : 32;
  7.         volatile unsigned int STA;
  8.         unsigned : 32;
  9.         unsigned : 32;
  10.         unsigned : 32;
  11.         volatile unsigned int TXREG;
  12.     unsigned : 32;
  13.         unsigned : 32;
  14.         unsigned : 32;
  15.         volatile unsigned int RXREG;
  16.     unsigned : 32;
  17.         unsigned : 32;
  18.         unsigned : 32;
  19.         volatile unsigned int BRG;
  20.         unsigned : 32;
  21.         unsigned : 32;
  22.         unsigned : 32;
  23. } UART_REG;
  24.  
  25. #define UART1 ((UART_REG*)(_UART1_BASE_ADDRESS))

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.
(#) mark_domonkos válasza Peter65 hozzászólására (») Szept 30, 2017 /
 
Áách már kezdem érteni. Tehát, a motort meghajtani legvalószínűbben egy L293 IC vel fogom, úgy hogy 2 láb sima digitálisan megy az irányra az enablere meg megy a PWM, persze motoronként.
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.
(#) pajti2 hozzászólása Szept 30, 2017 /
 
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.
(#) Attila86 válasza pajti2 hozzászólására (») Szept 30, 2017 /
 
É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
(#) Peter65 válasza mark_domonkos hozzászólására (») Szept 30, 2017 /
 
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.
(#) pajti2 válasza Attila86 hozzászólására (») Okt 1, 2017 /
 
Á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
(#) matheattila válasza Attila86 hozzászólására (») Okt 1, 2017 /
 
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...
(#) pajti2 válasza matheattila hozzászólására (») Okt 1, 2017 /
 
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.
(#) tomi52 válasza cross51 hozzászólására (») Okt 1, 2017 /
 
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á.
(#) Attila86 válasza matheattila hozzászólására (») Okt 1, 2017 /
 
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ó.

Ötlet1.png
    
(#) Attila86 válasza Attila86 hozzászólására (») Okt 1, 2017 /
 
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...
(#) pajti2 válasza Attila86 hozzászólására (») Okt 2, 2017 /
 
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.
(#) Attila86 válasza pajti2 hozzászólására (») Okt 2, 2017 /
 
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
(#) pajti2 válasza Attila86 hozzászólására (») 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.
(#) benjami válasza Attila86 hozzászólására (») Okt 2, 2017 /
 
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.
(#) pajti2 válasza benjami hozzászólására (») Okt 2, 2017 /
 
Én 7 darab 0-t számoltam meg a képen.
(#) killbill válasza pajti2 hozzászólására (») Okt 2, 2017 /
 
Idézet:
„vagy akár egy floppyé a 8"-as időkből”
5 kbit/s egy floppy-n? 250 vagy 500 kbit/s.
(#) Hp41C válasza killbill hozzászólására (») Okt 2, 2017 /
 
Egy nagyra nőtt floppy -n... ST506 MFM Winchester: 5kbit/sec, MFM kódolás. A fejről levehető jelre hasonít a legjobban.
(#) killbill válasza Hp41C hozzászólására (») Okt 2, 2017 /
 
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
(#) tikiss válasza Attila86 hozzászólására (») Okt 3, 2017 /
 
Érdekelnek a fejtörők És én egy Bipoláris AMI kódolásra tippelnék, de egyébként lehet Bipoláris RZ kódolás is. Véleményem szerint semmiféleképpen sem CAN vagy RS485.
(#) Attila86 válasza pajti2 hozzászólására (») Okt 3, 2017 /
 
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.
Következő: »»   1270 / 1270
Bejelentkezés

Belépés

Hirdetés
Frissek
2017. Okt, 17. Kedd
20:31:28
Jelenleg 431 fő olvassa az oldalt
Online tagok:
Lapoda.hu     XDT.hu     HEStore.hu