- fchao-Sinus-Wechselrichter AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Servosteuerung ohne Arduino und Co

  1. #1
    Neuer Benutzer Öfters hier Avatar von Strawhat
    Registriert seit
    20.02.2015
    Beiträge
    14

    Idee Servosteuerung ohne Arduino und Co

    Anzeige

    Praxistest und DIY Projekte
    Hallo zusammen,

    ich baue gerade eine UselessBox für eine Projektarbeit und bräuchte dringend Hilfe beim Verständnis der Servosteuerung.
    Ich möchte die Steuerung nicht durch Bibliotheken wie Arduino etc. realisieren, sondern die Signale verstehen und mit C allgemein funktionell programmieren.

    Ich nutze einen Atmega328p IC und habe bereits herausgefunden, dass ich die Position der Servos mit PWM Steuersignalen festlegen kann. Leider verstehe ich die umfangreichen englischen
    erklärungen der PWM Signalerzeugung/manipulation nicht gut genug. Man muss ja irgendwelcher TimerBits etc setzen und das schien mir immer zu umständlich erklärt.

    Kennt Ihr ein gutes Tutorial zur PWM Erzeugung und Manipulation für die Steuerung von Servos oder gibt es bessere Verfahren?
    Facebook Gruppe für Robotik, Elektronik und Modellbau Enthusiasten. https://www.facebook.com/groups/1396674970640627

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Ne einfache klassische Useles-Machine funktioniert auch ohne Mikrocontroller, einfach mit Schaltlogik. Dazu ließe sich die Elektronik aus dem Servo entfernen und dieser wie ein Getriebemotor steuern. Wann und in welche Richtung er läuft, ist dann von diversen Schaltern abhängig, da bräuchte man dann neben dem Hauptschalter noch zwei Endschalter, an welche der Servo anschlägt. Den Rest macht dann die richtige Verdrahtung. Irgendwo hatte ich dafür schonmal einen Schaltplan, muss ich nochmal suchen, vielleicht kommst du aber auch selber drauf

    Hmm, die PWM für einen Servo würde ich in Software erzeugen, da die Harware-PWM nureine recht grobe Auflösung von bis zu 10 Bit hat. Sind zwar 1028 Schritte, allerdings kannst du dich ja nur in dem Bereich von 1-2ms von 20ms bewegen, was einem Tastverhältnis von 0,05 bis 0,1 entspräche. Kämen also nur die Schritte von 52 bis 103 in Frage, das hieße du könntest deinen Servo nur in ca. 52 Schritten bewegen, dazwischen ginge nix. Daher wäre es besser, das Servosignal dann mit einem Timer selber aufzubauen. Der Timer funktioniert ja so, dass er in einem bestimmten Takt hochzählt und bei einem Überlauf eine Unterfunktion auslöst. In dieser Unterfunktion wird dann meist der Timer auf einen gewünschten Wert gesetzt, damit dieser das nächste mal dann in der gewünschten Zeit überläuft. So lassen sich ziemlich präzise Zeiten einstellen. Da müsstest du dann einstellen, wie lange der Pin für die PWM an sein soll und beim nächsten Mal, wie lange er dann aus sein soll.
    AI - Artificial Idiocy

  3. #3
    Neuer Benutzer Öfters hier Avatar von Strawhat
    Registriert seit
    20.02.2015
    Beiträge
    14
    Ich will ne Useless Machine mit komplexeren unterschiedlichen Bewegungsabläufen machen, deshalb fällt dein Ansatz leider flach ^^

    Mit Software-PWM meinst die Erzeugung durch Unterbrechungen(delays) von Dauersignalen?
    Würde mich wundern, wenn die Hardware PWM nur so geringe Schrittzahlen unterstützen würde, aber wenn das so ist, muss ich wohl auf die Software-PWM zurückgreifen.

    Hast ja irgendwelche Tutorials oder ein Testprogramm? Ich nutze übrigens 180° Servos (nicht umgebaut) und würde diese auch gern so belassen, brauch eh keine 360° Drehungen
    Facebook Gruppe für Robotik, Elektronik und Modellbau Enthusiasten. https://www.facebook.com/groups/1396674970640627

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    ... die PWM für einen Servo würde ich in Software erzeugen, da die Harware-PWM nureine recht grobe Auflösung von bis zu 10 Bit hat ...
    Das verstehe ich jetzt nicht wirklich. Ich habe meine Hardware-PWMs für Servos überwiegend mit nem 16bittigen Timer laufen, davon nutze ich aber nur 12 bis 13 Bit, genauer: Auflösungen von rund 4000 und drüber für den möglichen bzw. genutzen Schwenkbereich des Servos. Ne Auflösung mit rund 4000 bis 6000 Ticks ist etwa zehnmal so fein wie meine billigen Servos überhaupt fahren können - aber sie können das.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Wo hat ein Atmega328 denn 16 Bit HW PWM? Ich war jetzt jedenfalls der Meinung, dass sich die Hardware-PWM nur bis 10 Bit Auflösung hochschrauben ließe und das auch nur über den gesamten Stellbereich für das Tastverhältnis. Für ein Servosignal braucht man allerdings nur einen kleinen Teil davon, daher würde sich ja eigentlich die Auflösung reduzieren, oder? So hab ich das jedenfalls bisher verstanden.
    AI - Artificial Idiocy

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.687
    Zitat Zitat von Geistesblitz Beitrag anzeigen
    Wo hat ein Atmega328 denn 16 Bit HW PWM? ...
    Aufm Chip, wo sonst - die Frage verstehe ich nicht. Es macht jedenfalls Sinn das Datenblatt zu lesen, z.B. ATmega48A-bis-328-328P_8271G-02-2013. Dort gibts ein sechzehntes Kapitel mit dem Titel

    16. ... 16-bit Timer/Counter1 with PWM

    16.1 ..... Features
    ............ • True 16-bit Design (i.e., Allows 16-bit PWM)

    Schau Dir mal die Pinbelegung von PB1 und PB2 an.

    Zitat Zitat von Geistesblitz Beitrag anzeigen
    ... Ich war jetzt jedenfalls der Meinung, dass sich die Hardware-PWM nur bis 10 Bit Auflösung hochschrauben ließe ...
    Im Umfeld "C" bzw. AVRGCC ist das nicht der Fall, wie es mit Bascom oder arduinos IDE ist weiß ich nicht.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Geistesblitz
    Registriert seit
    16.03.2011
    Ort
    Dresden
    Alter
    37
    Beiträge
    1.937
    Gut, ok, das war mir bisher nicht so bewusst gewesen. Damit sollte das dann doch funktionieren.
    AI - Artificial Idiocy

  8. #8
    Neuer Benutzer Öfters hier Avatar von Strawhat
    Registriert seit
    20.02.2015
    Beiträge
    14
    Leider bringt mich diese Tatsache nicht weiter x)
    Kennt keiner von euch eine möglichst deutschsprachige Seite, die die Funktion von PWM in Verbindung mit Servos erklärt?
    Facebook Gruppe für Robotik, Elektronik und Modellbau Enthusiasten. https://www.facebook.com/groups/1396674970640627

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Die Funktion ist schnell erklärt. Das Servo reagiert auf die Impulslänge. Eine Impulslänge von ca. 1 Millisekunde stellt das Servo in die Mitte, 0,5ms ist Anschlag auf der einen Seite, 1,5ms auf der anderen Seite. Der Impuls wird alle 20ms wiederholt. Das wars schon.

    Die Werte variieren bei den Servos, Die Wiederholung kann bei digitalen Servos oder Brushless-Reglern deutlich häufiger sein. Der Impuls ist fast immer positiv. Da das Puls-Pause-Verhältnis verändert wird, nennt man es PWM.

    Ein Servo mit einem Timer anzusteuern ist nicht so sehr kompliziert. Man nimmt einen Mode mit einstellbarem TOP. Dieses TOP wählt man so, dass das Zählregister 20ms braucht um es beim verwendeten Kontrollertakt und gewähltem Vorteiler zu erreichen. Dann schreibt man in das Vergleichsregister den Wert, der der gewünschten Impulsdauer entspricht:

    Code:
    	// Timer1 für 16MHz-ATMega256
    	# define OC1A 				PB5
    	# define OC1B 				PB6
      	TCCR1A = 0;
      	TCCR1B = (0<<CS12)|(1<<CS11)|(0<<CS10);	// prescaler /8
    
    	TCCR1A |= (1<<WGM11)|(0<<WGM10);       	// Mode 14: FastPWM mit ICR1 als Top
    	TCCR1B |= (1<<WGM13)|(1<<WGM12);
    
    	TCCR1A |= (1<<COM1A1)|(0<<COM1A0);       	// OCR1A set on Botton, reset on Match
    	TCCR1A |= (1<<COM1B1)|(0<<COM1B0);       	// OCR1B set on Botton, reset on Match
    
    	TCNT1 = 0;                                // Timer1 zurücksetzen;
    	ICR1 = 40000;                             // 16MHz/8/20mS für 20ms-Zyklus
    	OCR1A = 3000;                             // Match und OC1A auf Low nach 1,5ms
    	OCR1B = 3000;                             // Match und OC1B auf Low nach 1,5ms
    
    	DDRB |= (1<<OC1A) | (1<<OC1B);         	// PWM-Pins sind Ausgang...
    	PORTB &= ~((1<<OC1A) | (1<<OC1B));     	// ...und low
    (Code für zwei Servos an einem Mega256 mit 16MHz)

    Natürlich gibt es noch unzählige andere Möglichkeiten ein Servo anzusteuern.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Neuer Benutzer Öfters hier Avatar von Strawhat
    Registriert seit
    20.02.2015
    Beiträge
    14
    Danke dir, sowas hatte ich gesucht kannst du mir nur erklären wie es bei nem 8MHz Atmega aussähe bzw. was es mit den Prescaler und der Zyklusberechnung ICR1 auf sich hat?

    Was müsste ich wie manipulieren um den einen oder anderen Servo anzusteuern?
    Facebook Gruppe für Robotik, Elektronik und Modellbau Enthusiasten. https://www.facebook.com/groups/1396674970640627

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Messen einer Entfernung mit einem Arduino OHNE Kit
    Von Unregistriert im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 5
    Letzter Beitrag: 25.01.2015, 11:58
  2. ARDUINO und C++???
    Von Dr. Bombe im Forum Microcontroller allgemeine Fragen/Andere Microcontroller
    Antworten: 7
    Letzter Beitrag: 03.01.2013, 13:27
  3. Antworten: 1
    Letzter Beitrag: 05.12.2012, 20:11
  4. Antworten: 1
    Letzter Beitrag: 14.10.2012, 17:12
  5. Servosteuerung und STK500
    Von raoul.m@gmx.ch im Forum Assembler-Programmierung
    Antworten: 10
    Letzter Beitrag: 16.12.2006, 03:23

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen