ich glaube auch, die bremse funktioniert besser wenn motorspeed recht hoch ist. könnte aber auch sein dass in der asuro.c schon etwas entsprechendes programmiert ist.
Druckbare Version
ich glaube auch, die bremse funktioniert besser wenn motorspeed recht hoch ist. könnte aber auch sein dass in der asuro.c schon etwas entsprechendes programmiert ist.
ich auch, deshalb ja meine Frage.Zitat:
Zitat von damaltor
Leider nein, hier der Abschnitt aus motor.c der neuesten Asurolib 270rc2:Zitat:
könnte aber auch sein dass in der asuro.c schon etwas entsprechendes programmiert ist.
Ich denke, daß für eine maximale Bremswirkung bei BREAK der entsprechende Wert für MotorSpeed auf 255 gesetzt werden sollte ...Code:...
inline void MotorSpeed (
unsigned char left_speed,
unsigned char right_speed)
{
OCR1A = left_speed;
OCR1B = right_speed;
}
...
inline void MotorDir (
unsigned char left_dir,
unsigned char right_dir)
{
PORTD = (PORTD &~ ((1 << PD4) | (1 << PD5))) | left_dir;
PORTB = (PORTB &~ ((1 << PB4) | (1 << PB5))) | right_dir;
}
...
Last, but not least, noch eine Frage zur Begrifflichkeit :)Code:...
\par Arbeitsweise:
Ueber die Parameter werden die Port-Pin's zu den H-Bruecken beider Motoren so\n
gesetzt, dass die jeweils 4 beteiligten Transitoren einer Bruecke den Strom\n
durch die Motoren entweder
- FWD vorwaerts durchleiten
- RWD rueckwaerts durchleiten
- BREAK den Motor kurzschliessen (Bremswirkung)
- FREE oder von der Stromversorgung trennen (Motor laeuft aus)
...
Warum heißt das eigentlich BREAK und nicht BRAKE? (dt. bremsen = engl. to brake)
hrhr... da hab ich schon oft drüber nachgedacht... ich denke mal das lag daran dass jemand nicht genug drüber nachgedacht hat.
vielleicht sollte man einfach mal einen feldversuch starten, den asuro mit 255 fahren zu laseen, dann free, brake mit 0 und brake mit 255 nacheinander testen und sehn wie er stehenbleibt...
Hallo,
habe den Test eben mit dem folgenden Programm durchgeführt, mit für mich unerwartetem Ergebnis:Zitat:
Zitat von damaltor
BREAK mit Speed=0 verhält sich genauso wie BREAK mit Speed=255!Code:#include <asuro.h>
#define K1 (1<<5)
#define K2 (1<<4)
#define K3 (1<<3)
#define K4 (1<<2)
#define K5 (1<<1)
#define K6 (1<<0)
uint8_t getSwitch(void);
int main(void)
{
uint8_t sw1;
Init();
sw1 = getSwitch();
Msleep(1000);
MotorDir(FWD,FWD);
MotorSpeed(255,255);
Msleep(1500);
switch (sw1)
{
case K1: MotorDir(BREAK,BREAK);
MotorSpeed(0,255);
break;
case K2: MotorDir(FREE,BREAK);
MotorSpeed(0,255);
break;
case K3: MotorDir(FREE,BREAK);
MotorSpeed(0,0);
break;
case K4: MotorDir(BREAK,BREAK);
MotorSpeed(255,0);
break;
case K5: MotorDir(BREAK,FREE);
MotorSpeed(255,0);
break;
case K6: MotorDir(BREAK,FREE);
MotorSpeed(0,0);
break;
default:
MotorDir(BREAK,BREAK);
}
while (1);
return 0;
}
uint8_t getSwitch(void)
{
uint8_t t1, t2, t3;
while (1)
{
t1 = PollSwitch();
t2 = PollSwitch();
if ((t1==t2) && t1)
break;
Msleep(50);
}
while (1)
{
t2 = PollSwitch();
t3 = PollSwitch();
if ((t2==t3) && !t2)
break;
Msleep(50);
}
return t1;
}
Dies habe ich mit Robertor, dem Asuro meines Sohnes, getestet, der eine Endgeschwindigkeit von 1,8m/s hat.
Bei Tastern K1 und K4 (BREAK,BREAK) mit Speed=(0,255)/(255,0) rutscht der Asuro einfach geradeaus.
In allen anderen Fällen fährt er beim Abbremsen noch eine Kurve nach links oder rechts.
Ich vermute, daß BREAK mit Speed=0 deshalb genauso bremst, wie mit Speed=255, da PWM nur auf den unteren Teil der H-Brücke wirkt, der Motor aber im oberen Teil der H-Brücke kurzgeschlossen wird, wo PWM gar keinen Einfluß hat ...
hmm... eigenartiges ding. aber gut, die werte sollten also gleich sein und dann bremst er. sollte das mal wichtig sein, ist das schonmal gut zu wissen
Hallo Hermann,
es freut mich, dass Du mein Programm ausprobiert hast - und vor allem, dass es selbst im Zug funktioniert hat. Mir war auch wichtig ein paar Möglichkeiten zu zeigen, wie man ohne ständiges Neucompilieren eines Programmes Werte ändern kann. Darum auch die Möglichkeit, die Parameter mittels Terminalprogramm eingegben zu könne.
Mit der Infratotschnittstelle hast Du mich natürlich voll erwischt - sie ist aber mittels Edit-Button nun tatsächlich tot ;-)
Noch etwas zu dem BREAK Befehl für die Motoren. Ich denke, die Entwickler der Software meinen eigentlich BRAKE. Aber da lief gerade dieser komische Werbespot im Fernsehen - Have a break, have a ... (worum ging es da eigentlich) und so Wurde aus der Bremse eine Pause....
Aber im Ernst: Wenn die Motoren kurzgeschlossen werden, dann wird, sobald sie sich drehen, eine Spannung indiziert, die der Drehbewegung entgegenwirkt. Darum ist es schon sinnvoll, auch im Stand diesen Befehl zu verwenden, wenn sich ein Rad möglichste nicht drehen soll. Probier es aus: Nimm einen Motor, schließ ihn kurz und drehe ihn mit der Hand. Du wirst mehr Kraft brauchen, als wenn der Motor nicht kurzgeschlossen ist.
Schönes Restosterwochenende noch... und ja, wir kommen wohl um die Regelungstechnik nicht herum....
Gruß,
_HP_