public PrinterStepper(ConfigWrapper config) { var printer = config.get_printer(); this.name = config.get_name(); this.need_motor_enable = true; // Stepper definition var ppins = printer.lookup_object <PrinterPins>("pins"); var step_pin = config.get("step_pin"); this.mcu_stepper = ppins.setup_pin <Mcu_stepper>("stepper", step_pin); var dir_pin = config.get("dir_pin"); var dir_pin_params = ppins.lookup_pin(dir_pin, can_invert: true); mcu_stepper.setup_dir_pin(dir_pin_params); var step_dist = config.getfloat("step_distance", above: 0.0); mcu_stepper.setup_step_distance(step_dist); this.enable = StepperEnablePin.lookup_enable_pin(ppins, config.get("enable_pin", null)); // Register STEPPER_BUZZ command //var force_move = printer.try_load_module(config, "force_move"); //force_move.register_stepper(this); // Wrappers this.step_itersolve = mcu_stepper.step_itersolve; this.setup_itersolve = mcu_stepper.setup_itersolve; this.set_stepper_kinematics = mcu_stepper.set_stepper_kinematics; this.set_ignore_move = mcu_stepper.set_ignore_move; this.calc_position_from_coord = mcu_stepper.calc_position_from_coord; this.set_position = mcu_stepper.set_position; this.get_commanded_position = mcu_stepper.get_commanded_position; this.set_commanded_position = mcu_stepper.set_commanded_position; this.get_mcu_position = mcu_stepper.get_mcu_position; this.get_step_dist = mcu_stepper.get_step_dist; }
public Heater(ConfigWrapper config, ISensor sensor, string gcode_id) { var printer = config.get_printer(); this.name = config.get_name(); this.gcode_id = gcode_id; // Setup sensor this.sensor = sensor; this.min_temp = config.getfloat("min_temp", minval: KELVIN_TO_CELCIUS); this.max_temp = config.getfloat("max_temp", above: this.min_temp); this.sensor.setup_minmax(this.min_temp, this.max_temp); this.sensor.setup_callback(this.temperature_callback); this.pwm_delay = this.sensor.get_report_time_delta(); // Setup temperature checks this.min_extrude_temp = config.getfloat("min_extrude_temp", 170.0, minval: this.min_temp, maxval: this.max_temp); var is_fileoutput = printer.get_start_args().Get("debugoutput") != null; this.can_extrude = this.min_extrude_temp <= 0.0 || is_fileoutput; this.max_power = config.getfloat("max_power", 1.0, above: 0.0, maxval: 1.0); this.smooth_time = config.getfloat("smooth_time", 2.0, above: 0.0); this.inv_smooth_time = 1.0 / this.smooth_time; this._lock = new object(); this.last_temp = 0.0; this.last_temp_time = 0.0; // pwm caching this.next_pwm_time = 0.0; this.last_pwm_value = 0.0; // Setup control algorithm sub-class //var algos = new Dictionary<string, object> { { "watermark", ControlBangBang }, { "pid", ControlPID } }; //var algo = config.getchoice("control", algos); switch (config.get("control")) { case "watermark": this.control = new ControlBangBang(this, config); break; case "pid": this.control = new ControlPID(this, config); break; } // Setup output heater pin var heater_pin = config.get("heater_pin"); var ppins = printer.lookup_object <PrinterPins>("pins"); if (control is ControlBangBang && this.max_power == 1.0) { this.mcu_pwm = ppins.setup_pin <Mcu_digital_out>("digital_out", heater_pin); } else { var pwm = ppins.setup_pin <Mcu_pwm>("pwm", heater_pin); var pwm_cycle_time = config.getfloat("pwm_cycle_time", 0.1, above: 0.0, maxval: this.pwm_delay); pwm.setup_cycle_time(pwm_cycle_time); this.mcu_pwm = pwm; } this.mcu_pwm.setup_max_duration(MAX_HEAT_TIME); // Load additional modules printer.try_load_module(config, $"verify_heater {this.name}"); printer.try_load_module(config, "pid_calibrate"); }
public ISensor setup_sensor(ConfigWrapper config) { this.printer.try_load_module(config, "thermistor"); this.printer.try_load_module(config, "adc_temperature"); this.printer.try_load_module(config, "spi_temperature"); var sensor_type = config.get("sensor_type"); if (!this.sensors.ContainsKey(sensor_type)) { throw new Exception($"Unknown temperature sensor '{sensor_type}'"); } return(this.sensors[sensor_type](config)); }