Firmware for encoder March 04, 2009 07:52PM |
Registered: 16 years ago Posts: 264 |
Re: Firmware for encoder May 08, 2009 09:40AM |
Registered: 16 years ago Posts: 186 |
Re: Firmware for encoder May 11, 2009 03:05PM |
Registered: 16 years ago Posts: 264 |
Re: Firmware for encoder May 12, 2009 07:11AM |
Registered: 16 years ago Posts: 186 |
Re: Firmware for encoder May 12, 2009 08:21PM |
Registered: 16 years ago Posts: 264 |
void extruder::manage_speed() { bool next_state = read_switch(encoder_pin); if (encoder_waiting) { e_delay = millis() - encoder_time; error = e_delay - (256 - e_speed); if (error >= 0) { analogWrite(motor_speed_pin, 255); encoder_state = next_state; encoder_time = millis(); encoder_waiting = false; } } else if (next_state != encoder_state) { e_delay = millis() - encoder_time; error = e_delay - (256 - e_speed); if (error < 0) { analogWrite(motor_speed_pin, 0); encoder_waiting = true; } } }
bool encoder_state; bool encoder_waiting; int encoder_time;
Re: Firmware for encoder May 13, 2009 04:55AM |
Registered: 16 years ago Posts: 186 |
Re: Firmware for encoder May 13, 2009 08:26PM |
Registered: 16 years ago Posts: 264 |
//this is for doing encoder based extruder control long e_delay; int error; int encoder_speed; int encoder_time; volatile int encoder_count; int encoder_inc; void manage_speed(); friend void ::doEncoder();
#ifdef SANGUINO setupTimerInterrupt(); disableTimerInterrupt(); #else if ( (encoder_pin >= 0) && (encoder_pin != 255) ) attachInterrupt(encoder_pin-2, doEncoder, CHANGE); #endif
void extruder::manage_speed() { int current = millis(); encoder_count += (current - encoder_time); encoder_time = current; error = encoder_count / 4; if (error != 0) { encoder_speed += error; if (encoder_speed < 0) encoder_speed = 0; else if (encoder_speed >= 256) encoder_speed = 255; analogWrite(motor_speed_pin, encoder_speed); encoder_count = 0; } } void doEncoder() { ex[0]->encoder_count -= ex[0]->encoder_inc; } void extruder::set_speed(float sp) { // DC motor? if ( (step_en_pin < 0) || (step_en_pin == 255) ) { e_speed = (byte)sp; if(e_speed > 0) wait_for_temperature(); encoder_time = millis(); encoder_count = 0; encoder_inc = (256 - e_speed); encoder_speed = e_speed; analogWrite(motor_speed_pin, e_speed); return; } }
Re: Firmware for encoder May 14, 2009 03:16AM |
Registered: 16 years ago Posts: 186 |
Re: Firmware for encoder May 14, 2009 07:48PM |
Registered: 16 years ago Posts: 264 |
Re: Firmware for encoder May 26, 2009 03:38AM |
Registered: 16 years ago Posts: 62 |
Re: Firmware for encoder May 30, 2009 05:29PM |
Registered: 16 years ago Posts: 186 |
Re: Firmware for encoder July 16, 2009 11:32PM |
Registered: 16 years ago Posts: 264 |