Motor-Treiber
Inhaltsverzeichnis
Zusammenfassung
Das Ardumower- Design verwendet zwei verschiedene Typen von Motoren. Alle Motoren können im Shop shop ) 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
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.
Sicherheitshinweis: 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