Arduino Shield – CNC Shield
Hardware
Informatie
Arduino CNC shield v3. Voor het aansturen van een CNC, graveer machine of 3d printer. Kan tot 4 stappen motoren aansturen. Heeft maar 2 io poorten nodig per motor.
Specs:
– GRBL compatibel
– 4-Assen, XYZ A, de laatste kan worden gebruikt als een zelfstandige as of een kopie van XYZ
– 2 x End stops per as (6 in totaal)
– Spindle aan/uit en richting
– 12-36V DC. (Let op dat de stepper drivers dit ook aan moeten kunnen)
– Geleverd zonder stepper drivers
Print en layout:
Bijbehorende componenten:
Pingebruik van het CNC shield
Voorbeeld aansluiten van componenten
Stepper Driver Boards
Let er goed op dat je de stappen module goed aansluit!, er staat een EN (enable) pin aangegeven op het CNC board, deze moet overeenkomen met EN op de module!
Voor de A4988 ziet dat er zo uit:
Meer informatie: Stappenmotor aansturing module A4988
Voor de DRV8825 ziet dat er zo uit:
meer informatie: Stappenmotor aansturing module DRV8825
Jumper instellingen
Jumpers need to be installed under each stepper driver:
For now the default is 1/16 micro stepping (all jumpers installed under drivers)
Board revisions
- Version 3.10+
- Added Support for GRBL 0.9v with PWM Spindle.
- Version 3.00 (4 Axis)
- Enlarged board to add a 4th Axis that can clone the X,Y or Z axis. With a 4th option to use pin D12-13 to control it.
- Added a breakout header for all the Axis’s.
- Added a communication header for UART(Serail) and I2C.
- Added the a connector for an optional fuse.(Fuse not supplies as it needs to be selected for the current that will be used.)
- Capacitors are mounted horizontally giving more clearance between them and the stepper drivers. Good for ventilation.
- Added a pull-up resistor on the axis enable pins. This prevents the pin from being in a floating state.
- Added 2 mounting holes
- Version 2.02 (3 Axis)
- Fixed High Voltage label
- Removed Diode D1.
- Reduced the number of Via’s.
- Version 2.01
- Added a 5V Breakout
- Filled in both sides with Ground Copper
- Moved RX/TX pins to the side so that 26-Pin header can be used. Same as the headers on a Raspberry Pi.
- Small Text Changes
- Version 2.00
- First official version of the CNC Shield.
- All pins used by GRBL has been broken out.
Motor testscript
Hieronder een klein testscript om alle assen/motoren te controleren (AccelStepper bibliotheek nodig!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include <AccelStepper.h> // Voor de Arduino Uno + CNC shield V3 #define MOTOR_X_ENABLE_PIN 8 #define MOTOR_X_STEP_PIN 2 #define MOTOR_X_DIR_PIN 5 #define MOTOR_Y_ENABLE_PIN 8 #define MOTOR_Y_STEP_PIN 3 #define MOTOR_Y_DIR_PIN 6 #define MOTOR_Z_ENABLE_PIN 8 #define MOTOR_Z_STEP_PIN 4 #define MOTOR_Z_DIR_PIN 7 AccelStepper motorX(1, MOTOR_X_STEP_PIN, MOTOR_X_DIR_PIN); AccelStepper motorY(1, MOTOR_Y_STEP_PIN, MOTOR_Y_DIR_PIN); AccelStepper motorZ(1, MOTOR_Z_STEP_PIN, MOTOR_Z_DIR_PIN); void setup() { pinMode(MOTOR_X_ENABLE_PIN, OUTPUT); pinMode(MOTOR_Y_ENABLE_PIN, OUTPUT); pinMode(MOTOR_Z_ENABLE_PIN, OUTPUT); motorX.setEnablePin(MOTOR_X_ENABLE_PIN); motorX.setPinsInverted(false, false, true); motorX.setAcceleration(100); //motorX.setMaxSpeed(100); //motorX.setSpeed(100); motorX.enableOutputs(); motorY.setEnablePin(MOTOR_Y_ENABLE_PIN); motorY.setPinsInverted(false, false, true); motorY.setAcceleration(100); //motorY.setMaxSpeed(100); //motorY.setSpeed(100); motorY.enableOutputs(); motorZ.setEnablePin(MOTOR_Z_ENABLE_PIN); motorZ.setPinsInverted(false, false, true); motorZ.setAcceleration(100); //motorZ.setMaxSpeed(100); //motorZ.setSpeed(100); motorZ.enableOutputs(); } void loop() { motorX.move(3000); motorX.run(); motorY.move(3000); motorY.run(); motorZ.move(3000); motorZ.run(); } |
Motor script met potmeter
Met onderstaand script kan je via een potmeter de motor laten draaien (potmeter signaal zet je op de “abort” pin (A0).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <AccelStepper.h> // Voor de Arduino Uno + CNC shield V3 #define MOTOR_X_ENABLE_PIN 8 #define MOTOR_X_STEP_PIN 2 #define MOTOR_X_DIR_PIN 5 int hys = 40; //hysteresis, laat de motor minder trillen en vibreren doordat waardes fluctueren. int oudepotmeter; AccelStepper motorX(1, MOTOR_X_STEP_PIN, MOTOR_X_DIR_PIN); void setup() { //Serial.begin(115200); pinMode(MOTOR_X_ENABLE_PIN, OUTPUT); motorX.setEnablePin(MOTOR_X_ENABLE_PIN); motorX.setPinsInverted(false, false, true); motorX.setAcceleration(15000); //motorX.setMaxSpeed(10000); //motorX.setSpeed(10000); motorX.enableOutputs(); } void loop() { int potmeter = analogRead(A0); int waarde = map(potmeter, 0, 1023, 0, 200*8); //200 * 1.8graad = 360 graden rond. if (potmeter < oudepotmeter - hys || potmeter > oudepotmeter + hys){ motorX.moveTo(waarde); oudepotmeter = potmeter; } motorX.run(); } |
Bronnen:
blog.protoneer.co.nz
hackaday.io
arduino.stackexchange.com