Ombouw EMCO 5 CNC naar LinuxCNC - step by step

LinuxCNC kan hier besproken worden

Moderator: Moderators

Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Tolp2 schreef: 04 jan 2021 21:34 Op dit moment nog geen home-switches gedefinieerd in dit scherm, aangezien ik met de MDI wil kunnen spelen zonder de machine te hoeven homen (als je geen home-switches selecteert, dan gaat hij uit van home-in-place).
Je kunt ze ook wel definieren en in de [TRAJ] sectie van je ini file NO_FORCE_HOMING = 1 neerpennen.

Code: Selecteer alles

..
[TRAJ]
NO_FORCE_HOMING = 1
..
..
Dat heb ik bij zowel freesmachine als draaibank aan staan. Normaliter kan ik op de draaibank met mijn geselecteerde tool de klauwplaat niet raken, maar soms moet je een gereedschapje schuin zetten en is het handig als je toch iets verder kunt, wetende dat krakboemho op de loer ligt. Dan 'unhome' ik gewoon en kan ik verder bewegen. Of als ik alleen een kops kantje vlak wil maken, een gecentreerd gaatje wil boren met de losse kop, een tap of snijplaat recht in wil brengen, dan neem ik ook de moeite niet om te homen.

Freesmachine wil ik ook kunnen bewegen zonder gehomed te hebben voor het geval er iets in weg zit van het standaard home-riedeltje. Met een bestaand hoog ding in de klem en een boor in de spantang heb ik niet altijd genoeg hoogte om er overal langs te kunnen.
BELANGRIJK: Op de EMCO zit een automatische tool changer. Om deze reden de optie Onscreen Prompt For Tool Change uitgevinkt.
Jij moet toch zowiezo je toolchange-component vervangen door jouw toolerator500, toch? Dan vervalt het 'handmatige wissel'-component zowiezo.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
javanree
Berichten: 1023
Lid geworden op: 10 mei 2011 12:16
Locatie: Renswoude
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door javanree »

Heel interessant die nieuwe tool changer component ! Ben heel benieuwd hoe dat er uit ziet, het is bij mij een van de laatste struikelblokken voor de voltooiing.
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

DaBit schreef: 04 jan 2021 23:46 Je kunt ze ook wel definieren en in de [TRAJ] sectie van je ini file NO_FORCE_HOMING = 1 neerpennen.

Code: Selecteer alles

..
[TRAJ]
NO_FORCE_HOMING = 1
...
Dit wist ik niet dat je op deze manier zonder te homen in je MDI commando's kan uitvoeren. Voor testen denk ik dat het een erge handige switch is, maar voor productie ben ik er nog niet zo zeker van. Als je dit gebruikt om buiten je soft-limits te kunnen werken, staan dan je soft-limits niet te strak afgesteld?
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Toolerator

De tool-changer kan worden gedownload worden via:
https://gitlab.com/TOLP2/toolerator/-/a ... master.zip

De toolerator bestaat uit twee onderdelen:
- een Arduino-sketch, die voor de aansturing van de DC-motor (toolerator3000) of van de stappenmotor (toolerator500);
- het hal-component toolerator.comp.

De toolerator3000 heb ik niet zelf ontwikkeld, maar is de basis voor mijn versie van de toolerator. De toolerator3000 is bedoeld voor een turret met 8 tools en een aandrijving met een DC motor. Dit type turret kan onder meer worden gevonden op een EMCO 120P. De toolerator500 is voor turrets aangedreven door een stappenmotor. Ik heb deze ontworpen voor mij EMCO 5 CNC, waar standaard 6 tools op de turret zitten. Het aantal tools is echter zeer makkelijk in de code aan te passen naar elk ander willekeurig getal, zolang deze maar kleiner is dan 16). In beide sketches staat duidelijk aangegeven hoe de Arduino boards aangesloten moeten worden.

NOOT: Voor de toolerator500 is het homen van de turret nog niet goed geïmplementeerd, deze functie dus vooralsnog niet gebruiken. Bij opstarten wordt vooralsnog aangenomen dat de turret start bij tool 1.

In het bestand toolerator.comp moeten door een gebruiker nog 3 waarden worden gecontroleerd / bijgesteld:
  • BAUDRATE: staat standaard op 9600 en is snel genoeg voor de communicatie (dit gebeurd met enkele byte per keer);
  • TOOL_COUNT: het aantal tool positions in de turret. Wanneer de toolerator3000 wordt gebruikt, dan moet deze op 8 worden ingesteld. Voor de toolerator moet deze overeenkomen met de TOOL_COUNT in de Arduino sketch.
  • DEVICE: het adres van de device. Het adres is iets in de trend van /dev/ttyUSB# op /dev/ttyACM#, afhankelijk van het model en de fabrikant van de Arduino.
