Extern styrning av CNC-fräs?
Strömbom: Jag har precis fått hem ett EZ-USB dev kit från Cypress för deras FX2 kretsar.
FX2 kretsarna (CY7C68013A etc) har USB 2.0 och en 8051 kärna på 48 MHz.
Med dessa kretsar är det ju en smal sak att hinna skicka ner en föruträknad stegningsvektor som sedan exekveras av 8051 processorn.
En fyraxlig stegmotorstyrning kräver då bara 1 byte per stegning (2 bitar per kanal). Och med en maximal stegfrekvens på uppåt 50kHz blir det bara ca 50kbytes/s över USB-2.0 linan vilket är försumbart.
Frågan är hur kritisk feed rate är, dvs med vilken precision som man ska takta stegningsvektorn? Hur ska man hantera övergången mellan olika segment med avseende på acceleration och hastighet?
FX2 kretsarna (CY7C68013A etc) har USB 2.0 och en 8051 kärna på 48 MHz.
Med dessa kretsar är det ju en smal sak att hinna skicka ner en föruträknad stegningsvektor som sedan exekveras av 8051 processorn.
En fyraxlig stegmotorstyrning kräver då bara 1 byte per stegning (2 bitar per kanal). Och med en maximal stegfrekvens på uppåt 50kHz blir det bara ca 50kbytes/s över USB-2.0 linan vilket är försumbart.
Frågan är hur kritisk feed rate är, dvs med vilken precision som man ska takta stegningsvektorn? Hur ska man hantera övergången mellan olika segment med avseende på acceleration och hastighet?
Jag vet inte hur "riktiga" maskiner gör men jag skulle ju vilja att den tittar på flera koordinater framåt i tiden så att den kan avgöra vilken matningshastighet den skall passera nästa koordinat i.
Jag taktade ut pulserna med en timer, så beräkning av matningshastighet borde man kunna sköta i långsammare takt i programmets huvudloop?
Eller hade du tänkt att sköta alla beräkningar i PC:n och bara ha 8051 att agera som buffert för att kunna få en jämn pulsningstakt ?
/Johan
Jag taktade ut pulserna med en timer, så beräkning av matningshastighet borde man kunna sköta i långsammare takt i programmets huvudloop?
Eller hade du tänkt att sköta alla beräkningar i PC:n och bara ha 8051 att agera som buffert för att kunna få en jämn pulsningstakt ?
/Johan
Nu har jag kommit en bit på vägen med mitt projekt med extern styrning av en fräs/svarv.
Jag har gjort en G-code parser som kan tolka g-kod och sedan generera en lista med stegkommandon. (Består i princip bara av en bit för rikning och en bit för om axeln ska stega och sedan en tid som stegkommandot skall ta)
Simulerar man en stegmotorstyrning och skickar in listan stegkommandon kan man få en bild av vad man skulle fått om den styrde en riktig fräs.

På så vis har jag kunnat debugga parsern. Parsern är långt ifrån helt färdig men den klarar G0-G3 mm., dvs både linjär och arc interpolering.
Jag har förberett för 6 axlig styrning (X,Y,Z,A,B,C). Är det tillräckligt eller finns det realistiska fall som kommer att kräva fler än 6 axlar?
Upplägget är att jag genererar en stegningslista med önskade steghastigheter.
Tanken är att jag ska kunna låta den listan gå genom ett filter som lägger till backlash-kompensering och sedan optimerar stegtiderna så att man aldrig överstiger de programmerade hastigheterna (pulser/sekund) eller accelerationerna (pulser/sekund/sekund).
Kvar är sedan att skicka ner stegningslistan till mikrokontrollern så att den kan utföra stegningen.
Jag tar gärna emot typiska inställningar på hastigheter och accelerationer för olika stegmotorstyrda fräsar/svarvar och även andra tips eller så.
/Andax
Jag har gjort en G-code parser som kan tolka g-kod och sedan generera en lista med stegkommandon. (Består i princip bara av en bit för rikning och en bit för om axeln ska stega och sedan en tid som stegkommandot skall ta)
Simulerar man en stegmotorstyrning och skickar in listan stegkommandon kan man få en bild av vad man skulle fått om den styrde en riktig fräs.

