PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schrittmotoren ansteuern mit Delphi oder ähnlichem



Finn
16.02.2005, 13:16
Hallo Leute!

Ich plane einen Satellitenschüsselrotor zu bauen, der mit zwei Schrittmotoren für Azimut und Elevation bertrieben wird.
Als Steuerung habe ich mir das RN-Motor ST Board ausgeguckt.
Allerdings müsste ich mir eine eigene Software zusammenfriemeln, die dem Board sagt, was es zu tun hat.

Nun habe ich einige Fragen an euch:

Was ist eurer Meinung nach besser dafür geignet:
Ein RS 232 oder I2C Bus?

Leider bin ich kein toller Programmierer. Nur mit Delphi (6) kenne ich mich ein wenig aus. Wie kann ich damit das Board ansteuern? Ich habe zwar schon mal in die Doku von dem Board geschaut, aber da waren nur Befehle für andere oder ähnliche (Basic) Programmiersprachen.

Hat jemand so was ähnliches schom mal mit Delphi gemacht?

Bin noch Schüler und ein totaler Newbie auf dem Gebiet. Ich wäre euch für jede Hilfe dankbar.

Gruß
Finn Henseleit

PasstScho
16.02.2005, 13:51
Über RS232 ist das am einfachsten, wenn du es an den PC anschließen willst. Es gibt die Windows Befehle CreateFile ReadFile ... damit kannst du dann den ComPort öffnen(ja auch wenns *file heißt!). Dann musst du ein kleines Setup machen und kannst lesen/schreiben.
Ob und wie der Microcontroller auf dem RN-Board programmiert ist, ist mir nicht bekannt. Entweder du machst das selber, und kennst dann natürlich die Reihenfolge, in der du welche Daten versendest - oder du musst das alles selber machen. Wenn du unbedingt Code haben willst, kann ichs auch mal rauskramen...
MfG Alex

Finn
16.02.2005, 14:30
Hi PasstScho,

vielen Dank für deine rasche Antwort. Allerdings kann ich der Sache nicht ganz folgen. Ich bin wirklich ein Anfänger auf dem Gebiet .

Was ich brauche ist ein kleines Programm für den PC wo wenn man z.B. auf einen Button klickt der Schrittmotor um x Schritte nach rechts läuft und wo man die Geschwindigkeit einstellen kann und so weiter. Doch wie geht das und wie macht man das z.B. mit Delphi ? Was kann ich der Platine wie und wann sagen und was läuft dann ab?

mfG
Finn

PasstScho
16.02.2005, 15:56
Hi,
Ich habe mich nicht darüber informiert, was die Platine macht. Es gibt da allerdings nicht besonders viele Möglichkeiten.
Die Erste Möglichkeit ist: Der Prozessor auf der Platine ist fertig Programmiert und du musst es nur an den PC anschließen und kannst einen einfachen bestimmten Befehl mit Delphi an den Com-Port schicken, was bewirkt, dass der Motor sich x Schritte dreht.
Die andere, und wahrscheinlichere Möglichkeit ist: Der Prozessor auf dem Board macht nix. Du musst ihn selber nach deinen Anforderungen programmieren, oder fragst hier ob jemand sowas gemacht hat und dir geben kann, sodass du es wie in der ersten Möglichkeit benutzen kannst.
MfG Alex

16.02.2005, 16:07
Hi,
so wie ich das der Doku der Platine entnehmen kann ist der Prozessor schon vorinstalliert und man kann die Platine direkt mit RS232 Befehlen ansteuern.

Aber wie geht das mit Delphi?

MfG
Finn

PasstScho
16.02.2005, 17:27
Das sieht mir aus als wolltest du ein komplettes Programm von mir, das den Motor steuert. Ich hab dazu aber leider keine Zeit. Wenn du genauer sagst, wo dein Problem liegt, kann ich dir auch ne genauere Antwort geben.
MfG Alex

Finn
16.02.2005, 18:14
Hi PasstScho,

das habe ich nicht beabsichtigt. Sorry wenn's so rüber gekommen ist.

Vielleicht hat aber schon jemand mal sowas ähnliches mit Delphi gemacht und dann wäre ich dankbar wenn ich mal einen Blick in den Quelltext blicken dürfte.

Mit dem PC-Programm möchte ich z.B.

Per Mausklick oder Tastendruck die Motoren um eine Bestimmte Anzahl an Schritten in eine Richtung fahren

Die Geschwindigkeit der Drehung einstellen

Die Motoren ein- und ausschalten


MfG
Finn

HeJa
16.02.2005, 18:35
Hallo Finn

such mal im Netz nach dem Delphi Package "CPORT263".
Das mußt Du installieren, und dann kannste die RS 232 programmieren.
In der Package sind Beispiele enthalten zur Beschreibung.

MfG

HeJa

16.02.2005, 21:10
Hi,
Also um die rs232 zu beschreiben ist nicht viel erforderlich(wie bereits weiter oben gesagt). Ich hab mir mal ne Klasse dazu gemacht(die noch nicht besonders ausgereift ist) aber funktionieren tut die.
http://de.geocities.com/theonlychecker/ComClass.pas

