Motorsteuerung mit PC und ATtiny13

Hinweis

Das Projekt das ich auf dieser Seite vorstelle, ist leider noch nicht fertig. Trotzdem finde ich, dass viele Dinge die ich auf dieser Seite anspreche interessant genug sind um bereits jetzt gelesen zu werden.

Die Frage die sich natürlich stellt: Wann stelle ich dieses Projekt fertig? Ich weiß es nicht. Sobald ich dazu komme. Leider kann ich keinen Termin nennen.

Motoren

Vorwort

Hallo!

Immer wieder lese ich in den Foren die gleiche Frage: "Wie kann man einen Motor mit einem Computer steuern?". Dann wird immer wieder besprochen, dass man das mit dem Parallelport oder mit dem Serialport (COM) machen kann. Irgendwann kommt man drauf, dass man entweder keinen Parallelport mehr hat, oder der Parallelport Probleme macht, oder man nicht nur einen, sonderen mehrere Motoren ansteuern möchte.

Interessant wird die Sache dann, wenn es heißt, dass nicht nur ein paar Motoren vor und zurück laufen sollen, sondern dass auch noch die Geschwindigkeit dieser Motoren geregelt werden soll. Aber irgendwann ist einfach Schluss mit den Möglichkeiten die man mit so einem einfachen Parallelport hat. Die Anzahl an Datenleitungen ist auf acht beschränkt und Echtzeit kennt so ein Port sowiso nicht. Das Signal wird erst dann weitergegeben, wenn der Computer dafür Zeit hat.

Und da so oft danach gefragt wurde, dachte ich mir, dass das doch ein gutes Einstiegsprojekt in die Welt der Mikrocontroller sein könnte. :-) Anhand dieses kleinen Projektes möchte ich dir die Welt der AVR-Mikrocontroller näher bringen. Da die AVRs so billig sind, sind sie auch für Hobby-Bastler interessant. Und wie du im Laufe dieses Projektes merken wirst, ist so ein Mikrocontroller ein wahrer Alleskönner.

Ich wünsche dir viel Vergnügen beim Durchlesen dieser kleinen Projektbeschreibung. Und vieleicht kann ich dich damit sogar zum Nachbauen animieren. :-)

AVR Mikrocontroller

Es gibt kleine und große AVR-Mikrocontroller. Die kleinen AVRs sind aus der ATtiny-Familie und man bekommt diese Dinger schon ab acht Beinchen (Pins). Dann gibt es noch welche mit 20 Pins, mit 28, mit 40 und mehr. So ein Mikrocontroller (kurz µC) ist ein kleiner Prozessor mit eingebauter Peripherie und Speicher. In so einem Mikrocontroller läuft ein Programm Schritt für Schritt ab. Das Programm für so einen Mikrocontroller wird auf einem Computer entwickelt und dann in den FLASH-Speicher des Mikrocontroller übertragen. Sobald der µC Strom bekommt, läuft das Programm los. Dabei kann im Programm z.B. der Status (LOW oder HIGH) eines oder mehrerer Pins abgefragt werden. Und je nach Zustand können andere Pins auf LOW oder HIGH geschaltet werden. LOW bedeutet, dass der Pin nach GND schaltet und HIGH bedeutet, dass der Pin nach VCC (=Versorgungsspannung) schaltet.

So ein AVR-Mikrocontroller hat viele nützliche Dinge mit eingebaut. Z.B. hat so ein AVR einen oder mehrere Timer. So ein Timer kann Ereignisse zählen oder selbst auslösen. Z.B. kann so ein Timer zum Erstellen von Frequenzen oder PWM-Signalen verwendet werden. Es gibt noch mehr was so ein AVR kann, aber darauf möchte ich jetzt nicht eingehen, da diese Dinge für dieses Projekt nicht so wichtig sind.

Wichtig ist nur, dass so ein Mikrocontroller die Signale eines Computers empfangen und umsetzen kann. Man kann so einem µC, über den COM-Port des Computers, Anweisungen schicken die er dann ausführt. Und noch etwas ist wichtig. So ein µC kann ein schnelles, einstellbares PWM-Signal erzeugen und damit z.B. die Geschwindigkeit eines Motors regeln.

Die Unterschiede der wichtigsten AVR-Mikrocontroller habe ich bereits auf einer anderen Seite beschrieben.

