Motor-Treiber

Aus www.wiki.ardumower.de
Wechseln zu: Navigation, Suche

Zusammenfassung

Das Ardumower- Design verwendet zwei verschiedene Typen von Motoren. Alle Motoren können im Shop shop Shopping.png) erworben werden:

  • Zwei Getriebemotoren als Antriebe (Radmotoren) mit Encoder(für Weg- und Geschwindigkeitssteuerung)
  • einen Motor (mit hoher Drehzahl) zum Mähen (Mähmotor)

Zur Steuerung der Motoren sind Motortreiber erforderlich.

Spannungen

Obwohl es 12V- und 24V- Motoren gibt, verwendet der Ardumower, wie alle modernen Systeme, 24V Motoren.

Radmotoren

Die beiden Getriebemotoren werden unabhängig voneinander gesteuert ('Differentialantrieb') :

  • Fahren vorwärts/rückwärts
  • Lenken links/rechts

Die Eigenschaften der Ardumower - Radmotoren:

  • Eine Drehzahl bis zu 31 U/min erlaubt es, den Roboter mit einer ausreichenden Geschwindigkeit von bis zu (Meter/sec = 31rpm/60 * PI * 0.25m = 0.4m/sec) bei Verwendung von Rädern mit 250 mm Durchmesser, zu bewegen.
  • ein hohes Drehmoment (2.45 Nm) garantiert, dass der Roboter kleinere Hügel bis zu 14 Grad erklimmen kann (mit 2 Motoren, 250 mm Rädern, 31 U/min = 0.4m/s, Beschleunigung = 0.2 ( 1/2 der Nominalgeschwindigkeit) see calculator
  • Der eingebaute Encoder kann die Drehzahl messen, die Geschwindigkeit und den Weg feststellen.
  • 24V (Laststrom ca. 1A)

Motortreiber (MC33926)

Eigenschaften: bis zu 3A, mit integriertem Stromsensor und Thermoschutz

Warning.png Protektorboard: Bei 24V Systemen kommt es zu Spannungsspitzen, die den Motortreiber schnell zerstören können. Daher wurde das Protektorboard entwickelt um dies zu verhindern. Es werden 2 Stück benötigt. Einen für die Antriebsräder und einen für den Mähmotor. Schaden kann das Protektorboard auf keinen Fall.

Motor wiring (left motor):

black  ==== MC33926 M1OUT1
red    ==== MC33926 M1OUT2

Odometry wiring (left motor):

brown  ---- PCB VCC
green  ---- PCB GND
blue   ---- PCB OdometryLeft (3)
purple ---- PCB OdometryLeft (4)

For right motor, use MC33926 M2OUT(1,2) and PCB OdometryRight accordingly.

IMPORTANT: PCB v0.5/1.2 are missing pull-ups! You need to add them yourself:

odometry(3) --- 4.7k --- 5v
odometry(4) --- 4.7k --- 5v

Mähmotor und Treiber

Eigenschaften des Ardumower-Mähmotors:

  • schnell genug um den Rasen zu schneiden (3150 U/min)
  • genügend Drehmoment (140 mNm / 46 W)
  • leises Mähen (man hört ihn kaum)
  • 24V, Laststrom ~1.0A (L=2.8mH, R=1.9ohm)

Es wird ein MC33926 Motortreiber in Parallelschaltung zur Ansteuerung des Mähmotors verwendet.

Warning.pngSicherheitshinweis: Entferne zur Sicherheit stets die Messer bei diesen ersten Tests!


Motor wiring (mower motor):

black  ==== MC33926 M1OUT1
red    ==== MC33926 M1OUT2


Motor controller (PID)

The speed of the motors is controlled by a software PID controller. You can monitor the quality of the motor speed control via pfodApp (Plot->Motor control):

Programming

Motor variables

   // --------- wheel motor state ----------------------------
   // wheel motor speed ( <0 backward, >0 forward); range -motorSpeedMaxRpm..motorSpeedMaxRpm
   //                                   [Default value]
   float motorAccel  ;          // motor wheel acceleration - only functional when odometry is not in use
                                // (warning: do not set too high) [1000]
   int motorSpeedMaxRpm   ;     // motor wheel max RPM  [25]
   int motorSpeedMaxPwm  ;      // motor wheel max Pwm  (8-bit PWM=255, 10-bit PWM=1023) [255]
   float motorPowerMax   ;      // motor wheel max power (Watt)
   PID motorLeftPID;            // motor left wheel PID controller [Kp=1.5 , Kd=0.29, Ki=0.25]
   PID motorRightPID;           // motor right wheel PID controller
   float motorSenseRightScale ; // motor right sense scale (mA=(ADC-zero)/scale)
   float motorSenseLeftScale ;  // motor left sense scale  (mA=(ADC-zero)/scale)
   int motorRollTimeMax ;       // max. roll time (ms)
   int motorRollTimeMin  ;      // min. roll time (ms)
   int motorReverseTime ;       // max. reverse time (ms)
   long motorForwTimeMax;       // max. forward time (ms) / timeout
   float motorBiDirSpeedRatio1 ;// bidir mow pattern speed ratio 1
   float motorBiDirSpeedRatio2 ;// bidir mow pattern speed ratio 2
   bool motorRightSwapDir     ; // inverse right motor direction? 
   bool motorLeftSwapDir      ; // inverse left motor direction?  
   int motorLeftSpeedRpmSet ;   // set speed
   int motorRightSpeedRpmSet ;
   float motorLeftPWMCurr ;     // current speed
   float motorRightPWMCurr ;
   int motorRightSenseADC ;
   int motorLeftSenseADC ;
   float motorLeftSenseCurrent ;     
   float motorRightSenseCurrent ;
   float motorLeftSense ;       // motor power (range 0..MAX_MOTOR_POWER)
   float motorRightSense ;
   int motorPowerIgnoreTime; 
   int motorZeroSettleTime;     // how long (ms) to wait for motor to settle at zero speed
   int motorLeftSenseCounter ;  // motor current counter
   int motorRightSenseCounter ;
   unsigned long nextTimeMotorSense ;
   unsigned long lastSetMotorSpeedTime;
   unsigned long motorLeftZeroTimeout;
   unsigned long motorRightZeroTimeout;
   boolean rotateLeft;
   unsigned long nextTimeRotationChange;

Motor Methods

First the basic function that control the pwm to each motors:

 void setMotorPWM(int pwmLeft, int pwmRight, boolean useAccel);

A general methods to test motors

 void testMotors();

Then, there are several MotorControl methods according to mower state :

if current state is 'STATE_PERI_TRACK' then

 void motorControlPerimeter();


 void motorControlImuRoll();
 void motorControlImuDir();

for all other case :

 void motorControl();
 // This method calculate pwm to set in order to respect rpm setpoint according current rpm and Kp, Ki, Kd parameter