uses ComClass;

...

var
_com:TComPort;//oder global
begin
//kann in form.oncreate
_com:=TComPort.Create;
_com.Port:=3;
_com.Open;
_com.Setup;
// irgendwo hin
_com.Write(b,1);
// form.ondestroy
_com.Destroy;
end;

17.02.2005, 06:41
das kann dir weiterhelfen
CBD222+TMC222 (http://www.channaa.com/html/cbd222.html)

Damit kannst alle mögliche Parameter über PC änderen und bis zu 32 Motor ansteueren.
Auch mit Delphi. Schau dir die Schnittstellenbeschreibung (http://www.channaa.com/Preliminary_Manual_CBD1032DLL_V101.PDF) an.

17.02.2005, 10:39
das kann dir weiterhelfen
CBD222+TMC222 (http://www.channaa.com/html/cbd222.html)

Damit kannst alle mögliche Parameter über PC änderen und bis zu 32 Motor ansteueren.

Das kostet allerdings 150 Euro für einen einzigen Motor bei lediglich 800 mA.
Da ist rn-motor mit 2 Schrittmotoren und jeweils 2A den Einsteiger sicherlich interessanter, kostet ja nur ein Bruchteil.

17.02.2005, 11:26
mit dem CBD222 ist dafür viel einfacher über die vorhandene Schnittstelle anzusteuern. Und keine Hardwarekenntnisse sind erforderlich.
Natürlich für den Einsteiger ist die günstigere Variante immer besser!
Aber ein NewBee will immer einen schnellen, einfachen Einstieg haben.
An einem CBD222 können bis zu 32 Motoren angeschlossen werden. Aber beim rn-motor nur 2!!

17.02.2005, 11:43
32 Motoren aber nur für 32 x 150 Euro = 4800 Euro - nicht vergessen zu erwähnen da es sonst falsch verstanden wird.

Gerade die Ansteuerung ist doch bei rn-motor sehr einfacher. Über einfache rs232 Befehl gibst du Anweisung und das Board macht alles allein. Das geht aus jeder Programmiersprache sogar aus script-Dateien. Noch einfacher gehts doch nicht.

17.02.2005, 12:03
Das ist natürlich vollkommen falsch!!
Die Wahrheit ist: 32 x 8,00 € (256,00 €) und wenn die TMC222 selbst nicht löten kannst, dann 32 x 40,00 € (1280 €)

Die Möglichkeiten eines TMC222 sind nicht zu übertreffen.
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=783&highlight=tmc222 oder
http://www.trinamic.com/tmcweb/downloads/tmc222_datasheet_v104.pdf

Frank
17.02.2005, 13:37
Bitte auf das eigentliche Thread-Thema achten, es geht darum wie man unter Delphi die RS232 Schnittstelle anspricht. Dazu wird doch jemand was posten können?

Was das Board cbd222 mit dem TMC-Chipsatz betrifft, das ist sicher gut und ist im professionellen Bereich sicher auch empfehlenswert. Dieser Chipsatz ist natürlich in den Feinheiten wie Stromregelung, Microschritt rn-Motor überlegen – keine Frage. Aber das sind Eigenschaften die für den Einsteiger und Roboter-Bastler sicherlich weniger interessant sind.
Einsteiger möchten doch mit möglichst wenig Befehlen auch mal stärkere Schrittmotor steuern, da ist sicher rn-Motor einfach die preislich günstigere Lösung die oft schon ausreicht. Beispiele in Visual Basic oder Bascom Basic sind ja im rn-Motor Thread vorhanden.

RN-Motor Bauanleitung/Infos
https://www.roboternetz.de/phpBB2/viewtopic.php?t=2741

Ein Pascal Beispiel gibt es in der Doku. Die Ansteuerung ist ja extra für Einsteiger besonders leicht gemacht worden.

Die Schaltung ist ja offengelegt, man braucht sich nur Platine und Controller RNST01 besorgen und kann preiswert viele Aufgaben damit erledigen. Zudem sind für den Antrieb dann auch gleich zwei Motoren mit bis zu 2A möglich. Die Ansteuerung kann wahlweise per Rs232 oder I2C erfolgen – wobei natürlich per I2C auch mehr als 2 Schrittmotoren angesteuert werden können wenn man mehrere Board´s nutzt. Aber oft reichen ja dem Einsteiger zwei Motoren..

Aber nach der Abschweifung sollten wir nun erst mal die Delphi Frage klären. Wo sind die Delphi Experten?

Gruß Frank

Alter Knacker
17.02.2005, 13:43
Ein Pascal Beispiel gibt es in der Doku.

also ich als anfänger konnte mit der *.pas nix anfangen, die *.vbp ist allerdings ok, wenn man vb6 hat, in .net konnte ich auch das nicht verwenden.
mfg knacki

Frank
17.02.2005, 14:03
Hallo knacki,
ich denke es dürfte nicht so schwer sein einen Befehl wie

Print "#rmd"; Chr(0); Chr(0);

in alle Sprachen auch NET zu übersetzen. Dieser String muss z.B. nur über RS232 ausgegeben werden um die Drehrichtung des ersten Motor´s zu ändern. So werden alle Befehle in der Doku genau beschrieben.

Ein klein wenig muss man sich natürlich in allen Sprachen bemühen. Programmieren heißt ja nicht das man alles 1:1 irgendwo abschreibt.

Alter Knacker
17.02.2005, 14:20
ja klar, das ansprechen ist schon klasse erklärt, war auch einer der hauptgründe für mich, das teil zu kaufen ;-)
ich wollte nur anmerken, dass die *.pas alleine mit delphi scheinbar nicht genügt, und dass man das beispielprogramm (das anfänger natürlich als erstes ansehen und austesten wollen) nicht in .NET importiert wird (bei mir zumindest nicht).
mfg knacki

Frank
17.02.2005, 14:26
Hi Knacki,

die PAS-Datei die ich erwähnte kann dafür auch kaum gehen. Das ist ein Pascal-Beispiel für ein Mega8 Controller. Johannes war so freundlich das bereitzustellen.

Es wäre schön wenn jemand noch ein Delphi Beispiel posten könnte damits noch vollständiger/einfacher wird. Es kann doch in Delphi nicht so schwer sein ein paar Zeichen über die RS232 zu senden, oder?

R5D5
17.02.2005, 19:33
hi leute.

also ich bin am selben problem am arbeiten, und ich bin so weit das ich mit delphi die einzelnen pins des LPT port's ansprechen kann. hir ein delphi programm zum testen. und der Parmon ist sowas wie ein monitor für die LPT port. damit könnt ihr den zustand des portes sehen. beides starten und gucken.

Ps.: nicht von mir geschreiben, aber klasse zum testen.

MFG Tommy

R5D5
17.02.2005, 19:36
und "frank"

es ist nicht einfach mit delphi den LPT Port anzusteuern wenn man nur ein wenig ahnung hat von delphi. :-k bin schon länger am knobeln und suchen! ](*,)

MFG Tommy

PasstScho
17.02.2005, 20:10
Hi!
Also ich hab schön öfters was mit Delphi gemacht, und wie man über die rs232 nen paar zeichen sendet habe ich bereits mit einer .pas Datei(die einfach in ein bestehendes Project eingefügt werden kann, wie oben gezeigt) beschrieben. Die einzelnen Pins des LPT anzusteuern ist dann schon etwas komplizierter, da ich unter WinXP arbeite. Unter Win98 gab es da einfach einen Delphi-asm code, mit dem man die Ports lesen und schreiben konnte. Ich habe mir für WinXP die io.dll(http://www.geekhideout.com/iodll.shtml) runtergeladen und steuere damit alles an, denn WinXP unterbindet alle Aufrufe, die direkt an die Ports gehen.
@R5D5: lad dir die DLL runter. Wenn es unbedingt sein muss, verrate ich auch noch, wie man die dll benutzt ;) ...
MfG Alex

R5D5
17.02.2005, 22:41
hi

"passtscho" währe gut wenn du es erklären könntest.!
[-o<

MFG Tommy

PasstScho
20.02.2005, 16:01
Das ganze ist eigentlich recht gut beschrieben auf der Internetseite - aber wenns denn unbedingt sein muss:


// das muss oben irgendwo hin. am besten über "implememtation"

procedure PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
procedure PortWordOut(Port : Word; Data : Word); stdcall; external 'io.dll';
procedure PortDWordOut(Port : Word; Data : DWord); stdcall; external 'io.dll';
function PortIn(Port : Word) : Byte; stdcall; external 'io.dll';
function PortWordIn(Port : Word) : Word; stdcall; external 'io.dll';
function PortDWordIn(Port : Word) : DWord; stdcall; external 'io.dll';
procedure SetPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
procedure ClrPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
procedure NotPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
function GetPortBit(Port : Word; Bit : Byte) : WordBool; stdcall; external 'io.dll';
function RightPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external 'io.dll';
function LeftPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external 'io.dll';
function IsDriverInstalled : Boolean; stdcall; external 'io.dll';

// bei Form.OnCreate oder sonstwo:
if not IsDriverInstalled then
begin
Showmessage('io.dll konnte nicht geladen werden!');
halt;
end;

// die kleine Hilfsfunktion sollte unter implementation sein

Function MakeByte(bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7:b yte):byte;
begin
result:=bit0*1 or bit1*2 or bit2*4 or bit3*8 or bit4*16 or bit5*32 or bit6*64 or bit7*128;
end;

// damit macht man setzt man die einzelnen bits:
// $0378 ist die Daten-Adresse vom LPT1 (im normalfall)

PortOut($0378,MakeByte(1,0,1,0,1,0,1,0));

//natürlich geht das auch mit SetPortBit oder ClrPortBit oder NotPortBit oder ...

Ich hoffe jetzt ist das alles sonnenklar! ...

MfG Alex