Ombouwen BF16 + Arduino Controller

Hier alle merken gekochte machine`s waar vragen over zijn of wat je met ons wilt delen.

Moderator: Moderators

EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Ombouwen BF16 + Arduino Controller

Bericht door EdgE »

Hallo allemaal,

oa door dit geweldige forum heb ik ook het cnc virus opgelopen... ik ben al een tijdje bezig met het ontwerpen/bedenken hoe de 'beste' router eruit zou moeten zien. omdat dit nog wel een tijdje gaat duren, leek 't mij het wel zo handig om eerst eens m'n BF16 om te bouwen, om wat ervaring op te doen.

gisteren heb ik voor het eerst de Y-as laten bewegen en daar ben ik stiekum toch wel een beetje trots op. 8)
ik heb m'n machine uiteindelijk getest in Mach3, dat viel nog niet mee, achteraf moest ik in de bios eerst de LPT op ECP zetten, voordat Mach3 ook maar iets deed. Maar uiteindlijk haalde ik met 12 Nm stepper een snelheid van 1.8 m/min, wat volgens mij nog wel beter zou moeten kunnen...

er moet nog veel gebeuren:
[*] X & Z as moeten uitraad nog ge-cnct worden
[*] end-stops monteren
[*] verstevigen van huidig frame (connectie tafel-kolom is erg slap)
[*] toepassen van kogelomloop spindels :oops:
(niet echt nodig, maar die aanbiedingen van die chinees op ebay, kan je echt niet laten liggen, ook denk ik hiermee minder last van resonaties te krijgen, door het verkleinen van de backlash.)

voor wat meer testen, probeer ik hier een compleet verslag bij te houden http://www.khwelling.nl/cnc.bf16.php.
uitraad ga ik ook hier de voortgang posten.

en als de BF16 cnc klaar is, begint de hobby pas echt:
[*] 1 v/d belangrijkste doelen, is toch wel om een 3D printer te bouwen. deze printkop kan dan mooi op m'n BF16 geplaatst worden :)
[*] meetmachine, dmv zo'n taster
[*] handbedienings paneel, zodat je ook manueel kan frezen
[*] uitlezen van exacte positie via een (los) schermpje. inprincipe kan deze rechtstreeks door Step/Dir aangestuurd worden
[*] eigenlijk wil ik ook zelf de machine met software kunnen aansturen. Visual Basic 6 is veel te traag (haal nu maar ~64 Hz). dus dat betekend of een controler bouwen of een andere programmeertaal kiezen of beide...

genoeg dromen en wensen, maar helaas, zover is het nog (lang) niet...


groeten,

EdgE.
Laatst gewijzigd door EdgE op 30 mar 2013 13:55, 2 keer totaal gewijzigd.
Gebruikersavatar
serum
Berichten: 5415
Lid geworden op: 08 mar 2008 20:37
Locatie: Zwolle

Re: Ombouwen BF16

Bericht door serum »

12Nm op de Y is aardig enthousiast; 3Nm zou al meer dan voldoende moeten zijn voor een dergelijke relatief lichte tafel.

Met hoeveel volt stuur je hem aan? als ik je een merk motor aan mag raden; Sanyo denki, die maken toch wel erg goede steppers. Ik haal op de Z as van mijn bf20 met een lichte driver (50V) en een dergelijke 9,1Nm motor een acceleratie van 450mm/s2 en een snelheid van 45mm/s. Een andere gebruiker hier (cncor) haalt op 110v AC met deze motoren op een BF30 (nog zwaarde kolom) een acceleratie van 1200mm/s2 en een ijlgang van 8000mm/m

Nema 34 motoren hebben een behoefte aan hoge spanningen, wat ik er van begreep.

de spindel zelf zal ook nog wel wat resoneren op hoog toerental. Ik wil mijn Z tegen de betonnen muur bevestigen met een paar stukken 50X50X250 dikwandige koker. deze maak ik zo, zodat ik met een paar stelschroeven hem haaks uit kan klokken tav de x/y.

het toerental van je frees kan je nog opschroeven tot 3000rpm. hij is nou gelimiteerd op 2500.

Waar heb je de couplers vandaan?
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

hoi serum,

die 12Nm is idd wat overdreven, de stappenmotor was eigenlijk ook voor een andere toepassing bedoelt.
na wat verschillende instellingen te proberen, heb eea toch behoorlijk kunnen versnellen:
1846
bij bi-polair parallel aansluiten doet ie het een stuk beter :)
huidige setting:ijlgang: 2,5 m/min & acceleratie: 250 mm/sec^2

erg jammer dat Mach3 een constante versnelling gebruikt.

ik gebruik 70volt & 5A voeding, daarvan heb ik er 2.
dus 1 voeding voor X&Y en die andere voor de Z driver.
als ik zo meet, dan gebruikt de Y-as (parallel geschakeld) zonder bewerkingen maximaal 1.4 A.
als ik de tafel met de hand tegen hou (de machine begint te verplaatsen), dan loopt de stroom op tot 2.5 A (in ijlgang). volgens mij moet dat lukken, met 2 drivers op 1 voeding...

qua resoneren v/d spindel, bedoelde ik eigenlijk dat als je 'grof' gaat frezen, dat ik denk dat de backlash een rol speelt. want als ik de dwarsgeleiding fixeer, dan trilt ie veel minder. dus minder backlash, zou dit probleem moeten oplossen.

hoe kan ik het toerental van de frees opvoeren met huidige hardware?

die couplers heb ik zelf gemaakt. 2 stukjes Al D:50mm met elk een sleuf op de kopz'nkant en een stukje POM in het midden.
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

na 2,5 week wachten, zijn de 1605 spindels binnen 8)
en (tot nu toe) geen extra douane kosten gehad.
ik moet ze nog wel ff zelf nabewerken, maar dat gaat me vast wel lukken.

wil eigenlijk huidig lagerhuis (en lagers) gebruiken, waar nu de trapezium spindel in zit, wel zo gemakkelijk.
in de machine zijn alleen maar axiale lagers gebruikt, in radiale richting is het een gat met smeernippel.
zou dit met hogere toerentallen nog steeds goed gaan?

en moet ik eigenlijk nog iets speciaals doen, om die spindels in te laten lopen oid?
en wat voor olie/vet gebruiken jullie? is leibaan olie goed genoeg?
of alvania EP(LF)2??

ben inmiddels klaar om het gehele frame in CAD te zetten, kom ik tot de ontdekking, dat de huidige trapezium draadeind 2 mm off-center!!! gemonteerd is... zucht, vandaar dat laatste paar cm van de x-as zo zwaar gaat. hmm die chinezen :evil: dat deel van de 'lagering' maar wel ff vernieuwen.

daarnaast heb ik ook en berekeningetje gemaakt, hoe stijf het frame theoretisch is.
als iemand (de kolom) van een BF20 of groter in CAD heeft staan, wil ik wel eens een vergelijking uitrekenen.
Gebruikersavatar
Mcgyver
Berichten: 4051
Lid geworden op: 08 jun 2007 17:45
Locatie: Ridderkerk

Re: Ombouwen BF16

Bericht door Mcgyver »

Mach "zoekt de ideale bocht tijdens het frezen... Soms zie je opeens een rare radius die je niet hebt geprogrammeerd...
Vooral met graveren is dit niet echt prettig..
De CV is wel in te stellen met een percentage... hoe hoger de waarde des te meer hij de ideale bocht zoekt...
Zonder CV kan de machine ook wel eens wat stoterig overkomen..
Zoals het freesje thuis freest, freest het nergens...
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

na wat testjes doen, is (eindelijk) de motor+kogelomloop moer op de z-as gemonteerd.
hier zie je wat verschillende testjes voor de maximale acceleratie:
2234[/url]

ten opzichte van de eerdere tests op de y-as (geen kogelomloop), toch behoorlijk wat snelheids winst gehaald in de z-richting (6 m/min), dus daar ben ik wel blij mee. komt metname door van 3 naar 5 mm/rev te gaan natuurlijk.
wat ook vreemd is, is dat bij de kogelomloop rond de 2.5 m/min een in verhouding hogere acceleratie mogelijk is, hoe kan dat nu weer??
las net in een andere forum bericht, dat 1.7Nm + 5mm/rev ook de 6m/min kan halen. ben benieuwd wat voor acceleratie en gewichten er zoal worden gebruikt. maar denk dat hier wel blijkt, dat 12 Nm beetje (boel) overdreven is.
voor een relatief langzaam draaiende belt-drive, is deze motor wel geschikt, zal dat ook 'eens' gaan testen... ;)
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

ik kon toch slecht slapen van de vorige tests, metname om die rare piek (2.5 m/min), dus ben er nog wat dieper in gedoken. eigenlijk blijkt het heel eenvoudig te zijn om een koppel-toeren grafiek van je eigen motor te maken!
door de motor met een constante versnelling te versnellen, zal deze bij een bepaald toerental gaan 'stall-en'.
als je deze versnelling*massatraagheid, krijg je het maximale koppel bij een bepaald toerental.

dit heb ik dus een aantal keer gedaan en kreeg de doorgetrokken lijnen in onderstaande grafiek. ook zie je hier die rare piek weer terug bij 500 rpm, dus dat 'klopte' wel. maar toch was ik hier nog niet zo blij mee. de curve ziet er namelijk totaal niet uit, zoals je zou verwachten. de fout blijkt bij Mach3 te liggen.
de versnellingen zijn te hoog, door de massatraagheid te vergroten, wordt de maximale versnelling kleiner, waardoor Mach3 wel in staat is om dit bij te houden.
ik heb de massatraagheid dus vergroot door de opspanplaat van de draaibank te monteren. het leuke is, dat je (op luchtweerstand na) nogsteeds wrijvingsloos aan het meten bent.

volgens mij kan ik hieruit concluderen, dat het motor koppel te hoog is. want pas bij toevoegen van meer 'massatraagheid' kan de software de boel weer bijhouden.

2252

deze gegevens kun je vervolgens gebruiken, om te bepalen hoeveel weerstand je in het systeem hebt zitten, maar ook om vergelijk te maken tussen verschillende typen spindels/geleidingen etc. altijd leuk om hier wat meer inzicht in te krijgen... ;-)
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

Weer terug van weg geweest... Inmiddels 2x verhuist, eindelijk weer ruimte en onlangs een paar dagen vrij genomen om weer eens aan m'n BF16 te werken.

Een echte cnc machine is het nog niet (communicatie met pc-arduino mist nog), maar 't begint toch al wat te worden... Want de jog-functie werkt al wel! (max 2.7 [m/min])
Hierbij ff een filmpje om m'n moeder duidelijk te maken hoe eea werkt 8)


Wordt vervolgd...
Gebruikersavatar
Sjuul
Berichten: 555
Lid geworden op: 05 jul 2011 22:57
Locatie: Montfort
Contacteer:

Re: Ombouwen BF16

Bericht door Sjuul »

Mooi werk EdgE.
en Arduino Rules.

Zou je de code willen posten? Als beginnend arduino hobbyist ben ik daar wel in geïnteresseerd.
Ga je de arduino straks ook gebruiken of alleen nu in de testfase?

Sjuul
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

Hoi Sjuul,

Arduino rules idd! Ik werd enthousiast door dit draadje: http://cnczone.nl/viewtopic.php?f=38&t=4240.
Dus dat moest ik ook maar eens proberen. Electronica vind ik het lastigste, dus altijd alles 3 dubbel checken..

Dit is wel een leuk linkje hoe je een controller kunt maken: http://blog.cncorbust.com/2010/10/stepp ... heory.html

Grootste probleem in mijn huidige code, is het acceleratie algoritme. Dus als er iemand is met nog andere goede tips en/of code, ben ik erg benieuwd hoe je dit nu het beste kunt oplossen! De huidige code trekt gewoon een standard waarde v/e delay af en zo wordt de code 'sneller'.
Inmiddels de scoop er ook opgezet en de code doet nu ongeveer 62 [usec/pulse].
Dat zou bij een 5x microstep ~974 [rpm] opleveren.
Echter stopt mijn motor nu al bij ~548 [rpm] -> 2.7[m/min].
Dit komt door 2 redenen: de motor & as zijn nog niet perfect uitgelijnd en het versnellings algoritme klopt nog niet helemaal.

Verder heb ik nog wel meer cnc-plannen met dit board, maar denk niet dat dit de uiteindelijke controller gaat worden.
It's just for Fun :)

Nou ja, als ik jou blij kan maken met deze code, veel succes ermee ;)

Code: Selecteer alles

/* 
Only Jogging Function:
 2 Push puttens (Left & Right)
 1 analog input (Shaft selection)
 1 analog input (Speed%) .NOT WORKING RIGHT NOW.
 Bad acceleration algorithm!

Written by: advancedvb@hotmail.com
Updated:    2012-04-22:
-Max speed: 233 [usec/p] (stepsize5:276rpm:1.2m/min)
Updated:    2012-04-23:
-Max jog speed = real: 62 [usec/p] => stepsize:5; 974 [rpm]; 4.9 [m/min]. Unfortunality the motor is not able to reach this.
-Max jog speed = 102-> real: 109 [usec/p] (=9.14[KHz]) -> 548[rpm]; 2.7 [m/min] (Driver:4.2Amp/StepSize:5)
-Current settings: 140 -> real: 147 (6.8[KHz]) -> 408[rpm]; 2.0 [m/min]
*/


//PIN Configuration:
const byte MtrPulseStep[4] = {2, 4, 6, 8};  //Used for motor stepping pulse
const byte MtrPulseDir[4]  = {3, 5, 7, 9};  //Used for motor direction pulse
const byte PushBTN[2] = {10, 11};                      //Push button Left & Right
const byte LED = 13;                        //if there is an moving action: turn on
const byte AnalogMtrSel = 5;                   //Motor Selection potentiometer on A5
const byte AnalogSpeedSel = 4;                 //Speed Selection potentiometer on A4: = % of min/max speed settings

//Used for stepper movement & speed control
boolean DoStepNow[4] = {false, false, false, false};
const unsigned int iMinStepperDelay = 140;   //[usec]  min delay = max speed system should go (use 120 min)
const unsigned int iMaxStepperDelay = 400;   //[usec]  max delay = min speed (=pull in & pull out speed)
const unsigned int iDelayIncr = 2;           //Used for acceleration increment, not realy nice way of doing
unsigned int iCurDelay = iMaxStepperDelay;   //[usec]  current delay time
unsigned int iCurMinDelay = iMinStepperDelay;   //[usec]  min delay time (=iMinStepperDelay*CurSpeedSel[%])
unsigned long lTimeLastStep = 0;      //[usec]  time since last step (current step should be += lCurDelay

//General declartions:
boolean iBtnVal[2] = {LOW, LOW};
//boolean iBtnOld[2] = {LOW, LOW};      //not needed when buttons are used as push button only and using a delay function for getting rid of debounching
byte bMainState = 1;                  //0:Idle 1:Jogging 2:ConnectionPC :)
int j = 0;                            //used for local general purpose counter, so it's declerated only once. Be sure not to nest this variable!

//Hardware setup:
void setup() {
  pinMode(PushBTN[0],INPUT);
  pinMode(PushBTN[1],INPUT);
  pinMode(LED,OUTPUT);
  for (int i = 0; i < 4; i++) { 
    pinMode(MtrPulseStep[i], OUTPUT);
    pinMode(MtrPulseDir[i], OUTPUT);
  }  
  Serial.begin(9600);
}

//Start Main Loop:
void loop() {
  switch (bMainState) {
    case 1:
      Serial.println("Start Jogging Function");
      JoggingLoop();
      break;
    //case X: other main functions are selected here.
  }
}

//Jogging Loop: only exit when bMainState is changed! (which is currently never the case!)
void JoggingLoop() {
  byte bJogState = 0;                       //0:Idle 1:Ramp up motor 2:Slow down & Stop 3:Exit Jogging Loop
  int8_t bMtrSel = -1;                      //0:X 1:Y 2:Z 3:A  -1:No Axis Selected
  byte bActionBtn = 0;                      //0:BtnL 1:BtnR
  byte bLastMtrSel = -1;                    //Remember last motor selected
  iCurMinDelay = iMinStepperDelay;
  //int  iMtrSpeed = (analogRead(AnalogMtrSel) / 4);
  //iMinDelay = ((iMaxStepperDelay-iMinStepperDelay) * iMtrSpeed / 256) + iMinStepperDelay;
  iCurDelay = iMaxStepperDelay;
  
  do { //Start Jogging Loop:
    //Check actions according each possible state:
    switch (bJogState) {
      case 1:  //Do step if possible
        DoOneStep(true); 
        if (digitalRead(PushBTN[bActionBtn]) == LOW) { bJogState = 2; }      
        break;
      case 2:  //Slow down & Do step if needed
        DoOneStep(false);
        if (iCurDelay >= iMaxStepperDelay) {       //speed <= min speed => motor could be stopped now!
          digitalWrite(LED, LOW);
          bJogState = 0;
          Serial.println("Motor is stopped.");
        }
        break;      
      case 0:  //Check if user wants to move
        iBtnVal[0] = digitalRead(PushBTN[0]);
        iBtnVal[1] = digitalRead(PushBTN[1]);
        bMtrSel = map(analogRead(AnalogMtrSel),0,1023,0,5) - 1;
        if ((iBtnVal[0] == HIGH) && (iBtnVal[1] == LOW)  && (bMtrSel >= 0)) {
          bActionBtn = 0;
          bJogState = 1;
          Serial.println("Move Left");
        } else if ((iBtnVal[1] == HIGH) && (iBtnVal[0] == LOW)  && (bMtrSel >= 0)) {
          bActionBtn = 1;
          bJogState = 1;
          Serial.println("Move Right");
        }
        if (bJogState == 1) { //Innitializing & Starts moving:
          bLastMtrSel = bMtrSel;  //Remember current motor selection
          Serial.print("Motor selected: "); Serial.println(bMtrSel);
          iCurMinDelay = iMinStepperDelay;
          iCurDelay = iMaxStepperDelay;
          for(j = 0; j < 4; j++) { 
            digitalWrite(MtrPulseDir[j], ((bActionBtn==true) && (j==bMtrSel))); } //This will determine which direction the stepper will move
          for(j = 0; j < 4; j++) { DoStepNow[j] = (j==bMtrSel); } //This will determine which stepper will be moving         
          digitalWrite(LED, HIGH);
          delay(50);                 //get rid of any debounching effects
          lTimeLastStep = micros() + iCurDelay;
        }
        // read mainstate also:
        //iMainState = map(analogRead(???),0,1023,0,??); Currently not implemented 
        //if (bMainState != 1) {                              //Slow down & Stop: when main function is changed from Jogging
        //    bJogState = 3; }
        break;
    }    
  } while (bJogState < 3); //Stay in this loop forever until..
}


//DoOneStep should be used by all function which require stepping:
//This function is doing increase/decrease & endstop check.
void DoOneStep(boolean bIncreaseSpeed) {
  if ( micros() >= lTimeLastStep ) {          
    lTimeLastStep = micros() + iCurDelay;
    //Serial.println(iCurDelay); //check if ramping up/down is correct, please comment for normal use
  } else {
    return; //It's not the right time to do a step.
  }
  if ( bIncreaseSpeed ) {  //INCREASE SPEED:
    if (iCurDelay > iCurMinDelay ) {    //Somehow the speed is lowered (change by user?), so increase delay again 
      iCurDelay -= iDelayIncr;
    } else {
      iCurDelay = iCurMinDelay;
    }
  } else {              //DECREASE SPEED:
    if (iCurDelay < iMaxStepperDelay) {    //Somehow the speed is lowered (change by user?), so increase delay again 
      iCurDelay += iDelayIncr;
    } else {
      iCurDelay = iMaxStepperDelay;
    }
  }
  //CHECK FOR ENDSTOPS or USER EXIT BUTTON PRESSED!! (this should only be one PIN)
  for(j = 0; j < 4; j++) { digitalWrite(MtrPulseStep[j], DoStepNow[j]); }
  for(j = 0; j < 4; j++) { digitalWrite(MtrPulseStep[j], LOW); }    
}
EdgE
Berichten: 84
Lid geworden op: 25 jul 2008 11:04
Locatie: Utrecht
Contacteer:

Re: Ombouwen BF16

Bericht door EdgE »

Zo eindelijk weer eens een stapje verder: m'n eerste jogger pcb/handheld...
6705
Op alle 3 assen beweegt ie bijna met 3 m/min en dat vind ik wel snel genoeg.
veteq
Berichten: 784
Lid geworden op: 12 jun 2007 04:09
Locatie: haarlem
Contacteer:

Re: Ombouwen BF16

Bericht door veteq »

Gaaf hoor, maar hoe ga je die 1605 KG in de x-as plaatsen, daar is toch nooit ruimte voor?
sirhc
Berichten: 47
Lid geworden op: 28 dec 2008 01:13
Contacteer:

Re: Ombouwen BF16

Bericht door sirhc »

Ben ik ook wel eens benieuwd naar hoe je dat kwijt wil komen. Heb ook een BF16 hier staan.
veteq
Berichten: 784
Lid geworden op: 12 jun 2007 04:09
Locatie: haarlem
Contacteer:

Re: Ombouwen BF16

Bericht door veteq »

Heb ook ooit alleen zo`n bf16 kruistafel gekocht om te gaan verbouwen, zie zelf geen mogelijkheid voor 1605
Plaats reactie