Noch vorab, einen wichtigen Hinweis: Es gibt Internetseiten, die ausführlich über ein Thema berichten. Ich werde im Laufe dieser Projektbeschreibung öfter Links zu anderen Internetseiten präsentieren. Es ist kein Fehler, sich diese Seiten auch wirklich anzusehen. ;-)

In der Seite "Vorstellung der wichtigsten Mikrocontroller", bin ich zum Beispiel bereits auf die wichtigsten AVRs eingegangen. Dort schreibe ich zwar, dass die ATmega-Familie die interessanteste AVR-Familie sein, doch für dieses Projekt habe ich den ATtiny13 ausgewählt, da er klein und billig ist.

ATtiny13

ATtiny13 Foto

Der ATtiny13 ist ein sehr kleiner Mikrocontroller mit nur acht Beinchen (Pins). Zwei der Pins fallen für die Stromversorgung (5 Volt und GND) weg und ein Pin ist für den Reset reserviert. Dann bleiben noch fünf Pins übrig, mit denen wir arbeiten können.

Wie man hier im Anschlussplan gut sehen kann, sind das die Pins PB0...PB4.

ATtiny13 Anschlussplan

Zwei dieser Pins brauchen wir um den Motor vor oder zurück drehen zu lassen und einen dieser Pins (PB0) können wir verwenden um das PWM-Signal, zur Regulierung der Geschwindigkeit, zu erzeugen. Dann fehlt nur noch ein Pin, der für die Verbindung zum Computer zuständig ist. Ein Pin bleibt übrig, aber man muss ja nicht immer alle Pins verwenden. :-)

Es ist Pflicht, dass du dir das Datenblatt des ATtiny13 ansiehst. Zumindest solltest du dir die ersten paar Seiten anschauen, damit du einen Überblick über die Möglichkeiten des ATtiny13 bekommst. Eine Liste mit den Datenblättern der für uns wichtigsten AVR-Mikrocontroller findest du auf der Seite "Die wichtigsten Datenblätter".

Schematischer Aufbau des Projektes

Ich denke, dass dieses Projekt vom Baukastenprinzip profitieren kann. So ist der Grundaufbau sehr billig und wenn man noch einen Motor anschließen möchte, dann baut man sich das Steuermodul noch einmal auf.

Das sind die geplanten Module:

Stromversorgung:
Dieses Modul liefert den Strom für alle Module.
RS232-TTL:
Dieses Modul verbindet den Computer mit dem ATtiny13.
Motorsteuerung:
Auf diesem Modul befindet sich der ATtiny13, mit dem der Motor angesteuert wird. Jedes Modul kann über eine eigene ID angesprochen werden.

An das RS232-TTL-Modul können alle Steuermodule angeschlossen werden. Die Befehle die vom Computer kommen, werden an alle Steuermodule verteilt. Nur wenn die ID des Steuermoduls mit dem Befehl übereinstimmt, dann reagiert das Steuermodul und führt den Befehl aus.

Der Computer muss eigentlich nur noch einen Befehl als "Text" über den COM-Port (RS-232) und über das RS232-TTL-Modul an den ATtiny13 schicken. Der ATtiny13 bekommt diesen Text übermittelt und je nach übermitteltem Text führt der ATtiny13 die gewünschte Aktion aus. Ob das jetzt das Umschalten der Richtung oder das Verändern des PWM-Signals ist, spielt keine Rolle mehr.

Das Schicken so einer Textnachricht, vom Computer zum ATtiny13, ist lächerlich einfach. Mit der Programmiersprache Python würde das Übermitteln des Textes "Hallo" in etwa so aussehen:

import serial
ser = serial.Serial("COM1")
ser.write("Hallo")
ser.close()

Das nur mal vorab, damit du dir ausrechnen kannst, wie einfach die Steuerung mit dem Computer programmiert werden kann.

Umpolen des Motors - die H-Brücke

Jeder kennt das. Wenn man einen Gleichstrommotor in die umgekehrte Richtung drehen lassen will, dann polt man den Strom um. Da wo vorher der Minus-Pol (z.B. einer Batterie) an den Motor gehalten wurde, legt man den Plus-Pol hin und da wo vorher der Plus-Pol gelegen ist, legt man den Minus-Pol hin. Und schon dreht der Motor in die andere Richtung.

Aber wie kann man so etwas realisieren, wenn man nicht ständig mit der Hand die Drähte umlegen möchte?

