Kurze Info zur Strommessung der Getriebemotoren bei 3,3V:
Anfahrt: 0,5-0,75 A
Dauerbetrieb: 0,2-0,4 A
Anbei noch ein Rätselbild für die Leser hier. Was ist das und wofür könnten wir es verwenden wollen?
Sebastian
Code: Alles auswählen
/*--------------------------------------------------------------------------------------------
PWM Control via Poti/Joystick
Version für DFRobot Motorshield L298
Hardware: ATtiny85
+------+
(RESET) PB5 -|1° 8|- Vcc
PB3 -|2 7|- PB2 (SCK)
PB4 -|3 6|- PB1 (MISO)
GND -|4 5|- PB0 (MOSI)
+------+
Motortreiber: DFRobot L298 Shield
Shield im PWM Mode betreiben
Shield auf externe Stromversorgung jumpern
PIN4 - Motor1 Direction Control (an PB1 vom ATtiny)
PIN5 - Motor1 PWM Control (an PB0 vom ATtiny)
PIN6 - Motor2 PWM Control
PIN7 - Motor2 Direction Control
Stand: 05.11.2013
--------------------------------------------------------------------------------------------*/
const int mitte = 128; // enthält den Wert der Mittelposition des Potis/Joysticks
// dieser Wert sollte in der Theorie 255/2 = 128 sein...
// (muss experimentell ermittelt werden)
const int intervall = 15; // Umgebung um die Mittelposition, in der der Motor stehen soll
// (muss experimentell ermittelt werden)
const int arraysize = 70; // Anzahl der Stützpunkte für die Kennlinie
/*--------------------------------------------------------------------------------------------
Dieses Array enthält die Kennlinie für den Controller. Zur Zeit wird dasselbe Array für
Rechts- und Linkslauf verwendet, aber man kann natürlich genauso gut verschiedene Kennlinien
für beide Richtungen anlegen. Die Kennlinie sollte experimentell ermittelt werden.
Wir fangen mal mit 25 an, da kleinere Werte den Motor nur fiepen lassen,
und bei 125 hören wir auf, sonst wird's zu schnell:
--------------------------------------------------------------------------------------------*/
const int pwm_array[arraysize] = {25,25,25,26,26,26,27,27,27,28,28,28,29,29,29,30,30,30,31,31,
31,32,32,32,33,33,33,34,34,35,35,38,38,40,40,45,45,50,50,55,
55,60,60,65,65,70,70,75,75,80,80,85,85,90,90,95,95,100,100,105,
105,110,110,115,115,120,120,125,125,125};
int pwm = 0; // beim DFRobot L298 Shield an PIN5
int richtung = 1; // beim DFRobot L298 Shield an PIN4
int poti = 3; // Poti an PIN PB3 vom ATtiny (PIN2)
int vp; // enthält den Wert des Potis
/*--------------------------------------------------------------------------------------------
Mit dieser Funktion kann die PWM Frequenz verändert werden.
base frequency 62500 Hz.
--------------------------------------------------------------------------------------------*/
void setPwmFrequency(int divisor) {
byte mode;
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 64: mode = 0x03; break;
case 256: mode = 0x04; break;
case 1024: mode = 0x05; break;
default: return;
}
TCCR0B = TCCR0B & 0b11111000 | mode;
}
void setup() {
pinMode(richtung, OUTPUT);
pinMode(pwm,OUTPUT);
setPwmFrequency(256);
}
void loop() {
vp = analogRead(poti);
vp = map(vp,0,1023,0,255); // 10bit Wert vom ADC in 8bit umwandeln
if (vp >= mitte-intervall && // Mittelstellung +/- Intervall
vp <= mitte+intervall) {
digitalWrite(richtung, LOW ); // Motor disabled
analogWrite(pwm, 0); // Motor disabled
}
else if (vp < mitte-intervall) { // Poti nach rechts
vp -= (mitte-intervall); // Wert für Nullposition abziehen, da wir ja bei
// Geschwindigkeit 0 anfangen wollen...
vp = vp * -1; // die -1 deswegen, weil der Potiwert kleiner wird, für
// unsere Zwecke aber größer werden muss...
if (vp >= arraysize-1) { // nicht über's Ende des Arrays hinausschiessen (böse Falle!)
vp = arraysize-1;
}
digitalWrite(richtung, HIGH); // Richtung 1
analogWrite(pwm, pwm_array[vp]); // Kennlinie für Rechtslauf
}
else if (vp > mitte+intervall) { // Poti nach links
vp -= (mitte+intervall); // Wert für Nullposition abziehen (siehe oben)
if (vp >= arraysize-1) {
vp = arraysize-1;
}
digitalWrite(richtung, LOW); // Richtung 2
analogWrite(pwm, pwm_array[vp]); // Kennlinie für Linkslauf
}
delay(1); // 1 ms warten, damit der A/D Wandler sich "beruhigt"
}
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste