Spindelrichting

Nederlandse CNC controller op basis van de usb poort of Ethernet.

Moderator: Moderators

Plaats reactie
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Spindelrichting

Bericht door Breaker »

Een tijdje terug een vraag gesteld over het wisselen van spindel richting op een Emco 5 CNC:
http://cnczone.nl/viewtopic.php?f=35&t=11984

Na advies afgezien om hier verder wat mee te doen, totdat… ik een Zero Speed (ZS) uitgang op mijn motorsturingsbordje vond. Dus toch even proberen.

Met wat optocouplers is de ZS uitgang van mijn motor gekoppeld aan de vierde home ingang van de CPU5A en de spindelriching gekoppeld aan de mistkoeling uitgang en het vinkje ‘MistIsSpindleDirection’ in setup is gezet.

De spindelvoeding laat ik nog niet via het relais lopen, heb er voorlopig 24V en een multimeter opgezet.

Alle schakelingen en signalen werken goed. De ZS uitgang wordt hoog op als de motor boven de 400 rpm draait (had liever signaal gezien als de snelheid nul is maar dat is niet anders) en als ik de motorrichting wissel dan schakelt de uitgang op het relais van +24V naar -24V.

Nu ben ik een beetje aan het kijken naar M3 en M4 aanpassingen:
- M3 naar M4 of andersom alleen als ZS niet actief is, dus motor stil
- M3 en M4 gewoon door te laten gaan als de richting al goed is en alleen de snelheid veranderd

Ik ben dus wat aan het stoeien in de user_macro.cnc en denk daar wel uit te komen. Het grootste probleem was dat de waarde van home-4 (voor mij dan dus zero speed) niet direct is op te vragen op een CPU5A via #5124 maar dat dit eerst via M56 P54 Lx Qy moet gebeuren en dan via #5399 gebruikt kan worden (M56 zou alleen op een CPU5B werken maar op de CPU5A lijkt het ook goed te gaan)

Via G-code lijkt het allemaal te reageren zoals bedoeld.

Toch zijn er twee problemen die me afhouden van definitief gebruik:
a. De F3 en F4 knop onder het machinemenu (Spindle & ToolDir) lijkt niet te reageren op de aangepaste (user_macro) M3/M4 functie. Als ik op de knop druk schakelt het relais direct, ongeacht de waarde van de zero speed ingang.
b. Als ik een M9 in de code zet (opheffen koeling mist M7/flood M8) dan schakelt het relais ook terug. Vreemd want zoals vermeld heb ik in de setup al aangevinkt dat de Mist uitgang nu Spindle Direction is, dus een M9 zou geen invloed meer mogen hebben.

Heb ook even overwogen of het elektrisch op te lossen is, bijvoorbeeld door het relais niet schakelbaar te maken als de ZS hoog is, maar dat ligt waarschijnlijk buiten mijn mogelijkheden. En er zal dan toch ook terugkoppeling van de relais stand naar de besturing gegeven moeten worden en zit ik alsnog met hetzelfde probleem.

Dus tips en ideeën over het oplossen van bovenstaande zaken: Graag!
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12055
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Spindelrichting

Bericht door hugo stoutjesdijk »

De gehele opzet met mogelijkheden en problemen staat me even niet meer zo goed voor de geest.
Ik begrijp dat je de aansluiting van de DC? motor na de motorregeling om wilt draaien om de draairichting te verwisselen. Wat blijkbaar niet standaard ondersteunt wordt.
Dat zou alleen bij stilstaande motor mogen gebeuren, en je kunt de motorregeling blijkbaar ook niet spanningsloos zetten.
Er is vast wel een simpel electronisch truucje te bedenken om via optisch gescheiden signaal de aanwezigheid van spanning op de motor draden te meten.
Of een encoder schijfje waarbij je de pulsen als hartbeat gebruikt, zolang die pulsen dan langer dan 20msec. of zo niet meer komen, staat ie stil.
Verder zou je natuurlijk het M3 en M4 relais via een NC kontakt van het andere relais aan kunnen sturen, dan werkt die M4 gewoon niet als M3 aangetrokken is.
Ik zou gewoon zelf een ZS signaal maken met een gatenschijfje.
1 toer per minuut en honderd gaatjes, is 1.6 msec per gaatje, dus 5 msec geen pulsje staat ie echt stil.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Spindelrichting

Bericht door Breaker »

Navraag bij Eding leerde het volgende:
a. De werking van de machineknoppen is vast, en dus niet aan te passen via de user_macro. De aangepaste functies kunnen wel via de user knoppen gedefinieerd worden. In de toekomst komt er mogelijk een optie om de twee knoppen voor spindle en spindelrichting onzichtbaar te maken in het menu.
b. In principe wordt de spindelrichting optie eigenlijk niet (langer meer) ondersteund op de CPU5A. Dus M9 vermijden als het toch gebruikt wordt.