Voor toepassing van de HAL-component, moet deze eerst nog worden gecompileerd. Open hiervoor de terminal, ga naar de folder waar toolerator.comp is opgeslagen en type het volgende command:

Code: Selecteer alles

sudo halcompile --install toolerator.comp
Hierna kunnen de relevante pinnen worden verbonden in de custom.hal of in het hoofd HAL-bestand met de volgende snippet:

Code: Selecteer alles

loadusr -W toolerator

net tool-change iocontrol.0.tool-change => toolerator.0.toolchange
net tool-changed iocontrol.0.tool-changed <= toolerator.0.toolchanged
net tool-number iocontrol.0.tool-prep-number => toolerator.0.toolnumber
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Tolp2 schreef: 05 jan 2021 21:53 Dit wist ik niet dat je op deze manier zonder te homen in je MDI commando's kan uitvoeren. Voor testen denk ik dat het een erge handige switch is, maar voor productie ben ik er nog niet zo zeker van. Als je dit gebruikt om buiten je soft-limits te kunnen werken, staan dan je soft-limits niet te strak afgesteld?
Op de frees zou ik zeggen 'ja', al wil ik daar ook incidenteel kunnen werken zonder eerst perse te hoeven homen. In de praktijk home ik 99,5% van de gevallen voor ik wat ga doen.

Op de draaibank is het soms noodzaak. Als ik een kort dingetje ingespannen heb met center in de losse kop dan komt het voor dat ik de Z niet meer kan homen. Da's ook helemaal geen probleem; je draait een flintertje van je werkstuk af en zet de Z op 0, dat werkt ook als er niet gehomed is.
De soft-limit staat daar verder ook zodanig dat ik normaliter mijn zelfcentrerende 3-klauw net niet kan raken. Ook dat pakt soms onhandig uit, en even de Z unhomen om die beveiliging te omzeilen is dan verreweg het handigste.

Verder heb ik ook voor productie graag dat computerspul me niet in de weg zit. Als ik domme dingen wil doen dan mag het ding hooguit vragen 'Weet U het echt zeker?'. En als ik dan 'Ja' aanklik, dan moet die kabouter gewoon doen wat 'm opgedragen word, en niet 'dat mag je niet want dat vind ik niet goed' brallen. Ik sta bovenaan de voedselketen en ik betaal de stroom, niet die kabouter. Als het dan kletsboemkrak oplevert dan is dat jammer, maar daar koos ik toch echt zelf voor.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Arie Kabaalstra »

Ik sta bovenaan de voedselketen en ik betaal de stroom, niet die kabouter. Als het dan kletsboemkrak oplevert dan is dat jammer, maar daar koos ik toch echt zelf voor.
Die kan op een tegeltje! :lol:
toolerator500
Waarom krijg ik toch iedere keer visioenen van :

Afbeelding

:lol:
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Als het spul uit de krochten van Doofenshmirtz Evil Incorporated was gekomen had het wel de tool500inator geheten :mrgreen:
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Even een korte update: met dank aan HainjeDaf hangen er nu twee Arduino's aan de EMCO:
  • Eentje draait de Toolerator en zorgt voor toolchanges;
  • Eentje draait de Imperator en is een aansturing voor alle user input (drukknoppen, encoders, etc.).
De Imperator heeft de volgende eigenschappen:
  • Een fast-encoder (werkt op interrupts op kanaal A en B, zodat geen enkele stap wordt gemist). Deze wordt straks door een 60 mm of 80 mm handwiel voorzien van pulsen en wordt gebruikt voor jogging.
  • Twee encoders (werkt op interrupts op één van de twee kanalen, kan daarmee iets minder snel zijn pulsen kwijt). Deze worden gebruikt door twee simpele encoders waarmee de feed-rate en spindle-rate kan worden aangepast.
  • Axis-selection. Met een enkele analoge pin van de Arduino kan één van de 6 assen worden geselecteerd (ik gebruik er uiteraard maar 2 voor de EMCO). De draaiknop gebruikt hiervoor een weerstandsladder.
  • Step-selection. Met een enkele analoge pin van de Arduino kan één van de 3 stappen worden geselecteerd. De draaiknop gebruikt hiervoor een weerstandsladder.
  • Acht drukknoppen, nog in te delen. In ieder geval voor start, feed-hold, stop, reset feed-rate override en reset spindle override.
