A number of teensy-related fine-adjustments. Mostly comments.

This commit is contained in:
Markus Hitter 2012-10-15 00:04:39 +02:00
parent 8e8a3da7fb
commit 4510a02d7e
3 changed files with 54 additions and 81 deletions

View File

@ -125,6 +125,7 @@ pins
#define DIO10_PIN PINC7 #define DIO10_PIN PINC7
#define DIO10_RPORT PINC #define DIO10_RPORT PINC
#define DIO10_WPORT PORTC #define DIO10_WPORT PORTC
// pin 10/c7 is on a 8/10 bit timer 4 and share the register with inverses
#define DIO10_PWM &OCR4A #define DIO10_PWM &OCR4A
#define DIO10_DDR DDRC #define DIO10_DDR DDRC

View File

@ -2,7 +2,7 @@
/* attempt by drf@vims.edu 2012-01-09 to fit TeaCup into a $16 teensy from htpp://www.pjrc.com/teensy/ */ /* attempt by drf@vims.edu 2012-01-09 to fit TeaCup into a $16 teensy from htpp://www.pjrc.com/teensy/ */
/** \file /** \file
\brief Teensy configuration. \brief Teensy 2.0 configuration.
*/ */
/* /*
@ -73,43 +73,16 @@ MXL 2.032 mm/tooth, 29
Z 200*2 / 1 / 1 * 1000 = 400000 # half-step for noise Z 200*2 / 1 / 1 * 1000 = 400000 # half-step for noise
Extrude through a Wades' 10:43 with a M8 hobbed bolt: Extrude through a Wades' 10:43 with a M8 hobbed bolt:
steps/revM * revM/revO / (dia * circ/rev) * mm/m steps/revM * revM/revO / (dia * circ/rev) * mm/m
E 200*1*16 *43/10 / (8 * 3.14159) * 1000 = 547493.5 E 200*1*4 * 43/10 / (8 * 3.14159) * 1000 = 136873.4
mm/m / (mm/rev ext) (rev mot/rev ext) step/revmot mm/m / (mm/rev ext) (rev mot/rev ext) step/revmot
E 1000 / (8 * 3.14159) * 43/10 * 200 * 16 = 547494 E 1000 / (8 * 3.14159) * 43/10 * 200 * 4 = 136873.4
w/o microstepping
X,Y: 3393
Z: 200000
E: 34218
Steps/sec at max feeds:
c(9900,9900,1400,1900)/60*c(13576,13576,400000,547494)/1000 == 2240.040 2240.040 9333.333 17337.310
Resolution in mm per step:
1/c(13576,13576,400000,547494)*1000 == 0.073659399 0.073659399 0.002500000 0.001826504
*/ */
#define MICROSTEPPING 1
#ifdef MICROSTEPPING
#define STEPS_PER_M_X 13576 #define STEPS_PER_M_X 13576
#define STEPS_PER_M_Y 13576 #define STEPS_PER_M_Y 13576
#define STEPS_PER_M_Z 400000 #define STEPS_PER_M_Z 400000
/// http://blog.arcol.hu/?p=157 may help with this one /// http://blog.arcol.hu/?p=157 may help with this one
#define STEPS_PER_M_E 547494 #define STEPS_PER_M_E 160423
#else
#define STEPS_PER_M_X 3393
#define STEPS_PER_M_Y 3393
#define STEPS_PER_M_Z 200000
/// http://blog.arcol.hu/?p=157 may help with this one
#define STEPS_PER_M_E 34218
#endif
/* /*
Values depending on the capabilities of your stepper motors and other mechanics. Values depending on the capabilities of your stepper motors and other mechanics.
@ -118,23 +91,11 @@ Resolution in mm per step:
Units are mm/min Units are mm/min
*/ */
/* R code for calculating mac feed rates:
stepsPerSec <- 16e6 / 1028 /2
distsPerM <- c(13576,13576,400000,547494)
maxFeedPerMin <- stepsPerSec / distsPerM * 1000 *60
*/
// 16MHz / 1028 cyc/step = 15570 step/sec
// 1666 / 547.494 step/mmE *60 = 182 mm/min E
// 1666 /c(13576,13576,400000,547494)*1000*60
// my build at 4x X,Y, 2xZ 16xE 2012-02-26
/// used for G0 rapid moves and as a cap for all other feedrates /// used for G0 rapid moves and as a cap for all other feedrates
#define MAXIMUM_FEEDRATE_X 6881 #define MAXIMUM_FEEDRATE_X 6881
#define MAXIMUM_FEEDRATE_Y 6881 #define MAXIMUM_FEEDRATE_Y 6881
#define MAXIMUM_FEEDRATE_Z 233 #define MAXIMUM_FEEDRATE_Z 233
#define MAXIMUM_FEEDRATE_E 170 #define MAXIMUM_FEEDRATE_E 680
/// used when searching endstops and as default feedrate /// used when searching endstops and as default feedrate
#define SEARCH_FEEDRATE_X 50 #define SEARCH_FEEDRATE_X 50
@ -231,28 +192,33 @@ maxFeedPerMin <- stepsPerSec / distsPerM * 1000 *60
Teensy http://www.pjrc.com/teensy ATMega64U4 carrier: Teensy http://www.pjrc.com/teensy ATMega64U4 carrier:
New plan: DaveX plan for Wallace:
USB USB
GND |-----#####-----| +5V GND GND |-----#####-----| +5V ATX +5SB
X0end 0 |b0 ##### F0| 21 A0 Extruder TC ATX PS_ON 0 |b0 ##### F0| 21 A0 Extruder TC
Y0end 1 |b1 f1| 20 A1 Bed TC X_MIN 1 |b1 f1| 20 A1 Bed TC
Z0end 2 |b2 /=e6 f4| 19 A2 Stepper -ENable Y_MIN 2 |b2 /=e6 f4| 19 A2 Stepper -ENABLE (or -SLEEP)
Z_ENABLE 3 |b3 * * f5| 18 A3 STEP X Z_MIN 3 |b3 * * f5| 18 A3 STEP X
Bed Heat PWM 4 |b7 aref=/ f6| 17 A4 DIR X PWM 4 |b7 aref=/ f6| 17 A4 DIR X
Extruder Heat PWM 5 |d0 f7| 16 A5 STEP Y PWM 5 |d0 f7| 16 A5 STEP Y
6 |d1 b6| 15 A6 PWM DIR Y 6 |d1 b6| 15 A6 PWM DIR Y
7 |d2 V G R b5| 14 A7 PWM STEP Z 7 |d2 V G R b5| 14 A7 STEP Z
8 |d3 d c n S d b4| 13 A8 DIR Z Fan 8 |d3 d c n S d b4| 13 A8 DIR Z
PWM 9 |d6 5 c d T 4 d7| 12 A9 PWM STEP E Bed Heat PWM 9 |d6 5 c d T 4 d7| 12 A9 PWM STEP E
PWM 10 |d7 * * * * * d6| 11 A10 (led) DIR E Extruder Heat PWM 10 |d7 * * * * * d6| 11 A10 (led) DIR E
-------------------- --------------------
23 ^ \ \22 A11 23 ^ \ \----22 A11
\- RST \------ RST
Interior E6: 22 A11 Interior E6: 24, AIN0, INT6
Interior Aref : Aref Interior Aref : Aref
End d5 : 23 End d5 : 23
End d4 : 22 End d4 : 22, A1
PWM might be possible on pins PB5/DIO14/AIO7 and PD6/DIO11/AIO10 pins but they
are complementary to the PWMs on the successive pins, if you reserve
timer/counter1 for Teacup. Avoid trying to use these two inverse PWMs, and try
to use the other 6 PWMs instead.
*/ */
#include "arduino.h" #include "arduino.h"
@ -276,11 +242,11 @@ New plan:
//#define PS_ON_PIN DIO0 //#define PS_ON_PIN DIO0
#define STEPPER_ENABLE_PIN DIO19 #define STEPPER_ENABLE_PIN DIO19
//#define STEPPER_INVERT_ENABLE #define STEPPER_INVERT_ENABLE
#define X_STEP_PIN DIO18 #define X_STEP_PIN DIO18
#define X_DIR_PIN DIO17 #define X_DIR_PIN DIO17
#define X_MIN_PIN DIO0 #define X_MIN_PIN DIO1
//#define X_MAX_PIN xxxx //#define X_MAX_PIN xxxx
//#define X_ENABLE_PIN xxxx //#define X_ENABLE_PIN xxxx
//#define X_INVERT_DIR //#define X_INVERT_DIR
@ -290,7 +256,7 @@ New plan:
#define Y_STEP_PIN DIO16 #define Y_STEP_PIN DIO16
#define Y_DIR_PIN DIO15 #define Y_DIR_PIN DIO15
#define Y_MIN_PIN DIO1 #define Y_MIN_PIN DIO3
//#define Y_MAX_PIN xxxx //#define Y_MAX_PIN xxxx
//#define Y_ENABLE_PIN xxxx //#define Y_ENABLE_PIN xxxx
//#define Y_INVERT_DIR //#define Y_INVERT_DIR
@ -409,9 +375,6 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO1, THERMISTOR_EXTRUDER)
* * * *
* Define your heaters here. * * Define your heaters here. *
* * * *
* Currently, heaters work on PWM-able pins, only. See the end of this file *
* for PWM-able pin mappings. *
* *
* To attach a heater to a temp sensor above, simply use exactly the same * * To attach a heater to a temp sensor above, simply use exactly the same *
* name - copy+paste is your friend. Some common names are 'extruder', * * name - copy+paste is your friend. Some common names are 'extruder', *
* 'bed', 'fan', 'motor', ... names with special meaning can be found * * 'bed', 'fan', 'motor', ... names with special meaning can be found *
@ -424,16 +387,23 @@ DEFINE_TEMP_SENSOR(bed, TT_THERMISTOR, AIO1, THERMISTOR_EXTRUDER)
* temperature sensor of TT_NONE, then you can control the spindle's rpm * * temperature sensor of TT_NONE, then you can control the spindle's rpm *
* via temperature commands. M104 S1..255 for spindle on, M104 S0 for off. * * via temperature commands. M104 S1..255 for spindle on, M104 S0 for off. *
* * * *
* Set 'pwm' to ... *
* 1 for using PWM on a PWM-able pin and on/off on other pins. *
* 0 for using on/off on a PWM-able pin, too. *
* Using PWM usually gives smoother temperature control but can conflict *
* with slow switches, like solid state relays. PWM frequency can be *
* influenced globally with FAST_PWM, see below. *
* *
\***************************************************************************/ \***************************************************************************/
#ifndef DEFINE_HEATER #ifndef DEFINE_HEATER
#define DEFINE_HEATER(...) #define DEFINE_HEATER(...)
#endif #endif
// name port // name port pwm
DEFINE_HEATER(extruder, DIO6) DEFINE_HEATER(extruder, DIO10, 1)
DEFINE_HEATER(bed, DIO4) DEFINE_HEATER(bed, DIO9, 1)
// DEFINE_HEATER(fan, PINB4) DEFINE_HEATER(fan, DIO8, 0)
// DEFINE_HEATER(chamber, PIND7) // DEFINE_HEATER(chamber, PIND7)
// DEFINE_HEATER(motor, PIND6) // DEFINE_HEATER(motor, PIND6)
@ -445,7 +415,7 @@ DEFINE_HEATER(bed, DIO4)
#define HEATER_EXTRUDER HEATER_extruder #define HEATER_EXTRUDER HEATER_extruder
#define HEATER_BED HEATER_bed #define HEATER_BED HEATER_bed
// #define HEATER_FAN HEATER_fan #define HEATER_FAN HEATER_fan
// #define HEATER_CHAMBER HEATER_chamber // #define HEATER_CHAMBER HEATER_chamber
// #define HEATER_MOTOR HEATER_motor // #define HEATER_MOTOR HEATER_motor
@ -501,17 +471,17 @@ BANG_BANG
drops PID loop from heater control, reduces code size significantly (1300 bytes!) drops PID loop from heater control, reduces code size significantly (1300 bytes!)
may allow DEBUG on '168 may allow DEBUG on '168
*/ */
// #define BANG_BANG #define BANG_BANG
/** \def BANG_BANG_ON /** \def BANG_BANG_ON
BANG_BANG_ON BANG_BANG_ON
PWM value for 'on' PWM value for 'on'
*/ */
// #define BANG_BANG_ON 200 #define BANG_BANG_ON 200
/** \def BANG_BANG_OFF /** \def BANG_BANG_OFF
BANG_BANG_OFF BANG_BANG_OFF
PWM value for 'off' PWM value for 'off'
*/ */
// #define BANG_BANG_OFF 45 #define BANG_BANG_OFF 45
/** /**
move buffer size, in number of moves move buffer size, in number of moves
@ -614,13 +584,15 @@ PWM value for 'off'
* OCR5BL - PL4 - DIO45 * * OCR5BL - PL4 - DIO45 *
* OCR5CL - PL5 - DIO44 * * OCR5CL - PL5 - DIO44 *
* * * *
* For the Teensy atmega32U, timer pin/mappings are as follows * * For the atmega32U, timer pin/mappings are as follows *
* * * *
* Timer 1 is used for stepping, so OC1A and OC1B aren't good PWMs *
* OCR0A - PB7 - DIO4 * * OCR0A - PB7 - DIO4 *
* OCR0B - PD0 - DIO5 * * OCR0B - PD0 - DIO5 *
* OCR3A - PC6 - DIO9 * * OCR3A - PC6 - DIO9 *
* OCR4A - PC7 - DIO10 * * OCR4A - PC7 - DIO10 *
*~OCRAD - PD6 - DIO11 - AIO10 *** inverse of OCR4D (avoid it) *** *
* OCR4D - PD7 - DIO12 - AIO9 * * OCR4D - PD7 - DIO12 - AIO9 *
*~OCRAB - PB5 - DIO14 - AIO7 *** inverse of OCR4B (avoid it) *** *
* OCR4B - PB6 - DIO15 - AIO6 *
* * * *
\***************************************************************************/ \***************************************************************************/

View File

@ -134,7 +134,7 @@ void heater_init() {
#ifdef TCCR4A #ifdef TCCR4A
#ifdef TIMER4_IS_10_BIT #ifdef TIMER4_IS_10_BIT
// ATmega16/32U4 fourth timer is a 10 special bit timer // ATmega16/32U4 fourth timer is a special 10 bit timer
TCCR4A = MASK(PWM4A) | MASK(PWM4B) ; // enable A and B TCCR4A = MASK(PWM4A) | MASK(PWM4B) ; // enable A and B
TCCR4C = MASK(PWM4D); // and D TCCR4C = MASK(PWM4D); // and D
TCCR4D = MASK(WGM40); // Phase correct TCCR4D = MASK(WGM40); // Phase correct
@ -352,7 +352,7 @@ void heater_tick(heater_t h, temp_type_t type, uint16_t current_temp, uint16_t t
#else #else
if (current_temp >= target_temp) if (current_temp >= target_temp)
pid_output = BANG_BANG_OFF; pid_output = BANG_BANG_OFF;
else else //BANG_BANG
pid_output = BANG_BANG_ON; pid_output = BANG_BANG_ON;
#endif #endif