From 380144c20faaf495d1967591d03885619bd0baf3 Mon Sep 17 00:00:00 2001 From: daid Date: Mon, 6 Jan 2014 11:05:02 +0100 Subject: [PATCH] Add Ultiboard2 electronics. With PWM current settings. For the few people that have this new board as experiment in their UM-Original. --- Marlin/Marlin_main.cpp | 9 +++++ Marlin/pins.h | 83 ++++++++++++++++++++++++++++++++++++++++++ Marlin/stepper.cpp | 18 +++++++++ 3 files changed, 110 insertions(+) diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp index 8f006406a..c3b75516a 100644 --- a/Marlin/Marlin_main.cpp +++ b/Marlin/Marlin_main.cpp @@ -2778,6 +2778,15 @@ void process_commands() if(code_seen('B')) digipot_current(4,code_value()); if(code_seen('S')) for(int i=0;i<=4;i++) digipot_current(i,code_value()); #endif + #ifdef MOTOR_CURRENT_PWM_XY_PIN + if(code_seen('X')) digipot_current(0, code_value()); + #endif + #ifdef MOTOR_CURRENT_PWM_Z_PIN + if(code_seen('Z')) digipot_current(1, code_value()); + #endif + #ifdef MOTOR_CURRENT_PWM_E_PIN + if(code_seen('E')) digipot_current(2, code_value()); + #endif } break; case 908: // M908 Control digital trimpot directly. diff --git a/Marlin/pins.h b/Marlin/pins.h index b7cbac4fd..ac76f4347 100644 --- a/Marlin/pins.h +++ b/Marlin/pins.h @@ -1295,6 +1295,89 @@ #endif +#if MOTHERBOARD == 72 +#define KNOWN_BOARD +/***************************************************************** +* Ultiboard v2.0 pin assignment +******************************************************************/ + +#ifndef __AVR_ATmega2560__ + #error Oops! Make sure you have 'Arduino Mega 2560' selected from the 'Tools -> Boards' menu. +#endif + +#define X_STEP_PIN 25 +#define X_DIR_PIN 23 +#define X_STOP_PIN 22 +#define X_ENABLE_PIN 27 + +#define Y_STEP_PIN 32 +#define Y_DIR_PIN 33 +#define Y_STOP_PIN 26 +#define Y_ENABLE_PIN 31 + +#define Z_STEP_PIN 35 +#define Z_DIR_PIN 36 +#define Z_STOP_PIN 29 +#define Z_ENABLE_PIN 34 + +#define HEATER_BED_PIN 4 +#define TEMP_BED_PIN 10 + +#define HEATER_0_PIN 2 +#define TEMP_0_PIN 8 + +#define HEATER_1_PIN 3 +#define TEMP_1_PIN 9 + +#define HEATER_2_PIN -1 +#define TEMP_2_PIN -1 + +#define E0_STEP_PIN 42 +#define E0_DIR_PIN 43 +#define E0_ENABLE_PIN 37 + +#define E1_STEP_PIN 49 +#define E1_DIR_PIN 47 +#define E1_ENABLE_PIN 48 + +#define SDPOWER -1 +#define SDSS 53 +#define LED_PIN 8 +#define FAN_PIN 7 +#define PS_ON_PIN 12 +#define KILL_PIN -1 +#define SUICIDE_PIN -1 //PIN that has to be turned on right after start, to keep power flowing. +#define SAFETY_TRIGGERED_PIN 28 //PIN to detect the safety circuit has triggered +#define MAIN_VOLTAGE_MEASURE_PIN 14 //Analogue PIN to measure the main voltage, with a 100k - 4k7 resitor divider. + +#define MOTOR_CURRENT_PWM_XY_PIN 44 +#define MOTOR_CURRENT_PWM_Z_PIN 45 +#define MOTOR_CURRENT_PWM_E_PIN 46 +//Motor current PWM conversion, PWM value = MotorCurrentSetting * 255 / range +#define MOTOR_CURRENT_PWM_RANGE 2000 + +//arduino pin witch triggers an piezzo beeper +#define BEEPER 18 + +#define LCD_PINS_RS 20 +#define LCD_PINS_ENABLE 15 +#define LCD_PINS_D4 14 +#define LCD_PINS_D5 21 +#define LCD_PINS_D6 5 +#define LCD_PINS_D7 6 + +//buttons are directly attached +#define BTN_EN1 40 +#define BTN_EN2 41 +#define BTN_ENC 19 //the click + +#define BLEN_C 2 +#define BLEN_B 1 +#define BLEN_A 0 + +#define SDCARDDETECT 39 + +#endif//MOTHERBOARD == 72 /**************************************************************************************** * RUMBA pin assignment diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp index f45ef7d40..eaba4362d 100644 --- a/Marlin/stepper.cpp +++ b/Marlin/stepper.cpp @@ -72,6 +72,9 @@ static volatile bool endstop_z_hit=false; #ifdef ABORT_ON_ENDSTOP_HIT_FEATURE_ENABLED bool abort_on_endstop_hit = false; #endif +#ifdef MOTOR_CURRENT_PWM_XY_PIN + int motor_current_setting[3] = DEFAULT_PWM_MOTOR_CURRENT; +#endif static bool old_x_min_endstop=false; static bool old_x_max_endstop=false; @@ -1198,6 +1201,16 @@ void digipot_init() //Initialize Digipot Motor Current //digitalPotWrite(digipot_ch[i], digipot_motor_current[i]); digipot_current(i,digipot_motor_current[i]); #endif + #ifdef MOTOR_CURRENT_PWM_XY_PIN + pinMode(MOTOR_CURRENT_PWM_XY_PIN, OUTPUT); + pinMode(MOTOR_CURRENT_PWM_Z_PIN, OUTPUT); + pinMode(MOTOR_CURRENT_PWM_E_PIN, OUTPUT); + digipot_current(0, motor_current_setting[0]); + digipot_current(1, motor_current_setting[1]); + digipot_current(2, motor_current_setting[2]); + //Set timer5 to 31khz so the PWM of the motor power is as constant as possible. (removes a buzzing noise) + TCCR5B = (TCCR5B & ~(_BV(CS50) | _BV(CS51) | _BV(CS52))) | _BV(CS50); + #endif } void digipot_current(uint8_t driver, int current) @@ -1206,6 +1219,11 @@ void digipot_current(uint8_t driver, int current) const uint8_t digipot_ch[] = DIGIPOT_CHANNELS; digitalPotWrite(digipot_ch[driver], current); #endif + #ifdef MOTOR_CURRENT_PWM_XY_PIN + if (driver == 0) analogWrite(MOTOR_CURRENT_PWM_XY_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE); + if (driver == 1) analogWrite(MOTOR_CURRENT_PWM_Z_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE); + if (driver == 2) analogWrite(MOTOR_CURRENT_PWM_E_PIN, (long)current * 255L / (long)MOTOR_CURRENT_PWM_RANGE); + #endif } void microstep_init()