En toen waren de IO van het arme bordje op. Als ik dan toch nog meer nodig heb, dan knoop ik er toch gewoon nog eentje aan. Zodra de code getest is, zal ik deze uiteraard met jullie delen.

Als de CNCzone-dag in 2021 door gaat, lijkt het me leuk om een korte cursus te geven hoe een Arduino aan te sturen vanuit LinuxCNC. Het is een leuk alternatief voor de PoKeys (in ieder geval goedkoper :mrgreen: ).
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Arie Kabaalstra »

Het is een leuk alternatief voor de PoKeys (in ieder geval goedkoper :mrgreen: ).
Dit, omdat een Arduino gewoon een "legosteen" is, en een Pokeys een "slimme legosteen".. maar.. de slimmigheid kan je er bij een Arduino helemaal zelluf in frituren.. dat maakt een veel veelzijdiger dan de Pokeys.. die is eigenlijk vooral bedoeld om een toetsenbord na te doen....
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

@Arie: nee hoor. Toetsenbord emuleren is maar 1 van de truukjes die het ding kan; Pokeys is veel veelzijdiger dan alleen dat. In ieder geval in combinatie met LinuxCNC. Encoders voor alles wat je wil verdraaien (als jij tig wieltjes wil voor X/Y/Z/feed%/spindel%/etc dan doe je dat), knopjes die gewoon aan je besturing doorgegeven worden ipv via rare toetsenbordcombinaties, LEDjes die je aan en uit kunt zetten, enzovoorts.

Ik twijfelde destijds ook om een simpel STM32 BluePill bordje van anderhalve euro of een ESP32 van ietsjes meer te gebruiken maar koos destijds voor een Pokeys, gewoon simpelweg omdat daar al handige schroefconnectortjes op zaten en het uitlezen van encoders en analoge inputs lekker simpel is en iets erbij of anders amper werk. Ook wat waard.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Arie Kabaalstra
Donateur
Berichten: 13479
Lid geworden op: 07 feb 2007 18:37
Locatie: Bakhuuz'n
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Arie Kabaalstra »

Ja. k.. ik weet wel dat ie meer kan.. maar toendertijd was ik daar nog niet zo bedreven in.. ik denk wel dat de nadruk van dat ding op het nadoen van een toetsenbord ligt.. waar je met een Arduino veelzijdiger bent.. je KAN er een toetsenbord mee nadoen, en dan heb je ook nog eens veel meer mogelijkheden dan met een Pokeys..of je moet de Pokeys gaan laten samenwerken met een stuk software.. waar je op een Arduino de software er gewoon op frituurt
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Frituur of niet, maar de assen kan ik er nu mee joggen :lol: . Eerste project een kroket draaien tot bitterbal?
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Tolp2
Donateur
Berichten: 476
Lid geworden op: 28 nov 2015 10:06
Locatie: Rotterdam
Contacteer:

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door Tolp2 »

Ondertussen ook getest met de feed-override en de spindle-override knoppen: het werkt goed. Door één van de inputs op te offeren heb ik nu 8 outputs erbij gekregen. Zo kan ik een lampje laten branden zodra bijvoorbeeld de feed-hold is ingedrukt. Beetje user-feedback lijkt me wel handig (het hoeft natuurlijk ook weer geen Kerstboom te worden).

Arduino:

Code: Selecteer alles

#include <avdweb_AnalogReadFast.h>
#include <avdweb_Switch.h>
#include <Encoder.h>
#include <FastShiftOut.h>


#define VERSION_STRING "Imperator v1.0 Fighting Furiosa"

// The baudrate for communication with LinuxCNC. Should be equal to the baudrate defined in imperator.comp
#define BAUDRATE 9600

/*
 * Definitions for the encoders. On the Arduino these pins must support interupts, on the Leonardo (Pro Micro) these
 * pins are 0, 1, 2, and 3. Using any of these two pins will enable fast mode on the Encoder Library.
 * 
 * NOTE: when using an older AtMega328 based boards (such as the Uno, Nano and clones), only pins 2 and 3 are supported.
 */ 
#define FAST_ENCODER_PIN_A 2
#define FAST_ENCODER_PIN_B 3
#define ENCODER1_PIN_A 0
#define ENCODER1_PIN_B 4
#define ENCODER2_PIN_A 1
#define ENCODER2_PIN_B 5
Encoder fastEncoder(FAST_ENCODER_PIN_A, FAST_ENCODER_PIN_B);
Encoder encoder1(ENCODER1_PIN_A, ENCODER1_PIN_B);
Encoder encoder2(ENCODER2_PIN_A, ENCODER2_PIN_B);


