Pseudo "Roboter"

Hier werden Fragen zu LED-Grundlagen beantwortet...

Moderator: T.Hoffmann

Antworten
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Mi, 24.03.10, 14:16

Hallo Leute,

heute belästige ich euch mal wieder mit einem (größeren) Anliegen. Ca. 4 Wochen steht für mich die FÜK (Fächerübergreifende Kompetenzprüfung) an. Unser Thema ist "Die Geschichte der technischen Entwicklung des Automobils und die Auswirkung auf Wirtschaft und Gesellschaft vor geschichtlichem Hintergrund" :D Ich wei0 alles hört sich etwas aufgedunsen an aba da muss man in der 10. wohl durch. Zu dem Thema gehören auch die Produktionsmöglichkeiten heut zu Tage. Da wir auch ein Werckstück fertigen sollen, könnte ich mir vorstellen ansatzweise einen "Roboter" zu bauen. Er soll auf einer schwenkbaren Scheibe sitzen, ein Greifarm und ein bewegliches Gelenk, das den winkel zur Y-Achse verändern kann. Anzusteuern mit einem µC, sodass es möglich wäre, dass er etwas automatisch macht (um es so einfach wie möglich zu halten spielen äußerliche faktoren mal keine Rolle). Man sollte ihr aber auch manuell betätigen können.
Meine Probleme:

-so viele Projekte kann ich nicht mit µC vorweisen. Und alle waren bisher nur effektschaltungen mit leds oder anderen Leuchtmitteln, also ohne Motoren.

-daraus folgt: kp wie ich Schrittmotoren ansteuern soll und was ich dafür sonst noch alles brauch

Ich habe mir auch schon überlegt einfach handelsübliche Gleichstrommotoren wie z.B. im Modellbau zu verwenden (natürlich mit Getriebebausatz). Mir wäre es egal, wenn das Teil sich bei jedem Vorgang ein bisschen anders geht, allerdings muss die funktionalität gegeben sein, und das ist halt schwierig, weil es kann dann ja auch einmal sein, dass der Greifarm einfach auf dem Boden/Brett schleift. In der Prüfung könnte ich das dann erst recht nicht gebrauchen.

Bin für jeden Tipp dankbar!!


gruß Marv
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Mi, 24.03.10, 14:48

Hier hab ich mal grobe Skizzen gemacht, dass ihr wisst worauf ich hinaus will:
Draufsicht
Draufsicht
Seitenansicht
Seitenansicht
ach ja eines wäre da noch. Eigentlich bevorzuge ich die Lösung, auf der Y Achse die höhe des Greifarms durch eine spirale verändert und nicht durch ein Gelenkt, das mechanisch und mit motor dan wahrscheinlich ziemlich instabil ist. Im Prinzip fast wie bei nem Zirkel, bei dem in der Mitte eine spirale sitzt, mit der man den radius verstellen kann
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Do, 25.03.10, 17:08

OK Leute,

Ich hab nen neuen Ansatz. Schritttmotoren sind mir eindeutig zu kompliziert. Ich will nun Modellbau-Servos nehmen. Habe einige davon herumliegen und die schreien nur danach endlich mal verbaut zu werden. Nun hänge ich gerade daran das Servo anzusteuern. Ich will es mit nem 2313 oder Atmega8 ansteuern. Programmiert im Basic editor Bascom AVR Nach der internen Suchfunktion gibt es sogar fertige Module, da blick ich im Moment aber noch nicht ganz durch. Bitte um eure hilfe. Hat einer von euch schon erfahrungen??

Wäre euch wirklich dankbar!
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Do, 25.03.10, 17:56

Ich steuere mit nem Attiny45 nen Servo an. Der klappt mir im Auto mein Navi automatisch hoch und runter, wenn ich das Ablage-Fach öffne.
Ist eigentlich sehr simpel, ich hab die BASCOM interne Servo-Steuerung nicht verwendet. Die soll angeblich nicht gerade bombastisch sein, aber für triviales hoch und runter klappen hätte es wohl gereicht.
Grundsätzlich erst mal zum Verständnis eines Servos:
Er wird typisch mit einer Frequenz von 50Hz betrieben. 100Hz stecken die meisten aber auch noch gut weg, was dann die Präzision erhöht.
Die Impulsbreite beträgt typisch 1ms bis 2ms. Die meisten Servos verfahren aber erst bei 0,8ms - 2,2ms im vollen Winkel.
Eine einfache Ansteuerung in BASCOM wäre also:

Code: Alles auswählen

Do
set portxx
waitus 1500
reset portxx
waitms 20
loop
Damit stünde der Servo in Mittelstellung. Bei waitus kann man jetzt von 800 bis 2200 alles einsetzen und den Servo über seinen vollen Winkel einstellen.
Will man nun verschiedene Positionen anfahren, könnte man die Werte dazu in einer Tabelle ablegen und mit dem Befehl "lookup" aufrufen.
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Do, 25.03.10, 19:11