Die einfachste Möglichkeit ist ein doppelter Umschalter. Man braucht dazu einen Schalter der zwei Leitungen gleichzeitig umschalten kann. Diese Schalter haben normalerweise sechs Beinchen an denen man Kabel anschließen kann. Um genaueres über einen Schalter rauszufinden, musst du ihn nur mit einem Durchgangs- oder Widerstandsmesser durchmessen.

Zweifache Umschalter

Und meistens wird der mittlere Anschluss, je nach Schalterstellung, entweder mit dem linken oder mit dem rechten Anschluss verbunden. Es gibt sogar Schalter die eine Mittelstellung kennen, wie z.B. der schwarze Schalter ganz rechts. Mit solchen Schaltern kann man einen Motor ausschalten, nach links und nach rechts drehen lassen.

Schaltplan: H-Brücke mit Schalter

Wenn man den Schalter nicht selbst umschalten möchte, dann kann man die gleiche Schaltung natürlich auch mit einem Relais aufbauen. So kann man die Drehrichtung, auch starker Motoren, ferngesteuert umschalten.

Über die Relaisschaltung werde ich jetzt nichts genaueres schreiben, denn das hat bereits unser Strippenstrolch erledigt. Hier sind Links zu zwei Seiten die das Prinzip der H-Brücke mit Relais beschreiben:

Schaltplan: H-Brücke mit Relais

So eine H-Brücke kann man nicht nur aus Schaltern oder Relais machen. Es gibt auch H-Brücken aus Transistoren (bipolar, FET, MOSFET,...). Und es gibt ICs, die leistungsfähige H-Brücken, sogenannte Motortreiber, zur Verfügung stellen. Einer davon ist der L298.

L298

l298_multiwatt.gif

Der L298 ist ein IC der zwei Gleichstrommotoren oder einen Schrittmotor treiben kann. Wenn man zwei Gleichstrommotoren anschließt, dann kann man den L298 mit bis zu 2 Ampere und 46 Volt belasten. Für jeden Motor gibt es drei Eingänge und zwei Ausgänge. Mit zwei Eingängen wird bestimmt, ob der Motor vorwärts oder rückwärts drehen oder "Schnellstoppen" soll. Mit dem dritten Eingang wird der Motor ein- oder ausgeschaltet.

Eine Beschreibung des L298 findest du beim Strippenstrolch.

Wenn man die beiden Eingangssignale zusätzlich über ein OR-Gatter an den Enable-Eingang leitet, dann kann man mit nur zwei Leitungen den Motor vorwärts und rückwärts drehen lassen, schnell und normal stoppen.

Technische Daten des L298

Außer dem L298, gibt es natürlich noch unzählige dieser ICs. Manche schwächer, manche stärker. Manche können nur einen Motor ansteuern und manche haben sogar schon die Freilaufdioden mit eingebaut. Als interessante Alternative zum L298 möchte ich hier noch den IC L293D erwähnen. Mit dem L293D können zwei Motoren mit bis zu 600 mA in beide Richtungen angesteuert werden. Die Freilaufdioden sind bereits eingebaut und ein Übertemperaturschutz, ebenfalls. Wenn man einen Motor nur in eine Richtung drehen lassen muss, dann kann man damit sogar bis zu vier Motoren ansteuern.

Pulsweiten Modulation (PWM)

Wenn man die Geschwindigkeit eines Gleichstrommotors regeln möchte, dann kann man das mit Hilfe der Pulsweiten Modulation (PWM) machen. Das bedeutet, dass man Impulse in gewissen Längen an den Motor schickt.

Man schaltet, innerhalb eines gleichbleibend langen Zeitraumes, den Motor ein und aus. Je kürzer die Phase ist, in der der Motor eingeschaltet ist, desto langsamer wird der Motor. Je länger die Phase ist, in der der Motor eingeschaltet ist, desto schneller dreht sich der Motor.

Und dass der Motor in den AUS-Phasen nicht stockt, macht man das so schnell, dass man nichts davon merkt. So ein Zeitraum mit einer EIN-Phase und einer AUS-Phase kann z.B. 500 mal oder mehrere tausendmal in einer Sekunde durchlaufen werden.

