FSensor tunning - filtering changed, chunk length = 0.64mm and MAX_ERR = 10

This commit is contained in:
Robert Pelnar 2018-07-17 20:04:12 +02:00
parent 64929a78f5
commit 2c06cb68d1

View File

@ -10,11 +10,14 @@
#include "cmdqueue.h" #include "cmdqueue.h"
const char ERRMSG_PAT9125_NOT_RESP[] PROGMEM = "PAT9125 not responding (%d)!\n";
#define FSENSOR_ERR_MAX 5 //filament sensor max error count //#define FSENSOR_ERR_MAX 5 //filament sensor max error count
#define FSENSOR_ERR_MAX 10 //filament sensor max error count
#define FSENSOR_INT_PIN 63 //filament sensor interrupt pin PK1 #define FSENSOR_INT_PIN 63 //filament sensor interrupt pin PK1
#define FSENSOR_INT_PIN_MSK 0x02 //filament sensor interrupt pin mask (bit1) #define FSENSOR_INT_PIN_MSK 0x02 //filament sensor interrupt pin mask (bit1)
#define FSENSOR_CHUNK_LEN 280 //filament sensor chunk length in steps //#define FSENSOR_CHUNK_LEN 280 //filament sensor chunk length in steps - 1mm
#define FSENSOR_CHUNK_LEN 180 //filament sensor chunk length in steps - 0.64mm
extern void stop_and_save_print_to_ram(float z_move, float e_move); extern void stop_and_save_print_to_ram(float z_move, float e_move);
extern void restore_print_from_ram_and_continue(float e_move); extern void restore_print_from_ram_and_continue(float e_move);
@ -115,7 +118,7 @@ void fsensor_autoload_check_start(void)
// puts_P(PSTR("fsensor_autoload_check_start\n")); // puts_P(PSTR("fsensor_autoload_check_start\n"));
if (!pat9125_update_y()) //update sensor if (!pat9125_update_y()) //update sensor
{ {
puts_P(PSTR("pat9125 not responding (3).\n")); printf_P(ERRMSG_PAT9125_NOT_RESP, 3);
fsensor_disable(); fsensor_disable();
fsensor_not_responding = true; fsensor_not_responding = true;
fsensor_autoload_enabled = false; fsensor_autoload_enabled = false;
@ -144,7 +147,7 @@ bool fsensor_check_autoload(void)
fsensor_autoload_last_millis = millis(); fsensor_autoload_last_millis = millis();
if (!pat9125_update_y()) if (!pat9125_update_y())
{ {
puts_P(PSTR("pat9125 not responding (2).\n")); printf_P(ERRMSG_PAT9125_NOT_RESP, 2);
fsensor_disable(); fsensor_disable();
fsensor_not_responding = true; fsensor_not_responding = true;
return false; //update sensor return false; //update sensor
@ -173,74 +176,44 @@ bool fsensor_check_autoload(void)
ISR(PCINT2_vect) ISR(PCINT2_vect)
{ {
// puts("PCINT2\n");
if (!((fsensor_int_pin_old ^ PINK) & FSENSOR_INT_PIN_MSK)) return; if (!((fsensor_int_pin_old ^ PINK) & FSENSOR_INT_PIN_MSK)) return;
fsensor_int_pin_old = PINK; fsensor_int_pin_old = PINK;
static bool _lock = false; static bool _lock = false;
if (_lock) return; if (_lock) return;
_lock = true; _lock = true;
// return;
int st_cnt = fsensor_st_cnt; int st_cnt = fsensor_st_cnt;
fsensor_st_cnt = 0; fsensor_st_cnt = 0;
sei(); sei();
/* *digitalPinToPCMSK(fsensor_int_pin) &= ~bit(digitalPinToPCMSKbit(fsensor_int_pin)); uint8_t old_err_cnt = fsensor_err_cnt;
digitalWrite(fsensor_int_pin, HIGH);
*digitalPinToPCMSK(fsensor_int_pin) |= bit(digitalPinToPCMSKbit(fsensor_int_pin));*/
if (!pat9125_update_y()) if (!pat9125_update_y())
{ {
//#ifdef DEBUG_FSENSOR_LOG printf_P(ERRMSG_PAT9125_NOT_RESP, 1);
puts_P(PSTR("pat9125 not responding (1).\n"));
//#endif //DEBUG_FSENSOR_LOG
fsensor_disable(); fsensor_disable();
fsensor_not_responding = true; fsensor_not_responding = true;
} }
if (st_cnt != 0) if (st_cnt != 0)
{ //movement
if (st_cnt > 0) //positive movement
{ {
#ifdef DEBUG_FSENSOR_LOG if (pat9125_y <= 0)
if (fsensor_log)
{
MYSERIAL.print("cnt=");
MYSERIAL.print(st_cnt, DEC);
MYSERIAL.print(" dy=");
MYSERIAL.print(pat9125_y, DEC);
}
#endif //DEBUG_FSENSOR_LOG
if (st_cnt != 0)
{
if( (pat9125_y == 0) || ((pat9125_y > 0) && (st_cnt < 0)) || ((pat9125_y < 0) && (st_cnt > 0)))
{ //invalid movement
if (st_cnt > 0) //only positive movements
fsensor_err_cnt++; fsensor_err_cnt++;
#ifdef DEBUG_FSENSOR_LOG
if (fsensor_log)
{
MYSERIAL.print("\tNG ! err=");
MYSERIAL.println(fsensor_err_cnt, DEC);
}
#endif //DEBUG_FSENSOR_LOG
}
else else
{ //propper movement if (fsensor_err_cnt)
if (fsensor_err_cnt > 0)
fsensor_err_cnt--; fsensor_err_cnt--;
// fsensor_err_cnt = 0;
#ifdef DEBUG_FSENSOR_LOG
if (fsensor_log)
{
MYSERIAL.print("\tOK err=");
MYSERIAL.println(fsensor_err_cnt, DEC);
} }
#endif //DEBUG_FSENSOR_LOG else //negative movement
{
} }
} }
else else
{ //no movement { //no movement
}
#ifdef DEBUG_FSENSOR_LOG #ifdef DEBUG_FSENSOR_LOG
if (fsensor_log) if (fsensor_log)
MYSERIAL.println("\tOK 0"); printf_P(_N("FSENSOR cnt=%d dy=%d err=%d %S\n"), st_cnt, pat9125_y, fsensor_err_cnt, (fsensor_err_cnt > old_err_cnt)?_N("NG!"):_N("OK"));
#endif //DEBUG_FSENSOR_LOG #endif //DEBUG_FSENSOR_LOG
}
}
pat9125_y = 0; pat9125_y = 0;
_lock = false; _lock = false;
return; return;