De opties met de pulsjes tellen wil ik nog wel verder bekijken, lijkt me het meest robuust. De Emco 5 heeft standaard al zo'n schijf met 100 gaatjes per rotatie + index gaatje en dus ook twee optische sensoren.

11561
Bovenaan de indexopening.

De berekening van drie gaatjes begrijp ik ook, maare.... Hoe maak ik een stukje elektronica wat dat moet regelen? Zijn dat twee transistors en een weerstand of moet ik een volledige microprocessor programmeren?
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Spindelrichting

Bericht door Breaker »

Vond nog een PIC programmer in de oude doos, maar na het zoeken van software, problemen met seriële adapters en een dikke pil met assembler opnieuw begonnen doorworstelen, ben ik toch maar even stiekum naar alternatieven gaan kijken.

Na een paar online simulaties is het een Arduino geworden, ook de echte versie werkt feilloos met de IDE, makkelijk extra libraries toevoegen en veel informatie beschikbaar. Ik ben eigenlijk wel aangenaam verrast hoe gemakkelijk het je wordt gemaakt.

Daarna wel wat tijd kwijt geweest om om het signaal van de motorcontroller (zero-speed) en de CPU5A (spindle direction) ook echt op de Arduino uit te lezen. Weet inmiddels weer heel wat meer over optocouplers, pull-ups en pull-downs en of weerstanden ergens ingebakken zitten. Het lijkt er nu op alsof ik de signalen betrouwbaar kan uitlezen en de aansturing van het relais kan doen (INPUT_PULLUP bleek uiteindelijk de truc te doen). Om het betrouwbaar in te bouwen ook een ‘shield’ met schroefconnectoren gevonden, die kan ik binnenkort monteren.

Voorlopig tevreden, later zou ik nog graag de rotatie van de spindel uitlezen. Moet ik even aan de gang met de IR sensoren en de interrupt methode.

Afgezien van het laatste is de besturingskast wel zo ongeveer klaar: verse laag verf, nieuwe panelen, PC/monitor mount. Nu het mechanische gedeelte opkuisen en afmaken.

11724
11725
11726
11727
11728
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
andrefc101
Donateur
Berichten: 3733
Lid geworden op: 26 dec 2007 08:39
Locatie: Bergen op Zoom
Contacteer:

Re: Spindelrichting

Bericht door andrefc101 »

Breaker schreef:In de toekomst komt er mogelijk een optie om de twee knoppen voor spindle en spindelrichting onzichtbaar te maken in het menu.
Kan nu in versie V4.02.43 van 14-03-2016.
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Spindelrichting

Bericht door Breaker »

Die had ik nog gemist, dat werkt nu inderdaad :P
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Spindelrichting

Bericht door Breaker »

Zo, weer een zoektocht ten einde en weer veel van opgestoken 8)

Uiteindelijk de pulsentel methode niet gebruikt. Heb een IR sensor geinstalleerd op de motor, aangezien ik die zeker stil wil hebben als er geschakeld wordt.
11793

Na het instellen van de gevoeligheid kwamen de pulsen door aan de Arduino over het hele bereik. Het probleem was echter dat de sampletijd veel te lang werd. Het minimale toerental van de motor is ongeveer 400 rpm dus 6,7Hz. Om betrouwbaar te meten hab je zeker een paar pulsen nodig, dus was de sampletijd al snel een 400ms.

Een ander probleem was dat de Arduino vier keer zoveel pulsen telde dan er gegeven werden.
11794

Heb met wat hulp met een scoop gekeken, maar het signaal lijkt in orde qua frequency en ook best schoon.
11798

Heb ook verschillende minimale rise tijd in de Arduino geprobeerd (meerdere pulsen binnen enkele ms tellen als 1). Maar dat hielp niets, dus nog steeds geen idee waar die drie extra pulsen door worden veroorzaakt.

Code: Selecteer alles

...
attachInterrupt(digitalPinToInterrupt(samplePin), isr, RISING);
...

void isr()
{
  unsigned long now = micros();
  if (numPulses == 1) {
    firstPulseTime = now;
  } else {
    lastPulseTime = now;
  }
  if (lastPulseTime-firstPulseTime > 500) { // Prevent double count under 0.5 ms
  ++numPulses;
  }
}
Uiteindelijk heb ik de uitkomst gewoon gedeeld door 4 (4.2 om ook andere kleine invloeden te compenseren) om aan de juiste uitkomst te komen, maar echt een fijn gevoel geeft dat niet. Bovendien was het lastig om de macro’s binnen EdingCNC zo aan te passen dat het een beetje breakerproof is, handicap was dat lastig terugkoppeling gegeven worden aan de besturing (tekort aan ingangen).

Dus nu toch gekozen om de richting buiten de EdingCNC controller te houden en op de Arduino af te handelen, die is er nu toch al.
11799

3 IN signalen: spindle on/off en richting R/L (CNC controller), zerospeed (van motor controller)
2 UIT signalen: spindle on/off naar de motorcontroller en richting R/L naar een wisselrelais.

