Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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));
        }