Sida 1 av 1
Tips på mellanhand till PC<->Stegmotorkontrollerkort
Postat: 2 oktober 2006, 13:27:29
av Luff
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?
Postat: 2 oktober 2006, 14:43:41
av Greensilver
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?
Postat: 2 oktober 2006, 14:48:03
av sodjan
Det är nog ganska klart att det sker i mjukvaran,
t.ex i mjukvaran på "breakout-kortet"...
Postat: 2 oktober 2006, 15:00:53
av Luff
Frågan är dock om det finns (bra) mjukvara som trivs med att skicka koordinater istället för step/direction pulser.
Just det är ingen problem i mitt fall då jag inte bygger en CNC och skriver mitt eget program.
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?
Postat: 2 oktober 2006, 17:05:56
av Andax
Luff, håller själv på att lattja med en USB stegmotorkontroller som ska sköta stegningen åt mig. Den bygger på CY7C68013A kretsen.
Projektet går sakta men säkert i en bestämd riktning....
...framåt!
Förresten, vad är det du ska styra?
Re: Tips på mellanhand till PC<->Stegmotorkontrollerk
Postat: 2 oktober 2006, 17:48:59
av cyr
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.)
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).
Postat: 2 oktober 2006, 20:03:40
av Luff
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(?).
Postat: 2 oktober 2006, 20:24:06
av Greensilver
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?
Postat: 2 oktober 2006, 22:04:36
av Andax
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.