Hi!
Das klingt ja recht interessant, aber ist das Board eher für Getriebemotoren oder eher für Schrittmotoren geeignet?
Wofür ist der riesige Kühlkörper? Nur für die Motortreiber?
Ist der nicht n bischen überdimensioniert?
Druckbare Version
Hi!
Das klingt ja recht interessant, aber ist das Board eher für Getriebemotoren oder eher für Schrittmotoren geeignet?
Wofür ist der riesige Kühlkörper? Nur für die Motortreiber?
Ist der nicht n bischen überdimensioniert?
Kann man hier auch Fragen stellen? Also, wie viele Schrittmotoren wird man denn mit einem Modul ansteuern können?
Gruß
Johannes
Ich glaube 2 Schrittmotoren! :o)
Oder 4 Getriebemotoren! :o)
Sehe ich das richtig? :o)
Oh ja, hatte mir die Software nicht genau angeschaut. Aber da steht ja linker und rechter Motor ;-)
Wäre es damit auch möglich, irgendwie unipolare Motoren anzusteuern? Von denen habe ich nämlich unzählige hier liegen und bekomme sie nur nicht angesteuert. Deshalb habe ich großes Interesse an so einem Board, wie gesagt aber an einem für unipolare.
Gruß
Johannes
Wo ist eigentlich der unterschied zwischen Bipolar und Unipolar oder so?
Unipolare Motoren haben 5 bis 6 Anschlüsse, bipolare nur 4. Hängt wohl irgendwie mit der Ansteuerung/Anordnung der Spulen zusammen.
Gruß
Johannes
Aha!
Dann ist das Board glaube ich nur für Bipolare!
Denn die verwendeten L298 (wenn ich das richtig erkenne) haben nur 4 Ausgänge!
Hi,
ja sicher, Fragen und Anregungen sind hier auch willkommen.
Zu den Fragen:
Nein der Kühlkörper ist nicht überdimensioniert. Bedenke auch das es auf Bild eventuell etwas größer aussieht als es ist. Ganze Board ist ja nur 100x78mm. Zudem können 2 Schrittmotoren mit bis zu 2A je Wicklung (Phasenstrom) angesteuert werden. Das sind im Extremfall 8A !!! Dieser Kühlkörper ist durchaus üblich bei derartigen Boards. Zudem bin ich gerne auf der sicheren Seite. EIn guter Nebeneffekt ist, das er die Elektronik überdeckt und somit gut abschirmt.
Das bereits im Test befindliche Board ist erst mal nur für bipolare Schrittmotoren (nahezu beliebiger Nennspannung) ausgelegt.
Aber das Board ist so konzipiert, das durch den Austausch des Steuercontrollers (unter Kühlkörper) oder dessen Software auch optimal für Getriebemotoren geeignet ist.
Es können dann sogar bis zu 4 Getriebemotoren mit jeweils 2A per RS232 oder I2C angesteuert werden. Die Software für die Getriebemotoren und I2C-Steuerung kommt aber erst etwas später. Momentan ist erst mal das Schrittmotor Betriebsystem soweit fertig.
Der Unterschied zwischen bipolar und unipolar ist am besten auf folgender Seite beschrieben: https://www.roboternetz.de/schrittmotoren.html
Bipolar ist die etwas kraftvollere Ansteuerung wie sie beispielweise auch vom L297 genutzt wird. Fast alle Schrittmotoren lassen sich bipolar anschließen, dazu reichen 4 Anschlüsse. Für unipolare Ansteuerung sind min. 5 Anschlüsse notwendig.
Durch ein leicht geändertes Betriebsystem könnte das Board auch unipolare Motoren ansteuern! Aber in der Regel lassen sich unipolare Motoren auch bipolar ansteuern wenn die mittlere Anzapfung nicht miteinander verbunden ist.
Gruß Frank
Hallo Frank,
habe gerade einen entsprechenden eintrag hier im Forum gefunden. Ja, meine Schirttmotoren haben noch die sechs Leitungen (und nicht nur fünf), deshalb sollte das klappen.
Wunderbar, dass es so ein Board gibt. Ehrlich gesagt wollte ich das letztens mal anregen, dass jemand hier mal sowas entwickelt. Ich werde einer der ersten Käufer sein!
Gruß
Johannes
Naja, ich bin ein Fan von Getriebemotoren wie den RB-35!
Für mich bringt das Board nichts!
Ich baue mir lieber selber eins! ;o)
Hi Johannes,
ja ich fand auch das ein einfach zu steuerndes Board noch gefehlt hat. Sehr schön ist halt auch das es günstig und ser universell ist. Dies ist eben dadurch möglich weil es über eigen Controller verfügt. Werde später nochmal ein paar Features posten.
@Florian: Wie gesagt, Board ist auch für Getriebemotoren geeignet. Es muss dann später nur der Controller mit neuer Software umgesteckt werden. Aber man kann es natürlich auch selber bauen, als Hilfe veröffentliche ich ja auch bald Schaltplan falls man was ähnliches braucht.
Die Steuerung per RS232 oder I2C hat schon Vorteile. Mit kleiner Funkkarte könnte man so sogar ferngesteuert Motoren steuern. Denke Anwendungen finden sich da schon. Aber ideal ist es halt für Controller. Damit können dann auch Controller die etwas langsam sind wie die C-Control Schrittmotoren ansteuern. Die Schritte werden ja von dem Board selbst generiert, der Controller braucht sich also da nicht drum kümmern und kann in Ruhe seine Sensoren etc. abfragen. Kommt Hinderniss dann sendet er einfach Stop Befehl. Er kann dann sogar die gefahrene Schritte einfach über einen Befehl abfragen. Daraus kann recht einfach sehr genau die gefahrene Wegstrecke berechnet werden.
Gruß Frank
Hi Frank!
Darf man fragen, welcher Controller verwendet wird?
Aber gerne!
Der Controller hat den Namen RNST01 bekommen und wird für Selbstbauschaltungen in wenigen tagen auch bei robotikhardware.de abgegeben. Dahinter verbirgt sich ein Atmel M8, der speziell für diese Aufgabe programmiert wurde.
Hier noch ein Foto bei dem der Kühlkörper abgenommen wurde
Gruß Frank
Hi Frank!
Ist schon interessant, wie die Platine ohne Kühlkörper aussieht, aber irgendwie sehe ich keine Leistungsdioden, die beim L298 ja gebraucht werden, oder sind das garkeine L298?
Moin,
ich brauche die Platine vor allem, da ich demnächst einen neuen Roboter (Synchrodrive) bauen möchte. Allerdings habe ich wenig Lust, mich besonders mit der Entwicklung einer eigenen Ansteuerung für die Schrittmotoren zu beschäftigen. Wahrscheinlich werde ich dann gleich zwei Bausätze nehmen.
Die 50€ gelten für was, Bausatz oder nur Platine?
Gruß
Johannes
Hallo Frank
faszinierend, das Board. sieht sehr gut aus. Der Kühlkörper passt ja auch wunderbar. Ich freu mich schon auf den Schaltplan.
Wofür ist denn der Taster?
Hi,
danke Stupsi, ja der Kühlkörper paßt recht gut. Vorne und hinten steht noch ca. 1cm über, so das man auch noch an die Buchsen und Taster an kommt. Und die Bauhöhe ist mit ca. 3 cm immer noch relativ niedrig.
Schaltpan und Anleitung werde ich im Laufe der nächten Woche fertig machen (zumindest für die Schrittmotorversion mit RS232 Steuerung) und uploaden.
Der Taster ist nur ein normaler RESET-Taster. Wird selten benötigt, abe rist ab und zu doch ganz nützlich. Ansonsten sind alle Ports sowie gesamte Controllerspeicher ausgenutzt. Durch diese Ausnutzung konnte auf Logikbausteine und Schick Schnack verzichtet werden, so das Board recht günstig wurde.
@johannes:
Die Platinen sind zwar beste Industriequalität, aber aus Gold sind Leiterbahnen nicht :-) Also ca. 50 Euro soll nicht die Platine sondern der ganze Bausatz mit Kühlkörper und Platine kosten. Die Platine allein wird wieder wie üblich 9,90 Euro kosten.
@Florian:
Doch doch, es sind die bewährten L298. Du hast aber richtig bemerkt, es sind keine Dioden zu sehen. Aber keine sorge, diese stecken in den beiden unteren Schaltkreisen L6210. Das hat etwas Platz eingespart und reduziert etwas die Aufbauzeit. 2 IC´s lassen sich doch schneller löten als 16 Dioden.
Gruß Frank
Hier eine kurze Erläuterung zu den verschiedenen Varianten des Boards:
RN-Motor ST RS232
Diese Variante steuert bis zu zwei Schrittmotoren völlig unabhängig per RS232 an. Es sind TTL-Anschlüsse sowie Standard RS232 Anschlüsse vorhanden. Ein Controller als auch ein PC kann somit direkt angeschlossen werden. Ein Port würde somit für die komplette Steuerung ausreichen (2 Ports sind ideal). Die Übertragung erfolgt mit 9600 Baud.
Die Schritte werden natürlich vom Board automatisch generiert, dennoch kann die Anzahl genau überwacht werden. Die Stromregelung erfolgt automatisch. Der erlaubte Strangstrom kann per Befehl bis zu 2 A eingestellt werden. Das reicht gewöhnlich selbst für sehr starke Schrittmotoren aus.
RN-Motor ST I2C
Wie zuvor, jedoch erfolgt hier die Ansteuerung über den beliebten I2C-Bus. Nahezu alle modernen Controller/Boards verfügen über einen I2C-Bus (z.B. RN-Control, RNBFRA und viele mehr)
RN-Motor GT RS232
Diese Variante steuert bis zu vier Getriebemotoren. völlig unabhängig per RS232 an. Es sind TTL-Anschlüsse sowie Standard RS232 Anschlüsse vorhanden. Ein Controller als auch ein PC kann somit direkt angeschlossen werden. Ein Port würde somit für die komplette Steuerung ausreichen (2 Ports sind ideal). Die Übertragung erfolgt mit 9600 Baud. Zwei Motoren der vier werden per PWM in der Geschwindigkeit geregelt.
Alle 4 Motoren können bis zu 2A aufnehmen
RN-Motor GT I2C
Wie zuvor, jedoch erfolgt hier die Ansteuerung über den beliebten I2C-Bus. Nahezu alle modernen Controller/Boards verfügen über einen I2C-Bus (z.B. RN-Control, RNBFRA und viele mehr)
Und das Beste:
Man kann das Board entweder gleich in der gewünschten Variante kaufen oder es später durch Wechsel der Firmware(Betriebsystem) von einer Variante in eine andere umbauen. Die Firmware wird für einen geringen Unkostenbetrag auch einzeln über robotikhardware.de angeboten.
Aktuell ist momentan die Variante RN-Motor ST RS232, die ist praktisch fertig. Die Software für die anderen Varianten kann noch ein paar Wochen dauern weil ich derzeit etwas viel um die Ohren habe.
Gruß Frank
Danke für die Infos, jaja, die 50€ für die Platine wären schon viel gewesen, aber ich habe keine Ahnung, wie günstig du die erstellen kannst. Aber das beruhigt mich dann ja ;-)
Gruß
Johannes
Hi Frank!
Das hört sich ja alles immer interessanter an! :o)
Und der L6210 hält wirklich bis zu 2 A aus? *boa* *staun*
Ich muss mich bald wohl oder übel mit der RS232 und I2C beschäftigen! ;o)
Scheint ja doch langsam so zu sein, dass ohne die beiden kaum noch was geht! :o)
Hi Frank!
Nochmal ne kleine Frage!
Was sind diese weißen dicken Dinger links und rechts von den L6210?
Widerstände?
Sieht aus wie dicke Shunts (Zementwiderstände) zum Motorstrom messen...Zitat:
Zitat von Florian
Gruß, Sonic
Motorstrom messen?
Wie funzen die?
Das sind einfach nur Hochlastwiderstände in den Zuleitungen zum jeweiligen Motor. Wenn Strom durchfliesst fällt ja Spannung über dem Widerstand ab, die wird gemessen und weil man ja weisß wie groß der Widerstand ist, weißt du dann wieviel Strom der Motor gerade braucht.Zitat:
Zitat von Florian
Aber wie gesagt, gebaut hat Frank das Board, der weiß ob das Shunts sind oder nicht...
Gruß, Sonic
Achso!
Hi,
@Florian:
Ja es ist genau so wie es Sonic beschrieben hat, es sind 5W Zementwiderstände für Strommessung.
Richtig, der L6210 verträgt 2A. Bei maximaler Dauerbelastung sollten diese IC´s etwas gekühlt werden. Da die direkt unter einem großen Kühlkörper sitzen ist das recht einfach mit ein kleinem Metallvierkant oder so möglich. Klebt oder klemmt man einfach zwischen iC´s und Kühlkörper. Bei meinen Test´s hab ich das aber noch nicht gebraucht.
Das sind eigentlich sehr schöne IC´s, keine Ahnung warum die so wenig bekannt sind.
Und i2C sollte man sich wirklich man anschaun. Im Grunde hat man das ganz schnell raus. Ich hab die damals schon bei der C-COntrol ganz gerne genommen. Da musste man allerdings immer ein kleines Assemblerprogramm einbinden damit es Sinn macht. Bei Bascom, also z.B. RN-Control, ist das bequemer, da gibt es sogar Basic Befehle für.
@Johannes:
Ja das stimmt, einzeln sind doppelseitige Platinen mit Bestückungsdruck, Lötstopplack in der Tat unheimlich teuer. Ich lass daher immer gleich größere Serien machen, dadurch rechend sich das am Ende - zumindest meißtens ;-)
Gruß Frank
kann man die Boards dann mit I2C über Flachbandkabel nach RNB Definition verbinden?
Hallo Albanac
Ja genau. Es ist der übliche 10polige I2C Stecker der von Board zu Board durchgeschleift werden kann. Die I2C-Buchse sitzt, trotz Kühlkörper, auch bei dem Board gut erreichbar an der üblichen Stelle.
Für RS232 Anschluss wird der übliche 3 polige Stecker genommen (RX/GND/TX). Für RS232-TTL steht eine vierpolige Stiftleiste bereit. Dazu aber später mehr in der Anleitung.
@Florian: Wegen I2C-Bus schau auch mal unter den Links oder bei Google. Es gibt schon recht viele Seiten darüber.
Gruß Frank
Frank, ich hoffe, du sagt hier nochmal Bescheid, wenn man das Board endlich bestellen kann?!?
Dann reicht es, wenn ich diesen Thread besuche.
Gruß
Johannes
P.S. Mach mal hinne, ich will jetzt so ein Board haben! *gg
Hi Johannes,
Fertigstellung läuft auf Hochdruck. Es sind nur noch kleine Optimierungen und halt die Anleitung die auch noch etwas Zeit kostet.
Auf der Robotikhardware.de-Bestellseite ist die erste Variante aber jetzt schon zu finden. Kann also bei Intresse bestellt werden.
Da für den Test die ersten Boards schon aufgebaut wurden, wird eine kleine Anzahl auch als Fertigboard abgegeben sobald die Doku und Software fertig ist. Platine einige Tage später und danach kommt auch Bausatz.
Gruß Frank
Moin,
und wie werden die Fertig-Boards verteilt? Also, wie kann man die bekommen? Obwohl ich auch kein Problem habe, zu löten.
Gruß
Johannes
Achja, ich sehe schon, kann man extra bestellen.
Der aktuelle Stand:Anleitung / Schaltplan etc. kommt eventuell doch erst nächste Woche.
Der Grund ist, das jetzt doch viele gleich nach der I2C-Bus Version gefragt haben. Ursprünglich sollte erst die RS232 Version kommen, daher mache ich die Tage das I2C-Betriebsystem auch fertig und nehme gleich beides in die Anleitung auf. Beide Betriebsysteme laufen schon, sind nur noch kleine Tests und Feinheiten notwendig.
Übernächste Woche sind dann also beide Varianten inkl. Platinen fertig und vorrätig.
Gruß Frank
Wunderbar, ich freue mich schon ;-)
Gruß
Johannes
Bild hier
Schrittmotorboard mit I2C oder RS232 Ansteuerung ist nun fertig
Anleitung, Schaltplan etc. ist im Download-Bereich zu finden.
Hier die wesentlichen Features im Überblick:
- Deutlich höheres Drehmoment (Motorkraft) durch automatische PWM-Stromregelung
- Maximal zulässiger Strangstrom kann durch einfachen Befehl von einem Controller oder PC zwischen 0 und 2A festgelegt werden. Kein rumschrauben mehr an Potis!
- Es können nahezu alle bipolaren Schrittmotoren beliebiger Nennspannung 1V bis zur Versorgungsspannung (7 bis 22V) angesteuert werden. Beispiel: Sie können auch einfach einen 1.9V Motor an ein Board mit 9V oder 12V anschließen, der Motor wird nicht überlastet da der max. Strom eingestellt wird. RN-Motor arbeitet etwas ähnlich wie die L297/L298 Schaltung, bietet jedoch mehr High Level-Funktionen
- Durch die Verwendung eines programmierten Controllers und mehrer integrierter Schaltkreise benötigt das ganze Board nur wenig Bauteile. Dies reduziert Kosten und erleichtert den Aufbau.
- Ein mitgelieferter Steuerprogramm erlaubt die Ansteuerung der Schrittmotoren bequem per Mausklick. Durch die Möglichkeit unterschiedliche Ströme und Geschwindigkeiten einzustellen, lassen sich Schrittmotoren auch optimal austesten.
- Übermittelt wird nur der Befehl der beschreibt wieviel Schritte ein bestimmter Motor in welcher Geschwindigkeit und Drehrichtung erfolgen soll. Um die Generierung und das zählen der Schritte kümmert sich das Board völlig automatisch. Dadurch wird der steuernde Controller oder PC erheblich entlastet
- 255 exakte Geschwindigkeitstufen möglich
- Drehrichtung und max Strombedarf jederzeit änderbar
- Endlosfunktion, welche Schrittmotoren solange dreht bis ein Stopp Befehl kommt
- Schrittezähler, die ausgeführten Schritte der Motoren können jederzeit abgerufen werden, somit läßt sich exakt die Länge der gefahrenen Strecke berechnen
- Bei ausgeschalteten Motoren benötigt das Board weniger als 40mA, das ist deutlich weniger als bei üblichen L297/L298 Schaltungen.
- Board läßt sich auch per RS232 Befehl in Sleep-Mode versetzen um Stromaufnahme weiter zu verringern (auf ca. 20mA).
- LED signalisiert wenn die Betriebsspannung nicht ausreicht um den Schrittmotor-Nennstrom (also maximale mögliche Leistung) bei der gewählten Geschwindigkeit zu erreichen. Eine recht nützliche Analysefunktion.
- ISP-Programmieranschluß –Atmel Programmierer können das Board mit einem eigenen Betriebsystem versehen. Dies ist aber nicht notwendig!
- Zur Steuerung des Board´s würde im Notfall ein RS232 TX PORT reichen. Bei der RN-Control könnte fast jeder Port dafür verwendet werden wenn in Basic programmiert wird. Ideal sind jedoch zwei Ports um auch die Rückmeldungen des Motorboards auswerten zu können.
- Ansteuerung über beliebige Controller z.B. RN-Control, RNBFRA, C-Control oder PC
- Erlaubte Versorgungsspannung 7V bis 22 V
- Sehr kompakt, nur halbes Europaformat nach Roboternetz-Norm (ca. 100x75mm). Dadurch mit anderen Boards nach Roboternetz-Standard huckepack verschraubbar.
- Deutsche Doku mit Programmbeispielen für RN-Control und C-Control und PC-Steuerprogramm
Hier ein Ansteuerbeispiel für die RN-Control:
Und hier ein Beispiel für Ansteuerung mit PC (Visual Basic):Code:'###################################################
'Schrittmotoransteuerung mit RN-Control und
'Ansteuerungsboard RN-MOTOR über I2C
'
'
'Aufgabe:
' Dieses Testprogramm beschreibt die Motorboard I2C-Funktionen
' und legt einige der Befehle auf die 5 Tasten
' Den verschiedenen Tasten sind bestimmte Funktionen zugeordnet
' Taste 1: Stellt für den linken Motor den Motorstrom auf 200mA ein und schaltet Motor danach ein
' Taste 2: Lässt den linken Motor endlos drehen
' Taste 3: Fragt der bereits ausgeführten Motorschritte des linken Motors vom Board ab und
' berechnet daraus Umdrehungen und Fahrtstrecke
' Daten werden über RS232 angezeigt
' Taste 4: Ändert die Geschwindigkeit des linken Motors mit jedem Tastendruck
''Taste 5: Schaltet den linken Motor wieder aus
' Achtung:
' In der Bascom Version 1.11.7.4 ist noch ein kleienr Bug in der I2C
' Libary. Dadurch funktioniert eventuell der I2CSEND Befehl nicht korrekt
' Zum korrekten Ablauf des Demos sollte daher die aktuelle Libary
' in Bascom installiert werden. Kann man hier Downloaden
' Infos dazu im Roboternetz-Thread
' https://www.roboternetz.de/phpBB2/vi...t=694&start=22
'
'Autor: Frank Brall
'Weitere Beispiele und Beschreibung der Hardware
'in der Anleitung zu RN-Motor
'Anleitung findet man unter http://www.Roboternetz.de im Download Bereich
'oder www.robotikhardware.de
'Weitere Beispiele sind im Roboternetz gerne willkommen!
'##############################################################
Declare Function Tastenabfrage() As Byte
$regfile = "m16def.dat"
'Befehle im Schrittmotorbetrieb
'K ist eine Kennungsnummer die bei RN-Motor immer 10 ist, danach folgt Befehlscode und notwendige Parameter
'Es müssen immer 5 Bytes übertragen werden, auch wenn weniger Parameter ausreichen
'k 1 x y Motor maximaler Strom x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren Y = (Milliampere / 10)
' Beispiel : Y = 150 Bedeutet 1,5A Oder Y = 20 Bedeutet 200ma
'k 2 y Referenzspannung des Controllers (normal 2.5 und muss nicht geändert werden)
' Beispiel: y=241 bedeutet 2,41 V
'k 3 x Motor stopp (Haltespannung bleibt ein) x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren Stopp
'k 4 x y Motor Drehrichtung x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren y=0=Links rum y=1 rechts rum
'k 5 x yl yh Motor genau y Schritte bewegen x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren
'y wird in High und Low Byte übertragen
'k 6 x Motor endlose Schritte bewegen bis Stop Befehl kommt x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren
'k 7 x Motor einen einzigen Schritt bewegen x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren
'k 8 x y Motor Schrittgeschwindigkeit x=0 Linker Motor x=1 Rechte Motor x2= Beide Motoren Y = 1 bis 255
'k 9 x Motor ganz ausschalten x=0 Linker Motor x=1 Rechte Motor x2= Alle Motoren Stopp
'k 10 x Motor ein und init x=0 Linker Motor x=1 Rechte Motor
'k 11 Konfiguration und Testwerte werden über RS232 ausgegeben
'k 12 Sleep Mode
'k 13 x Motor selektieren
'k 14 x x=0 Vollschrittmodus x=1 Halbschrittmodus
Const Befehl_maxstrom = 1
Const Befehl_referenzspannung = 2
Const Befehl_stop = 3
Const Befehl_drehrichtung = 4
Const Befehl_schrittanzahl_drehen = 5
Const Befehl_endlos_drehen = 6
Const Befehl_einzigen_schritt = 7
Const Befehl_geschwindigkeit = 8
Const Befehl_ausschalten = 9
Const Befehl_einschalten = 10
Const Befehl_konfiguration_zeigen = 11
Const Befehl_sleep_modus = 12
Const Befehl_motor_selektieren = 13
Const Befehl_schrittmotormodus = 14
Const Motor_links = 0
Const Motor_rechts = 1
Const I2crnmotorslaveadr = &H56 'I2C SlaveAdresse von RN-Motor Erweiterung
Const I2crnmotorsreadlaveadr = &H57 'I2C SlaveAdresse von RN-Motor Erweiterung
Dim I2cdaten(6) As Byte 'Array um Befehlsfolge auszunehmen
Dim Lowbyte As Byte
Dim Highbyte As Byte
Dim Schritte As Long
Dim Temp As Byte
Dim Ltemp As Long
Dim Umdrehungen As Single
Dim Fahrstrecke As Word
Dim Geschwindigkeit As Byte
Dim I As Integer
Dim N As Integer
Dim Ton As Integer
$crystal = 16000000 'Quarzfrequenz
$baud = 9600
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
Geschwindigkeit = 250
I2cinit
Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung
Config Pina.7 = Input 'Für Tastenabfrage
Porta.7 = 1 'Pullup Widerstand ein
Dim Taste As Byte
I = 0
Sound Portd.7 , 400 , 450 'BEEP
Sound Portd.7 , 400 , 250 'BEEP
Sound Portd.7 , 400 , 450 'BEEP
Print "**** RN-CONTROL V1.4 *****"
Print "Demoprogramm um Zusatzkarte RN-Motor im Schrittmotormodus zu testen"
Do
Taste = Tastenabfrage()
If Taste <> 0 Then
Select Case Taste
Case 1
'Motorstrom auf 200mA begrenzen
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_maxstrom 'Befehlscode
I2cdaten(3) = Motor_links '1 Parameter
I2cdaten(4) = 200 / 10 '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt)
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
'Halbschrittmodus
' I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
' I2cdaten(2) = Befehl_schrittmotormodus 'Befehlscode
' I2cdaten(3) = 1 'Beide Motoren Halbschrittmodus
' I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
'Motor einschalten
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_einschalten 'Befehlscode
I2cdaten(3) = Motor_links '1 Parameter
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
Case 2
'Motor endlos drehen
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_endlos_drehen 'Befehlscode
I2cdaten(3) = Motor_links '1 Parameter
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
Case 3
'Motor für Datenabruf anwählen
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_motor_selektieren 'Befehlscode
I2cdaten(3) = 0 '1 Parameter
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
'Schritte abrufen und Umdrehungen und Fahrtstrecke berechnen und über RS232 anzeigen
I2cstart
I2cwbyte I2crnmotorsreadlaveadr
I2crbyte Temp , Ack
Schritte = Temp
I2crbyte Temp , Ack
Ltemp = Temp * 256
Schritte = Schritte + Ltemp
I2crbyte Temp , Ack
Ltemp = Temp * 65536
Schritte = Schritte + Ltemp
I2crbyte Temp , Nack
Ltemp = Temp * 16777216
Schritte = Schritte + Ltemp
I2cstop
Print "Schrittanzahl:" ; Schritte
Umdrehungen = Schritte / 200 'Wenn Schrittwinkel 1,8 Grad beträgt dann durch 200 teilen
Print "Umdrehungen: " ; Umdrehungen
'Umfang des rades mal Umdrehungen ergibt Fahrtstrecke
'Umfang berechnet sich auch U=3.14 * Druchmesser
'In dem Beispiel nehmen wir ein 10 cm Rad am Roboter an
Fahrstrecke = Umdrehungen * 31.4
Print "Der Roboter ist " ; Fahrstrecke ; " cm gefahren "
Case 4
'Geschwindigkeit ändern
If Geschwindigkeit > 40 Then
Geschwindigkeit = Geschwindigkeit - 20
Else
Geschwindigkeit = Geschwindigkeit - 1
End If
Print "Geschwindigkeitsstufe: " ; Geschwindigkeit
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_geschwindigkeit 'Befehlscode
I2cdaten(3) = Motor_links '1 Parameter
I2cdaten(4) = Geschwindigkeit '2 Parameter (hier Milliampere /10 in diesem Fall wird 200mA eingestellt)
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
Case 5
'Motor ausschalten
I2cdaten(1) = 10 'Kennung muss bei RN-Motor immer 10 sein
I2cdaten(2) = Befehl_ausschalten 'Befehlscode
I2cdaten(3) = Motor_links '1 Parameter
I2csend I2crnmotorslaveadr , I2cdaten(1) , 5 'Befehl wird gesendet (es müssen immer 5 Bytes gesendet werden, auch wenn weniger Parameter notwendig sind)
I2cstop
End Select
Sound Portd.7 , 400 , 500 'BEEP
End If
Waitms 100
Loop
End
'Diese Unterfunktion fragt die Tastatur am analogen Port ab
Function Tastenabfrage() As Byte
Local Ws As Word
Tastenabfrage = 0
Ton = 600
Start Adc
Ws = Getadc(7)
' Print "ws= " ; Ws
If Ws < 1010 Then
Select Case Ws
Case 410 To 455
Tastenabfrage = 1
Ton = 550
Case 340 To 380
Tastenabfrage = 2
Ton = 500
Case 250 To 305
Tastenabfrage = 3
Ton = 450
Case 180 To 220
Tastenabfrage = 4
Ton = 400
Case 100 To 130
Tastenabfrage = 5
Ton = 350
End Select
Sound Portd.7 , 400 , Ton 'BEEP
End If
End Function
Genaue Befehlsübersicht ist in der Anleitung! HierCode:Option Explicit
Dim mybuffer As Variant
Dim low As Byte
Dim high As Byte
Private Sub buttlDrehLinks_Click()
SendBefehl "#rmd" & Chr(0) & Chr(0), "OK"
End Sub
Private Sub buttlDrehRechts_Click()
SendBefehl "#rmd" & Chr(0) & Chr(1), "OK"
End Sub
Private Sub buttlEndlosdrehen_Click()
SendBefehl "#rme" & Chr(0), "OK"
End Sub
Private Sub buttlGeschwindigkeituebermitteln_Click()
SendBefehl "#rmg" & Chr(0) & Chr(HScrolllgeschwindigkeit.Value), "OK"
End Sub
Private Sub buttLMotorAus_Click()
SendBefehl "#rma" & Chr(0), "OK"
End Sub
Private Sub buttLMotorEin_Click()
SendBefehl "#rmo" & Chr(0), "OK"
End Sub
Private Sub buttlmotorstop_Click()
SendBefehl "#rms" & Chr(0), "OK"
End Sub
Private Sub buttLSchritt_Click()
SendBefehl "#rmm" & Chr(0), "OK"
End Sub
Private Sub buttlSchritteuebermitteln_Click()
high = Int(HScrolllschritte.Value / 256)
low = HScrolllschritte.Value - (high * 256)
SendBefehl "#rmz" & Chr(0) & Chr(low) & Chr(high), "OK"
End Sub
Private Sub buttLschritteZeigen_Click()
SendBefehl "#rmp" & Chr(0), "OK"
End Sub
Private Sub buttLStatus_Click()
SendBefehl "#rmt", "OK"
End Sub
Private Sub buttLStrom_Click()
SendBefehl "#rmi" & Chr(0) & Chr(lmaxstrom.Value / 10), "OK"
End Sub
Private Sub buttrDrehLinks_Click()
SendBefehl "#rmd" & Chr(1) & Chr(0), "OK"
End Sub
Private Sub buttrDrehRechts_Click()
SendBefehl "#rmd" & Chr(1) & Chr(1), "OK"
End Sub
Private Sub buttrEndlosdrehen_Click()
SendBefehl "#rme" & Chr(1), "OK"
End Sub
Private Sub buttrGeschwindigkeituebermitteln_Click()
SendBefehl "#rmg" & Chr(1) & Chr(rHScrolllgeschwindigkeit.Value), "OK"
End Sub
Private Sub buttRMotorAus_Click()
SendBefehl "#rma" & Chr(1), "OK"
End Sub
Private Sub buttRMotorEin_Click()
SendBefehl "#rmo" & Chr(1), "OK"
End Sub
Private Sub buttrmotorstop_Click()
SendBefehl "#rms" & Chr(1), "OK"
End Sub
Private Sub buttrSchritt_Click()
SendBefehl "#rmm" & Chr(1), "OK"
End Sub
Private Sub buttRSchritteuebermitteln_Click()
high = Int(RHScrolllschritte.Value / 256)
low = RHScrolllschritte.Value - (high * 256)
SendBefehl "#rmz" & Chr(1) & Chr(low) & Chr(high), "OK"
End Sub
Private Sub buttrschritteZeigen_Click()
SendBefehl "#rmp" & Chr(1), "OK"
End Sub
Private Sub buttrStatus_Click()
SendBefehl "#rmt", "OK"
End Sub
Private Sub buttRStrom_Click()
SendBefehl "#rmi" & Chr(1) & Chr(rmaxstrom.Value / 10), "OK"
End Sub
Private Sub buttVref_Click()
frmVref.Show 1
End Sub
Private Sub Form_Load()
txtStrom = ""
txtLSchritte = ""
txtlGeschwindigkeit = ""
txtStromR = ""
txtRSchritte = ""
txtrGeschwindigkeit = ""
'txtStrom = lmaxstrom.Value
'txtLSchritte = HScrolllschritte.Value
'txtlGeschwindigkeit = HScrolllgeschwindigkeit.Value
txtlog = ""
ComboComPort.ListIndex = 0
MSComm1.CommPort = ComboComPort.ListIndex + 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputLen = 0
MSComm1.PortOpen = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
End Sub
Private Sub HScrolllgeschwindigkeit_Change()
txtlGeschwindigkeit = HScrolllgeschwindigkeit.Value
End Sub
Private Sub HScrolllschritte_Change()
txtLSchritte = HScrolllschritte.Value
End Sub
Private Sub lmaxstrom_Change()
txtStrom = lmaxstrom.Value
End Sub
Function SendBefehl(befehl As Variant, warteauf As String) As Boolean
Dim buffer As String
Dim rueckgabe As String
Dim n As Long
Dim bytefeld() As Byte
Dim anz As Integer
Dim i As Integer
anz = Len(befehl)
ReDim bytefeld(anz)
For i = 1 To anz
bytefeld(i - 1) = Asc(Mid(befehl, i, 1))
Next i
SendBefehl = False
buffer = ""
MSComm1.Output = befehl
n = 0
Do
If n > 100000 Then
Beep
Exit Function
End If
rueckgabe = MSComm1.Input
txtlog = txtlog & rueckgabe
DoEvents
buffer = buffer & rueckgabe
n = n + 1
Loop Until InStr(buffer, warteauf)
txtlog.SelStart = Len(txtlog.Text)
'txtlog.SelLength = 1
DoEvents
SendBefehl = True
End Function
Private Sub rHScrolllgeschwindigkeit_Change()
txtrGeschwindigkeit = rHScrolllgeschwindigkeit.Value
End Sub
Private Sub RHScrolllschritte_Change()
txtRSchritte = RHScrolllschritte.Value
End Sub
Private Sub rmaxstrom_Change()
txtStromR = rmaxstrom.Value
End Sub
Gruß Frank
Moin!
Meine Bestellung hast du ja schon bekommen ;-)
Noch eine Frage. Es klingt ein wenig missverständlich, denn ich denke, dass man die I2C-Version nicht mit dem VB-Programm ansteuern kann, oder?
Gruß
Johannes
Hallo
Sorry wenn das mißverständlich war.
Das Visual Basic PC-Programm demonstriert nur die Ansteuerung der RS232 Version von RN-Motor.
Die I2C-Version von RN-Motor ist mit diesem Programm nicht ansteuerbar. Dafür hab ich das Beispiel für die RN-Control gepostet.
Wäre schön wenn einer der ersten C-Control Anwender von RN-Motor noch ein Beispiel für die C-Control posten könnte (i2C oder Rs232). Ansonsten muss ich die C-Control wohl auch nochmal aus dem Schrank holen.
Gruß Frank
Nur zur Info:
Die Anleitung zu RN-Motor im Downloadbereich ist nochmal aktualisiert worden.
Es hatte sich bei der Beschreibung des I2C-Befehl 13 noch ein Fehler eingeschlichen.
Zudem kam jetzt der Befehl 14 hinzu. Hiermit wird zwischen Voll- und Halbschritt umgeschaltet.
[highlight=red:85066c6986]Wichtig:[/highlight:85066c6986]
Durch den Hinweis eines aufmerksamen Users bin ich noch auf einen Fehler in dem zuletzt geposteten Beispielprogramm für die i2C-Ansteuerung von RN-Motor mit RN-Control, aufmerksam gemacht worden.
Offenbar ist beim kopieren irgendwie eine Zeile raus gerutscht. Nämlich diese:
Config Adc = Single , Prescaler = Auto
Dadurch hat bei dem Beispielprogramm die Tastenabfrage nicht funktioniert. Ich hab das Beispielprogramm oben im Beitrag korrigiert. Auch im Download-Bereich und in der Anleitung ist es bereits korrigiert.
Zudem ist zu beachten das in der Bascom Version 1.11.7.4
und älter, noch ein klenier Bug in der I2C Libary steckt.
Dies führt dazu das der I2CSEND Befehl nicht ganz korrekt arbeitet und es bei der Ansteuerung von RN-Motor Probleme geben kann.
Die Problematik wurde schon vor längerem in diesem Thread angesprochen:
https://www.roboternetz.de/phpBB2/vi...t=694&start=22
Es gibt aber schon eine korrigierte Libary die einfach nur in das entsprechende Bascom Verzeichnis kopiert werden muss. Diese findet man hier:
http://www.mcselec.com/download/avr/beta/i2clib.zip
Damit klappt´s dann bestens.
Gruß Frank
Hallo Frank
In meinem Segelboot habe ich einen Akku-Pack mit 20 Mono-D-NiMH-Zellen, also 24V nominal, wenn frisch vollgeladen Bruchteile eines Volts über 28V. Ich möchte mir jetzt die RN-Motor für I2C zulegen.
Ich hatte bei ebay Erfolg und habe 2 Schrittmotoren Oriental Vextra PH266M-E1.2B erworben. Ich werde also den Strangstrom hier immer auf 2A beim Starten der RN-Motor begrenzen.
1. Kann ich das RN-Motor mit welchen Änderungen an den max 28,2V betreiben? Was muß ich ändern? Daraus folgt natürlich das ich das Board selber erstellen muß?
2. Kann ich die RN-Motor von der RN-Control mit 5V über das I2C-IF versorgen? Aber vermutlich ist das nicht nötig da der Regler für die 5V auf der RN-Motor das abkönnen sollte? Allerdings wie beschrieben mit dem Kühlkörper verbunden werden muß!