/**************************************************************************************************** RepRapFirmware - Platform: RepRapPro Mendel with Prototype Arduino Due controller Platform contains all the code and definitons to deal with machine-dependent things such as control pins, bed area, number of extruders, tolerable accelerations and speeds and so on. ----------------------------------------------------------------------------------------------------- Version 0.1 18 November 2012 Adrian Bowyer RepRap Professional Ltd http://reprappro.com Licence: GPL ****************************************************************************************************/ #include "RepRapFirmware.h" // Arduino initialise and loop functions // Put nothing in these other than calls to the RepRap equivalents void setup() { reprap.init(); } void loop() { reprap.spin(); } //************************************************************************************************* Platform::Platform(RepRap* r) { reprap = r; init(); } void Platform::init() { uint8_t i; Serial.begin(9600); Serial.println("Platform constructor"); if(!loadFromStore()) { // DRIVES stepPins = STEP_PINS; directionPins = DIRECTION_PINS; enablePins = ENABLE_PINS; disableDrives = DISABLE_DRIVES; maxFeedrates = MAX_FEEDRATES; maxAccelerations = MAX_ACCELERATIONS; driveStepsPerUnit = DRIVE_STEPS_PER_UNIT; jerks = JERKS; driveRelativeModes = DRIVE_RELATIVE_MODES; // AXES lowStopPins = LOW_STOP_PINS; highStopPins = HIGH_STOP_PINS; axisLengths = AXIS_LENGTHS; fastHomeFeedrates = FAST_HOME_FEEDRATES; // HEATERS - Bed is assumed to be the first tempSensePins = TEMP_SENSE_PINS; heatOnPins = HEAT_ON_PINS; thermistorBetas = THERMISTOR_BETAS; thermistorSeriesRs = THERMISTOR_SERIES_RS; thermistor25Rs = THERMISTOR_25_RS; usePid = USE_PID; pidKis = PID_KIS; pidKds = PID_KDS; pidKps = PID_KPS; pidILimits = PID_I_LIMITS; } for(i = 0; i < DRIVES; i++) { if(stepPins[i] >= 0) pinMode(stepPins[i], OUTPUT); if(directionPins[i] >= 0) pinMode(directionPins[i], OUTPUT); if(enablePins[i] >= 0) { pinMode(enablePins[i], OUTPUT); digitalWrite(enablePins[i], ENABLE); } } for(i = 0; i < AXES; i++) { if(lowStopPins[i] >= 0) { pinMode(lowStopPins[i], INPUT); digitalWrite(lowStopPins[i], HIGH); // Turn on pullup } if(highStopPins[i] >= 0) { pinMode(highStopPins[i], INPUT); digitalWrite(highStopPins[i], HIGH); // Turn on pullup } } for(i = 0; i < HEATERS; i++) { if(tempSensePins[i] >= 0) pinMode(tempSensePins[i], INPUT); if(heatOnPins[i] >= 0) pinMode(heatOnPins[i], OUTPUT); } } // Load settings from local storage; return true if successful, false otherwise bool Platform::loadFromStore() { return false; } //=========================================================================== //=============================Thermal Settings ============================ //=========================================================================== // See http://en.wikipedia.org/wiki/Thermistor#B_or_.CE.B2_parameter_equation // BETA is the B value // RS is the value of the series resistor in ohms // R_INF is R0.exp(-BETA/T0), where R0 is the thermistor resistance at T0 (T0 is in kelvin) // Normally T0 is 298.15K (25 C). If you write that expression in brackets in the #define the compiler // should compute it for you (i.e. it won't need to be calculated at run time). // If the A->D converter has a range of 0..1023 and the measured voltage is V (between 0 and 1023) // then the thermistor resistance, R = V.RS/(1023 - V) // and the temperature, T = BETA/ln(R/R_INF) // To get degrees celsius (instead of kelvin) add -273.15 to T //#define THERMISTOR_R_INFS ( THERMISTOR_25_RS*exp(-THERMISTOR_BETAS/298.15) ) // Compute in Platform constructor