Fórum témák
» Több friss téma |
Esetleg ezt nézd át: Bővebben: Link
Sajna ez a PIC szerver igen ingoványos talaj.. Én is akarok majd, de egyelőre pihentetem.. Idézet: „felesleges kikoptatni egy másik motor csapágyát” Ezt nem egészen értem. Az eredeti elképzelésem szerint a meglévő motortengelyre kell egy hengeres mágnest felszerelni ami tachogenerétor belsejében forog és ez adja a jelet. Szó sincs plusz csapágyról. Én is hajlok a hall elem vagy az optokapu használatára. Gondolom valamelyik CCP-vel kellene mérni az impulzusokat. De nem akar összeállni a fejemben a kép. Lesz egy 8 vagy 10 bites értékem a kívánt fordulatról AD-vel, lesz egy idő ami a két fordulat között telt el. Hogy hozom össze ezt a kettőt?
Ha az egy fordulatra eső időt méred, akkor egyszerű összehasonlítással el lehet dönteni, hogy a fordulatszám milyen irányba tér el a kívánttól. Ha a periódusidő rövidebb, akkor gyorsabban forog, tehát a kitöltési tényezőt csökkenteni kell. Ha hosszabb, akkor alacsonyabb a fordulatszám, tehát növelni kell. Analóg megoldás esetén a rendszerbe további pontatlanság kerül, kerekíteni, átlagolni kell. Időmérés esetén a kvarc pontosságát csak a timerek reakcióideje rontja.
Egy radiális gyűrűmágnes a motortengelyre húzva nem szól bele a centrírozásba, és egy Hall érzékelővel fordulatonként egy vagy két impulzust ad. Meg lehetne oldani optikai úton is, de forgácsoló szerszám esetén a porosodás elkerülhetetlen, ami meghamisíthatja a mérést.
Nézzünk egy konkrét példát: Az AD értéke dec 511, az ehhez tartozó fordulat 27960 f/min. A periódus idő 0,0021459 sec/jel. Ha a timer 1:1 osztással 4MHz kaviccsal megy akkor ha 0-ról indult kb dec 2145 lesz az értéke. Tehát ez az az állapot, amikor a beállított AD "szinkronban" van a fordulattal. Hogyan tudom összehasonlítani ezt a két értéket?
Értem már, mi a problémád. Szerintem nem összehasonlítani kell, hanem a 2145-öt kell alapnak venni, ez a kívánt állapot. Ha a következő fordulatnál a mért érték 2200, akkor a fordulatszám csökkent, tehát több kakaót kell adni a motornak. 2100 esetén túlpörög, a teljesítményből kell visszavenni(, csökkenteni a kitöltési tényezőt).
Hát ez még még okés is lenne, de a kívánt fordulat nem egy konstans érték. Tehát ha én akarom csökkenteni a fordulatot amit ugye az AD érték csökkentésével jelzek a rendszernek, tehát a kitöltést kell csökkenteni, ami ugye fordulatból származó timer növekedését jelenti. Ha terhelést kap a motor akkor is meg kell tartsa a kívánt fordulatot. Tehát jó amit javasolsz, egy konkrét értékre talán nem is lenne problémám a programozással (ez nem biztos ), de a változtatható fordulat igen megbonyolítja számomra. Vagy csak nem értem...
Uraim, megtenné nekem valaki aki jártasabb 18F46K22 PIC beállításában, hogy átnézné nekem az init részem? :
Véleményem szerint valahol itt csúszhatok el amiért az MCP23S17-es expandert nem tudom megfelelően olvasni. Kipróbáltam tegnap és sima kijelzőt sem tudok a D portról meghajtani.. Lényegében az init-ben a következőkre kellene beállnia: Minden port kimenet Minden port digitális Minden egyéb mint PWM, Coperátorok és egyéb sallang ki van kapcsolva. PLL bekapcsolva 16MHz kristályhoz 64MHz beállítva. Előre is köszi.. Annyi még, hogy 18F4550-el ugyan ez a kijelző meghajtás és bekötés tökéletesen működik. Ha csak átemelem az LCD programot és a bekötéseket, 18F46K22-őn nem működik.. Tehát szerintem valami beállítási problémám lehet.. Legalább is remélem.. A hozzászólás módosítva: Nov 23, 2014
Én azért mindig a helyes irányba szoktam állítani ( RB2 bemenet).
15.2.2 pont a leírásban.
Kipróbálom, mivel ez még kimaradt.
Egyébként most összedobtam 18F4550-re azon gond nélkül működik szóval biztosan az MCU beállításomban van a gond.. Egyébként az SPI automatikusan átállítja a bemenetet.
Üdv!
A mellékletben lévő adatokból milyen képlet alapján tudom PIC-cel kiszámolni a hőfokot?
Mivel a hőmérséklettel nem arányosan (lineárisan) változik az AD eredménye, elég nehezen.
Szerintem készíts egy korrekciós táblázatot és aszerint programozd le a mérést...
Nem olvastam elég figyelmesen, de most már (remélem) világos a feladat. A kérdés az, hogy egy körülbelül beskálázott potméterrel akarsz fokozatmentesen fordulatszámot állítani, vagy elég "fülre" beállítani néhány tucat előre meghatározott fordulatszámo? Mondjuk a skálázást utólag is el lehet készíteni. Ez a módszer a terheletlenül beállított fordulatszámot igyekszik tartani a rendelkezésre álló motorteljesítménnyel. A megcélzandó periódusidőket ezt a kontrollert használva érdemes előre kiszámíttatni a fordítóval, és fixen beégetni egy táblázatba 16/32/64 lépésben.
Idézet: „Ez a módszer a terheletlenül beállított fordulatszámot igyekszik tartani a rendelkezésre álló motorteljesítménnyel.” Pontosan! Idézet: „A megcélzandó periódusidőket ezt a kontrollert használva érdemes előre kiszámíttatni a fordítóval, és fixen beégetni egy táblázatba 16/32/64 lépésben.” Ezt kifejtenéd picit? Mivel assembly-ben írok, a fordító (ha jól tudom) nem fog kiszámolni nekem semmit. Idézet: „Egyébként az SPI automatikusan átállítja a bemenetet.” Most tréfálsz vagy elolvastad az adatlapot ??? A 18F46K22 adatlapjából: Idézet: „For the pins to behave as the serial port function, some must have their data direction bits (in the TRIS register) appropriately programmed as follows: • SDIx must have corresponding TRIS bit set” Ezenkívül az ANSEL regiszterekre hívnám még fel a figyelmet, hiszen ilyen nincs a 18F4550 -ben. Mi lenne, ha megfogadnád a tanácsot és a PICkit2 logikai analizátorával megmérnéd, hogy milyen a SCLK, SO és SI jelalakja. Rögtön kiderülne, hogy az MCP23S17 kiad valamit magából és a 18F46K22 mégsem azt veszi vagy az MCP23S17 sem ad ki magából mást csak 0x00 -t. A hozzászólás módosítva: Nov 23, 2014
Nem viccelek, úgy értettem az SPI beállításokkal bemenetre állítom az SDI bitet.:
Gondolom így már világos.. Idézet: „Ezenkívül az ANSEL regiszterekre hívnám még fel a figyelmet”
Idézet: „Mi lenne, ha megfogadnád a tanácsot és a PICkit2 logikai analizátorával megmérnéd, hogy milyen a SCLK, SO és SI jelalakja” Ez nekem teljesen új.. Lényegében odáig eljutottam, hogy szimulátorban összedobtam egy alap kis programot amivel lehet tesztelni, de már itt sem megy úgy ahogyan kellene... Feldobom az egészet akinek van telepítve proteus-a az kukkantson már rá mert már vagy 4 napja ezzel szívok..
Egy olyan kérdésem lenne, hogy ha a TIMER1-et működés közben kikapcsolom a TMR1ON bittel, majd később vissza, akkor ugyanonnan folytatja a számolást ahol kikapcsoltam?
Előosztó nélkül bajban vagyunk az alacsony fordulattal...
A hozzászólás módosítva: Nov 23, 2014
Egy kis segítség kellene. Adott egy 18f4550-es PIC. Nem vagyok túlságosan profi, de előzőleg egy 16f887-es piccel már sok mindent csináltam, ezt viszont nem igazán sikerül konfigurálnom. Olvasgatom a PDF-jét, de nem jövök rá miért fut lassabban, mint kellene. Beállítások a "default" szerintiek, vagyis:
_FOSC_INTOSC_HS_1H _FOSC_HS_1H _FOSC_HSPLL_HS_1H _WDT_OFF_2H _LVP_OFF_4L _XINST_OFF_4L Úgy tudom gyorsítani, hogy egy 20MHz-es kvarccal fut a pic a projektbe pedig 4Mhz van beállítva. Oké, ez egy led villogásánál, de mi van egy olyan helyen, ahol a szenzorral való adatcserénél pontos időértékek kellenek... Tudna nekem valaki segíteni?
Nem pontosan értem a kérdést, de most 4MHz-es vagy 20MHz-es kristályod van?
Mert nem mindegy... Amit bemásoltál FOSC-os beállításokat az 3féle külön beállítási mód. Ha PLL-t akarsz használni akkor azzal 48MHz-re is be tudod állítani. Ezen felül nem árt tudnunk miben programozol és milyen fordítóval.. Kicsit szedd össze a gondolataid és próbálj érthetőbben fogalmazni mert nem igen lehet érteni mit szeretnél.. A hozzászólás módosítva: Nov 23, 2014
Bocsánat, hogy érthetetlenül fogalmaztam. Megpróbálom pontosítani.
A fejlesztő környezetem "microC for PIC", és a fordítóm is az. A hex filét a jó öreg MPlab égeti a picbe egy PICKIT3 klónnal. A "default" beállítások alatt azt értem, amit a fejlesztőkörnyezet alap konfigurációként felajánl ehhez a PIC-hez. Ez egy beállítás a microC szerint. A bajom az, hogy nem úgy müködik, mint pl. a 16f887-es mikrovezérlő, hogy beállítom a fejlesztő környezetben a PIC valós órajelet (kvarc frekvenciát), és a programban az 1s delay, az közel 1s várakozásnak felel meg (mondjuk egy LED viloggtatásánál). Itt a fenti konfiggal a 18f4550 vár vagy 4-5 másodpercet (nem mértem) a váltással a led ki és be ideje közt, úgy hogy 1s van írva neki. Én azt szeretném, hogy ha beállítom a kvarc sebességét, a mikrovezérlő "valós" időben fusson (1s várakozás közel 1s legyen) . Nem tudom mit jelent a PLL, nem találkoztam még vele (16f-es családban még nem találkoztam vele). Most barátkoznék az első 18F-es piccel, és így elég nehéz, hogy egy sima led villogtató program nem működik. A kvarc frekvenciája nem kritikus(szabadon választható), csak példának szerettem volna mondani, hogy ha a fenti led villogtató programnál beállítom a kvarcot 4Mhz-re a fejlesztő környezetben, és a valós kapcsolásba pedig 20 Mhz kvarcot rakok, akkor a fenti konfigurációval kb. 1s lesz az delay_ms(1000) parancs. Ezt szeretném megérteni miért van így. Ha valaki elmondaná, hogy minek olvassak utána... Így elsőre nagyon nehéznek tűnik. Hiába olvasgatom a PIC leírását, ide az én angol tudásom nyilván kevés.Ha valaki tudna rajtam segíteni, azt nagyon megköszönném. A hozzászólás módosítva: Nov 24, 2014
Nos sajnos, nem tudok segíteni mert C-és vagyok és MPLAB-ban fejlesztek C18-al, ráadásul a Kontroller beállításokat is kézzel írom meg nem bízom a fordítóra..
Javaslom neked a 18-as család konfigurációs beállításainak adatlapját: Bővebben: Link Ez rendkívül megkönnyíti a PIC megfelelő beállításait. Elvileg, ha van ilyen alap beállítási lehetőség a microC-ben és megadod mekkora kristályod van akkor mennie kellene. Javaslom a villogtató forrásod is mutasd meg hátha abból kiderül mi a bibi...
A PLL-t nevezhetjük előszorzónak. Megszorozza a kvarc vagy a belső oszci frekvenciáját, általában 3 vagy 4-el,ha be van kapcsolva, és az lesz az órajel frekvenciája. Egész biztosan valami beállítzási hiba lesz ez a késés. Van mikroC-m, de nem szzoktam használni, csak már abban megirt projectek ellenőrzésére. A project menü -> edit project opcióban tudod eszközölni a pic konfigurálását. Töltsd be először a 887-el és nézd eg mi van beállítva, majd ez alapján állitsd be a 4550-hez.
A mikroC-ben lehetőség van megadni az órajel frekvenciáját, de annak helyességét a fordító nem ellenőrzi, a konfigurációs biteket sajnos manuálisan kell beállítani.
Ebben segít a PIC adatlapja, illetve az alábbi kis programocska: Bővebben: Link
Köszönöm válaszod. microC-ben is lehetőség van, mindenféle konfigurációs beállításra, ahogy a PIC adatlapja is mutatja.Bármit be lehet állítani, csak tudnám mit kellene...
Megnéztem, amit linkeltél. Kérlek nézd meg, jól gondolnám e a konfigurációt egy 20 Mhz-es külső kvarccal: /a te leírásod alapján/ 96Mhz PLL Prescaler: PLLDIV = 5 Divide by 5 (20Mhz input) <-ez nem tudom kell-e? Oscillator selection bits: FOSC = HS (HS oscillator, HS used by USB) A következők mind Disabled (kikapcsolva): FCMEM=OFF IESO = OFF PWRT = OFF BOR = OFF VREGEN = OFF WDT = OFF MCLRE = OFF Igy elméletileg jónak kellene lenni? Du. lesz egy kis időm, megírom a progit assemblyn. Kíváncsi vagyok úgy jó-e. A hozzászólás módosítva: Nov 24, 2014
Itt egy teljes 18F4550-es beállítás C18-as fordítóra és persze MPLAB.
Itt 48MHz-re van felhúzva az MCU és 20MHz-es kristály van rákötve. Ennél a mikrokontrollernél érdemes figyelni, hogy van USB is és a FOSC beállítása eszerint változik. Most hozzárendeltük az USB-hez is a PLL-t vagy is 4 szeres szorzót. Sajnos elkerülhetetlen az OSC és annak beállítása illetve ennek a menetnek a megértése és kiszámolása.. Alap és egyben kőbe véset eset: FOSC/4. PIC adatlapjában az OSCről taglalt résznél ez szépen le is van vezetve.
Amit bemásoltál beállításokat azok még jók is lehetnek, ha tényleg ezek kellenek. De alapnak próbáld inkább az enyémet követni. Ajánlom még figyelmedbe a következő oldalt: http://esca.atomki.hu/PIC18/ Rendkívül barátságosan és érthetően közli fórumtársunk, hogy mit miért és hogyan csináljunk. Ráadásul pont PIC18F4550
Azt hogy mit kellene beállítani, ezt neked kellene tudnod, attól függ, hogy milyen kvarcod van és milyen órajelen szeretnéd járatni a procit. Az adatlap 2.1-es rajzán nagyon jól végig lehet követni az órajel osztókat és szorzókat. Nem ismerem a microC-t, de gondolom csak lehet valahogy definiálni az órajelfrekvenciát (valószínűleg #define ... -vel), ami alapján a delay_ms várakozási idejét korrektül meg tudja csinálni. Az sem árt ha megnézed, tud-e 16 bites paramétert, mert az 1000 az pl. nem fér el 8 biten.
Köszönöm az infót. Tehát nekem a PLL-re alapesetben nincs szükségem. A konfigurációt is megtaláltam már, csak beállítani nem sikerül. Lehet mikrovezérlő hiba is? Boltból vásárolt, nem használt, elvileg. A PICKIT 3 látja, tudja írni olvasni. Megpróbálom a 16f887-es beállításaival, de ennél sokkal több a beállítás. Du. küzdök vele. Köszönöm mindenkinek.
Kedves ha1drp! Kipróbálom a progit is hátha végre valahogy sikerülne. Köszönöm.
Nos én pedig megoldottam a problémát.
Mint majdnem mindig, Hp41C megmondta a tutit egyből Azt hiszem bár nem 100% (mivel még sok mást is csináltam azóta), hogy az ANSELx regiszter hiánya kevert be nekem nem kicsit.. (vagy 4 napig ) A hozzászólás módosítva: Nov 24, 2014
|
Bejelentkezés
Hirdetés |