Erstmal danke für die Antwort! Bin auch schon auf solche ansätze gestoßen. Der Servo "Zittert" wenn ich ihn so ansteuer. Ich schalte ihn natürlich net gleich mit dem µC sondern mit nem Transistor (BC 337 zu testzwecken) kann sein dass der zu träge ist??

mfG. marv
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Do, 25.03.10, 19:39

Marvin hat geschrieben:Ich schalte ihn natürlich net gleich mit dem µC sondern mit nem Transistor (BC 337 zu testzwecken) kann sein dass der zu träge ist??
Warum nicht direkt? Das geht schon in Ordnung. Die Signalleitung vom Servo belastet ja nichts (ist hochohmig). Durch den BC337 invertierst du das Signal aber. Hast du das im Programm bedacht und die Zustände high und low dementsprechend auch getauscht?
Zu träge wird der für 50Hz nicht sein :wink:
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Fr, 26.03.10, 14:03

Hm ok. Also wenn ich den großen servo (2Kg zug) direkt ansteuer tut sich gar nix. Über transistor fähr er immer ganz nach links und will immer weiter drehen. Langsam hab ich angst dass irgendwann der machanische stopper abbricht:D. 1 kleinen servo hab ich sogar schon durchgelassn:D der dreht sich jezt um 360° Ich hab alle mögliche konstellationen ausprobiert aber konnte noch kein vernünftiges Ergebnis erzielen. Mein Code:

$regfile = "m8def.dat"
$crystal = 1000000

Config Pinb.1 = Output

Do
Portb.1 = 1
Waitus 1500
Portb.1 = 0
Waitms 20
Loop
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Fr, 26.03.10, 15:12

Oben schreibst du config PINBxx und unten im Code steht dann set PORTBxx.

Schreib mal oben auch config PORTBxx hin, oder aber unten auch PINBxx, ich habe den Verdacht, dass der Ausgang so gar nicht angesteuert wird. Auch deine Fehlerbeschreibung lässt das vermuten.
Sonst halt einfach mal ein Multimeter dran halten, wenn der Ausgang angesteuert wird, sollte es in irgend einer Weise blinken, oder einen Mist anzeigen. Oder noch einfacher : LED dran :wink:
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Fr, 26.03.10, 15:52

Danke für den tipp bringt aber nix. LED leuchtet schwächer als normal iss ja aber klar da des wir ne PWM wirkt. Hab gerade sogar von mega8 auf tiny2313 gewechselt und es funktioniert immer noch nicht. Am Controller kanns also auch net liegen.

Hier sind mal die daten vom Servo Vom großen (Graupner c 5077) find ich kein brauchbares Datenblatt.

Wie sieht das eig mit der internen Servo steuerung von Bascom aus. Auch wenn die nicht so präzise ist ist das immer noch besser als dass es gar nicht läuft. Hat jemand damit schon erfahrung? jeder kleine Tipp würde mir helfen :D

mfG Marv

EDIT: Hurra! es lag doch am chip der mega8 ist glaub nur noch halblebig. Mit dem 2313 hab ichs geschafft den servo in 2 verschiedene richtungen zu drehen. Mittelwert sind 1.65ms. Hab mal was gehört dass man bei "Waitus" keine Variablen verwenden kann. Wie könnte ich dann andersweitig einwirkung auf den drehwinkel des servos nehmen. Wie meinst du das mit ner Tabelle anlegen?
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Fr, 26.03.10, 16:46

Marvin hat geschrieben:Hab mal was gehört dass man bei "Waitus" keine Variablen verwenden kann. Wie könnte ich dann andersweitig einwirkung auf den drehwinkel des servos nehmen. Wie meinst du das mit ner Tabelle anlegen?
Ja bei waitus gehen keine Variablen.
Mit Tabelle war etwas voreilig, weil da hat man ja auch eine Variable für den "waitus"-Befehl. hab das auch grad mal ausprobiert in BASCOM und es scheint auch nicht zu funktionieren.
Bin auch grad etwas überfragt, weil bei meiner Navi-Steuerung hab ich ja nur zwei Positionen, nämlich oben und unten. Und die habe ich in zwei Schleifen programmiert und je nach Tasterzustand an der Klappe wird entweder die eine, oder die andere durchlaufen.

Mit der BASCOM-internen Servo-Hilfskrücke hab ich keine Erfahrung. Aber über Google sollte sich da schon was finden lassen, vielleicht das: http://mikrocontroller.jacob-pirna.de/m ... ascom.html
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Fr, 26.03.10, 20:45