Die ideale Frequenz für diese PWM ist von Motor zu Motor verschieden. Sie hält sich normalerweise aber zwischen 500 und 10.000 Hz. Je kleiner die Frequenz, desto kräftiger ist der Motor, da sich der Motor wie eine Spule verhält und ein Widerstand für Wechselstrom ist. Je höher die Frequenz, desto höher der Widerstand. Es gilt auch die Regel, dass Motoren mit einer hohen Windungszahl mit einer kleineren PWM-Frequenz angesteuert werden sollten. Motoren mit einer kleineren Windungszahl können mit einer etwas höheren PWM-Frequenz angesteuert werden. Als Ausgangsfrequenz für Tests mit den Motoren kann man 1.500 Hz verwenden.

Es gibt noch ein Problem, welches ab und zu auftauchen kann. Die Frequenz, in der man einen Motor ansteuert kann man hören. Wenn der Motor in einer ungünstigen PWM-Frequenz mitschwingt, dann hört man das als Pfeifen. In so einem Fall muss man die PWM-Frequenz testweise verändern, bis man eine Frequenz gefunden hat, in der der Motor nicht pfeift und trotzdem kräftig läuft.

Erklärende Links zum Thema PWM:

Der ATtiny13 hat zwei eingebaute PWM-Ausgänge. Das sind die Pins OC0A/PB0 und OC0B/PB1. Damit kann man PWM-Signale erzeugen, ohne das Hauptprogramm des Mikrocontrollers zu belasten.

RS-232 Kommunikation mit dem Computer

Die einfachste Art, einen AVR-Mikrocontroller, wie den ATtiny13, mit einem Computer zu verbinden, ist über die RS-232-Schnittstelle des Computers. Wenn nur Daten vom Computer zum µC geschickt werden, dann genügen dafür bereits zwei Leitungen. Eine Datenleitung und eine GND-Leitung. Die RS-232-Schnittstelle arbeitet mit Spannungen zwischen -15 und +15 Volt und negativer Logik. Ein Signal zwischen -15 und -3 Volt (man achte auf das negative Vorzeichen) gilt als logisch "1". Und ein Signal zwischen +3 und +15 Volt gilt als logisch "0".

Im Unterschied zum Computer, arbeitet ein AVR-µC nicht mit negativen Spannungen. Außerdem ist beim ATtiny13 5 Volt ein logisches "1" und 0 Volt ein logisches "0". Also erstens genau umgekehrt als beim Computer und dann auch noch andere Spannungen.

Aber beide, der Computer und der ATtiny13, arbeiten mit dem gleichen Übertragungsprotokoll (UART). Man muss also nur die Spannungen angleichen und die Signale invertieren -- schon können sich beide miteinander unterhalten. Und genau das macht der MAX232 -- ein IC mit 16 Pins.

Sobald der Computer mit dem ATtiny13 verbunden wurde, kann der Computer dem ATtiny13 Textnachrichten senden. Im Programm des ATtiny13 kann man diese Nachrichten empfangen, auswerten und entsprechend darauf reagieren.

Zum Beispiel, könnte man vom Computer aus den Text "Schalte Motor ein" an den ATtiny13 schicken. Im Programm prüft man in einer Schleife, ob dieser Text gesendet wurde. Wenn ja, dann wird der Motor eingeschaltet. So einfach ist das. :-)

Stromversorgungsmodul bauen

Die Module brauchen eine Stromversorgung mit einer stabilen Spannung. Das übernimmt der LM7805. Das ist ein kleiner IC, der aus 7-35 Volt Gleichspannung die stabilisierten 5 Volt für unsere Module liefern kann.

stromversorgung_v05.gif

Der Schaltplan kann mit dem sPlan-Viewer betrachtet und ausgedruckt werden.

Links am Eingang wird eine Gleichspannung mit mindestens 8 bis maximal 35 Volt angeschlossen. Du kannst z.B. eine 9 Volt Blockbatterie oder ein einstellbares Steckernetzteil dafür verwenden.

Die Diode D1 schützt die Schaltung und damit auch die angeschlossenen Module vor verkehrtem Anschließen. Als Kontrollleuchte habe ich eine rote Standard-LED eingeplant. Achte darauf, die LED richtig herum einzubauen. Mehr darüber erfährst du wieder einmal beim Strippenstrolch unter http://www.strippenstrolch.de/1-2-4-die-leuchtdiode.html. Wenn der Strom richtig angeschlossen wurde, dann sollte diese LED leuchten. Solltest du am 5 Volt Ausgang dieser Schaltung einen Kurzschluss verursachen, dann brennt diese LED nicht mehr. Das ist das Zeichen, so schnell wie möglich, den Strom abzuschließen. :-)

