Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] RP6 - 3 poliger Servo anschließen
roboterx
08.05.2011, 16:18
Hallo,
Versuche einen Servo (Leitungen: Orange, Rot, Braun) an die erweiterungs Platine zu hängen und anzusteuern.
Folgendes habe ich soweit gemacht:
An die Ausgänge:
VDD :: Braun
GND :: Rot
ADC3 :: Orange
Habe das mit einer Steckverbindung gelöst (siehe Bild)
Jetzt stellt sich mir nur noch die Frage:
Wie steuere ich den Servo jetzt genau an?
Kann mir da bitte wer weiterhelfen? - Danke
roboterx
08.05.2011, 16:38
EDIT:
Hab da natürlich noch Infos vergessen ;)
Hab versucht aus den Beispiels-Scripten die RP6CONTROL_09_MOVE.hex auf den RP6 zu spielen.
Klappt auch soweit, aber wenn ich dann "Upload + Start!" im Loader sage, biepst der RP6 kurz auf und im RP6 Loader - Terminal bekomme ich:
RP6 CONTROL M32 I2C Master Example Program!
Moving...
I2C ERROR - TWI STATE: 0x20
I2C ERROR - TWI STATE: 0x20
I2C ERROR - TWI STATE: 0x20
und dann passiert leider nichts mehr :/
Kann mir wer weiterhelfen?
@roboterx:
Servos an der RP6 Control M32 Platine kannst du z.B. mit dieser Lib ansteuern:
https://www.roboternetz.de/community/showthread.php?40090-RP6Control-M32-Library-für-8-Servos
Das RP6Control_09_Move.c Programm gehört in die Control M32 Platine.
Auf der RP6Base must du dann RP6Base_I2CSlave.c laden.
Dann müßte es klappen.
Das hat aber nichts mit der Servo-Ansteuerung zu tun.
roboterx
08.05.2011, 16:51
@roboterx:
Servos an der RP6 Control M32 Platine kannst du z.B. mit dieser Lib ansteuern:
https://www.roboternetz.de/community/showthread.php?40090-RP6Control-M32-Library-für-8-Servos
Das RP6Control_09_Move.c Programm gehört in die Control M32 Platine.
Auf der RP6Base must du dann RP6Base_I2CSlave.c laden.
Dann müßte es klappen.
Das hat aber nichts mit der Servo-Ansteuerung zu tun.
Danke für die ganzen Infos :)
Werd mir jetzt mal deine Library anschauen und hoffen dass es klappt ;)
lg
Habe noch übersehen, dass VDD eher an Rot vom Servo gehört und GND an Braun!
Hallo,
Versuche einen Servo (Leitungen: Orange, Rot, Braun) an die erweiterungs Platine zu hängen und anzusteuern.
Folgendes habe ich soweit gemacht:
An die Ausgänge:
VDD :: Braun
GND :: Rot
ADC3 :: Orange
Habe das mit einer Steckverbindung gelöst (siehe Bild)
Jetzt stellt sich mir nur noch die Frage:
Wie steuere ich den Servo jetzt genau an?
Kann mir da bitte wer weiterhelfen? - Danke
Du solltest besser die Farbbelegung noch einmal genau überprüfen! In der Regel wird Rot als +, braun als gnd
verwendet. Das (kann) bei Deinem Servo natürlich auch anders sein.....
Gruß Richard
roboterx
08.05.2011, 17:47
Habe noch übersehen, dass VDD eher an Rot vom Servo gehört und GND an Braun!
Hallo,
War mein Fehler. Hab den Servo schon umgepolt...
(sieht man auf dem Bild) da wo ich zur Not die Drähte umgepolt habe und mit Klebband isoliert. (temporär)
Aber danke für die Hilfen, habs jetzt selber überlesen ;)
roboterx
08.05.2011, 18:43
So, hab jetzt mal alles so gemacht, wies hoffentlich gehört:
#include "../m32servolib/RP6ControlServoLib.h"
uint16_t pos = 0;
int main(void)
{
initRP6Control();
initLCD();
showScreenLCD("################", "################");
mSleep(1500);
showScreenLCD("<<RP6 Control>>", "<<LC2 - DISPLAY>>");
mSleep(2500);
showScreenLCD(" Servo - Test 1 ", " Version 1.00 ");
mSleep(2500);
clearLCD();
setLEDs(0b111111);
mSleep(500);
setLEDs(0b000000);
initSERVO(SERVO3 | SERVO4);
startStopwatch2();
while(true)
{
if (getStopwatch2() > 48) {
servo1_position = pos;
servo2_position = pos;
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(pos, DEC);
writeStringLCD_P(" ");
pos++;
if (pos > RIGHT_TOUCH) {pos = 0;}
setStopwatch2(0);
}
task_SERVO();
mSleep(3);
}
return 0;
}
Kompiliert einwandfrei durch. Nur wenn ich das hex File auf den RP6 spiele, passiert mit dem Servo nichts...
Beim LCD Display läuft alles durch: "Servopos: 1,2,3,4... usw". Doch der Servo bewegt sich keinen Millimeter.
Wie vorher erwähnt, hängt er auf ADC3, rot auf + und braun auf ground.
Was übersehe ich?
Danke für die Hilfen!
Nur wenn ich das hex File auf den RP6 spiele, passiert mit dem Servo nichts...
Die Lib kann 8 Servos an PC2 bis PC7 und PD5, PD6 ansteuern. ADC3 ist nicht vorgesehen.
Wenn du doch ADC3 für SERVO1 nehmen willst:
1. Änderungen in der RP6ControlServoLib.h:
a) Im Abschnitt // Servo ports:
Die 2 Zeilen:
#define SERVO1_PULSE_ON (PORTC |= IO_PC2) // PC2
#define SERVO1_PULSE_OFF (PORTC &= ~IO_PC2)
... auskommentieren oder löschen.
b) Dafür einfügen:
#define SERVO1_PULSE_ON (PORTA |= ADC3) // PA3
#define SERVO1_PULSE_OFF (PORTA &= ~ADC3)
2. Änderungen in der RP6ControlServoLib.c:
a) In der Funktion initSERVO() die Zeile:
if (servos & SERVO1) {DDRC |= IO_PC2; PORTC &= ~IO_PC2;}
... auskommentieren oder löschen.
b) Stattdessen einfügen:
if (servos & SERVO1) {DDRA |= ADC3; PORTA &= ~ADC3;}
Du kannst dann dein Servo als SERVO1 ansteuern, also die Initialisierung sieht so aus:
initSERVO(SERVO1);
... und die Positionsänderungen erfolgen mit der Variable: servo1_position (in deiner Demo ist das schon so!)
roboterx
08.05.2011, 21:51
Soweit ich weiß sind die PD5 und PD6 Pins auf den IO/Ports.
Das heißt ich schließe das orange Kabel (Datenkabel) des Servos an PD5 oder PD6 an.
Rot verbinde ich mit +
und braun mit GRND
Wenn ich das Script dann ausführe, bewegt sich der Servo, weil PD5 bzw. PD6 angeschlossen ist.
Stimmt das so?
Danke..
Das heißt ich schließe das orange Kabel (Datenkabel) des Servos an PD5 oder PD6 an. Rot verbinde ich mit + und braun mit GRND
Ja, genau.
Wenn ich das Script dann ausführe, bewegt sich der Servo, weil PD5 bzw. PD6 angeschlossen ist. Stimmt das so?
Ja, stimmt so. In der Lib wären das die Servos SERVO7 bzw. SERVO8.
In der Demo müßtest du dann das Servo initialisieren mit:
initSERVO(SERVO7); // PD5
... oder ...
initSERVO(SERVO8 ); // PD6
In der Demo must du anstelle von servo1_position und/oder servo2_position einsetzen:
servo7_position und/oder servo8_position (je nachdem, ob dein Servo an PD5 oder PD6 hängt).
roboterx
09.05.2011, 09:01
Perfekt, Jetzt noch ne doof Frage (bin grad nicht vor meinem Roboter).
Schließ ich +/grnd am Besten direkt auf der M32 Platine an, oder sollte ich sowas lieber auf der Basis machen?
Was macht das für einen Unterschied?
Danke :)
Es macht kaum Unterschied da auf beiden Boards die 5v duch den Base Regler produziert werden. Man kann einen geringfügigen Nachteil anführen wenn du die Versorgung an der M32 abzwackst, da ein höherer Strom duch die M32 und die Kabelbrücke muss - tatsächlich ist der Einfluß jedoch vernachlässigbar und macht sich erst bei mehreren Ampere bemerkbar.
Servos haben aber eine Sollspannung bis 6V, da lohnt sich ggf. ein eigener 6V LDO-Spannungregler an UBat. Das sorgt nicht nur für höhere Stellgeschwindigkeit, sondern entlastet auch den Boardregler. Vor allem bei mehr als einem Servo lohnt sich das dann schon.
Wenn man ein wenig risiofreudig ist, kann man sogar die Servos sogar direkt an Ubat betreiben - allerdings betreibt man sie dann ausserhalb der Vorgaben aber es soll Servos geben die bis 12V Spannungsfest sind. Ich will das nicht empfehlen, halte es aber für möglich und würde es evtl. ausprobieren. Zur Not kann man sich mit ein oder zwei Dioden aus einem alten Netzteil die Ubat etwas runter setzen (pro Diode 0,7V) da Ubat im voll geladenen Zustand schon mal über der nominalen 1,2V*6Zellen = 7,2V liegen kann. (ich hab bei mir auch schon 8,3V mit MH-Zellen gehabt)
LG Rolf
roboterx
09.05.2011, 14:54
danke für die Infos!
der letzte Teil interessiert mich sehr.
Ich nehme an Ubat ist jetzt der direkte "Lötpunkt" von der Batterie auf die Base? (dort liegt also die direkte Batterie/Akku Spannung an)
LDO-Spannungsregler... sagt mir jetzt leider nicht viel... haben wir da im RN Wissen oder so was drüber stehen?
Danke!
roboterx
09.05.2011, 14:57
EDIT:
Hab mal bei Conrad geschaut...
ist das sowas in der Art?
http://www.conrad.at/ce/de/product/156939/SPANNUNGSREGLER-KIA78L06F-KEC-SOT-89/SHOP_AREA_17336&promotionareaSearchDetail=005
LDO = Low Drop Out = Eingangsspannung muss nur geringfügig größer sein als Ausgangsspannung
"normale" Regler kommen mit den 7,2 V nicht klar... da sie bis zu 3 V mehr am Eingang brauchen.
Aber was willst du mit einem 100mA SMD Regler? nein... eher sowas...
http://www.conrad.at/ce/de/product/156049/SPANNUNGSREGLER-L7806CV-STM/SHOP_AREA_17336&promotionareaSearchDetail=005
Ich glaube das ist ein LDO Typ.. sonst Datenblatt suchen...
Zu Ubat ... richtig, siehe Schaltplan Base, es müsste die Akku Spannung hinter dem Schalter sein.
Noch ein Hinweis.... man kann bei "alten" Spannungsreglern einen 1k Ohm Widerstand zwischen den GND Pin und GND klemmen und somit den Ausgang pro KOhm um 1 V anheben... dies beeinflußt den internen Spannungsteiler. Ich vermute, das geht mit LDO Reglern auch, weiß es aber nicht 100%ig. Auf die Art kann man also ein 6V Regler oder Zwischenwerte aus einem 5V Typ frickeln.
radbruch
09.05.2011, 19:16
Hallo
Bei der Wahl für die Servoversorgung würde ich die Base vorziehen. Immer wieder habe ich in letzer Zeit Berichte über nicht funktionierende Servoansteuerungen am m32 gelesen. Meist wurden die Probleme dann mit einem zusätzlichen Akkupack für die Servos beseitigt.
Über die Base versorgt laufen locker 3 bis 4 Servos wie bei meinem Delta:
http://www.youtube.com/watch?v=QeY_KkZRlDc
Fünf Servos am Base mit 4xAAs als Servoversorgung beim Tapeloader:
http://www.youtube.com/watch?v=s1bOm9C7GAk
Sechs Servos an 4XBaby als Versorgung für Servos und RP6:
http://www.youtube.com/watch?v=U8cpVntdCGs
Das sind alles 5€-Servos ohne große Belastung. Für mehr Power braucht man zwingend eine zusätzliche Servoversorgung. Egal ob an der Base oder am m32.
Gruß
mic
roboterx
09.05.2011, 21:33
also beim servo passiert leider überhaupt nichts....
habe den code auf servo7 geändert - also pd5.
servo ist + & - an der basis angeschlossen. bevor ich das programm starte liegen 5,05V an. wenn das programm läuft bekomme ich Werte zwischen 1,5V und 0,7V.
Der Servo bewegt sich leider überhaupt nicht... auf dem LCD flackert Servopos: 1,2,3,4,5..... usw.
Kann mir wer weiterhelfen?
@roboterx:
Was ich nacheinander checken würde:
1. Dein Demo-Programm! (Evtl. hier nochmal die aktuelle Version posten!)
2. Servo-Steuerleitung sitzt an PD5 (I/O-Port-Stecker, Pin 9)?
3. Servo noch heile (nach der Verpolung)?
roboterx
09.05.2011, 21:48
Zu Punkt 1:
#include "../m32servolib/RP6ControlServoLib.h"
uint16_t pos = 0;
int main(void)
{
initRP6Control();
initLCD();
showScreenLCD("################", "################");
mSleep(1500);
showScreenLCD("<<RP6 Control>>", "<<LC2 - DISPLAY>>");
mSleep(2500);
showScreenLCD(" Servo - Test xD ", " Version 1.00 ");
mSleep(2500);
clearLCD();
setLEDs(0b111111);
mSleep(500);
setLEDs(0b000000);
initSERVO(SERVO7);
startStopwatch2();
while(true)
{
if (getStopwatch2() > 48) {
servo7_position = pos;
//servo2_position = pos;
setCursorPosLCD(0, 0);
writeStringLCD_P("Servopos.: ");
writeIntegerLCD(pos, DEC);
writeStringLCD_P(" ");
pos++;
if (pos > RIGHT_TOUCH) {pos = 0;}
setStopwatch2(0);
}
task_SERVO();
mSleep(3);
}
return 0;
}
Zu Punkt 2:
Laut Beschreibung ist PD5 der 9te Pin des IO/Steckers. Also dort wo die Einkerbung ist links.
Zu Punkt 3:
Hab jetzt den 3ten Servo versucht (ohne Erfolg)
Einen hab ich auch schon mit einer 9V Blockbatterie probiert, auch ohne Erfolg...
Zu 1: Die Demo ist ok. Sollte so funktionieren, wenn die Lib unverändert geblieben ist. Evtl. noch einmal kompilieren, vorher alle überflüssigen Compiler-Dateien (.o und .lst im Verzeichnis der Lib und .elf, .hex, .lss, .lst, .map, .o, .sym im Demo-Verzeichnis) löschen, damit alles (auch die Lib) neu kompiliert wird!
Zu 2: Ja, auf der eingekerbten Seite links (zum LCD-Stecker hin).
Zu 3: Ok ...
roboterx
09.05.2011, 22:18
zu 1:
hab ich schon gemacht. (make clean auch)
library ist unverändert
zu 2:
genau... so hab ichs angeschlossen mit nem flachstecker. sollte passen. stecker sitzt, kontakt müsste da sein.
zu 3:
wie gesagt... tut sich leidernichts...
weiß noch wer was?
roboterx
10.05.2011, 16:58
so und hier noch das bild bezüglich dem anschluss...
roboterx
10.05.2011, 19:41
Neue Erkenntnisse...
Ich glaub es liegt an den Servos...
Hab mal einen Servo im laufenden Betrieb aufgemacht um mit nem Multi die Spannung zu messen. bin also auf die zwei Lötpunkte die direkt von den Drähten braun und rot kommen...
da lagen 5V an... soweit scheint alles okay zu sein.
Muss dann mit einer Messgabel vom Multi verutscht sein, denn auf einmal stieg Rauch aus dem Servo auf. (Habe wahrscheinlich nen Kurzschluss erreicht) - das "tolle" dran, war dass sich der Servo dabei zu drehen anfing!
Bedeutet das jetzt, dass der Servo einfach mehr Spannung als die 5V benötigt um zu funktionieren?
Also das bedeutet zunächst mal das der Servo im Eimer sein dürfte.... und zwar auf eine unschöne Art...wenn ich das mal so sagen darf...
Im Servo ist ein kleiner Poti, der als ist-Geber des Drehwinkels benutzt wird.. dessen Stellung wird mit dem Sollwert (pwm-Signal) verglichen und danach stellt sich der Servo. Vermutlich hast du den Poti verschmort was für den Servo natürlich Änderungen am Drehwinkel bedeutet - weswegen er ggf. ruckelt. Da nun eine Lagekontrolle kaum noch möglich ist, kannste den gleich in die Tonne werfen - nachdem du dir die Innereien noch mal genauer angesehen hast.
Ich denke nicht, das dies mit höheren Spannungen zu tun hat.... sondern mit fehlendem PWM Signal... wenn sich der Servo nicht rührt.
Das lässt sich aber prüfen indem man mit dem Messgerät AC Spannung am CPU-Port misst ... OHNE ... abzurutschen! Wenn da reine Gleichspannung am Port liegt, zeigt die AC-Spannung 0 V an... vielleicht ein paar Millivolt... Kommen da aber Pulse, sollte die AC Spannung so 2-5 V haben schätz ich mal.. je nach PWM.
Wenn das sicher gestellt ist, bleibt zu prüfen ob die Pulse beim Servo ankommen. Ohne passendes PWM Signal geht der Servo in eine Endstellung und bleibt da... bis ein PWM Signal kommt was ihm anderes befiehlt oder du den Poti himmelst... Ich hoffe das war jetzt deutlich.
Ich kann dir nur dringend empfehlen, sorgfältiger zu arbeiten und dich mit der Materie zu befassen. Und zwar bevor Du die Brechstange ansetzt... nicht mit ihr in der Hand...
roboterx
11.05.2011, 08:29
Also das bedeutet zunächst mal das der Servo im Eimer sein dürfte.... und zwar auf eine unschöne Art...wenn ich das mal so sagen darf...
Klaro, kein Ding.
Ist jetzt nicht wirklich problematisch weil ich ca 12 von den Servos von nem Kollegen geschenkt bekommen habe.
Im Servo ist ein kleiner Poti, der als ist-Geber des Drehwinkels benutzt wird.. dessen Stellung wird mit dem Sollwert (pwm-Signal) verglichen und danach stellt sich der Servo.
aaaah...
also im prinzip zeigt dieser poti die "neutralposition" des servos an und über das signal kommt dann halt ein winkel rein. der wird mit der neutralposition verglichen und wenn der abweichend ist, wird der servo soweit bewegt bis der winkel okay ist. seh ich das so ungefähr richtig?
Vermutlich hast du den Poti verschmort was für den Servo natürlich Änderungen am Drehwinkel bedeutet - weswegen er ggf. ruckelt.
Okay, könnte auch sein.
Ahm er hat sich aber wirklich bewegt nicht geruckelt... hat ca ne viertel Umdrehung gemacht...
Da nun eine Lagekontrolle kaum noch möglich ist, kannste den gleich in die Tonne werfen - nachdem du dir die Innereien noch mal genauer angesehen hast.
okay danke für die info.
Ich denke nicht, das dies mit höheren Spannungen zu tun hat.... sondern mit fehlendem PWM Signal... wenn sich der Servo nicht rührt.
alles klar.
Das lässt sich aber prüfen indem man mit dem Messgerät AC Spannung am CPU-Port misst ... OHNE ... abzurutschen! Wenn da reine Gleichspannung am Port liegt, zeigt die AC-Spannung 0 V an... vielleicht ein paar Millivolt... Kommen da aber Pulse, sollte die AC Spannung so 2-5 V haben schätz ich mal.. je nach PWM.
Welcher CPU Port jetzt?
Wie auf dem Bild zu sehen, hängt er ja auf PD5 (von der IO Steckleiste)...
Muss ich also PD5 ausmessen?
Wenn das sicher gestellt ist, bleibt zu prüfen ob die Pulse beim Servo ankommen. Ohne passendes PWM Signal geht der Servo in eine Endstellung und bleibt da... bis ein PWM Signal kommt was ihm anderes befiehlt oder du den Poti himmelst... Ich hoffe das war jetzt deutlich.
So ungefähr - danke!
Ich kann dir nur dringend empfehlen, sorgfältiger zu arbeiten und dich mit der Materie zu befassen. Und zwar bevor Du die Brechstange ansetzt... nicht mit ihr in der Hand...
Alles klar, danke für den Tip!
EDIT:
Hab die selben Servos wie RoboNull hier. (Hab ich über die SuFu gefunden)
https://www.roboternetz.de/community/showthread.php?48067-Modellauto-Servo
aaaah...
also im prinzip zeigt dieser poti die "neutralposition" des servos an und über das signal kommt dann halt ein winkel rein. der wird mit der neutralposition verglichen und wenn der abweichend ist, wird der servo soweit bewegt bis der winkel okay ist. seh ich das so ungefähr richtig?
Ja richtig. Das gepulste Signal hat eine Flankenlänge die dem Sollstellwinkel entspricht. Dieser wird mit dem Iststellwinkel des Potis verglichen und entsprechend der Motor verfahren. Es gibt aber auch den Weg, das eine Kraft auf den Servo-Arm wirkt was sich natürlich am Stellpoti zeigt.. weshalb der Motor dann auch gegen steuert. Radbruch hat sowas mal hier vorgestellt. Dies äussert sich dann in einem hohen Motorstrom. Ein Servo ist eben ein Regelsystem.
Zum PD5... ich hab mir die Vorgeschichte und die Programme dazu nicht angesehen.
Du sagst mir aber, das deine Software am Port PD5 einen Puls ausgeben soll. Also muss der messbar sein.
Du kannst einen Pietzosiganlgeber an den Port klemmen und so das Signal hören oder eben wie beschrieben das Signal im AC-Modus deines Multimeters messen. Ohne das Signal wird der Servo sich nicht einstellen also musst du zunächst sicher stellen, das dieses Signal da ist.
Das hat gundsätzlich was damit zu tun wie man Probleme löst. Stell dir einen Strang vor... auf dem verschiedene Stationen sind die dein Problem beschreiben.
Idee-Software-Hardware-Signalübertragung-Servo-Bewegung
Wenn Du jetzt mit einem Multimeter am Servo rumstocherst, porkelst du an der Peripherie deines Problems.... und zerstörst Servos...
Lösen kannst du das Problem in dem du an wichtigen Stellen Prüfungen einbaust um es eingrenzen zu können. Also messen wir ob ein Signal anliegt wo du es vermutest. Ist es da.. ok .. dann rechts suchen.. ist es nicht da.. dann links suchen...
Idee-Software-Hardware-(Signal prüfen)-Signalübertragung-Servo-Bewegung
Und schon lässt sich damit klar sagen, auf welcher Seite du weiter suchen kannst.
Ich halte so ein Vorgehen für selbstverständlich aber scheinbar ist es das nicht - wie ich immer wieder in Beiträgen hier lese... also nicht nur bei Dir.. Daher führe ich das hier noch mal so auf. Vielleicht hilfts ja doch ein wenig.
roboterx
11.05.2011, 19:17
Die Lib kann 8 Servos an PC2 bis PC7 und PD5, PD6 ansteuern. ADC3 ist nicht vorgesehen.
Wenn du doch ADC3 für SERVO1 nehmen willst:
1. Änderungen in der RP6ControlServoLib.h:
a) Im Abschnitt // Servo ports:
Die 2 Zeilen:
#define SERVO1_PULSE_ON (PORTC |= IO_PC2) // PC2
#define SERVO1_PULSE_OFF (PORTC &= ~IO_PC2)
... auskommentieren oder löschen.
b) Dafür einfügen:
#define SERVO1_PULSE_ON (PORTA |= ADC3) // PA3
#define SERVO1_PULSE_OFF (PORTA &= ~ADC3)
2. Änderungen in der RP6ControlServoLib.c:
a) In der Funktion initSERVO() die Zeile:
if (servos & SERVO1) {DDRC |= IO_PC2; PORTC &= ~IO_PC2;}
... auskommentieren oder löschen.
b) Stattdessen einfügen:
if (servos & SERVO1) {DDRA |= ADC3; PORTA &= ~ADC3;}
Du kannst dann dein Servo als SERVO1 ansteuern, also die Initialisierung sieht so aus:
initSERVO(SERVO1);
... und die Positionsänderungen erfolgen mit der Variable: servo1_position (in deiner Demo ist das schon so!)
So habs jetzt mal mit dieser Änderung am ADC3 probiert - jedoch wieder ohne Erfolg :(
Der Servo bewegt sich 0!
Wenn das Script sonst ja bei allen funktioniert, muss es wohl an den Servos liegen...?
roboterx
11.05.2011, 19:21
Ich halte so ein Vorgehen für selbstverständlich aber scheinbar ist es das nicht - wie ich immer wieder in Beiträgen hier lese... also nicht nur bei Dir.. Daher führe ich das hier noch mal so auf. Vielleicht hilfts ja doch ein wenig.
sry hab den Beitrag erst jetzt gelesen - hab den vorherigen post schon so verfasst....
also sry aber ich habe eben keine fundierten elektrokenntnisse.... wenns bei nem pc n problem gibt oder nem programm dann ist mir das schon klar. ein echo da zum testen ob der programmfluss soweit kommt? try catch um die race conditions rauszubekommen etc... das ist wieder für mich selbstverständlich und für andre wohl nicht.
liegt glaube ich auch dabei wie man n zugang zu dem zeugs hat... ich tu mir eben mit dem elektronischen ein wenig schwerer :(
sry dass ich euch mühe mache...
Wenn das Script sonst ja bei allen funktioniert, muss es wohl an den Servos liegen...?
Nein muss es nicht.. vielleicht ist z.B. der Port PD5 kaputt? Aber das ist Rätselraten so lange du nicht das Vorgehen beherzigst wie beschrieben...
Edit: ...gelesen...
Mag ja sein das Dir das nicht so zugänglich ist mit der Elektronik aber dazu sind wir ja da zu helfen. Aber dazu gehört eben auch Geduld und Ruhe beim arbeiten. Also mess erst mal dein PD5 .. ohne abrutschen bitte...
roboterx
11.05.2011, 19:25
Nein muss es nicht.. vielleicht ist z.B. der Port PD5 kaputt? Aber das ist Rätselraten so lange du nicht das Vorgehen beherzigst wie beschrieben...
Hallo, da sind wohl die Posts dazwischen gekommen - ich glaube auch wir haben nen ähnlichen Ansatz!
Habe jetzt das Script so umgeschrieben - wie mir vorher erklärt wurde und den Servo nun an ADC3 gehängt - auch dort funktioniert er nicht. Also können wir mit hoher Wahrscheinlichkeit ausschließen dass PD5 defekt ist, denn dann müsste ja ADC3 auch defekt sein? Wäre ja unwahrscheinlich oder?
Bezüglich dem Messen.
Mir ist alles klar bis auf was ich genau messen muss. Ich hab mein Multi auf AC gestellt. Einen Pol des Multis lege ich auf PD5 (bzw. auf ADC3 - je nachdem was ich messen will) aber was mach ich mit dem anderen Pol des Multis? Wo leg ich den rauf - das ist mir noch nicht ganz klar...
Danke!
roboterx
11.05.2011, 19:29
Das ist jetzt nur ein Push, weil ich glaube, dass du eventuell meinen neuen Beitrag nicht gesehen hast - gleicher Postzeitpunkt wie dein Edit im vorherigen Beitrag ;)
Mess gegen Masse ODER gegen + .. mach beides... die Aussage ist:
Wenn eine Gleichspannung am Messpunkt (PD5/AC3) anliegt zeigt das Multimeter im AC Modus 0V, liegt jedoch eine Wechselspannung/Puls an, müsste es im AC Mode etwa 2-5V anzeigen, jeweils gegen Masse wie auch gegen +
Der Trick ist, du kannst im AC Mode mit dem Multimeter keine Gleichspannung messen, ist aber eine Spanjnung da, muss es ein Puls sein womit nachgewiesen wäre das der Ausgang PD5/AC3 Pulse erzeugt. Der Rückschluß lautet dann... kein Signal, kein Puls, keine Spannung... also stimmt was links von der Problemwaage nicht... kommt doch ein Puls.. dann liegt rechts das Problem.
roboterx
11.05.2011, 19:39
Jetzt check ich das... Wechselspannung schickt im Prinzip ein Pulssignal durch (= das Pulssignal zum den Servo ansteuern) => Wenn ich im AC Modus messe und ich bekomme nen Wert, dann wird ein Pulssignal durchgesendet, wenn ich kein Wert bekomme, kommt auch kein Pulssignal durch.
So gemossen habe ich folgendes:
AC3 gegen Masse: 0.01V nach längerem warten dann 0.00V
AC3 gegen + : das Selbe
PD5 gegen Masse (nach Scriptumschreiben): das Selbe
PD5 gegen +: das Selbe
Also schaut's so aus, also ob über die Anschlüsse kein Signal kommt oder?
Richtig... ich würde nun vermuten, das mit der Software was nicht stimmt. Man kann das aber noch weiter eingrenzen.. mit dem piezopieper.. die PWM an den Motorausgängen für den Antrieb messen usw... vielleicht erzähl ich ja auch Mist.
So hab aber heute keine Zeit mehr... wir lesen uns morgen.
roboterx
11.05.2011, 19:57
alles klar - danke schonmals
@roboterx:
Einzelne Ports kannst du ja mit einem Programm testen, indem man z.B. eine LED blinken läßt.
DDRA |= ADC3; // PA3 als Ausgang definieren
DDRD |= IO_PD5; // PD5 als Ausgang definieren
while (true)
{
PORTA |= ADC3; // PA3 high
mSleep(1000);
PORTA &= ~ADC3; // PA3 low
PORTD |= IO_PD5; // PD5 high
mSleep(1000);
PORTD &= ~IO_PD5; // PD5 low
}
Damit kann man an ADC3 (PA3) und PD5 eine LED blinken sehen, wenn die Hardware ok ist.
roboterx
11.05.2011, 21:58
hallo,
also ne led die 2volt braucht schnappen und die anode an adc3 und die katode auf masse legen?
danke
Eine gute Anleitung hast du schon hier:
https://www.roboternetz.de/community/showthread.php?53161-LED-ansteuern
... bekommen.
Nimm einfach irgend ne kleine LED aus nem alten Gerät, such dir nen 470 Ohm Widerstand und teste mit Dirks Progrämmchen wie beschrieben... damit bist du auf der sicheren Seite. Wenn du Dirks Progrämmchen zum testen mit dem AC-Multimeter oder Piezopieper nutzen willst, setz die sleeps von 1000 auf 10 oder besser auf 1 runter... damit du auch tatsächlich eine Frequenz am Port hast... und nicht nur Ein/Ausschaltspitzen. Für die optische Fehlersuche mittels LED sind die 1000ms aber gut.
roboterx
12.05.2011, 07:57
ne ist mir schon klar, aber in dem fall hatte ich nen denkfehler drin oder?
ich hab schon ne led wo 8v aushält... also kann ich die auch direkt anschließen (Sie wird dann halt nicht so hell leuchten, da nur 6v kommen...)
aber das prinzip ist dann aber folgendes oder?
led mit der anode an VDD vom Roboter anschließen (je nach led vorwiderstand dazu nehmen) und die Katode an den ADC2 (zu testenden Port) hängen. Dann das Programm raufspielen udn schauen was sich tut.
ist das so korrekt?
danke :)
Du kannst Kathode gegen GND legen und Anode auf den Port... wie im Schaltplan vom RP6 Seite 2 zu sehen, oder Kathode auf Port und Andode auf +5v. Es geht beides. Siehe https://www.roboternetz.de/community/showthread.php?43966-LED-an-AVR-Polung Bei letzterem arbeitet die LED dann invers.
Zur Erklärung, bei einer 1 auf dem Port wird Strom auf den Port gelegt, bei einer 0 wird Strom vom Port nach GND abgeführt. Bei richtiger Polung der LED fliest also sozusagen entweder Strom aus dem Port rein (0) oder raus (1). Dies ist eine schematische Darstellung, elektrisch funktioniert das noch etwas anders. Ich empfehle dir aber den Anschluß wie im Schaltplan vom RP6 vorzunehmen da du so bei den entsprechenden Funktionen der RP6Lib nachgucken kannst wie das programmiert wird.
...Never change a running System...
roboterx
12.05.2011, 12:54
Alles klar!
Danke.
Werds heute Abend testen und die Resultate mit euch teilen!
roboterx
12.05.2011, 19:15
Danke für die ganzen Hilfen - sorry bin erst jetzt dazu gekommen, hatte noch nen Arzttermin.
Also folgendes:
Habe alles so angeschlossen wie erklärt + Programm raufgespielt.
Als Test-Port habe ich ADC3 verwendet.
Die LED blinkt!
Also leuchtet - geht aus - leuchtet - geht aus... ;)
also müsste der Port passen oder?
liegt's jetzt an den Servos oder am Motor-Programm?
Ok, dann ist ja PA3 in Ordnung.
Hier mal die Demo kompiliert als HEX für 2 Servos an PD5 und/oder PD6.
Läuft bei mir problemlos.
Probier mal, ob es mit der HEX klappt.
roboterx
12.05.2011, 20:51
Hallo,
Danke.
Ist das Script für den ADC3 Port?
Da passiert dann nämlich nichts...
Servo ist angeschlossen. LCD läuft durch: Servopos...
Aber der Servo bewegt sich nicht...
radbruch
12.05.2011, 20:55
Hier mal die Demo kompiliert als HEX für 2 Servos an PD5 und/oder PD6.
Ist das Script für den ADC3 Port?
Wirklich sehr spannend, bin neugierig wie sich das weiterentwickelt ;)
roboterx
12.05.2011, 21:04
Wirklich sehr spannend, bin neugierig wie sich das weiterentwickelt ;)
ach verdammt... die medis sind wohl stärker als gedacht *Grins*
also habs jetzt auch auf pd5 und pd6 getestet - servo bewegt sich nicht.... :(
roboterx
13.05.2011, 09:01
Hallo,
Liegt jetzt wohl an meinen Servos oder?
@dirk
welche servos verwendest du?
Hallo,
Liegt jetzt wohl an meinen Servos oder?
@dirk
welche servos verwendest du?
Wenn ich daran denke wie die Servos behandelt wurden, ist das auch kein Wunder. In der Elektronik kann man nicht einfach irgendetwas ausprobieren. Einmal falsch angeschlossen oder an zu hohe Spannung angeschlossen und die Teile gehören auf den Müll. Hier gilt GANZ besonders erst schlau lesen, dann schrauben. :-(Oder erst Hirn einschalten danach die Spannung. :-)
Gruß Richard
roboterx
13.05.2011, 12:18
Wenn ich daran denke wie die Servos behandelt wurden, ist das auch kein Wunder. In der Elektronik kann man nicht einfach irgendetwas ausprobieren. Einmal falsch angeschlossen oder an zu hohe Spannung angeschlossen und die Teile gehören auf den Müll. Hier gilt GANZ besonders erst schlau lesen, dann schrauben. :-(Oder erst Hirn einschalten danach die Spannung. :-)
Gruß Richard
Also jetzt mal langsam ;)
Also wie schon vorher geschrieben sind das MC-1000MGBB Servos.
Davon habe ich 11 Stk. geschenkt bekommen. Einer ist abgebrannt und einen davon habe ich wohl mit zu viel Spannung versehen - das ist richtig. Diese zwei sind aber schon lange auf dem Müll. Getestet habe ich einen servo der noch nie benutzt wurde... sowie noch nen anderen und die Beiden bewegen sich leider NICHT...
roboterx
13.05.2011, 12:27
so und jetzt habe ich die LED mal an PD5 gehängt + das andere Programm gestartet und die "blinkt" einwandfrei....
Habe auch ein Bild angehängt...
Also jetzt mal langsam ;)
Wie Dein Vorgänger damit umgegangen ist kannst Du aber leider auch nicht wissen. :-) Ärgern wollte ich Dich keinesfalls!
Aber mein einziges und erstes Servo lief auf Anhieb ohne Probleme, llerdings mit ein Bascom Demo bei C liegt mir die Syntax nicht. :-( Wenn Du für das Servo einen extra Accu Pack benutzt müssen µC Masse und Servo Masse verbunden sein,aber das kennst Du sicherlich. :-)
Gruß Richard
roboterx
13.05.2011, 13:05
War auch nicht so gemeint - sry.
also ja meine servos hängen zum testen eh am akku vom rp6...
von dem her sollte das schon apssen.
welche servos hast du?
Also langsam... Step by Step
Dein PD5 blinkt...das ist schon mal viel wert...damit ist zumindest sicher das der Port _vermutlich_ ok ist und die Software bis da hin läuft.. um ganz sicher zu sein sollte man aber tatsächlich beide LED-Anschlußweisen testen da es tatsächlich 2 Strompfade im Prozessor gibt und du hast bisher nur einen getestet. Siehe oben, Post zur polung der LED. Prüf das also bitte mit dem LED Blink Programm noch. Wir wollen ja systematisch vorgehen und nicht zufällig. Klappt das, gehts weiter...
So... jetzt kannst du noch deine Servo-Software mal überprüfen und testen...um sicher zu gehen, vermutlich ist aber tatsächlich der bisher getestete Servo im Eimer.
Dein Servoprogramm muss ja wie schon gesagt Pulse produzieren die mit dem AC-Messbereich am Multimeter oder einem Pietzopieper duch ein lautes brummen /pfeifen hörbar nachzuweisen wären. Die Messweise hab ich oben schon beschrieben, du sagtest ja 0v .. das kann aber eigentlich nicht sein. Da ich das jedoch selbst hier grade nicht verifizieren kann (ich benutze sonst Hitec, Graupner), schlage ich dir eine andere testweise vor. Baue in das Servoprogramm vor und nach jedem Portausgabebefehl ein Sleepbefehl von ca. 100 bis 500 ms ein, und teste mit der LED weiter. Das ist ja jetzt ein erprobtes Verfahren. Die Portbefehle kommen dann ja in "Zeitlupe" was mit der LED verfolgbar ist. Das Servoprogramm sollte natürlich die gleichen Ports ansprechen wie das Blink Programm usw...
Wenn das auch wie erwartet klappt, hast du schon mal 2 wichtige Fehlerquellen erschlagen und weiter gehts....
Dann.. Anschluß vom Servo ist?
VDD :: Rot
GND :: Braun
PD5 :: Orange
Also GND am RP6-Accupac, VDD an 5V+ oder am RP6-Accupac?
Den externen Accu nutzt du aber z.Z nicht? gut so .. eine Fehlerquelle weniger zum testen.
Du hast dir aber das hier mal angesehen?
http://www.rn-wissen.de/index.php/Servos
Da werden auch die Impulse beschrieben.
Man könnte die Servos nun noch an einem RC-Empfänger testen... da scheinst Du aber keine Möglichkeiten zu haben. Nun gut...
Nachdem das alles abgearbeitet ist und Ergebnisse bringt wie erwartet...
nimmst du die von dir eingesetzten sleeps aus dem Servoprogramm wieder raus und testest die Servos "heiß".
Das Programm sollte dann wieder mit richtigen Servo-timings arbeiten.
Will sagen, du klemmst nach und nach alle Servos an und guckst ob wenigstens einer dabei ist der sich bewegt wie er soll.
Es kann ja immer noch sein das die Servos alle im Eimer sind... dazu müsste man mal den ursprünglichen Inhaber befragen.
Besorg dir vielleicht mal ein Servo aus einer anderen Quelle und teste den auch mal. Dann kommst du auch nicht mehr drum rum, die Servos an einer anderen Anlage wie einem RC-Empfänger zu testen.
So.. du hast genug zu tun... leg los... und arbeite sorgfältig. :)
roboterx
13.05.2011, 21:21
Hallo,
Wow - das ist mal Arbeit...
let's rock ;)
also zu punkt nr 1:
also anode auf port und kathode auf ground:
wenn ich den rp6 starte - leuchtet die diode (schwächer als wenn das programm läuft) dann durchgehend!
nun starte ich das programm: die diode blinkt wieder durchgehend - sollte also okay sein...
punkt 2:
also bezüglich der software - die sollte eig passen!
hab nochmals alles durchgeschaut - sieht gut aus. das gepostete hex file hat ja auch nicht funktionoiert
punkt 3:
Alles klar!
Servoprogramm sieht jetzt ca so aus:
if (getStopwatch2() > 48) {
mSleep(500);
servo7_position = pos; // pd5 ansteuern
mSleep(500);....
(also mit den sleeps)
=> sieht gut aus. led blinkt im rythmus.... :)
punkt 4:
anschluss vom servo habe ich folgendermaßen
rotes kabel - VDD
braunes kabel - GND
Oranges kabel - auf Port PD5
GND hängt am RP6 Akkupack öhm wegen VDD bin mir da jetzt nicht sicher was wie genau...
aber da ich keinen anderen Akkupack habe hängt das auf jedem fall beim rp6 drauf! habe zur klarheit noch
ein foto hinzugefügt! siehe unten.
Edit das sind auf dem Foto die zwei roten Kabel die von der schwarzen Klemme auf das Board gehen. (Das linke ist VDD, das rechte GND)
und zu punkt 5:
habe jetzt mal alle servos rangeklemmt und folgendes ergebnis:
kein einziger servo funktioniert....
also ich hab langsam das gefühl die teile sind alle für die tonne....
also nach den ergebnissen ahbe ich das gefühl dass ich neue servos brauche :D
kannst du mir welche empfehlen? vl gibts auch irgendwelche die ich aus alten haushaltsgeräten rausnehmen kann?
irgendwelche tipps?
danke für alles :)
Das sind doch mal Infos mit denen man was anfangen kann.
Tja.. ich fürchte, die Servos sind hin. Aber Du hast es nun sauber ausgetestet und Eventualitäten ausgeschlossen.
Auch wenn es nicht zum Erfolg führte, möchte ich das mal ausdrücklich loben.
In Haushaltsgeräten wirst du keine Servos finden aber gibt genug bei ebay z.B. Und es gibt zu viele Typen für unterschiedliche Anwedungen als das ich einen exlpizit empfehlen würde. Ähnlich zu deinen Servos sind aber z.B. Hitec HS-101. Ich kenne sie als zuverlässige kleine Flächenservos.
http://www.servodatabase.com/servo/hitec/hs-101
roboterx
14.05.2011, 11:41
Hallo,
Danke für die ganzen Infos und Hilfen!
Hab dadurch doch einiges lernen können :) - Sowas ist immer gut!
Jetzt verstehe ich auch die theoretische Servo Ansteuerung besser als zuvor!
Bezüglich den Servos. Folgende Servos würde ich benötigen:
2 Servos für den Antrieb. (2 Räder)
1 Servo um einen Sensor zu bewegen (muss keine große Last tragen können)
Hast du mir hierzu Empfehlungen?
Danke und lg
@roboterx:
1. Für den Antrieb eines Roboters würde ich keine (gehackten) Servos nehmen, sondern Getriebemotoren. Geh mal auf Suche nach den Stichworten "gehacktes Servo" und "Getriebemotor"! Gibt es z.B. auch hier:
http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=70&products_id=164
... oder im Modellbaubereich (z.B. beim großen C).
Die Getriebemotoren steuert man dann z.B. mit einer H-Brücke an. Geh mal auf Suche nach dem Stichwort!
2. Für den Sensor eignet sich jedes Billig-Servo, z.B. Top Line ES-030 vom gr. C.
roboterx
14.05.2011, 11:59
danke.
seh ic hdas richtig, dass die h-brücke eine gleichspannung in eine art "wechselspannung" umbiegen kann bzw. die pulslänge verändern kann?
wie ist denn das mit der ansteuerung bezüglich den volt zahlen? der rp6 bringt ja ca 7volt, die getriebemotoren benötigen jedoch 12v...
Mit der H-Brücke (wenn du auf robotik-hardware.de nachsiehst, ist das z.B der Bausatz RN-VN2 DualMotor für 2 Motoren) wird der Motor angesteuert mit den hohen Strömen, die er braucht. Ja, dabei wird die Pulslänge verändert (PWM) und die Richtungsumkehr gemacht.
Spannung: Stimmt, der Motor aus dem Link braucht 12V, ist ja aber auch nur ein Beispiel.
Der RP6 hat ja einen Antrieb, deshalb war ich nicht darauf gekommen, dass der "Antrieb", für den du Servos suchtest, den RP6 antreiben soll. Wenn du den RP6-Antrieb ersetzen willst, must du nach anderen Motoren gucken oder für den Antrieb einen separaten Akku nehmen.
roboterx
14.05.2011, 12:31
alles klar.
was hälst du von den servos vom rp6?
soweit ich weiß haben die auch nur vdd,gnd,und pwd?
wie sind die preislich bzw. von der leistung her?
was hälst du von den servos vom rp6?
Der RP6 hat keine Servos.
Er hat Gleichstrommotoren und im Gehäuse ein Getriebe, also letztlich "Getriebemotoren" als Antrieb. Davon habe ich oben weiter geschrieben.
Diese Motoren sind einfache Gleichstrommotoren mit 2 Kabeln (Plus/Minus). Du kannst sie sehen, wenn du einen der Deckel rechts oder links zwischen den Rädern abziehst. Da in dem Kasten sitzt der Motor drin.
danke.
seh ic hdas richtig, dass die h-brücke eine gleichspannung in eine art "wechselspannung" umbiegen kann bzw. die pulslänge verändern kann?
wie ist denn das mit der ansteuerung bezüglich den volt zahlen? der rp6 bringt ja ca 7volt, die getriebemotoren benötigen jedoch 12v...
Das siehst Du "halbwegs" richtig. :-) So Ein Motortreiber hat 2 Eingänge für Spannungs Versorgung 1.) 5 V für die Logik
2.) Für die Brücke = Motorspannung. Die Steuersignale und PWM sind TTL Komlatiebel können also vom µC betrieben werden. Die Motorspannung kann je nach Motor und Regler in einem gewissen Rahmen gewählt werden. Diese "Art Wechselspannung" ist keine Wechselspannung (die Polarität ändert sich nicht) sondern eine gepulste (ein/aus) Gleichspannung wobei die Ein Zeit variabel ist. Je länger Ein jeh höher die Drehzahl. So etwas nennt sich dann PWM = Pulsweiten Modulation (RN-Wissen weiß es genauer). Das PWN Signal liefert der µC an bestimmten Ausgängen.
Gruß Richard
roboterx
14.05.2011, 22:45
Das ist mir jetzt alles ungefähr klar ;)
Kann mich vl noch wer zu meinen Antriebs-Motoren beraten?
Dirk hat mir ja schon die Getreibemotoren vorgeschlagen.
Ich brauche im Prinzip zwei Motoren je Motor direkt auf ein Rad. Der Roboter sollte geradeaus fahren, rückwerts sowie sich wenden können.
Nun seh ich da zwei Getriebemotoren ca 80 Euro + etwa 45 Euro für das Motorkontrollerboard...
Ist das wirklich so teuer? Geht's da nicht etwas günstiger...?
Gibt's Alternativen?
Danke :)
Sicher gibts Alternativen.... Massenweise...
Das reicht von Recycling alter Steppermotoren aus Floppylaufwerken und Festplatten mit Hilfe des Steppermotortreibers von RN über Motoren mit Segmentscheiben aus Drucken über zig Getriebemotoren aus dem Conrad Katalog mit einer H-Bridge bis hin zu kompletten Fahrwerk Systemen wie dem RP6 Untersatz als Ersatz/Einzelbauteil und umgebautem "Spielzeug" wie
http://cgi.ebay.de/Amphibien-Kettenfahrzeug-Raupenfahrzeug-Tarnfarbe-NEU-/120571977100?pt=DE_Allesf%C3%BCrKind_Spielzeug_Fer ngesteuertesSpielzeug&hash=item1c12a65d8c
selbst da kannst du das Oberteil abnehmen und die Funkelektronik ausbauen um da selbst was rein zu setzen... das Ding hat auch 2 Getriebemotoren - allerdings wohl kaum ausbaubar und ohne Segmentscheiben. Solls wirklich eigenständige Getriebemotoren sein, wirst du auch ein Chassis/Fahrwerk bauen müssen was mechanisch nicht ganz trivial ist. Aber auch da wird dir jeder Laden weiter helfen Können der z.B. RC-Cars & Zubehhör verkauft. Ich hab aber auch schon von Bots aus Scheibenwischermotoren und Autobatterieen gelesen... So die Segway Klasse... usw usw usw
Es kommt wie üblich nur drauf an was du machen kannst/willst. Gehen tut alles wenn man will und sich schlau macht.
Ein Eigenbau ist schön.. und wenn gut gemacht ein Hingucker.. aber sicher nicht billig. Für nen guten Eigenbau kannst du locker 500 bis 1000 € veranschlagen.. nach oben offen... und ungezählte Arbeitsstunden. Es geht sicher billiger.. aber kaum mit weniger knowhow.
roboterx
15.05.2011, 11:07
Hallo,
Danke für die Infos. Werd dann wohl mal auf Conrad schauen, wobei alte Floppy LW und Festplatten hätte ich auch noch massenweise rumliegen...
Und die Motoren von nem Floppy/Festplatte reichen dafür aus - bzw. sind stark genug dafür?
Scheibenwischermotoren habe ich mir auch gedacht und gleich mal bei nem Kollegen nachgefragt der grade nen alten Honda schlachtet... Hab die Idee dann aber verworfen, weil das Teil ca 20cm x 12cm groß ist und etwa 3kg wiegt!!...
Also ich werde versuchen nen Saugroboter aufzubauen. Schrittweise natürlich. Bezüglich dem Chasis wirds keine gröberen Probleme geben. Habe mir schon Aluminiumplatten besorft und diese auch schon mit ner Stichsäge so bearbeitet, dass die Grundform mal passt. (Ist echt gut geworden - schauen wie von ner CNC aus...) Denke viel Geld wird nicht reinfließen.
Brauche ischerlich mal 6 Aluplatten ala 12Euro.
Motoren versuche ich jetzt auch günstig zu bekommen bzw. aus Floppy/Fesplatte wenn das geht...
MC etc. habe ich ja schon vom RP6...
Sauglüfter (radial) habe ich auch shcon 4 recyclt und da teste ich gerade verschiedene Szenarien durch bzw. eine Art "Kombi" wegen den Luftströmen und Ansaugdrücken...
Filter habe ich günstig bekommen.
Zweites Accupack habe ich mir auch schon gemacht.
Soweit wäre alles für "Phase 1" da. Zusammenbauen, Überlegen, Programmieren wird dann das Andere sein - und wie du gesagt hast - viele Arbeitsstunden ;=)
Aber das ist mir eig egal, ich mach das in meiner Freizeit ein wenig Nebenbei... ;)
Phase 2 wäre dann für mich schon eine Art "Ladestation" zu der der Roboter auch selbstständig zurückkommt.
Und bei Phase 3 würde ich gerne einen "Laserscanner" benutzen... also Kamera + Laser und dann die Daten irgendwie in ein karthesisches Koordinatensystem bringen...
Wird aber sicherlich das Schwerste werden..
Festplatten und ähnliche Motoren kannst Du für ein etwas größeres Fahrzeug wie Staubsauger vergessen. Wenn Dir Scheibenwischer Motoren zu groß sind, Fensterheber haben ähnliche und sind viel kleiner.:-) bei beinahe allen Staubsauger Projekten mangelt es anscheinend an Saugleistung, Da solltest Du besonders drauf achten. (Ich) würde einmal einige alte Staubsauger zerlegen um mir das "genaue" Prinzip "Abkupfern". Möglicherweise den 230 VAC Motor gegen einen Bürstenlosen Modellbau Motor tauschen und den Rest verwerten.
Gruß Richard
roboterx
19.05.2011, 21:08
so...
langsam bekomm ich die krise...
hab mir also nen neuen servo gekauft. ist ein carson modellbauservo. wieder 3 anschlusskabel, vdd, gnd, und data.
hab den servo mit der richtigen polung mit vdd und gnd sowie adc3 verbunden. wenn ich den rp6 einschalte, surrt der servo auch ganz kurz und bewegt sich für n knappen millimeter.
wenn ich aber das programm starte, welches ich schon bei der led benutzt habe (mit der led funktionierte es ja!) - tut sich beim servo absolut 0... der bewegt sich keinen millimeter....
auf dem display steht wie üblich servopos 1,2,3 usw...
signal kommt ebenfalls an - habe ich ja schon mehrfahr geprüft....
so...
langsam bekomm ich die krise...
hab mir also nen neuen servo gekauft. ist ein carson modellbauservo. wieder 3 anschlusskabel, vdd, gnd, und data.
hab den servo mit der richtigen polung mit vdd und gnd sowie adc3 verbunden. wenn ich den rp6 einschalte, surrt der servo auch ganz kurz und bewegt sich für n knappen millimeter.
wenn ich aber das programm starte, welches ich schon bei der led benutzt habe (mit der led funktionierte es ja!) - tut sich beim servo absolut 0... der bewegt sich keinen millimeter....
auf dem display steht wie üblich servopos 1,2,3 usw...
signal kommt ebenfalls an - habe ich ja schon mehrfahr geprüft....
Eine LED ist das Pulsweiten Signal auch relativ egal. einen Servo NICHT das braucht für links,rechts,Mitte ganz festgelegte Impulslängen mit einer Wiederholrate zwischen 10 bis 20 ms. Dafür ist das Programm b.z.w. die Einstellung der PWM zuständig. Siehe auch http://www.rn-wissen.de/index.php/Servo .
Gruß Richard
roboterx
20.05.2011, 17:39
ja...
aber das programm von dirk wird ja wohl passen?
das funktioniert ja bei zig hunderten anderen user auch? und ich verwende nichts anderes...
ja...
aber das programm von dirk wird ja wohl passen?
das funktioniert ja bei zig hunderten anderen user auch? und ich verwende nichts anderes...
Das kann ich nicht beurteilen, C meide ich wenn ich kann und in Bascom ist das (Demo) super einfach. :-) Aber wenn bei mir ein Programm nicht klappt versuche ich ein anderes, viele Wege führen nach Rom. Am besten sind natürlich selbst verfasste Programme Da weiß man halt was man sich beim Coden gedacht hat und wenn es nicht klappt weiß man auch das das Problem VOR der Tastatur zu suchen ist. :-) :-)
Gruß Richard
roboterx
20.05.2011, 20:58
jo das programm schaut aber richtig aus...
bins gerade nochmals durchgegangen - sollte so passen!
roboterx
23.05.2011, 19:05
wär gut wenn mir wer weiterhelfen kann....
roboterx
28.05.2011, 10:37
hiiiiiiiiiiiiiilfeeee...
es klappt immer noch nicht :(
hat denn keiner mehr irgendwelche ideen und hilfen?
radbruch
28.05.2011, 10:49
Also irgendwo im Verlaufe des Threads habe ich jetzt den Faden verloren. Was klappt denn immer noch nicht? Servo an +, - und Signal angeschlossen? Welcher Steuerpin? Welches Programm? Vielleicht wäre mal eine kleine Zusammenfassung hilfreich.
roboterx
29.05.2011, 10:55
Also irgendwo im Verlaufe des Threads habe ich jetzt den Faden verloren. Was klappt denn immer noch nicht? Servo an +, - und Signal angeschlossen? Welcher Steuerpin? Welches Programm? Vielleicht wäre mal eine kleine Zusammenfassung hilfreich.
Alles klar!
Am Anfang hatte ich probiert Micro Servos, welche ich geschenkt bekommen habe mit Dirks-Servo-Library anzusteuern. Da bewegte sich jedoch nichts. Da Dirks Servo Library jedoch bei vielen eingesetzt wird, kann ich davon ausgehen dass das Programm so stimmt. Haben dann auch den Code noch angesehen, laut Dirk und meiner Meinung passt da auch alles!
Also haben wir eine LED angebaut (wie vorher beschrieben angeschlossen) und Signale über ADC3 gegeben. Die LED fing an zu blinken. Scheint also als ob die Anschlüsse alle in Ordnung sind. DA die Servos geschenkt waren, und auch schon in nem Projekt verbaut waren, dachten wir uns dass die Defekt sind.
Also habe ich einen komplett neuen Servo gekauft, diesen richtig angeschlossen (+ und - an der Basis des RP6 angeschlossen) und auf ADC3 der Erweiterungsplatine angeklemmt. Dirks Programm laufen lassen doch es bewegt sich immer noch ncihts! Und dieser Servo ist aber komplett neu!...
Da stehe ich jetzt leider :(
radbruch
29.05.2011, 11:18
Vielleicht solltest du testweise mal einen anderen Ansatz verfolgen:
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase();
DDRA |= 1; // ADC0 auf Ausgang
while(1)
{
PORTA |= 1;
sleep(10);
PORTA &= ~1;
sleep(200-10);
}
return(0);
}
Sleep(10); erzeugt Impulse von ca. 1ms Länge. Das Programm sollte nach entsptechender Anpassung auch auf dem m32 mit ADC3 funktionieren. Ein richtig angeschlossenes und funktionierendes Servo sollte damit eine Position anfahren und halten.
roboterx
29.05.2011, 20:15
Hallo,
Dein Programm funktioniert einwandfrei. Der Servo wird bis zum Anschlag gedreht und hält seine Position dort....
Habs auf der Base gemach tmit ADC0
...
Kannst du mir eventuell sagen was beim Ansatz von Dirk dann nicht stimmt?
EDIT:
Wie müsste ich jetzt das Programm umschreiben wenn sich der Servo erst nach rechts und dann nach links drehen soll?
Kann ich auch Winkelangaben machen?
Danke
radbruch
29.05.2011, 21:01
Der Servo wird bis zum Anschlag gedreht und hält seine Position dort.Je nach Doku benötigen Servos Impulslängen zwischen ca. 0,5 und 2,5ms. Wenn du den Wert beim Aufruf der sleep()-Funktion änderst sollte das Servo eine andere Position anfahren (z.B. sleep(20);). Servopositionen nahe oder gar auf dem Endpunkt sind kritisch.
Habs auf der Base gemach mit ADC0 ... Kannst du mir eventuell sagen was beim Ansatz von Dirk dann nicht stimmt?Sind auch wirklich alle GNDs (von Base, m32 und Servo) miteinander verbunden? Die Spannungsversorgung für das Servo sollte vom Base oder einem externen Akkupack kommen, weil inzwischen mehrfach darüber berichtet wurde, dass Servos direkt am m32 nicht funktionieren.
Die Servoansteuerung von Dirk erzeugt die Impulslängen in zwei Schritten. Zuerst wird die Länge des kürzesten Impuls definiert (Anschlag eine Seite) und zu diesem wird die dem gewünschten Drehwinkel entsprechende Impulsdauer hinzuaddiert (bis maximal Anschlag andere Seite). Kritisch ist hierbei die Streuung der Servos (Hersteller, Model, ...) bezüglich der Impulslängen für die Endanschlagpositionen. Wenn der kürzeste Impuls nicht genau stimmt verfälschen sich auch alle anderen Positionen. Das kann sogar dazu führen, dass die verwendeten Impulslängen Positionen außerhalb des Drehbereichs anwählen! Allererster Schritt aller Servoansteuerungen sollte deshalb die Ermittlung der für die Endpositionen nötigen Impulslängen sein.
Da die ServoLib über das Tasksystem eingebunden wird, sollten im Programm keine blockierenden Funktionen verwendet werden. Da ich immer nur meine eigenen Ansteuerungen verwende kann ich zur Servolib sonst nicht viel mehr sagen.
Vielleicht noch zwei allgemeine Hinweise: Nach dem Editieren immer Speichern vor dem Kompilieren und nach Änderungen in der ServoLib immer ein Clean/Make all ausführen.
Beispiele für mehrere Servopositionen mit sleep():
https://www.roboternetz.de/community/showthread.php?50303-RP6-Servo-Ansteuerung&p=484891&viewfull=1#post484891
https://www.roboternetz.de/community/showthread.php?31330-Servo-180-Grad-drehen&p=507080&viewfull=1#post507080
https://www.roboternetz.de/community/showthread.php?43927-Servo-3-positionen-anfahren-lassen&p=420023&viewfull=1#post420023
roboterx
30.05.2011, 18:46
danke hat wunderbar funktioniert!
radbruch
30.05.2011, 18:52
Prima.
Etwas mehr Details wären nett :)
roboterx
30.05.2011, 18:56
Prima.
Etwas mehr Details wären nett :)
Ja also das von Dirk hab ich nicht zum Laufen gebracht. Dein Script läuft aber prima. Hab dann die Links noch angeschaut und die Programme getestet - funktionieren ebenfalls!
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.