/*
 * The rotary knobs for the axis have a resistor ladder, in order to minimize the number of inputs they use. Irrespective
 * to the number of axis (XYZABC) and STEPS (0.1, 0.01, 0.001, etc), the knobs will only use a single, analog pin.
 */
#define AXIS_SELECTOR A3
#define AXIS_NUMBER   2  // The number of axis supported by this MPG. For a Lathe this will be 2, for a Mill this will be usually 3
#define STEP_SELECTOR A2 
#define STEP_NUMBER   3  // The number of steps supported by this MPG, usually three steps is more then enough

/*
 * Pins on which all switches are located. Although the numbering looks awkward, it corresponds with a counter clockwise numbering
 * on the Arduino Pro Micro, with four pins on each side. The numbering of the pins on the board is not sequential.
 */
#define USER_SWITCH_0 6
#define USER_SWITCH_1 7
#define USER_SWITCH_2 8
#define USER_SWITCH_3 9
#define USER_SWITCH_4 10
#define USER_SWITCH_5 16
#define USER_SWITCH_6 14
//#define USER_SWITCH_7 15
/*
 * Create an array with the above mentioned switches
 */
Switch userSwitches[] = {
  Switch(USER_SWITCH_0),
  Switch(USER_SWITCH_1),
  Switch(USER_SWITCH_2),
  Switch(USER_SWITCH_3),
  Switch(USER_SWITCH_4),
  Switch(USER_SWITCH_5),
  Switch(USER_SWITCH_6),
//  Switch(USER_SWITCH_7)
};
uint8_t userSwitchesLength =  sizeof(userSwitches) / sizeof(userSwitches[0]);
uint8_t button_state = 0;


/*
 * SHIFT REGISTER
 * In order to give feedback to the user, up to 8 digital outputs can be created
 */
#define HC595_CLOCK 15
#define HC595_DATA  18
#define HC595_LATCH 19
FastShiftOut dataShifter = FastShiftOut(HC595_DATA, HC595_CLOCK);
 

/*
 * This is data from the MPG is organized in a struct, which is later used to be send as an
 * byteArray. This is useful for concatenating several variables into a single byte array
 * to send over USB or any other protocol.
 * In other words you have a fixed byte array, and we squeeze in variables of different
 * data types and lengths into it, while still using it as a byte array afterwards.
 */
struct mpg_data_t {
  int32_t fastEncoderCount;
  int32_t encoder1Count;
  int32_t encoder2Count;
  uint8_t axis;
  uint8_t step;
  uint8_t button_state;
} ;

/*
 *  The way we use a union here (in plain terms) is: the union is a fixed region of memory that we
 *  can write to in one format (as a structure) and then read from in another format (a byte array).
 *  You can do it in reverse as well, write to it as a byte array, and read it as a structure.
 */
union usb_data_t {
  mpg_data_t mpg;
  uint8_t byteArray[sizeof(mpg_data_t)];
};
usb_data_t dataToSend; 

// Enumerations of the state of the Toolerator
enum states { 
  initState, 
  listeningState,
  queryState, 
  updateState,
  versionState
} state;


void setup() {
  // Listen on the serial port for tool change commands
  Serial.begin(BAUDRATE);

  // Hook up the buttons to the functions which store the state
  userSwitches[0].setPushedCallback(&button0Pushed, NULL);
  userSwitches[1].setPushedCallback(&button1Pushed, NULL);
  userSwitches[2].setPushedCallback(&button2Pushed, NULL);
  userSwitches[3].setPushedCallback(&button3Pushed, NULL);
  userSwitches[4].setPushedCallback(&button4Pushed, NULL);
  userSwitches[5].setPushedCallback(&button5Pushed, NULL);
  userSwitches[6].setPushedCallback(&button6Pushed, NULL);
//  userSwitches[7].setPushedCallback(&button7Pushed, NULL);

  // Set the state to initial state;
  state=initState;
}

void loop() {
  // Check whether the component needs to initalize or communicate
  switch(state) {
    case initState:
      handleInitState();
      break;
    case listeningState:
      handleListeningState();
      break;
    case queryState:
      handleQueryState();
      break;
    case updateState:
      shiftDataOut();
      break;
    case versionState:
      Serial.println(VERSION_STRING);
      state=listeningState;
      break; 
  }

  // Poll the switches, required to get the state
  for (uint8_t i = 0; i < userSwitchesLength; i++) {
    userSwitches[i].poll();
  }
  
}


/*
 * This is the state which is enetered after initialisation of the Imperator. It
 * will write a ready message o the Serial and put the state in listening model
 */
void handleInitState() {
  // print "H" for HAL500--ready message
  Serial.write('H');
  // Start listening to commands
  state=listeningState;
}