På så vis har jag kunnat debugga parsern. Parsern är långt ifrån helt färdig men den klarar G0-G3 mm., dvs både linjär och arc interpolering.
Jag har förberett för 6 axlig styrning (X,Y,Z,A,B,C). Är det tillräckligt eller finns det realistiska fall som kommer att kräva fler än 6 axlar?
Upplägget är att jag genererar en stegningslista med önskade steghastigheter.
Tanken är att jag ska kunna låta den listan gå genom ett filter som lägger till backlash-kompensering och sedan optimerar stegtiderna så att man aldrig överstiger de programmerade hastigheterna (pulser/sekund) eller accelerationerna (pulser/sekund/sekund).
Kvar är sedan att skicka ner stegningslistan till mikrokontrollern så att den kan utföra stegningen.
Jag tar gärna emot typiska inställningar på hastigheter och accelerationer för olika stegmotorstyrda fräsar/svarvar och även andra tips eller så.
/Andax
En uppskattning(gissning) är att du bör ha en upplösning på c:a 5µsek på stegningen om den ska kunna köra stegmotorer i 40Khz.Frågan är hur kritisk feed rate är, dvs med vilken precision som man ska takta stegningsvektorn? Hur ska man hantera övergången mellan olika segment med avseende på acceleration och hastighet?
Riktiga cnc-maskiner bromsar väldigt lite(eller inte alls) mellan linjära rörelser(G1), dom genar istället.
Men för en hobbymaskin räcker det kanske med inbromsning, man har ju inte så bråttom.
(Hur funkar Mach3 när det gäller inbromsning/avrundning av skarpa konturer?)
Du behöver inte fler än 6axlar.
En fräsmaskin/svarv med bara en verktygsbärare behöver inte fler än 5axlar.
Anledningen till att jag började med det här hobbyprojektet, förutom utmaningen, var att jag ville hitta en bra algoritm som ger hyffsad prestanda med backlash-kompensering aktiverad. De flesta program som jag sett mer eller mindre stannar upp helt mellan varje segment som den förflyttar sig. Genom lite optimering borde man kunna "smeta" ut backlash-kompenseringen och på så sätt få bra nogggrannhet utan allt för stor prestandaförlust.
När de riktiga maskinerna genar gäller det att hålla reda på hur mycket så att de inte tar bort material man gärna vill ha kvar!!
När de riktiga maskinerna genar gäller det att hålla reda på hur mycket så att de inte tar bort material man gärna vill ha kvar!!
Om du vill ha bra "flyt" i rörelserna ska du absolut ha med att den genar, jag tror att det inte krävs mycket för att man ska se skillnad.
Ni får gärna ifrågasätta det här, jag har trotts allt ingen erfarenhet av hobbymaskiner.
Det jag har erfarenhet av är att 500Kg ska flytta sig, då är det självklart att man inte vill stanna helt vid varje hörn.
Jag gillar ide'n att datorn ska få jobba i lugn och ro och skicka data till styrelektroniken när den kan.
Men har du tänkt på att om du kör en svarv och ska svarva gänga så behöver axelrörelserna synkas med spindelns rotation.
I ditt system kommer du ha en delay som inte är konstant alltså behöver signalen från spindeln ha en tidskod så att datorn vet hur gammal signalen är.
Alternativ2 är att du servostyr spindelmotorn synkat med axlarna men det skulle vara att krångla till det mer än nödvändigt.
Alternativ3: Styrelektroniken får själv kompensera axelrörelserna utifrån spindelpositionen när man gängar.
Och nu svarar du säkert att det helt enkelt inte ska avändas till svarvning
Ni får gärna ifrågasätta det här, jag har trotts allt ingen erfarenhet av hobbymaskiner.
Det jag har erfarenhet av är att 500Kg ska flytta sig, då är det självklart att man inte vill stanna helt vid varje hörn.
Jag gillar ide'n att datorn ska få jobba i lugn och ro och skicka data till styrelektroniken när den kan.
Men har du tänkt på att om du kör en svarv och ska svarva gänga så behöver axelrörelserna synkas med spindelns rotation.
I ditt system kommer du ha en delay som inte är konstant alltså behöver signalen från spindeln ha en tidskod så att datorn vet hur gammal signalen är.
Alternativ2 är att du servostyr spindelmotorn synkat med axlarna men det skulle vara att krångla till det mer än nödvändigt.
Alternativ3: Styrelektroniken får själv kompensera axelrörelserna utifrån spindelpositionen när man gängar.
Och nu svarar du säkert att det helt enkelt inte ska avändas till svarvning