Als Spannungsregler wird der LM7805 eingesetzt. Damit dieser unter widrigen Bedingungen nicht zu schwingen anfängt, werden Schwingungen von den beiden Kondensatoren C2 und C3 abgefangen. Damit der LM7805 nicht zerstört wird, wenn ein Störimpuls von den Modulen zurück kommt, wird er mit einer 1N4007-Diode überbrückt. Achte darauf, dass diese Diode in Sperrichtung eingebaut wurde. Auf den Bildern ist teilweise noch eine 1N4148-Diode zu sehen. Ich habe die Schaltung etwas weiterentwickelt. eine 1N4007 ist dafür besser geeignet.

Die beiden ELKOs C1 und C4 kümmern sich um eine zusätzliche Glättung der Spannung und dienen auch als kleiner Buffer, um kurzfristige Stromspitzen abzufangen. Achte darauf, die ELKOs richtig herum einzubauen.

Weitere Informationen findest du unter:

Auf Lochrasterplatine (großflächig) aufgebaut, könnte das z.B. so wie hier aussehen. Wenn du auf das Bild klickst, dann bekommst du eine größere Ansicht.

stromversorgung_lochmaster_mittel.gif

Das nächste Bild zeigt die fertig aufgebaute Platine. Wenn du auf das Bild klickst, dann öffnet sich die Seite mit den Bildern vom Aufbau des Stromversorgungsmoduls.

stromversorgung_aufbau_10_fertige_platine_mittel.jpg

Tipp

Die Bauteile lassen sich leichter auf die Lochrasterplatine auflöten, wenn man die Kupferseite der Lochrasterplatine einen Tag vorher mit Brennspiritus oder irgendeinem anderen Alkohol reinigt und danach mit Lötlack einsprüht. Im Lötlack ist Flussmittel und das erleichtert die Arbeit doch sehr. :-) Wenn es schnell gehen soll, dann kann man den Lötlack vorsichtig mit einer Heißluftpistole antrocknen. Dann kann man die Platine schon nach wenigen Stunden (oder auch früher) benutzen, ohne beim Arbeiten am Lack kleben zu bleiben.

Für hartnäckige Teile, eignet sich "Kolophonium" als Flussmittel. Das harte Kolophonium kann man mit ein wenig Brennspiritus aufweichen/verdünnen. Es sollte etwas flüssiger als Honig sein, so dass man es gut mit einem kleinen Pinsel auftragen kann. Ich habe immer ein (sehr) kleines Fläschchen davon (mit einem kleinen Pinsel im Deckel) neben der Lötstation stehen.

Bauteilliste

  • 1 x Streifenrasterplatine, 150x100mm
  • 2 x Printklemmen mit Schraubanschluss; zweipolig (Leiterplatten-Anschlussklemmen)
  • 4 x Lötnägel (optional)
  • 1 x Diode 1N4001
  • 1 x Diode 1N4148
  • 1 x Festspannungsregler LM7805
  • 1 x Kondensator 330 nF
  • 1 x Kondensator 100 nF
  • 1 x Elko 470 µF, 50 V
  • 1 x Elko 100 µF, 10 V
  • 1 x Widerstand 180 Ohm
  • 1 x Standard-LED rot, 20 mA bei 2 Volt

Zu finden bei Kessler-Electronic:

1 x HSR100X150MM - Lochrasterplatte 100x150 Hartpapier Streifenraster
    - 1,29 €
2 x ARK210/2 - Anreihklemme 2-polig RM5,0mm 250V  24A Schraubklemm
    - 0,17 x 2 = 0,34 €
1 x LÖR1MM - Lötnägel ø1,0x10mm versilbert Einpreßschaft rund
    - 1,59 €
    - 100 Stück
1 x 1N4001 - Gleichrichter-Diode 50 V 1,0 A DO41
    - 0,02 €
1 x 1N4148 - Universal-Diode 75 V 100 mA DO35
    - 0,02 €
1 x 7805 - Spannungsregler + 5V 1,0A TO220
    - 0,17 €
1 x VS 330N Z5U R5 - Vielschichtkondensator 330 nF 63 V Z5U RM 5,08 mm
    - 0,15 €
1 x KER 100N R5 - Keramikkondensator 100 nF 63 V RM 5,08 mm
    - 0,07 €
1 x EST 470/50 - Elko stehend 470 µF 50 V ø 10x21mm RM 5,0 mm
    - 0,16 €
