MoinMoin,
ich habe vor einigen Tagen meinen Prusa i3 erfolgreich zusammengebaut.
Dieser funktioniert auch einwandfrei, bis auf ein Problem:
Das Heizbett habe ich aktuell über einen SevenSwitch (Mosfet-Steuerung) am Heizbett-Ausgang des Sanguinololu 1.3a angeschlossen.
Leider beginnt dieses sofort zu Heizen, sobald der Sangu Strom bekommt und reagiert nicht auf Befehle der Software.
Das Heizen endet auch nicht bei einer eingestellten Temperatur (ab ca. 78 Grad steigt die Temperatur aber nur noch sehr langsam).
Am Heizbett-Ausgang des Sangu messe ich keine Spannung. Daher glaube ich, dass es etwas mit PWM zu tun hat. Aber der SevenSwitch sollte doch eigentlich mit schnellen Schaltzeiten klarkommen.
Als Firmware nutze ich Merlin.
Der Sevenswitch funktioniert alleine (feste Spannung auf Signaleingang) einwandfrei, daher kann es nicht an dessen Signaleingang liegen.
Kann ich nun irgendwie das PWM (PID) anpassen oder den Heizbett-Ausgang auf feste Schaltzeiten setzen?
Oder kann es ein Fehler auf der Platine sein?
Kann mir jemand bei diesem Problem weiterhelfen?
Vielen Dank im Voraus.
Das sind die Einstellungen, die das Heizbett betreffen (sehe ich das richtig, dass dies nur das Hotend betrifft und keine Befehle für das Heizbett vorhanden sind?):
// PID settings:
// Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP
#define PID_MAX 255 // limits current to nozzle; 255=full current
#ifdef PIDTEMP
//#define PID_DEBUG // Sends debug data to the serial port.
//#define PID_OPENLOOP 1 // Puts PID in open loop. M104 sets the output power in %
#define PID_INTEGRAL_DRIVE_MAX 255 //limit for the integral term
#define K1 0.95 //smoothing factor withing the PID
#define PID_dT ((16.0 * 8.0)/(F_CPU / 64.0 / 256.0)) //sampling period of the
// If you are using a preconfigured hotend then you can use one of the value sets by uncommenting it
// Ultimaker
#define DEFAULT_Kp 22.2
#define DEFAULT_Ki 1.08
#define DEFAULT_Kd 114
#endif // PIDTEMP
Meine Pins.h sieht momentan so aus (Mainboard ist 62):
#if MOTHERBOARD == 63
#define MELZI
#endif
#if MOTHERBOARD == 62 || MOTHERBOARD == 63
#undef MOTHERBOARD
#define MOTHERBOARD 6
#define SANGUINOLOLU_V_1_2
#endif
#if MOTHERBOARD == 6
#define KNOWN_BOARD 1
#ifndef __AVR_ATmega644P__
#ifndef __AVR_ATmega1284P__
#error Oops! Make sure you have 'Sanguino' selected from the 'Tools -> Boards' menu.
#endif
#endif
#define X_STEP_PIN 15
#define X_DIR_PIN 21
#define X_MIN_PIN 18
#define X_MAX_PIN -1
#define Y_STEP_PIN 22
#define Y_DIR_PIN 23
#define Y_MIN_PIN 19
#define Y_MAX_PIN -1
#define Z_STEP_PIN 3
#define Z_DIR_PIN 2
#define Z_MIN_PIN 20
#define Z_MAX_PIN -1
#define E0_STEP_PIN 1
#define E0_DIR_PIN 0
#define LED_PIN -1
#define FAN_PIN -1
#ifdef MELZI
#define LED_PIN 28
#define FAN_PIN 4
#endif
#define PS_ON_PIN -1
#define KILL_PIN -1
#define HEATER_0_PIN 13 // (extruder)
#define HEATER_1_PIN -1
#define HEATER_2_PIN -1
#ifdef SANGUINOLOLU_V_1_2
#define HEATER_BED_PIN 12 // (bed)
#define X_ENABLE_PIN 14
#define Y_ENABLE_PIN 14
#define Z_ENABLE_PIN 26
#define E0_ENABLE_PIN 14
#else
#define HEATER_BED_PIN 14 // (bed)
#define X_ENABLE_PIN -1
#define Y_ENABLE_PIN -1
#define Z_ENABLE_PIN -1
#define E0_ENABLE_PIN -1
Edit:
Ich habe nun diesen Code hinzugefügt:
// Bed Temperature Control
// Select PID or bang-bang with PIDTEMPBED. If bang-bang, BED_LIMIT_SWITCHING will enable hysteresis
//
// Uncomment this to enable PID on the bed. It uses the same frequency PWM as the extruder.
// If your PID_dT above is the default, and correct for your hardware/configuration, that means 7.689Hz,
// which is fine for driving a square wave into a resistive load and does not significantly impact you FET heating.
// This also works fine on a Fotek SSR-10DA Solid State Relay into a 250W heater.
// If your configuration is significantly different than this and you don't understand the issues involved, you probably
// shouldn't use bed PID until someone else verifies your hardware works.
// If this is enabled, find your own PID constants below.
//#define PIDTEMPBED
//
//#define BED_LIMIT_SWITCHING
// This sets the max power delivered to the bed, and replaces the HEATER_BED_DUTY_CYCLE_DIVIDER option.
// all forms of bed control obey this (PID, bang-bang, bang-bang with hysteresis)
// setting this to anything other than 255 enables a form of PWM to the bed just like HEATER_BED_DUTY_CYCLE_DIVIDER did,
// so you shouldn't use it unless you are OK with PWM on your bed. (see the comment on enabling PIDTEMPBED)
#define MAX_BED_POWER 255 // limits duty cycle to bed; 255=full current
#ifdef PIDTEMPBED
//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
#define DEFAULT_bedKp 10.00
#define DEFAULT_bedKi .023
#define DEFAULT_bedKd 305.4
//120v 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
//from pidautotune
// #define DEFAULT_bedKp 97.1
// #define DEFAULT_bedKi 1.41
// #define DEFAULT_bedKd 1675.16
// FIND YOUR OWN: "M303 E-1 C8 S90" to run autotune on the bed at 90 degreesC for 8 cycles.
#endif // PIDTEMPBED
Bei allen drei möglichen Einstellungen (#define PIDTEMPBED aktiv, #define BED_LIMIT_SWITCHING aktiv, oder beide aus) heißt das Heizbet durchgehend.
Wenn ich nun den Autotune-Befehl (M303 E-1 C8 S90) sende, so heißt das Heizbett weiter und das Hotend (!) heißt auf die 90 Grad auf und der Test wird durchgeführt.
Das scheint doch nicht so gewollt zu sein, dass das Hotend und nicht das Heizbett den Test durchläuft, oder?
Auch bei "M303 E-0 C8 S90" oder "M303 E-2 C8 S90" durchläuft das Hotend den Test.
So langsam bin ich mit meinem Latein am Ende...
7-mal bearbeitet. Zuletzt am 20.12.13 10:02.