Logica is nu heel simpel:
1. Zijn beide richtingssignalen niet gelijk (IN en UIT) stop dan de motor.
2. Schakel de richting gelijk zodra zerospeed de juiste waarde heeft.
3. Zijn beide richtingssignalen gelijk, schakel dan de motor on/off OUT op basis van de motor on/off IN.

Code: Selecteer alles

void loop()
{
  boolean in_spindle = digitalRead(5);      // 1=off,  0=on
  boolean in_zerospeed = digitalRead(7);    // 1=rest, 0=spin
  boolean in_direction = digitalRead(10);   // 1=left, 0=right 
  boolean out_spindle = digitalRead(11);    // 1=off,  0=on
  boolean out_direction = digitalRead(12);  // 1=left, 0=right
  if (in_direction != out_direction) {
   digitalWrite(11,HIGH);  // Stop motor
  } else {
    if (in_spindle==0) {
      digitalWrite(11, LOW);  // Run motor
    } else {
      if (in_spindle==1) {
        digitalWrite(11, HIGH);  //Stop motor
      }
    }
  } 
  if (in_zerospeed==1 && in_direction==0) {
     digitalWrite(12, LOW);  // Direction R
  } 
  if (in_zerospeed==1 && in_direction==1) {
     digitalWrite(12, HIGH);  // Direction L
  }
  delay(50);
}
Deze routine draait nu 20 keer per seconde en werkt perfect. Motor remt netjes af en schakelt om met M3 M4 M5 of via de knoppen op het paneel en schakelt weer aan wanneer nodig. Omschakelen gebeurt tussen 1 en 3 seconden (lage vs hoge toerentallen) en in EdingCNC kan een spin-up vertraging worden ingesteld om daar rekening mee te houden.

Ga ik eens kijken hoe ik de IR sensors nuttig kan gebruiken...

edit: link naar plaatje werkte niet
Laatst gewijzigd door Breaker op 08 apr 2016 00:04, 1 keer totaal gewijzigd.
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 12055
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Spindelrichting

Bericht door hugo stoutjesdijk »

Breaker schreef:Na het instellen van de gevoeligheid kwamen de pulsen door aan de Arduino over het hele bereik. Het probleem was echter dat de sampletijd veel te lang werd. Het minimale toerental van de motor is ongeveer 400 rpm dus 6,7Hz. Om betrouwbaar te meten hab je zeker een paar pulsen nodig, dus was de sampletijd al snel een 400ms.
Als je gewoon iets van een cupje genomen had (tegen die poelie aan geplakt), daarin 10 gaatjes geboord, en een lichtsluisje (die reflectie dingen moet je alleen gebruiken als het niet anders kan, misschien reflecteerd dat staal ook wel voor IR), had je 10 x zoveel pulsen gehad, of 20 wanneer je beide flanken neemt.
Om het dan robuust te krijgen moet je eigenlijk 2 lichtsluisjes monteren zodat je niet de kant loopt dat je op 1 flank staat te jutteren.

En als je een keer een oud (foto) printertje tegenkomt, gelijk slopen, soms zitten daar hele mooie encodertjes in. :mrgreen:

Maar evengoed, het is allemaal gelukt en het werkt, dus ik mag eigenlijk geen kommentaar hebben. ;-) :lol:

Je kunt altijd nog met een een zwart/wit streepjes schijfje printen of frezen van 2 kleuren materiaal ( graveerplaat of trespa, en dat er op plakken.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Breaker
Donateur
Berichten: 1965
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Spindelrichting

Bericht door Breaker »

hugo stoutjesdijk schreef:... dus ik mag eigenlijk geen kommentaar hebben.
Oh, nou, dan zit je hier op het verkeerde forum ;-)

De weg van meerdere pulsen was er eentje die ik verder had kunnen uitwerken, heb hier al een dun plaatje aluminium voor liggen en een sluisje sensor. Maar had toevallig de reflecterende sticker al geplakt om te gebruiken met zo’n laser tachometer en kwam die reflectiesensor tegen in de oude doos, en die zit al handig op een printje. Bovendien zou ik de sensor kunnen gebruiken op de tacho ingang van de motorcontroller (met max 1 puls per omwenteling).
Blijft wel een mysterie waarom de Arduino vier pulsen registreert in plaats van eentje. Mocht iemand daar een idee over hebben dan hoor ik het graag...

Nou ja goed, uiteindelijk is dit eigenlijk veel simpeler voor het doel van de spindelrichting, juiste signalen krijg ik nu aangeboden van de controllers zonder extra moeite te hoeven doen.

De IR sensors op de spindel-as gaan sowieso gebruikt worden naar de CNC controller, dus de gegeven extra inzichten over wat en hoe die dingen optimaal gebuikt worden zijn gewaardeerd.
Geduld is een schone zaak, frezen niet...
Plaats reactie