1 x ESM 100/16 - Miniatur-Elko stehend 100 µF 16 V= ø 6,3 x 7 mm RM2,5
    - 0,09 €
1 x K0,25W 180R - Widerstand 180 Ohm 5% 0,25 W Bauform 0207
    - 0,29 €
    - 10 Stück
1 x EL1383SURD/S53 - LED ø 5mm rot 632nm 500mCd@20mA 2,0V 35° diffus
    - 0,07 €
1 x KUDR05-RT - Kupfer-Schaltdraht 1x0,2mm² rot 10m-Ring
    - 0,99 €

GESAMT: 5,25 € (Stand zum 8. April 2009)

RS232-TTL-Modul bauen

Gleich wie das Stromversorgungsmodul, möchte ich auch das RS232-TTL-Modul auf einer Streifenrasterplatine aufbauen. Die Schwierigkeit ist hier die D-Sub9-Buchse. Ich habe keine Buchse gefunden, die man direkt auf die Streifenrasterplatine auflöten kann. Also werde ich die D-Sub9-Buchse entweder mit einem kurzen Kabel mit der Platine verbinden, oder mit der Heißklebepistole auf der Platine ankleben. Wie ich es dann wirklich machen werde, weiß ich noch nicht.

Aber jetzt geht es erst mal ans Zeichnen des Schaltplanes... :-)

rs232_ttl_v01.gif

Der Schaltplan kann mit dem sPlan-Viewer betrachtet und ausgedruckt werden.

Wir brauchen für dieses Projekt nur den RXD-Ausgang. Aber vielleicht möchtest du dieses Modul ja auch mal dafür verwenden, um Daten vom µC zum Computer zu schicken. Deshalb habe ich den Schaltplan für dieses Modul gleich so gezeichnet, dass man alles damit machen kann. RTS ist eine Leitung, die der Computer einschalten kann. Der µC kann dann den Status dieser Leitung abfragen. Genau umgekehrt verhält es sich mit der CTS-Leitung. Diese kann vom µC eingeschaltet werden und der Computer kann den Status dieser Leitung abfragen. Eigentlich sind diese Leitungen zum Synchronisieren der Datenübertragung gedacht. Aber du kannst damit machen, was du willst. Z.B. ein Notaus-Signal vom Computer an den µC schicken. :-)

Wichtig

Diesmal sind auf der Streifenrasterplatine zehn einzelne Leiterbahnunterbrechungen mit drauf. Und zwischen den Beinchen des MAX232 muss auch jede Verbindung unterbrochen werden. Achte darauf, dass du die Leiterbahnen auch wirklich an den richtigen Stellen unterbrichst. Untersuche die Platine nach dem Zusammenlöten mehrmals mit einem Vergrößerungsglas, bevor du sie in Betrieb nimmst. Achte darauf, dass die Elkos einen Pluspol und einen Minuspol haben, die genau mit dem Schaltplan übereinstimmen müssen.

Wenn du auf das Bild klickst, dann öffnet sich eine Seite, in der du verschiedene Ansichten auf den Lochrasterplan findest.

rs232_ttl_vorderseite_farbe_mittel.gif

Das nächste Bild zeigt die fertig aufgebaute Platine. Wenn du auf das Bild klickst, dann öffnet sich die Seite mit den Bildern vom Aufbau des RS232-TTL-Moduls.

rs232_ttl_aufbau_04_fertig_mittel.jpg

Bauteilliste:

  • 1 x Streifenrasterplatine, 150x100mm
  • 6 x Printklemmen mit Schraubanschluss (Leiterplatten-Anschlussklemmen)
  • 6 x Lötnägel (optional)
  • 5 x Elko 1 µF, 50 V
  • 1 x Präzisions IC-Sockel; 16 polig
  • 1 x MAX232 (MAX232N, MAX232CPE)
  • 1 x D-Sub 9 Buchse

Nachtrag:

"stromflo" hat mich darauf aufmerksam gemacht, dass es D-Sub 9 Buchsen gibt, die man an ein Flachbandkabel klemmen kann. Das ist natürlich eine feine Lösung, die ich dir nicht vorenthalten möchte. Das sieht dann z.B. so aus:

d_sub_flachband.jpg

Wenn dir die Heißkleber-Lösung nicht gefällt, dann kannst du dir so eine D-Sub 9 Buchse besorgen und die Platine damit aufbauen.