Jo det är tänkt att den ska användas till svarvning, och då även för gängning. Fast inte i första versionen.
Gängningen tänkte jag skulle göras genom att man med en optogivare kan få en puls in till mikrokontrollern vid varje varv på spindeln för att mäta hastigheten.
Hur många steg stegmotorn ska gå per varv bestäms ju av gängstigningen. Dividerar man tiden för ett varv med antal steg får man tiden mellan varje stegning.
Detta får göras helt nere i mikrokontrollern utan hjälp av PCn. PCn skickar bara ner parametrarna, typ start-pos stopp-pos, stigning etc.
Problemet blir väl accelerationen i början på gängningscykeln. Man vill ju att stegmotorn ska ha kommit upp i rätt hastighet och vara på rätt plats när spindeln står i ett visst läge så att man träffar rätt ingång på gängan gång på gång under hela förloppet.
Det blir lite att klura på. Några tips?
Gängningen tänkte jag skulle göras genom att man med en optogivare kan få en puls in till mikrokontrollern vid varje varv på spindeln för att mäta hastigheten.
Hur många steg stegmotorn ska gå per varv bestäms ju av gängstigningen. Dividerar man tiden för ett varv med antal steg får man tiden mellan varje stegning.
Detta får göras helt nere i mikrokontrollern utan hjälp av PCn. PCn skickar bara ner parametrarna, typ start-pos stopp-pos, stigning etc.
Problemet blir väl accelerationen i början på gängningscykeln. Man vill ju att stegmotorn ska ha kommit upp i rätt hastighet och vara på rätt plats när spindeln står i ett visst läge så att man träffar rätt ingång på gängan gång på gång under hela förloppet.
Det blir lite att klura på. Några tips?
Techno, ok. 90% av projekten på forumet finns redan i någon form. De flesta vill bygga en egen version för att lära sig, eller göra en version som är bättre (eller annorlunda) i någon avseende eller bara ha roligt. Det är en mäktig känsla att se något man byggt fungera som det är tänkt.
Jeda, jag kan för lite om PLC men jag tror att det är för låg prestanda på en PLC för att kunna styra stegmororerna med tillräcklig noggrann timing.
Projektet fortgår som tänkt.
Dock dök ett problem upp med mitt EZ-USB FX2 kit upp. Det funkade inte som det skulle. Hade ett testprogram som gjorde rinnande ljus med 4 lysdioder. Ibland slutade lysdioderna rinna, men programmet forsatte. Det kunde jag se med ett oscilloskop eftersom jag togglade en annan I/O pinne som felsökning. När jag sedan mätte med proben på en GAL-krets som sköter addressavkodningen till bl.a. lysdioderna funkade det igen.
Problemet var att det fanns oanvända anslutningar på kretsen som låg och flöt. När jag probade dessa jordades de och då funkade det. Så nu är devkit-kortet modifierat. Det borde Cypress tänkt på!
Nästa steg blir att få till prgrammet på PCn som streamar ner stegningsvektorerna via USB 2.0 och programmet i mikrokontrollern som tar emot datat. Det fanns med många bra exempel med devkitet som man kan modifiera. Har börjat lite smått med det. Blir förhoppningsvis klar i helgen.
En fråga om USB. Är det någon som vet några VID/PID man kan sätta på kortet som är till för hobbybruk som sannolikheten är minimal att krocka med någon annan device eller drivrutin?
Jeda, jag kan för lite om PLC men jag tror att det är för låg prestanda på en PLC för att kunna styra stegmororerna med tillräcklig noggrann timing.
Projektet fortgår som tänkt.
Dock dök ett problem upp med mitt EZ-USB FX2 kit upp. Det funkade inte som det skulle. Hade ett testprogram som gjorde rinnande ljus med 4 lysdioder. Ibland slutade lysdioderna rinna, men programmet forsatte. Det kunde jag se med ett oscilloskop eftersom jag togglade en annan I/O pinne som felsökning. När jag sedan mätte med proben på en GAL-krets som sköter addressavkodningen till bl.a. lysdioderna funkade det igen.

Problemet var att det fanns oanvända anslutningar på kretsen som låg och flöt. När jag probade dessa jordades de och då funkade det. Så nu är devkit-kortet modifierat. Det borde Cypress tänkt på!

Nästa steg blir att få till prgrammet på PCn som streamar ner stegningsvektorerna via USB 2.0 och programmet i mikrokontrollern som tar emot datat. Det fanns med många bra exempel med devkitet som man kan modifiera. Har börjat lite smått med det. Blir förhoppningsvis klar i helgen.
En fråga om USB. Är det någon som vet några VID/PID man kan sätta på kortet som är till för hobbybruk som sannolikheten är minimal att krocka med någon annan device eller drivrutin?
Hej!
Inga problem prestandan på plc:n har en 3:axlig servomodul som sköter om motordriften, det finns redan färdiga programmoduler för interpollering etc.
Mitt problem är hur man skall lägga upp kommunikationen från datorn, samt att jag inte programerat mycket i Mitsubichi förut!
Men jag har lärt mig mycket med nuvarande projekt om hur cnc fungerar får väl fortsätta med detta projekt sedan kanske man kan ge sig på PLC:n.
Vad jag sett brukar det vara en PLC till grund för dom mesta CNC, till exempel Siemens eller Fanuc!
Mvh jeda007
Inga problem prestandan på plc:n har en 3:axlig servomodul som sköter om motordriften, det finns redan färdiga programmoduler för interpollering etc.
Mitt problem är hur man skall lägga upp kommunikationen från datorn, samt att jag inte programerat mycket i Mitsubichi förut!
Men jag har lärt mig mycket med nuvarande projekt om hur cnc fungerar får väl fortsätta med detta projekt sedan kanske man kan ge sig på PLC:n.
Vad jag sett brukar det vara en PLC till grund för dom mesta CNC, till exempel Siemens eller Fanuc!
Mvh jeda007