der motor soll in niedrigen drehzahlen eh ungeregelt sein, damit man den mit der hand anhalten kann ...
Ist doch kein Problem. Bei mir wird die Regelungsroutine in einem präzisen Takt aufgerufen und in der Routine selbst wird zuerst geprüft, ob überhaupt geregelt werden soll. Und bei mir wird auch bei kleinen Sollwerten komplett abgeschaltet, das wäre bei Dir nicht sinnvoll, ist aber leicht entsprechend programmierbar. Insgesamt sind eben digitale Regler problemlos und easy anpassungsfähig, ein- und auszuschalten etc.
Code:
// ============================================================================= =
// === Regelungsroutine für Motor 12
// Die gemessene Zeitdifferenz Iz_diff0 zwischen zwei Encoderinterrupts
// wird zur Regelung verwendet
// Regelungkennwerte regel12/-34 und OCR1A/-B werden
// in der ISR(TIMER2_COMPB_vect) sekündlich in den i2c-speicher geschrieben
// ============================================================================= =
void rgl_12(void) // Regelung für Motor 12 mit 2 Interr pro Umdr.
{
if ( !regel12 ) return; // Regelung ist aus bei regel == 0
//
if (sspeed12 <= 3) // Soll überhaupt gefahren werden?
{ //
OCR1A = 0; // Unter x mm/s soll nicht gefahren werden
return; //
} //
... ...
Der Flag regel12 wird irgendwo gesetzt oder nicht . . . aber vermutlich reicht bei Dir sogar eine ähnliche Abfrage wie die (bei mir ebenfalls vorhandene) Sollspeed-Abfrage und entsprechende Reaktion bei kleinen Drehzahlen. Wer dann noch unbedingt scratchen können möchte, kann die Regelung bei hohen Stellwerten, sprich: bei großen Abweichungen vom Sollwert *ggg*, auch abbrechen oder ganz ausschalten. Von Spezialnadel etc jetzt mal abgesehen.
Lesezeichen