Parallelport-Programmer bauen

Auf einem Mikrocontroller läuft ein Programm, welches man vorher auf dem Computer programmiert und dann auf den Mikrocontroller überträgt. Die Geräte, mit denen man diese Programme auf den µC überträgt (=flashen), nennt man "Programmer". Es gibt mehrere solcher Programmer zu kaufen. Ich persönlich verwende den mySmartUSB, mit dem ich sehr zufrieden bin. Aber für dieses Projekt baue ich mal den STK200-Parallelport-Programmer auf einer Lochrasterplatine auf. Denn wer noch einen Parallelport im Computer eingebaut hat, der kann damit recht komfortabel seine AVR-Mikrocontroller flashen. Und das mit einem Hardwareaufwand von nur ein paar Euro. :-)

Und das ist der Schaltplan, nach dem du den Programmer aufbauen kannst:

stk200_programmer_v08.gif

Der Schaltplan kann mit dem sPlan-Viewer betrachtet und ausgedruckt werden.

Wenn du auf das Bild klickst, dann öffnet sich eine Seite, in der du verschiedene Ansichten auf den Lochrasterplan findest.

stk200_vorderseite_farbe_mittel.gif

Das nächste Bild zeigt die fertig aufgebaute Platine. Wenn du auf das Bild klickst, dann öffnet sich die Seite mit den Bildern vom Aufbau des STK200-Programmers.

stk200_aufbau_08_fertig_mittel.jpg

Bauteilliste

  • 1 x Streifenrasterplatine, 150x100mm
  • 1 x Präzisions IC-Sockel; 20 polig
  • 1 x 74HC244 (HC244, SN74AS244)
  • 1 x D-Sub 25 Buchse (oder Stecker)
  • 1 x Verbindungskabel zum Computer
  • 1 x 100k Widerstand
  • 1 x Diode 1N4148
  • 1 x Keramikkondensator 100 nF
  • 1 x 10pol. Wannenstecker
  • 1 x 6pol. Wannenstecker
  • 2 x 10pol. Pfosten-Steckverbinder
  • 20 cm 10poliges Flachbandkabel

Zu finden bei Kessler-Electronic:

1 x HSR100X150MM - Lochrasterplatte 100x150 Hartpapier Streifenraster
    - 1,29 €
1 x PRF20 - IC-Fassung 20-polig Dual-Inline LowCost-Präzision RM 7,62mm
    - 0,26 €
1 x HC244 - Leitungstreiber 8-Bit-Bus DIP20
    - 0,23 €
    - entspricht 74HC244 (HC244, SN74AS244)
1 x KE01SC - Serielles Kabel SD25ST auf SD25ST 1,8 m Kabel 25p
    - 1,74 €
    - Verbindungskabel zum Computer
1 x SDB25LK - SUB-D-Buchse 25-pol. mit Lötkelch vergoldete Stanzkontakte
    - 0,16 €
    - D-Sub 25 Buchse
1 x K0,25W 100K - Widerstand 100 KOhm 5% 0,25 W Bauform 0207
    - 0,29 €
    - 10-Stück-Gurt
1 x 1N4148 - Universal-Diode 75 V 100 mA DO35
    - 0,02 €
1 x KER 100N R5 - Keramikkondensator 100 nF 63 V RM 5,08 mm
    - 0,07 €
1 x PSW10 - Pfostenstecker 10-polig Wanne print stehend
    - 0,11 €
1 x PFL10 - Pfostenbuchse 10-polig anpressbar inkl. Zugentlastung
    - 0,18 €
1 x AWG28-10-1M - Flachbandkabel 10-polig grau RM1,27mm 1 Meter
    - 0,61 €
1 x KUDR05-RT - Kupfer-Schaltdraht 1x0,2mm² rot 10m-Ring
    - 0,99 €

GESAMT: 5,95 € (Stand zum 5. April 2009)

Motor-Steuermodul bauen

Auf das Steuermodul kommt der ATtiny13 drauf. Dieser Mikrocontroller empfängt die Befehle vom Computer und steuert den Motor.

Die Einfachste Art einen Motor anzusteuern, ist wahrscheinlich mit zwei Relais. Wie weiter oben bereits erklärt wurde, kann man mit einem der beiden Relais den Motor starten und stoppen. Mit dem zweiten Relais steuert man die Laufrichtung.