Also erstma danke, dass du dich überhaupt mit meine problem beschäftigst. Wie du vielleicht gesehn hast, hab ich deine posts auch gut bewertet. Bin gerade daruf gestoßen, dass man waitms auch mit dezimal stellen angeben kann also z.B. "waitms 2.2" oder "waitms 0.9". Wird alles problemlos geschluckt und funktioniert dann auch. bringt mich das weiter? Könnte ich jezt auch mit variablen arbeiten??
Benutzeravatar
Beatbuzzer
Auserwählter
Auserwählter
Beiträge: 3177
Registriert: Fr, 17.08.07, 11:02
Wohnort: Alfeld / Niedersachsen
Kontaktdaten:

Fr, 26.03.10, 21:30

Hm, wenn Gleitkomma funktioniert... ich hatte da manchmal schon das Problem, dass automatisch gerundet wird. Aber sonst einfach probieren. Mehr als dass es nicht geht, kann nicht passieren.
Du kannst den Servo allerdings noch mit ein paar Ohm von den +5V weg hängen, damit er nicht mehr so viel Drehmoment hat. Falls er dann doch mal spinnt, und in einer Endlage blockiert, zieht er nicht so viel Strom und es bricht auch nicht gleich was.
Marvin
Mega-User
Mega-User
Beiträge: 122
Registriert: So, 04.01.09, 13:05
Wohnort: Baden-Württemberg

Sa, 27.03.10, 23:30

OK danke für die Tipps. Inzwischen habe ich einige Möglichkeiten durchprobiert:
1. Interne Servosteuerung:
bin sehr schnell wieder von dem gedanken abgekommen, da das wirklich wie schon gesagt murks isst. durch die ruckartige teilzustellung sieht alles total blöd aus, außerdem werden die teile unnötig belastet und 'hoppeln' sogar fast vom tisch. Das ist das letzte was ich brauchen könnte.
2. Fertige Codes ausm netz:
Alles recht schön und gut, allerding häufig sehr kompliziert gefasst und eher was für kenner der µC welt. Nebenbei tritt bei den umfangreichen codes das problem auf, dass ich die mit bascom nicht compillieren kann, weil ich nur die freeware hab:(. Also konnte ich 3 von 5 schonmal vergessen.
3.Da ich kein könner auf dem gebiet bin hab ich das genommen, was ich kann und war kreativ :D
Die Möglichkeit, mit der ich jezt arbeite, ist wirklich sehr simpel und codeintensiv, also nix für pro's.
Zunächst stand ich vor dem problem, dass ich die Servos andauern per PWM ansteuern musste, weil sie sonst in die "stay safe" position zurück gehen. Anfangs dachte ich, das sei ein vorteil war es aber net :) Also auf du modellbaushop und die billigsten servos, die nur irgendwie zu finden waren mitgenommen, die bleiben nähmlich an der stelle stehen, wo sie zuletzt waren, auch wenn man sie nichtmehr anpulst.
Nextes Problem:
Es reicht nicht, das servo einmal anzupulzen, sodass es den gewünschten winkel einnimmt, sondern man muss die über eine bestimmte zeitspanne machen. Um die herauszufinden, hab ich das servo ganz links nach rechts drehen lassen bloß, dass ich es nicht alle 20ms sondern alle 2sek. angesteuert hab. Also so

Code: Alles auswählen

Portd.6 = 1
Waitus 2400
Portd.6 = 0
Waitms 2000
Das Ergebnis:
Das Servo braucht insgesamt 11 impulse für die volle drehung. Es kann also ca. 16.4° pro puls (unter belastung) drehen.
damit kann man sich jezt ein Code basteln, der gut funktioniert, aber nicht für größere aufgaben geeignet ist und der µC dann auch komplett für die Servosteuerung gebraucht wird. außerdem muss man sich vorher überlegen, welche servostellungen benötigt werden und muss dazu ein Unterprogramm anlegen.

Code: Alles auswählen

$regfile = "2313def.dat"

$crystal = 1000000

Config Portd.6 = Output

Do

Gosub Mitte1
Gosub Mitte1
Gosub Mitte1
Gosub Mitte1
Gosub Mitte1
Gosub Mitte1
Waitms 5000
Gosub Links1
Gosub Links1
Gosub Links1
Gosub Links1
Gosub Links1
Gosub Links1
Waitms 1000
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Gosub Rechts1
Waitms 10000

Loop

'Servo1:

Mitte1:                                                     '70ms erzeugen eine flüssige bewegung, lassen dem Servo aber noch genung zeit um den winkel zu zustellen
Portd.6 = 1
Waitus 1500
Portd.6 = 0
Waitms 70
Return

Links1:
Portd.6 = 1
Waitus 600
Portd.6 = 0
Waitms 70
Return

Rechts1:
Portd.6 = 1
Waitus 2400
Portd.6 = 0
Waitms 70
Return
Ist alles nicht ideal, funktioniert aber und ist gut für solche noobs wie mich geeignet :lol:
Antworten