Merge pull request #1344 from grob6000/independent_pid
Independent PID parameters for each extruder
This commit is contained in:
		@@ -3196,30 +3196,52 @@ Sigma_Exit:
 | 
			
		||||
    #endif // M300
 | 
			
		||||
 | 
			
		||||
    #ifdef PIDTEMP
 | 
			
		||||
    case 301: // M301
 | 
			
		||||
      {
 | 
			
		||||
        if(code_seen('P')) Kp = code_value();
 | 
			
		||||
        if(code_seen('I')) Ki = scalePID_i(code_value());
 | 
			
		||||
        if(code_seen('D')) Kd = scalePID_d(code_value());
 | 
			
		||||
	case 301: // M301
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
        #ifdef PID_ADD_EXTRUSION_RATE
 | 
			
		||||
        if(code_seen('C')) Kc = code_value();
 | 
			
		||||
        #endif
 | 
			
		||||
		// multi-extruder PID patch: M301 updates or prints a single extruder's PID values
 | 
			
		||||
		// default behaviour (omitting E parameter) is to update for extruder 0 only
 | 
			
		||||
		int e = 0; // extruder being updated
 | 
			
		||||
		if (code_seen('E'))
 | 
			
		||||
		{
 | 
			
		||||
			e = (int)code_value();
 | 
			
		||||
		}
 | 
			
		||||
		if (e < EXTRUDERS) // catch bad input value
 | 
			
		||||
		{
 | 
			
		||||
 | 
			
		||||
			if (code_seen('P')) PID_PARAM(Kp,e) = code_value();
 | 
			
		||||
			if (code_seen('I')) PID_PARAM(Ki,e) = scalePID_i(code_value());
 | 
			
		||||
			if (code_seen('D')) PID_PARAM(Kd,e) = scalePID_d(code_value());
 | 
			
		||||
			#ifdef PID_ADD_EXTRUSION_RATE
 | 
			
		||||
			if (code_seen('C')) PID_PARAM(Kc,e) = code_value();
 | 
			
		||||
			#endif			
 | 
			
		||||
 | 
			
		||||
			updatePID();
 | 
			
		||||
			SERIAL_PROTOCOL(MSG_OK);
 | 
			
		||||
            #ifdef PID_PARAMS_PER_EXTRUDER
 | 
			
		||||
			  SERIAL_PROTOCOL(" e:"); // specify extruder in serial output
 | 
			
		||||
			  SERIAL_PROTOCOL(e);
 | 
			
		||||
            #endif // PID_PARAMS_PER_EXTRUDER
 | 
			
		||||
			SERIAL_PROTOCOL(" p:");
 | 
			
		||||
			SERIAL_PROTOCOL(PID_PARAM(Kp,e));
 | 
			
		||||
			SERIAL_PROTOCOL(" i:");
 | 
			
		||||
			SERIAL_PROTOCOL(unscalePID_i(PID_PARAM(Ki,e)));
 | 
			
		||||
			SERIAL_PROTOCOL(" d:");
 | 
			
		||||
			SERIAL_PROTOCOL(unscalePID_d(PID_PARAM(Kd,e)));
 | 
			
		||||
			#ifdef PID_ADD_EXTRUSION_RATE
 | 
			
		||||
			SERIAL_PROTOCOL(" c:");
 | 
			
		||||
			//Kc does not have scaling applied above, or in resetting defaults
 | 
			
		||||
			SERIAL_PROTOCOL(PID_PARAM(Kc,e));
 | 
			
		||||
			#endif
 | 
			
		||||
			SERIAL_PROTOCOLLN("");
 | 
			
		||||
		
 | 
			
		||||
		}
 | 
			
		||||
		else
 | 
			
		||||
		{
 | 
			
		||||
			SERIAL_ECHO_START;
 | 
			
		||||
			SERIAL_ECHOLN(MSG_INVALID_EXTRUDER);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
        updatePID();
 | 
			
		||||
        SERIAL_PROTOCOL(MSG_OK);
 | 
			
		||||
        SERIAL_PROTOCOL(" p:");
 | 
			
		||||
        SERIAL_PROTOCOL(Kp);
 | 
			
		||||
        SERIAL_PROTOCOL(" i:");
 | 
			
		||||
        SERIAL_PROTOCOL(unscalePID_i(Ki));
 | 
			
		||||
        SERIAL_PROTOCOL(" d:");
 | 
			
		||||
        SERIAL_PROTOCOL(unscalePID_d(Kd));
 | 
			
		||||
        #ifdef PID_ADD_EXTRUSION_RATE
 | 
			
		||||
        SERIAL_PROTOCOL(" c:");
 | 
			
		||||
        //Kc does not have scaling applied above, or in resetting defaults
 | 
			
		||||
        SERIAL_PROTOCOL(Kc);
 | 
			
		||||
        #endif
 | 
			
		||||
        SERIAL_PROTOCOLLN("");
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
    #endif //PIDTEMP
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user