Die Steuerung eines Gleichstrommotors 'nur mit Relais' hat einen großen Vorteil: Man kann damit auch sehr starke Motoren ansteuern. Die Relais müssen natürlich den Strom aushalten den der Motor zieht.

Der große Nachteil ist, dass man, 'nur mit Relais', die Drehgeschwindigkeit nicht steuern kann. PWM kann nicht eingesetzt werden, da bei PWM die Stromzufuhr zum Motor sehr schnell ein- und ausgeschaltet werden muss -- viel zu schnell für ein Relais. Dieses schnelle Ein- und Ausschalten würde das Relais zerstören. Außerdem kann es passieren, dass das Relais durch das schnelle Ein- und Ausschalten Hochspannung erzeugt, welche die gesamte Schaltung zerstören würde. Relais und PWM --> geht nicht!

Ähnlich einfach wie die Lösung mit zwei Relais, wäre eine Lösung mit einem Relais, welches die Drehrichtung des Motors umschaltet und einem starken Transistor, der die Stromzufuhr zum Motor steuert. Damit wäre die Steuerung der Drehgeschwindigkeit mit PWM möglich, ohne dass die Schaltung viel komplizierter wird.

Natürlich gibt es auch andere Möglichkeiten, eine H-Brücke (zum Ändern der Drehrichtung) zu erstellen: Mit bipolaren Transistoren, mit FETs oder mit extra dafür geschaffenen ICs. Ich möchte die Schaltung aber so einfach wie möglich halten, damit sie auch von Elektronik-Einsteigern nachvollzogen werden kann.

Ich halte fest: Das Steuermodul steuert den Motor an. Die Drehrichtung wird mit einem Relais umgeschaltet. Die Stromzufuhr des Motors wird mit einem Transistor gesteuert.

[hier fehlt noch was]

Programm mit Bascom erstellen

'**************************************************************************
'* Motorsteuerung mit PWM-Geschwindigkeitsregelung für Gleichstrommotoren
'* (vorwärts, rückwärts)
'*
'*
'* ACHTUNG! Noch nicht getestet und noch nicht komplett fertiggestellt!
'*
'*
'**************************************************************************
$regfile = "attiny13.dat"
$crystal = 9600000
$hwstack = 16
$swstack = 10
$framesize = 16

Const My_device_id = "01"

Pwm_channel Alias Portb.0
Config Pwm_channel = Output

A_channel Alias Portb.1
Config A_channel = Output

B_channel Alias Portb.2
Config B_channel = Output

Config Timer0 = Pwm , Prescale = 8 , Compare Pwm = Clear Up
Stop Timer0

Open "comb.3:2400,8,n,1" For Input As #1

Dim Cmdstring As String * 7
Dim Device_id As String * 2
Dim Tmpstring As String * 3


Do
   Input #1 , Cmdstring
   Device_id = Left(cmdstring , 2)
   If Device_id = "00" Or Device_id = My_device_id Then
      Select Case Mid(cmdstring , 2 , 1)
      Case "0"
         'Sanftstopp (auslaufen lassen)
         Stop Timer0
         Reset Pwm_channel
      Case "1"
         'Schnellstopp
         Stop Timer0
         Set Pwm_channel
         Reset A_channel
         Reset B_channel
      Case "2"
         'Vorwärts
         stop timer0
         reset pwm_channel
         Set A_channel
         Reset B_channel
         Start Timer0
      Case "3"
         'Rückwärts
         stop timer0
         reset pwm_channel
         Reset A_channel
         Set B_channel
         Start Timer0
      Case "4"
         'PWM-Einstellung (0 = Stop, 1 = Langsam, 255 = Schnell)
         Tmpstring = Mid(cmdstring , 3 , 3)
         Ocr0a = Val(tmpstring)
      End Select
   End If
Loop

Close #1

End

[hier fehlt noch was]

Fusebits des ATtiny13 einstellen

[hier fehlt noch was]

Programm zum ATtiny13 übertragen

[hier fehlt noch was]

Testprogramm für den Computer

[hier fehlt noch was]

Fragen/Diskussion/Hilfe

Stelle Fragen zu diesem Projekt bitte im Stromflo-Forum: http://www.forum.stromflo.de/viewtopic.php?f=13&t=46

Schicke bitte keine Fragen per Email an mich. Die Fragen, die du zu diesem Projekt hast und deren Antworten oder auch deine Vorschläge, sind auch für Andere interessant.