Fórum témák

» Több friss téma
Fórum » ARM - Miértek hogyanok
 
Témaindító: gtk, idő: Jún 26, 2007
Lapozás: OK   61 / 177
(#) kapu48 válasza gtk hozzászólására (») Jún 6, 2015 /
 
Ha bele gondolok a mindenkori sebességet a (sec/lépés * 1lépés előtolás mm) számból tudod meg?
Ebből számolsz futás időt, és ezt próbálod vezérelni?

Elégé nyakatekert megoldásnak tartom!
És a lépéskimaradásra így sincsen semmi garancia.
(#) gtk válasza kapu48 hozzászólására (») Jún 6, 2015 /
 
En arra gondoltam hogy van HW-es visszajelzes, pl. enkoder.
(#) kapu48 válasza gtk hozzászólására (») Jún 6, 2015 /
 
Ja!
Az sajnos elég drága, bár nagyon hasznos jószág!

Viszont akkor megkel oldani a figyelését megszakításban.
Itt már tudnál mérni időt is, a 2 lépés között. Ebből észrevennéd és korrigálhatnád az esetleges szorulást is
És a pontos lépés szám ismeretében, végkép szükségtelen lesz a futás idővezérlés.

Inkább a lépések közti idő számítására kellene koncentrálni.
A hozzászólás módosítva: Jún 6, 2015
(#) Moderátor hozzászólása Jún 6, 2015
 
Semmiképp nem szeretnék kukacoskodni, de az elmúlt pár hozzászólás nem konkrétan ARM, szépen belesimulna a CNC-s topikba (trafó VA-ek, 12V-ok, stb). Nem égeti a topikot az OFF még, de figyeljetek oda rá légyszíves.

Köszönöm (T)

Szerk: Kapu48 észrevétele is jogos a két téma kéz a kézben járnak, maradjon is így
A hozzászólás módosítva: Jún 6, 2015
(#) Suncorgo válasza kapu48 hozzászólására (») Jún 6, 2015 /
 
Idézet:
„Szerintem, majd ahogy szaporodnak a feladatok, és kezd kifulladni a proceszor idő, rájön, hogy spórolni kel az erőforrásosokkal!”


Annyira nem akarok már sokat írni a firmware-hoz hogy annyira spórolni kelljen Még max egy körinterpolátort fog kapni egy vészleállító nagy piros gombbal és egy kézi kereket a manuális mozgatáshoz.

Ez egy egyszerű vezérlés, semmi motor túlhajtással, gyilkolással, max sebességre törekedésre. Egy egyszerű CNC vezérlés amely soros porton fogad egy sort, olvassa, feldolgozza és megteszi az utat. A cél műanyag (előlapok) , nyák max alu marás, gravírozás volt, meg persze a kihívás mind hardver mind szoftver terén.
(#) kapu48 válasza Suncorgo hozzászólására (») Jún 7, 2015 /
 
Egy nagyon hasznos Tutorial, amit ajánlok figyelmedbe!

STM_f401_f429_disco. Serial Communication, DMA, UART, USB COM Port
Bővebben: Link
(#) kapu48 válasza Suncorgo hozzászólására (») Jún 7, 2015 /
 
Jó ez a kör_interpolátor!

Csak 1..2 gomb hiányzik róla!
1.: G kódgenerálás
2.: Save G kód
(#) cpt.zoltan.simon válasza Suncorgo hozzászólására (») Jún 8, 2015 /
 
Nem lehetne ezt kiszedni az ISR-ből? Mi a processzorod pontosan? 168MHz az valami 407, 417 lehet ugye? A 427/429 tud alapbóll 180-at, de 207-et hajottam már 158MHz-el, 417-et meg 240-el szóval lehet el kellene gondolkodni vagy egy overclock-on, vagy kódoptimalizáláson (mindig van jobb megoldás) vagy pedig procicserén.

Keil-ben nyomod? Nézted az optimalizációs beállításokat?
(#) kapu48 válasza cpt.zoltan.simon hozzászólására (») Jún 8, 2015 / 1
 
Ügye most viccelsz?

Wbt írta: Én igaz, hogy 16MHz/AVR-re és csak 2D-t csináltam, de 5000step/sec-el tudtam menni!

Ehhez képest 1 ARM407-es rakéta. (Minek túlhajtani? Kockáztatja a biztos működést!)
Csak hát nem megszakításban kellene számolni a vektorokat, mert addig minden más várakozik.
És jobban ki kellene használni a HW adta lehetőségeket.

Most vagy túl sok feladatot adtunk Suncorgonak, vagy elvettük a kedvét a közléstől?
Igaz minden kezdet nehéz! Lesz ez még jobb is!

(Az előző hszt. Wbt-nek szántam volna!)
A hozzászólás módosítva: Jún 8, 2015
(#) cpt.zoltan.simon válasza kapu48 hozzászólására (») Jún 8, 2015 /
 
Én fordítva állok a dologhoz:
- minek a lassú proci ha ugyan abban a tokban van kompatibilis rakéta is?
- egy fölöslegesen gyors proci a nem legjobb programot is jó eredménnyel futtatja, tehát ad sikerélményt.
- ez nem akkumulátoros konstrukció, MHz kontra üzemidő nem játszik
- a te eredményeid szintetikusan jók, de kérdés hogy bárki másnál hogy alakulnak egyéb feladatok, esetleg egy nagyon elrontott bármilyen egyéb ISR mellett.
- az ISR-nek örök érvényű szabálya hogy gyorsan be gyorsan ki.

Én azt csinálnám hogy az ISR rutin eldöntő paramétereit még ISR előtt számoltatnám, az ISR-ben meg már csak switch-case. De mindenkinek szíve joga úgy csinálni ahogy gondolja. Asztalra kell egy univerzális "erőmű", aztán ha ott jól működik mehet a down-scale.
(#) cpt.zoltan.simon válasza kapu48 hozzászólására (») Jún 8, 2015 /
 
+ a Cortex-M4 ugye DSP-vel kiegészített cucc, tehát lehet megérné a DSP utasításokban, library-ben túrni egy kicsit, biztos van erre valami célszerű C okosság.
(#) Suncorgo válasza cpt.zoltan.simon hozzászólására (») Jún 8, 2015 /
 
Kiszedni az ISR-ből? Miért? STM32F407VGT6 Ez nekem bőven elég egyenlőre. Még mondhatnám hogy a sebesség (lépési) képességei többek is a vártnál. Nézem a youtube vidiket és az enyém is megy olyan gyorsan mint az ottaniak, minek a túlhajtás? Én is a biztos működés pártján állok, a túlhúzás soha nem vezet semmi jóra. Gondolom debuggoltál már switch-et sorról sorra. Ennek nem jártam mélyen utána de, én azt látom hogy az összes case-en végiglépked a program, mint ha if feltételt vizsgálna, innentől szerintem mindegy hogy if else vagy case. Igen Keil, ezt sikerült "szerezni". Az optimalizációs beállításokat lefotóztam egy pár hsz-el visszább. Ezzel nem megbántani akartalak, szeretem az építő jellegű hozzászólásokat.
(#) Suncorgo válasza kapu48 hozzászólására (») Jún 8, 2015 /
 
Idézet:
„Most vagy túl sok feladatot adtunk Suncorgonak, vagy elvettük a kedvét a közléstől?”


Egyszer ha sok-sok időm lesz, lehet írok egy cikket ennek a gépnek az építéséről, programjáról ide a hobbira. Semmitől sem vetted el a kedvem, hobbi szinten, én akinek egy villamosgép tekercselői szakmája van + érettségi, az internetről minden infója. Ennyire futotta. Nem érzem magam zavarban mert önszorgalomból vagyok képes minderre éjjel-nappal az internetet bújva, olvasva és tanulni. Meg persze néha néha tőletek a fórumról segítséget kérve és remélve nem is a megoldást, csak útbaigazítást. Szóval mire is vagy kíváncsi? A komplett forrás a link alatt. (hardver-pc szoftver, PCB tervek Altium designer 15) ha valami elvetemült hobbista elkezdi utánépíteni az elektronikát szóljon, elérhetővé teszem a frissebb szoftver is mert még nincs kész
A hozzászólás módosítva: Jún 8, 2015
(#) Suncorgo hozzászólása Jún 8, 2015 /
 
(#) kapu48 válasza Suncorgo hozzászólására (») Jún 9, 2015 /
 
Miért nevezted el „ISR”-nek? : void linearis_interpolator_ISR()

Mikor ez nem megszakítás, csak egy sima programból hívható függvény!
Így nagyon megtévesztő!
(#) Suncorgo válasza kapu48 hozzászólására (») Jún 9, 2015 /
 
Mert azokat a függvényeket csak megszakításból hívom meg.
Lehet egy kicsit kiszekuszának tűnik az egy c fájlban való egész program de, nekem így könnyebb volt keresni és navigálni benne írás közben.

  1. void TIM2_IRQHandler(void)
  2. {
  3.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  4.         {
  5.                 switch(cnc_allapot)
  6.                 {
  7.                         case G0:
  8.                                 linearis_interpolator_ISR();
  9.                         break;
  10.                        
  11.                         case G1:
  12.                                 linearis_interpolator_ISR();
  13.                         break;
  14.                        
  15.                         case XY_AUTOMATA_NULLAZAS:
  16.                                 xy_automata_nullazas_ISR();
  17.                         break;
  18.                        
  19.                         case Z_AUTOMATA_NULLAZAS:
  20.                                 z_automata_nullazas_ISR();
  21.                         break;
  22.                 }
  23.                
  24.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  25.         }
  26. }
A hozzászólás módosítva: Jún 9, 2015
(#) kapu48 válasza Suncorgo hozzászólására (») Jún 9, 2015 /
 
Megszakításban rossz szokás külső rutinokat hívni!

Mert csak nyújtod a hosszát a ki/be ugrálással. (Törekedj a minél rövidebb ORQ rutinokra!)
Tegyed be őket a TIM2_IRQHandler-be. (Itt most nem az olvashatóság a fő szempont! )

És én ezt átszervezném:
  1. void TIM2_IRQHandler(void)
  2. {
  3.         if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
  4.         {
  5.                 switch(cnc_allapot)
  6.                 {
  7.                         case G0:     // ez rácsoroghat a következőre                
  8.                         case G1:
  9.                                 linearis_interpolator_ISR();
  10.                         break;
  11.                        
  12.                         case XY_AUTOMATA_NULLAZAS:
  13.                                 xy_automata_nullazas_ISR();
  14.                         break;
  15.                        
  16.                         case Z_AUTOMATA_NULLAZAS:
  17.                                 z_automata_nullazas_ISR();
  18.                         break;
  19.                 }
  20.                
  21.                 TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
  22.         }
  23. }
A hozzászólás módosítva: Jún 9, 2015
(#) killbill válasza kapu48 hozzászólására (») Jún 9, 2015 /
 
Idézet:
„Megszakításban rossz szokás külső rutinokat hívni!
Mert csak nyújtod a hosszát a ki/be ugrálással.”
Egyetertek veled, egy ISR legyen a leheto legrovidebb. Mindazonaltal, ha egy fuggveny static (ahogy a fenti esetben nem...) es csak egyetlen helyrol hivod meg, akkor a gcc magatol beleintegralja a hivo fuggvenybe, nem lesz ugralas. Gondolom, a keil-nek is van ennyi esze. Allitolag meg tobb is, mint a gcc-nek.
(#) Suncorgo válasza kapu48 hozzászólására (») Jún 10, 2015 /
 
Egyenlőre meg akarom írni teljesen a uc és pc oldalt. Még uc oldalon körinterpolátor, pc oldalon az OpenGL marópálya kirajzolás van hátra. Aztán jöhet az optimalizálás, sebességnövelés.
(#) kapu48 válasza Suncorgo hozzászólására (») Jún 10, 2015 /
 
Tetszik a programozó stílusod!
Jó könnyen olvasható, és értelmezhető elnevezéseket használsz!

Még az Keil uV5-öst is felraktam a programod kedvéért.
Már nagyon közel jársz az uV5 Lite határához!
Aztán kezdhetsz gondolkozni az Optimalizáláson.
(#) csabeszq hozzászólása Jún 15, 2015 /
 
Érdekelne, hogy perzisztens adat tárolást EEPROM hiányában mivel csinátok:
- BKP regiszterek + elem a VBat-on
- Külső soros EEPROM (8 lábú I2C)
- vagy a Flash memória utolsó lapjait felülírjátok

Csaba
(#) killbill válasza csabeszq hozzászólására (») Jún 15, 2015 /
 
En sepeciel kulso i2c EEPROM, vagy ha nagyon arerzekeny a dolog, akkor a belso FLASH. De nemelyik NXP LPC chip-ben van belso EEPROM is.
(#) vzoole válasza csabeszq hozzászólására (») Jún 15, 2015 /
 
Én mellérakok egy SPI eeprom-ot. Már olyan olcsó (60Ft), hogy nem éri meg vacakolni vele.
Általában úgy is van valami egyéb SPI perifériám, mellette elfér.
Sőt, néha még egy soros flash-t is rátervezek, sose lehet tudni milyen kérés jön elő.
(#) toto válasza csabeszq hozzászólására (») Jún 16, 2015 /
 
Én most pont azzal játszadozom, hogy egy kontroller Flash-ébe mentsek el pár byte-ot. Egy grafikus LCD touchscreen-jének a kalibrációs adatait szeretném menteni, és hát a panelre nem terveztem anno EEPROM-ot, gondolván, hogy a Flash is jó ilyen célra. Azonban a netről vadászott példákat nem sikerült még működésre bírnom.
Ha valakinek van STM32-höz ilyen kódja, azt megköszönném.
(#) cpt.zoltan.simon válasza csabeszq hozzászólására (») Jún 16, 2015 /
 
SD kártya SDIO módban.
(#) killbill válasza cpt.zoltan.simon hozzászólására (») Jún 16, 2015 /
 
Mit ertesz az alatt, hogy SDIO modban? (Tudtommal az SDIO az egy olyan valami, amit SD kartya foglalatba lehet dugni, de pont nem SD kartya, hanem valami egyeb eszkoz.)
(#) cpt.zoltan.simon válasza killbill hozzászólására (») Jún 16, 2015 / 1
 
Elírtam, bocsánat, siettem. SD mód a helyes.
(#) kapu48 válasza toto hozzászólására (») Jún 21, 2015 /
 
Itt biztos ellesheted, hogyan kel a Flasht írni?:

Open source flash program for STM32 using the ST serial bootloader
Bővebben: Link
(#) toto válasza kapu48 hozzászólására (») Júl 14, 2015 /
 
Kicsit félreraktam eddig a témát, azért nem válaszoltam korábban.
Úgy tűnik, hogy most már működik az adat mentés a belső Flash-be dolog. Hátha más is ilyenen agyal, és neki segítség lehet, ha leírom röviden, hogy mikkel küzdöttem.
Rájöttem, hogy nem magával a Flash írásával volt gondom, az a példák alapján működött. Csakhogy a neten talált kódok arra voltak kialakítva, hogy magát a futtatandó programot írják be a mikrokontrollerbe, és hát ezek nem működtek megfelelően, ha csak adatot akartam elmenteni a Flash-be. Miért is? A flash írás úgy történik, hogy minden írás előtt töröljük az adott szektort. Első próbálkozásomnál szépen ki is fagyott az egész programom, mert kitörölte az első szektort úgy megszakítás-vektorostól, mindenestől.
Meg kellene tehát mondani, hogy fizikailag milyen címre tegye az elmentendő adatot. Nos, ez utóbbi nem olyan egyszerű GCC-ben. Nem is tudtam megoldani anélkül, hogy a linker file-hoz ne nyúljak hozzá: Deklaráltam egy const tömböt a programomban, amit elhelyeztem egy olyan szektorban (ehhez kellett a linker-file-t szerkeszteni), ahol más még nem volt. Ennyi.
Keil-ben egyszerűbb megoldani, hogy egy konstans értéket egy megadott címre helyezzen, ott nem kell a linker file-hoz hozzányúlni, GCC-ben ez nem működik. Legalábbis nálam nem működött.
(#) killbill válasza toto hozzászólására (») Júl 14, 2015 / 1
 
Idézet:
„Nos, ez utóbbi nem olyan egyszerű GCC-ben. Nem is tudtam megoldani anélkül, hogy a linker file-hoz ne nyúljak hozzá:”
Es ez miert baj? A linker script ugyanolyan resze a munkanak, mint a C forrasok vagy a Makefile. Egyebkent, ha csak arrol van szo, hogy egy strukturat akarsz egy valamilyen cimen tudni (legyen 0x80000000), ahhoz nem feltetlenul kell a linker script-et modositani:
  1. struct xxx {
  2.  int ez;
  3.  int meg;
  4.  long az;
  5. };
  6.  
  7. #define flash_data (*(struct xxx *)0x80000000)
  8.  
  9. int main(void)
  10. {
  11.  if(flash_data.ez == 1)...
  12. }
Következő: »»   61 / 177
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem