Aus Raspberry Pi Geek 06/2020

Mikrocontroller ATtiny85 programmieren (Seite 3)

Das bedeutet, dass der Servo im Testaufbau 16 Positionen ansteuert. Nun brauchen Sie die Werte vom A/D-Wandler nur so umzurechnen, dass Sie genau diese 16 Positionen erreichen. Der Wandler liefert Werte zwischen 0 und 1023. Teilen Sie diese durch 64, bekommen Sie Werte zwischen 0 und 15 – genau das, was Sie für den Servomotor benötigen. Um in den oben genannten Wertebereich zu kommen, ist es notwendig, noch 15 zu addieren.

In Listing 2 versetzt die Funktion setup() zunächst die beiden Anschlüsse PB0 und PB3 in den benötigten Betriebsmodus (Zeile 2 und 3). Die nächsten zwei Zeilen initialisieren den internen Timer für den PWM-Betrieb mit einer Frequenz von 62,5 MHz.

Hier gilt es, zu beachten, dass Sie das Ausgangssignal invertieren. Das ist nötig, weil die Transistorstufe das Signal erneut invertiert. So kommt es dann beim Servo wieder normal an. Wollen Sie genau wissen, wie der Baustein den Timer initialisiert, werfen Sie einen Blick in Kapitel 11 des ATtiny85-Datenblatts.

Listing 2

void setup() {
  pinMode(PB0, OUTPUT);
  pinMode(PB3, INPUT);
  TCCR0A = 3<<COM0A0 |  3<<WGM00;
  TCCR0B = 0<<WGM02 | 1<<CS00 | 1<<CS01 | 0<<CS02;
}
void loop() {
  int analog = analogRead(PB3);
  int value= analog/64;
  OCR0A = value+15;
  delay(10);
}

Bevor Sie einen Servomotor an den Generator anschließen, sollten Sie mit dem Oszilloskop einen Blick auf das Ausgabesignal werfen. Dazu benötigen Sie kein professionelles Gerät, ein einfaches genügt vollkommen [6]. Abbildung 5 zeigt das Ausgangssignal. Es lässt sich mit dem Potenziometer zwischen 1 und 2 Millisekunden einstellen.

Abbildung 5: Ein PWM-Signal mit 1,5&nbsp;ms Einschaltdauer bei einer Periodendauer von 16&nbsp;ms.

Abbildung 5: Ein PWM-Signal mit 1,5 ms Einschaltdauer bei einer Periodendauer von 16 ms.

Mehr Präzision

Beim Ausprobieren mit den Servos stieß der Autor auf ein eigentümliches Phänomen: Keiner der Servos erreichte die volle Winkelbewegung von 180 Grad; es lief eher auf Werte um 120 Grad hinaus. Wenn Sie die Signallänge etwas aus dem definierten Bereich verschieben (weniger als 1 Millisekunde respektive mehr als 2 Millisekunden), erhalten Sie eine größere Winkelbewegung. Sie müssen dann aber selbst dafür Sorge tragen, dass der Servo nicht in die Endpositionen knallt und mechanisch Schaden nimmt.

Mit dem hier gezeigten Aufbau lassen sich über den Motor nur 16 Positionen anfahren. Benötigen Sie eine genauere Positionierung, müssen Sie einem Mikrocontroller wählen, der einen größeren Zähler an Bord hat. Hierfür böte sich etwa ein ATtiny44 an, der über einen 16-Bit-Zähler verfügt.

Fazit

Der ATtiny85 ist ein interessanter Mikrocontroller, mit dem Sie bereits eine ganze Menge erreichen. In der TSSOP-Ausführung nimmt er kaum Platz weg. Sollte seine Leistung für ein Projekt nicht ausreichen, greifen Sie einfach zu einem seiner größeren Brüder aus der ATtiny-Familie; alle funktionieren nach demselben Muster.

Was den Autor tatsächlich etwas überrascht hat, war die Tatsache, dass Servomotoren sich oft gar nicht an ihre eigenen Datenblätter halten und sehr empfindlich auf eine leicht schwankende Basisfrequenz reagieren. Das ist der Hauptgrund, warum in diesem Artikel die PWM-Signale per Hardware erzeugt wurden. 

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben