Ja, zwei Servos (oder mehr) am selben Kontrollerpin funktioniert natürlich auch.
Druckbare Version
Ja, zwei Servos (oder mehr) am selben Kontrollerpin funktioniert natürlich auch.
OK, Hmmm... da fällt mir spontan ein das Port für das SFH5110 zu nehmen, weil die "Buchse" bei mir schon da ist.
Ist diese Doppelbelegung möglich oder muss ich den Teil für die IR-Kommunikation aus der Lib heraustrennen? IR-Komm. brauche ich nicht, weil ich via ISP flashe.
hallo,
@pinsel120866:
leider geht das in meinem fall mit der synchronen ansteuerung nicht, weil der eine servo einen greifer schließen bzw. öffnen soll und der andere servo den greifer nach oben oder unten bewegen soll!
kann mir keiner mit meinem programm helfen ?
danke für alle antworten
mfg Felix
Aber da sich bei Radbruchs "Walker" die diagonal zueinander stehenden Beine immer gleich bewegen braucht man anstatt 8 Pins nur 4^^
wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen... :-k
kommt ja drauf an wie rum man die drehr entweder sie bewegen sich gleich oder genau umgekehrt... ](*,)
Ach vom Prinziep her kann man se mit 4 pins ansteuern^^
€: Wenn er um die Kurve will muss er sich was ausdenken^^
Hallo
Ähm, ich wußte nicht, das du weiterhin auf Hilfe wartest. Mit den Erläuterungen von oben solltest du nun deine Servos immerhin blockierend ansteuern können.Zitat:
kann mir keiner mit meinem programm helfen?
Das "Blockieren" bezieht sich auf den Rest des Programms, mehrere Servos funktionieren einfach so:Zitat:
leider geht das in meinem fall mit der synchronen ansteuerung nicht
Jetzt alles klar?Code:do
Ausgang Impuls für 1. Servo auf high
Impulslänge für 1.Servo abwarten
Ausgang Impuls für 1. Servo auf low
Ausgang Impuls für 2. Servo auf high
Impulslänge für 2.Servo abwarten
Ausgang Impuls für 2. Servo auf low
Impulspause (20ms - (Impulslänge1+Impulslänge2)) abwarten
while(Servos haben Ziel noch nicht erreicht)
Gruß
mic
[Edit][Offtopic]
Ja, im Prinzip schon, aber echtes "Gehen" wird so nicht funktionieren. Das liegt in erster Linie daran das man nur bei einzelner Ansteuerung der Servos die mechanischen und elektrischen Toleranzen korrigieren kann.Zitat:
...vom Prinzip her kann man se mit 4 pins ansteuern
Doch, genau das machen sie und genau das ist ein großer Sch.... Je nach Einbauort und -lage bewegen sich die Servos bei längeren Impulsen auf/ab bzw. vor/zurück oder bei kürzeren Impulsen ab/auf bzw. zurück/vor. In der nächsten (sechsbeinigen!) Version meines "Walkers" werde ich deshalb die Drehrichtungen der Servos anpassen (Motor und Poti umpolen) um eine Symetrie der Werte entlang der Längs- bzw. der Hochachse zu erhalten. D.h.: kleine Werte=alle Beine vor/hoch, große Werte=alle Beine hinten/unten. Das ist vielleicht kein wissenschaftlicher Ansatz und macht möglicherweise die Ansteuerung mit inverser Kinedingsda schwierig bis unmöglich. Aber weil ich ja noch Beineanfänger bin scheint mir das für den Einstieg leicher umsetzbar.Zitat:
wobei ich mir jetz nicht mehr sicher sind ob sich auch die Servos gleich bewegen
[/Offtopic][/Edit]
hi ,
oh ja vielen dank ;-)
ich habs kapiert jedenfalls fast!
woher weiss ich wie lange ich den vorgang wiederholen muss bis der servo in der stellung ist die ich haben wollte, weil der servo gibt doch keine werte zurück oder doch?
muss ich mich da durch ausprobieren herantasten oder kann ich pauschal einfach mal die stellzeiten die draufstehen hernehmen ?
danke für deine hifreiche antwort
mfg Felix
Das Umrechnen der Stellzeiten aus dem Datenblatt ist vermutlich nicht ganz einfach. Ich würde das Senden der Impulse einfach solange wiederholen bis die Servos nicht mehr zucken. Etwas besser wäre vielleicht so:
Nur zur Info und nochmals etwas offtopic:Code:stellzeit = (pos_neu - pos_old) * WiederholungenproStep
do
Impulse senden
while(stellzeit--)
https://www.roboternetz.de/phpBB2/viewtopic.php?t=37927Zitat:
weil der servo gibt doch keine werte zurück oder doch?
Dazu benötigt man allerdings einen analogen Eingang zur Ansteuerung des Servos ;) Das ist aber schon sehr fortgeschritten, Anfänger/Einsteiger sollten sich erstmal mit den Grund- und Standartfunktionen der Servos vertraut machen.
hallo,
ok danke für den hinweis !
des mit dem analogen zeugs lass ich dann erstmal und werde etz malanfangen;-)
wenn ich nimmer weiterkomm bzw. der greifer fertig ist und funktioniert melde ich mich wieder!
bis dann
mfg Felix
Sag mal RCX,
laufen deine Servos mit den ASURO-Akkus? Ich habe die Erfahrung gemacht dass 5V zum Betreiben der Servos nicht ausreicht. Ausserdem ziehen die Servos so viel Strom dass man einen Transistor braucht.
Schönen Nachmittag,
Ich habe mir eine Erweiterungsplatine für 3 Servos gebastelt und diese auf meine ATMEGA32 Erweiterungsplatine gesteckt. Für die Servos belegt habe ich die PINS PB5(MOSI), PB6(MISO) und PB7(SCK) der ISP-Schnittstelle.
In der Asuro.c habe ich folgendes eingetragen:
In die Asuro.hCode:/* function for Servos */
/* example code right Servo On, middle Servo On, left LED Off */
/* Servo(OFF,ON,ON); */
void Servo(unsigned char left, unsigned char middle, unsigned char right)
{
if (left || middle || right) {
DDRB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
PORTB |= (1 << PB5) | (1 << PB6) | (1 << PB7);
}
if (!left) PORTB &= ~(1 << PB7);
if (!middle) PORTB &= ~(1 << PB6);
if (!right) PORTB &= ~(1 << PA5);
}
Und das Programm ist soCode:/* function for Servos */
/* example code right Servo On, middle Servo ON, left LED Off */
/* BackLED(OFF,ON,ON); */
void Servo(unsigned char left, unsigned char middle, unsigned char right);
Aber es bewegt sich nichts...Code:#include "asuro.h"
unsigned char i, servo_stellzeit;
void servo(unsigned char winkel){
unsigned int count=0;
do{
count++;
Servo(ON,ON,ON);
FrontLED(ON);
Sleep(winkel);
Servo (OFF,OFF,OFF);
FrontLED(OFF);
Sleep(255); Sleep(255); Sleep(255);
}while (count<servo_stellzeit);
}
int main(void) {
Init();
StatusLED(OFF);
do{
servo_stellzeit=35;
servo(51);
servo(90);
servo(51);
servo(15);
servo_stellzeit=2;
for (i=15; i<88; i+=2) servo(i);
for (i=90; i>17; i-=2) servo(i);
}while (1);
return 0;
}
Könntet ihr mir bitte etwas unter die Arme greifen?