PWM Offset

Hallo Forum,

ich regele eine Lineareinheit bestehen aus Motor, Kugelumlaufspindel, Drehgeber und natürlich dem Arduino Uno, bzw. einem PWM Signal.
Jetzt habe ich das Problem, dass mein Gleichstrommotor eine gewisse Spannung (ca. 5V) braucht damit er überhaupt anläuft.
Das wirkt sich natürlich negativ auf meine PI Regelung aus, da der Motor im unteren Bereich von 0 – 60 (PWM Ausgang geht ja von 0 – 255) gar nichts macht, bzw. nur fiept sich aber nicht dreht.
Habe ich eine Möglichkeit sozusagen einen Offset ein zu bauen ohne die ganze Regelung kaputt zu machen?
Bin über Ideen sehr dankbar.

Grüße


Nachtrag:
Es handelt sich um einen 24V Gleichstrommtor

Hey,

entschuldige bitte. Die Information habe ich euch nicht gegeben.
Es handelt sich um ein 24V Gleichstrommotor.

grüße

Was mir einfällt ist daß Du den Wertebereich für die PWM verleinerst (um 60; also von 0 bis 195) und dann falls die Zahl die die PI Regelung ausspuckt größer als 0 ist 60 hinzuaddierst und dies dann Dein PWM Wert ist.
Grüße Uwe

Hallo Uwe,

müsste ich dann nicht den PWM Bereich auf 61 - 255 festlegen?
Und:
0 < Reglerausgang < 61 ---> PWM = 61?

Grüße

nein;
Wie stoppst Du den Motor?

0, 60<Regelausgang <255.

Bei
0 < Reglerausgang < 61 ---> PWM = 61?
funktioniert die Regelung nicht da von 0 bis 60 immer die gleiche Geschwindigkeit herauskommt.

Müßte die Regelung wenn richtig bemessen, den Offset nicht automatisch herausregeln?

Grüße Uwe

bei meinem Lüfter PID war das auch so, die Regelung weiß nicht das der Lüfter bei PWM 10 nix macht, deswegen würde ich es mit 59-255 probieren.

wenn du die PID V1.h benutzt dann kannst du das einfach einstellen in der PID_v1.cpp

PID::SetOutputLimits(0, 255); //default output limit corresponds to

http://arduino.cc/playground/Code/PIDLibrary

Hey Uwe,

so in etwa?

double DCMotor::Regelung(long w, long x, double KP,double KI,double Ta)
{
       //Serial.println("Regelung wurde aufgerufen");
       
       _w = w;
       _x = x;
       _KP = KP;
       _KI = KI;
       _Ta = Ta;
                 
       _e = _w - _x;
       _e = _e/1000;
       
       _esum = _esum + _KI*_e;
       
       if(_esum < -195) {_esum = -195;}         
       if(_esum > 195) {_esum = 195;}
                  
       _yPID = _KP*_e + _esum;
       
       if(_yPID < -195) {_yPID = -195;}
       if(_yPID > 195) {_yPID = 195;} 
       
       if(_yPID < 0 )
       {         
                _yPID = _yPID - 60;
       }
       
       else if(_yPID > 0 )
       {                   
                 _yPID = _yPID +60;          
       }
       
       return _yPID;
}

Grüße