Sag mal, kannst du dich nicht für ein Unterforum entscheiden oder warum postest du diesen Beitrag 3 mal?
Hallo liebe Leute!
ich habe einen Roboter konstruiert. Dafür habe ich 3 Motoren (MCBL 3603 Brushless DC-Sercomotor) von der FirmaFaulhaber und 3 entsprechende Motion-Controller-Karten gekauft.
Ich habe nun die Frage: wie kann man die Ansteuerung der Motoren in C++ programmieren? Ich nehme RS232 als Schnittstellen. Für die Schnittstellen-Kommunikation benutze ich PComm Library von MOXA, was einwandfrei fonktioniert.
Ich würde die Befehle (z.B. Geschwindigkeit, Drehrichtung, Stop-Befehl, Beschleunigung usw.) alle 10 oder 20ms an die Hardware schicken. Es sieht jetzt so aus, dass der Motor (oder die Controller-Karte) nicht so schnell reagieren kann.
Hat vielleicht jemand schon ähnliche Karte benutzt? Ich würde mich sehr freuen wenn jemand mir helfen könnte!
Vielen Dank!
WLAN
Sag mal, kannst du dich nicht für ein Unterforum entscheiden oder warum postest du diesen Beitrag 3 mal?
Grüße
Lars
sorry, ich konnte mich wirklich nicht für ein unterforum entscheiden.
lege mein post bitte in ein unterforum und ich werde da weiter schreiben.
danke!
Ich weiss nicht genau wer, aber irgendjemand kann Beiträge verschieben
Frank kann es bestimmt
Grüße
Lars
Es scheint wohl am besten ins PC-Forum zu passen, da es wohl um eine PC-Karte geht. Es ist zu empfehlen solche Karten immer in 2 bis 3 Zeilen zu beschreiben, denn oft sind diese PC-Karten weniger bekannt.
vielen Dank!
Diese Karte heisst: Motion Controller für bürstenlose DC Servomotoren (für den Motor MCBL 3603)
Die genaue Beschreibung seht ihr in folgender Datei:
http://www.faulhaber.de/zip_pdf/anle..._MCBL_3603.pdf
mehr zur Programmierung:
************************************************** ********
One of the most important objectives in the development of these units was to keep its operation as simple as possible. This has been attained with the use of just a few, highly efficient functions. Manual balancing or potentiometers are no longer required. Menu-guided program and
parameter-editing functions are already integrated for operation with an ASCII terminal. In place of internal menu management, the clearly structured command set can be simply integrated into a customer-specific interface, e.g. with Visual Basic, Lab View, Pascal, C++, etc. Any PC with Windows operating system can be used as an input terminal. Program updates are made directly via the serial interface without changing the hardware. Communication is made via the serial port RS232 or RS485.
************************************************** ********
Die Befehle für den Motor wurden eigentlich schon in der Software der Karte integriert. Z.B. mit dem Befehl "jn" kann man den Motor in negative Richtung bewegen. Mit "sp 10000" kann man eine Geschwindigkeit von 10000 einstellen.
Die Motoren hab ich im Roboter eingebaut. Sie sind mit den Karten (1 zu 1) verbunden. Die Karten wurden mit den RS232-Schnittstellen (über eine MOXA-PCI-Multiport-Karte)verbunden.
Mein Problem ist: ich habe die Grundbefehle (jn, jp, sp, ac usw.) als Funktionen in VC++ geschrieben. (Wie gesagt, PComm Library habe ich für die Schnittstellen-Kommunikation benutzt.) Sie scheinen auch funktionieren. Aber die Karte braucht sehr lang (über 50ms) um die Befehle auszuführen.
Ich weiss nicht ob es am C++-Programm oder an der event. falschen Benutzung der Karten liegt.
das chr(13) schickst du mit ?
die brücken sind drin oder die Hardware fluss controlle abgeschaltet ?
Hast du mal eine PC oder so an die Serial gehängt dauert es dann genauso lange ?
9 byte zum übertragen = 72 bits + 9 mal start + 9 mal stop
90 bits sollte eigendlich in 5 ms erledigt sein bei 19200 baud.
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hat mich die ganze nacht beschäftigt. deshalb frage ich jetzt das Teil ist sich nicht ganz billig gewesen wie kommt man an so ein Sponsor ?
P: Meine Tochter (06.11.07) und https://www.carnine.de
M: Träumen hat nix mit Dummheit zu tun es ist die Möglichkeit neues zu erdenken
Hallo, das ist ein Forschungsprojekt. Ich bin total Newbie in diesem Bereich. Mein Vorgänger hat den Roboter konstruiert, und ich bin jetzt für die Steuerung zuständig.Zitat von NumberFive
Ich bin eigentlich Nachrichtentechniker, habe wenig Ahnung von der Steuerung und hardwarenaher Programmierung. Deswegen bitte ich hier um eure Hilfe!
hier ist der Code zur Initialisierung der Schnittstellen und der Motoren,
könntet ihr ein paar Verbesserungstipps geben?
Code:#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> //for isdigit() #include <math.h> //for sin(), cos() #include <process.h> //for multithread #include <windows.h> //for PCOMM.h and multimedia timer #include "../Moxa/PComm.h" //Serial Communication Libarary #include "../Moxa/MoxaFunction.h" #include "GlobalFunction.h" void init (int port) { /* Port Control, enable the port */ if (sio_open(port) == SIO_OK) { sio_ioctl(port, B38400, P_NONE | BIT_8 | STOP_1 ); // Port Control, set baud, parity... sio_flowctrl ( port, 0xc ); //0XC: software flow control: XON/XOFF sio_DTR (port, 0 ); //turn DTR off sio_RTS (port, 0 ); //turn RTS off sio_flush (port, 2); /* 0 : flush input buffer 1 : flush output buffer 2 : flush input & output buffer */ sio_SetReadTimeouts(port, 0, 0); // Set sio_read into block mode, which is used in readposition() sio_SetWriteTimeouts(port,0); //Set sio_write into block mode } else { printf("Cannot Open Port%d !!!\n", port); system("pause"); exit(-1); } // tp: tell position -> definierte Funktion if (tp(port) != 0) { pq(port);// pq: Power Quit } if (port == MotorOne) { printf("Motor One Status:\t"); } if (port == MotorTwo) { printf("Motor Two Status:\t"); } if (port == MotorThree) { printf("Motor Three Status:\t"); } pw(port); printf("Power ON\t\t\n\n"); //printf("%9d\n\n",tp(port)); }
Lesezeichen