/*
 *  This function listens for commands over the USB. When a request is 
 *  made, this will command HAL500 to report the state of the inputs.
 */
void handleListeningState() {
  if (Serial.available() > 0) {
    byte b = Serial.read(); // Read 1 byte from the buffer
    switch(b) {
      case 'Q':
        state=queryState;
        break;
      case 'V':
        state=versionState;
        break;
      case 'U':
        state=updateState;
        break;
      default:
        // Unknown command, report back and don't change the state
        Serial.write('?');
        break;
    }
  }

}

/*
 * This is the state which will return the current MPG-count and the state of the
 * switches to LinuxCNC
 */
void handleQueryState() {
  // Send the struct over serial to LinuxCNC for further processing
  dataToSend.mpg.fastEncoderCount = fastEncoder.read();
  dataToSend.mpg.encoder1Count = encoder1.read();
  dataToSend.mpg.encoder2Count = encoder2.read();
  dataToSend.mpg.axis = parseLadder(AXIS_SELECTOR, AXIS_NUMBER);
  dataToSend.mpg.step = parseLadder(STEP_SELECTOR, STEP_NUMBER);
  dataToSend.mpg.button_state = button_state;

  // Write the data over serial
  Serial.write(dataToSend.byteArray, sizeof(mpg_data_t));
  //for(int i=0; i < sizeof(mpg_data_t); i++) {
  //  Serial.print(dataToSend.byteArray[i]);
  //}
  
  // Reset the button state
  button_state = 0;
  
  // Return to listen to commands
  state=listeningState;
}

/*
 * This function shofts the received data out to the latch
 */
void shiftDataOut() {
  if (Serial.available() > 0) {
    // Read one byte from the buffer
    uint8_t data = Serial.read(); // Read 1 byte from the buffer
    // Shift the data out using the 74HC595
    digitalWrite(HC595_LATCH, LOW);
    dataShifter.writeLSBFIRST(data);
    digitalWrite(HC595_LATCH, HIGH);
    // Return to listen to commands
    state=listeningState;
  }
}

/**
 * This function parses the value from the resistor ladder. All possible ADC values (1024) are 
 * divided in bins and then processed.
 */
uint8_t parseLadder(uint8_t pin, uint8_t bins) {
  // Read the value from the analog
  uint16_t analog = analogReadFast(pin);

  // Divide the maximum value from the analog into the bin sizes. The first
  // bin ends at half the size of a bin. 
  uint16_t bin_size = 1024 / (bins - 1);

  // Determine in which bin the value falls
  uint8_t result = 0;
  for (uint16_t bin_end = bin_size >> 1; bin_end <= 1024; bin_end += bin_size) {
    result++;
    if (analog < bin_end) {
      return result;
    }
  }
  return result;
}

/*
 * Callbacks for when a button is pushed by the end-user.
 */
void button0Pushed(void* ref) {
  button_state |= (1 << 0);
}
void button1Pushed(void* ref) {
  button_state |= (1 << 1);
}
void button2Pushed(void* ref) {
  button_state |= (1 << 2);
}
void button3Pushed(void* ref) {
  button_state |= (1 << 3);
}
void button4Pushed(void* ref) {
  button_state |= (1 << 4);
}
void button5Pushed(void* ref) {
  button_state |= (1 << 5);
}
void button6Pushed(void* ref) {
  button_state |= (1 << 6);
}
void button7Pushed(void* ref) {
  button_state |= (1 << 7);
}
Ik zal straks van de machine het HAL-component afhalen en delen.
Assumptions are the mother of all $%^& ups.
Twee keer meten is zeker weten, als je weet wat je meet...
Gebruikersavatar
DaBit
Donateur
Berichten: 11032
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Ombouw EMCO 5 CNC naar LinuxCNC - step by step

Bericht door DaBit »

Met een Arduino zal het wel lastig worden zonder een extern USB-chippie in te schakelen, maar er een USB HID device van maken ipv CDC/ACM is veel mooier. HID gebruikt interrupt-transfers en daarmee heb je garanties kwa overdracht; zet de latencytimer op 1 en je kunt strak elke milliseconde 64 bytes aan data transporteren. Ik heb het nog nooit gezien dat dat niet lukt.
Met CDC kan het voorkomen dat de PC het even druk heeft en wat data opspaart of wegknikkert; je hebt exact 0 garantie op de latency. En dat heb ik wel regelmatig gezien.

Anders dan dat is een Arduino lekker praktisch, en een HC595 ook. Toppie. Misschien gewoon de code op Github zetten?
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Plaats reactie