Tips på mellanhand till PC<->Stegmotorkontrollerkort
Tips på mellanhand till PC<->Stegmotorkontrollerkort
Köpte nyligen en stegmotorkontroller för tre stycken stegmotorer. Kortet fungerar bra, men tycker det är lite tråkigt att ha 100% cpuload under tiden stegmotorn rör på sig.
(Problemet ligger i pausen på ~0.5-2ms som behövs mellan varje steg. I nuläget finns inget vettigt sätt för varken windows eller linux att pausa så korta stunder. Kommandot usleep har en minsta noggrannhet på ~10ms och kommandot udelay sätter datorn i en loop(dvs. 100% cpuload) tills tiden har passerat.)
Misstänker att jag behöver någon slags enchipdator emellan. Det jag hoppas åstadkomma är att den enda informationen min PC behöver förse är vilken koordinat stegmotorn ska till, sen håller microprocessorn reda på vart den är och sköter accelerationen så att den kommer fram så snabbt som möjligt.
Hur har ni andra löst det? Finns det andra alternativ?
Vilken mikroprocessor rekomenderar ni? Vilken är billigast, lättast att lära sig, lämpligast för ändamålet?
(Problemet ligger i pausen på ~0.5-2ms som behövs mellan varje steg. I nuläget finns inget vettigt sätt för varken windows eller linux att pausa så korta stunder. Kommandot usleep har en minsta noggrannhet på ~10ms och kommandot udelay sätter datorn i en loop(dvs. 100% cpuload) tills tiden har passerat.)
Misstänker att jag behöver någon slags enchipdator emellan. Det jag hoppas åstadkomma är att den enda informationen min PC behöver förse är vilken koordinat stegmotorn ska till, sen håller microprocessorn reda på vart den är och sköter accelerationen så att den kommer fram så snabbt som möjligt.
Hur har ni andra löst det? Finns det andra alternativ?
Vilken mikroprocessor rekomenderar ni? Vilken är billigast, lättast att lära sig, lämpligast för ändamålet?
- Greensilver
- Inlägg: 1305
- Blev medlem: 21 januari 2005, 21:24:57
- Ort: Sverige
- Kontakt:
Ja, detta undrar jag med. Frågan är dock om det finns (bra) mjukvara som trivs med att skicka koordinater istället för step/direction pulser. Sen är det väl fint om breakout-kortet skötte rampning med mera på något bra sätt - något som väl normalt sker i mjukvaran?
Någon CNC-guru som skulle vilja berätta lite?
Någon CNC-guru som skulle vilja berätta lite?
Just det är ingen problem i mitt fall då jag inte bygger en CNC och skriver mitt eget program.Frågan är dock om det finns (bra) mjukvara som trivs med att skicka koordinater istället för step/direction pulser.
Här är en som gjort något liknande med en AVR tror jag.
http://micromouse.cannock.ac.uk/motors/ ... riving.htm
Är en AVR ett bra alternativ?
Re: Tips på mellanhand till PC<->Stegmotorkontrollerk
EMC2 (www.linuxcnc.org) använder Linux med realtidsfunktioner, där kan man schedulera trådar med en exakhet på åtminstone 10-20 us (utan busy-wait).Luff skrev: (Problemet ligger i pausen på ~0.5-2ms som behövs mellan varje steg. I nuläget finns inget vettigt sätt för varken windows eller linux att pausa så korta stunder. Kommandot usleep har en minsta noggrannhet på ~10ms och kommandot udelay sätter datorn i en loop(dvs. 100% cpuload) tills tiden har passerat.)
Intressant, kanske något för Greensilver eller Andax. Men det hjälper tyvärr inte mig, då min linuxburk är lite av en specialare. Maskinen jag ska köra från är en router, Asus WL-500gD(som har två USB portar) som kör en version av linux, OpenWRT. Att kompilera in stöd för realtid till den disten och sätta mig i hur man ska skriva progammet tror jag blir jobbigare än att att lära mig använda microprocessorer(?).
Senast redigerad av Luff 2 oktober 2006, 23:02:41, redigerad totalt 1 gång.
- Greensilver
- Inlägg: 1305
- Blev medlem: 21 januari 2005, 21:24:57
- Ort: Sverige
- Kontakt:
sodjan>>>Det är nog ganska klart att det sker i mjukvaran,
t.ex i mjukvaran på "breakout-kortet"...
Ok. Skall förtydliga vad jag menade. Med mjukvaran avsåg jag även i andra stycket den programvara som körs i PC'n. Hade jag menat programvaran i breakoutkortet hade jag skrivit firmware eller något i den stilen.
Andax>>>Det där lät intressant, har du lagt upp någon projekttråd?
t.ex i mjukvaran på "breakout-kortet"...
Ok. Skall förtydliga vad jag menade. Med mjukvaran avsåg jag även i andra stycket den programvara som körs i PC'n. Hade jag menat programvaran i breakoutkortet hade jag skrivit firmware eller något i den stilen.

Andax>>>Det där lät intressant, har du lagt upp någon projekttråd?
Greensilver>>>Har inte lagt upp någon projekttråd än... Ska göra det när jag får tid att sammanfatta något klokt. Här är en liten sammanfattning av vilka delprojekt jag labbat med (ursäkta lånet av tråden)
1) Ideal stegning (dvs minimalt avvikelse) vid "linjear" och "arc" interpolation. Har tagit fram ett program som räknar fram detta.
Problemet är att det blir mycket komplicerat om man ska lägga in hastighets och accelerationsbegränsningar och backlash-kompensering.
Kommer att i första skedet använda en enklare interpolering, kanske utförd nere i USB kontrollern.
2) G-kod tolkare... Har gjort en egen tolk som klarar G00-G03 mm.
Kommer dock att ge mig på en annan lösning för att klara hela RS274 (NGC-dialekten, dvs samma EMC2)
3) Kommunikation med en CY7C68013A USB kontroller som sedan ska implementera själva stegningen. Kör kommunikationen via PyUSB som är ett tillägg till Python. Har implementerat och testat ett väldigt enkelt protokoll. Behöver jobbas en del på.
4) Grafiskt interface till hela klabbet i Python/wxPython/PyOpenGL. Precis påbörjat.
1) Ideal stegning (dvs minimalt avvikelse) vid "linjear" och "arc" interpolation. Har tagit fram ett program som räknar fram detta.
Problemet är att det blir mycket komplicerat om man ska lägga in hastighets och accelerationsbegränsningar och backlash-kompensering.
Kommer att i första skedet använda en enklare interpolering, kanske utförd nere i USB kontrollern.
2) G-kod tolkare... Har gjort en egen tolk som klarar G00-G03 mm.
Kommer dock att ge mig på en annan lösning för att klara hela RS274 (NGC-dialekten, dvs samma EMC2)
3) Kommunikation med en CY7C68013A USB kontroller som sedan ska implementera själva stegningen. Kör kommunikationen via PyUSB som är ett tillägg till Python. Har implementerat och testat ett väldigt enkelt protokoll. Behöver jobbas en del på.
4) Grafiskt interface till hela klabbet i Python/wxPython/PyOpenGL. Precis påbörjat.