Hallo, Ich habe vor, eine Motorsteuerung (SMCI47-S-2 von Nanotec) mit dem Arduino anzusteuern. Oder besser gesagt, der Arduino nimmt Befehle über die serielle Schnittstelle vom PC entgegen und führt diese dann aus. Dazu sollen dann noch die Daten, die von einer Wägezelle kommen, an den PC übermittelt werden und permanent auf dem Bildschirm angezeigt werden. D.h. Es sollen permanent Daten gesendet, gleichzeitig aber auch Befehle empfangen und ausgeführt werden. Ist der Arduino dafür überhaupt geeignet? MfG
da du so garkeine Randbedingungen nennst kann man darauf nur mit jein antworten.
Andreas L. schrieb: > permanent auf dem Bildschirm angezeigt werden. Wenn das alles an Verarbeitung ist, dafür sind alle Beteiligten mehr als schnell genug: es hat ja keinen Sinn, mehr als höchstens 10 Werte pro Sekunde anzuzeigen, eher so 2..3. Georg
Andreas L. schrieb: > Ist der Arduino dafür überhaupt geeignet? Die Frage ist weniger, ob der Arduino geeignet ist (wahrscheinlich ist er es, denn deine Anwendung klingt jetzt nicht unbedingt nach High-Speed), sondern die Frage ist eher, ob du das programmieren kannst.
Das programmieren müsste ich hinkriegen. Jedoch weiß ich noch nicht, wie ich das mit dem Schrittmotor anstellen soll. Die Motorsteuerung hat zwei Eingänge. Den Takt und die Richtung. D.h. wenn der Motor jetzt hochfahren soll, bleibt der Arduino ja mitten in der Loop-Schleife stehen, weil er das Taktsignal für den Motor erzeugen muss. Das darf ja eigentlich nicht sein. Wie regelt man sowas?
Andreas L. schrieb: > Das programmieren müsste ich hinkriegen. > Jedoch weiß ich noch nicht, wie ich das mit dem Schrittmotor anstellen > soll. > Die Motorsteuerung hat zwei Eingänge. Den Takt und die Richtung. > D.h. wenn der Motor jetzt hochfahren soll, bleibt der Arduino ja mitten > in der Loop-Schleife stehen, weil er das Taktsignal für den Motor > erzeugen muss. Das darf ja eigentlich nicht sein. > Wie regelt man sowas? Indem man keine loop Schleife benutzt. Die Techink so etwas zu programmieren besteht nicht darin, dass der µC eine Bearbeitung anfängt und dann so lange wartet und Däumchen dreht, bis sie fertig ist. Genau das ist der naive, aber nicht zielführende Ansatz. Vielleicht verstehst du jetzt warum ich die Frage aufwerfe, ob du das programmieren kannst. Solange sich in deinen Progammen Zeitsteuerungen über delays abspielen, bist du noch nicht so weit.
:
Bearbeitet durch User
Andreas L. schrieb: > wenn der Motor jetzt hochfahren soll, bleibt der Arduino ja mitten > in der Loop-Schleife stehen, weil er das Taktsignal für den Motor > erzeugen muss wie meintest du das? Auf jeden fall bleibt der Arduino niergends stehen (ich denke mal, dass er zunächst neben deinen Schreibtsch liegen wird). Wenn, dann wird der code nicht weiter ausgeführt. aber warum sollte er das nicht machen? das kommt alles darauf an, wie du das programmierst.
> Die Motorsteuerung hat zwei Eingänge. Den Takt und die Richtung.
Da müsste es für den Arduino was fertiges geben. Wie heißt der Chip?
Jonas
Jonas G. schrieb: >> Die Motorsteuerung hat zwei Eingänge. Den Takt und die Richtung. > Da müsste es für den Arduino was fertiges geben. Gibts mit Sicherheit. Es spricht Bände, dass der TO noch nicht mal die Arduino Quellen auf der Suche nach einer Schrittmotorsteuerung abgesucht hat.
Karl H. schrieb: > Jonas G. schrieb: >>> Die Motorsteuerung hat zwei Eingänge. Den Takt und die Richtung. >> Da müsste es für den Arduino was fertiges geben. > > Gibts mit Sicherheit. > Es spricht Bände, dass der TO noch nicht mal die Arduino Quellen auf der > Suche nach einer Schrittmotorsteuerung abgesucht hat. https://www.pjrc.com/teensy/td_libs_AccelStepper.html
Karl H. schrieb: > Es spricht Bände, dass der TO noch nicht mal die Arduino Quellen auf der > Suche nach einer Schrittmotorsteuerung abgesucht hat. Das hast Du ja freundlicherweise erledigt ;-) Wenn Du ein kleines Erfolgserlebnis brauchst: http://www.mino-elektronik.de/Generator/takte_impulse.htm#bsp7 Ich weiß aber nicht, was Du für einen Arduino benutzt.
Also erst einmal, das programmieren beherrsche ich noch nicht soo gut, da hast du Recht. Aber ist das nicht gerade der richtige Weg, um es zu lernen? Indem man einfachmal ein paar Dinge ausprobiert die man noch nicht so gut beherrscht? Mir ist ja klar dass es nicht optimal ist mit delays zu arbeiten. Aber das war ja meine Frage, wie man es eben anders regeln könnte. Im Internet habe ich mich erkundigt, jedoch nichts passendes speziell zu meinem Problem gefunden. Nochmal konkret zu meinem Problem: Wenn der Motor laufen soll, brauche ich in meinem Fall einen Takt, d.h. ich müsste mit Delays arbeiten und dann in einer Schleife den Ausgang abwechselnd auf LOW und auf HIGH setzen, bis ein Stop-Befehl kommt. Nebenbei sollen aber auch die Dinge aus der Loop-Schleife durchgeführt werden.. Eurer Meinung nach müsste man es ja nur geeignet programmieren, damit es anders funktioniert. Könnt ihr auch sagen wie?
Karl H. schrieb: > Vielleicht verstehst du jetzt warum ich die Frage aufwerfe, ob du das > programmieren kannst. Solange sich in deinen Progammen Zeitsteuerungen > über delays abspielen, bist du noch nicht so weit. Sobald du verstanden hast, worin hier http://playground.arduino.cc/Learning/BlinkWithoutDelayDe der grundlegende, aber entscheidende Unterschied zu einer naiv mit delay blinkenden Led besteht, und du diesen Unterschied auch verinnerlicht hast, hast du die wesentliche Hürde genommen. Du bist auf dem Weg weg von linearem prozeduralem Denken hin zu ereignisgesteuertem Programmieren. Der Trick besteht darin, dass der µC eben nicht irgendetwas anleiert und dann auf Vollzug wartet, sondern darin, dass innerhalb von loop() reihum alle möglichen Ereignisquellen untersucht werden, ob ein Ereignis eingetreten ist. Ist das der Fall, dann wird auf dieses Ereignis reagiert. Zb. indem Aktionen angestossen werden. Ist dieses Anstossen erledigt bzw. gab es kein Ereignis an dieser Quelle, dann kommt die nächste Ereignisquelle dran. Im Beispiel ist die Ereignisquelle die interne Systemuhr, die um x Zeiteinheiten vorgerückt ist. Es könnte aber auch genausogut die serielle Schnittstelle sein, auf der ein Zeichen hereingekommen ist, das bearbeitet werden will. Beides sind einfach nur Ereignisquellen, die in loop nacheinander untersucht werden, ob etwas vorgefallen ist, was einer Bearbeitung bedarf.
:
Bearbeitet durch User
Karl H. schrieb: > Es spricht Bände, dass der TO noch nicht mal die Arduino Quellen auf der > Suche nach einer Schrittmotorsteuerung abgesucht hat. Es geht ja nicht um eine beliebige Schrittmotorsteuerung, sondern der TO möchte die SMCI47-S-2 von Nanotec ansteuern. Wenn man sich das Handbuch dieser Steuerung anschaut, bezweifle ich dass der Arduino zusammen mit dem TO der richtige ist.
Andreas L. schrieb: > Also erst einmal, > das programmieren beherrsche ich noch nicht soo gut, da hast du Recht. > Aber ist das nicht gerade der richtige Weg, um es zu lernen? Indem man > einfachmal ein paar Dinge ausprobiert die man noch nicht so gut > beherrscht? Wenn man aber ein reales Projekt angeht, sollte man schon ein bischen mehr können als nur 'ich muss 99% der Technik noch erlernen'. Du beginnst ja auch nicht damit ein Haus zu bauen, wenn du nicht weisst an welchem Ende man einen Schraubenzieher angreifen muss. > Mir ist ja klar dass es nicht optimal ist mit delays zu arbeiten. 'nicht optimal' ist falsch ausgedrückt. Das hat mit 'optimal' nichts zu tun. Delays benutzt man ganz am Anfang, denn irgendwo muss man ja auch mal anfangen mit der Programmierung. Nur sind Delays eine Sackgasse. Sackgassen kann man benutzen, wenn man Radfahren lernen will. Will man aber eine Radtour von Berlin nach München machen, dann ist es keineswegs nicht nur 'nicht optimal' in Berlin in eine Sackgasse reinzufahren, es ist schlichtweg der falsche Weg. Da hilft es dann auch nichts, auf dieser Sackgasse zu beharren. Wenn du nach München willst, dann musst du raus aus dieser Sackgasse. Sonst wird das nichts. Und dabei spielt es auch keine Rolle, ob du ein altes Klapprad benutzt oder den neuesten Carbon-High-Tech Renner. Sackgasse ist Sackgasse. Wenn du drinnen stehst, kommst du mit dem einen genauso wenig weiter wie mit dem anderen. Von daher lass uns den Tatsachen ins Auge schauen: der Arduinio ist sehr wahrscheinlich nicht das Problem.
:
Bearbeitet durch User
Motorsteuer schrieb: > Karl H. schrieb: >> Es spricht Bände, dass der TO noch nicht mal die Arduino Quellen auf der >> Suche nach einer Schrittmotorsteuerung abgesucht hat. > > Es geht ja nicht um eine beliebige Schrittmotorsteuerung, sondern der TO > möchte die SMCI47-S-2 von Nanotec ansteuern. Er will eine Step&Dir Steuerung ansteuern. Wie die dann heisst, ist ziemlich wurscht. 2 Leitungen: die eine gibt den Takt vor, die andere die Richtung. Die verlinkte Klasse kann das. Und sie kann auch Beschleunigungsrampen bzw. Bremsrampen berechnen. Um all das muss er sich nicht mehr kümmern. Edit: Ich hab mir diesen Treiber noch nicht näher angesehen, sondern darauf vertraut, dass der TO soweit recherchiert hat, dass es sich um eine Step&Dir Steuerung handelt.
:
Bearbeitet durch User
Karl H. schrieb: > Ich hab mir diesen Treiber noch nicht näher angesehen Der kann auch CAN und/oder RS485. Oder eben den Arduino direkt an die digitalen Eingänge.
@Karl Heinz Danke erst einmal für die verlinkte Klasse und die Erklärung aus dem playground. Jetzt ist meine Frage auch beantwortet. Ich werde dann morgen mal versuchen den Arduino an die Steuerung zu klemmen und die von dir verlinkte Klasse testen. Und nochmal am Rande: Es handelt sich hierbei um ein Projekt, welches hauptsächlich dazu dienen soll, dass ich etwas lerne, da ich seit gut einem Jahr dualer Student bin in der Firma. Mit Microcontrollern und so weiter hatte ich eben noch nicht soviel zu tun :) Trotzdem danke euch schonmal für eure Antworten. MfG Andreas
@Ulrich F. Genau, ich habe auch schon 2 Tage lang versucht, eine Kommunikation direkt aufzubauen zu dem Treiber, über einen USB -> RS485 Konverter. Jedoch ohne Erfolg. Der Support von nanotec meint dazu, man solle sich das passende Konverterkabel von ihnen kaufen, jedoch kann ich mir nicht vorstellen, dass es dann auf einmal klappen sollte. Außerdem kann ich nicht gerade 70€ ausgeben um es zu testen. Deswegen will ich jetzt über den Arduino ran.
Andreas L. schrieb: > @Karl Heinz > Danke erst einmal für die verlinkte Klasse und die Erklärung aus dem > playground. Jetzt ist meine Frage auch beantwortet. > Ich werde dann morgen mal versuchen den Arduino an die Steuerung zu > klemmen und die von dir verlinkte Klasse testen. Kann man natürlich machen. Empfehlen würde ich dir allerdings, mit dem verlinkten LED Beispiel zu beginnen und das um eine 2.te LED zu erweitern, die in einem andern Takt blinkt. Die eine schaltet zb alle 1 Sekunden um, die andere alle 670ms. Mit delays() ist das nicht vernünftig zu machen. Mit der verlinkten Technik ist das ein Klacks. DIe nächste Erweiterung, die du dann in Angriff nehmen solltest ist es, die Blinkzeiten per serieller Schnittstelle vorgeben bzw. ändern zu können. Und zwar ohne dass die LED aufhören zu blinken, während du am Terminal tippst! Wenn du das hinkriegst, dann verstehst du auch, was die Klasse intern macht, bzw. wie du dann ein Einfachbeispiel mit dieser Klasse erweiterst, so dass es eben auch noch Befehle entgegennimmt bzw. irgendwelche Sensoren in regelmässigen Zeitabständen abfragt, auswertet und die Ergebnisse auf den Weg bringt. Das ganze ist eine grundlegende Basistechnik. Es lohnt sich daher, im Vorfeld ein wenig damit zu spielen und das Prinzip ausführlichst kennen zu lernen. Ob an den Ausgängen jetzt ein Schrittmotor hängt oder ein paar LED ist dabei nicht entscheidend. Ausser natürlich, dass du mit ein paar LED erst mal nichts hardwaremässig ruinieren kannst :-)
:
Bearbeitet durch User
Du scheinst Dich wirklich noch nicht mit der Problematik beschäftigt zu haben. WIE DIE MEISTEN MIKROKONTROLLER, kann der "nackte" Arduino: - Keinen Motor steuern, - direkt keine serielle Schnittstelle ansprechen - und auch keine Wägezelle belauschen. Das heißt aber nicht, dass Dein Vorhaben nicht möglich ist. Die Arduinos werden über sogenannte Shields oder Break-Out-Boards erweitert. Um einen Motor zu steuern gibt es eine Erweiterung (Shield). Würde mich wundern, wenn es nicht auch die nötige Software gäbe. Für die serielle Schnittstelle benötigst Du eine Pegelanpassung der Signale von +/-12V nach 0/5 oder 0/3,3V. Da gibt es bestimmt ein passendes Break-Out-Board, meist mit einem MAX23?? drauf. Problematisch wird die Anbindung einer Wägezelle. Dazu ist mir kein Board bzw. keine Erweiterung bekannt - was nicht heißt, dass es diese nicht gibt. Im Zweifelsfalle musst Du da aber "echt" elektronisch ran. Ob Du Dir dies zutraust... Ist nicht ganz einfach. Rein von der Leistung her ist das Ganze kein Problem für einen Arduino.
Karl H. schrieb: > > https://www.pjrc.com/teensy/td_libs_AccelStepper.html Die lib arbeitet ohne Timer und ist nur für "langsame" Sachen geeignet. Schreib doch mal was genau gemacht werden soll. Was soll der Schrittmotor antreiben? Wie of soll die Kraft gemessen werden? Soll die Drehzahl in Abhängigkeit der Kraft geändert werden?
Amateur schrieb: > Du scheinst Dich wirklich noch nicht mit der Problematik beschäftigt zu > haben. Du aber auch nicht. .... > Für die serielle Schnittstelle benötigst Du eine Pegelanpassung der > Signale von +/-12V nach 0/5 oder 0/3,3V. Da gibt es bestimmt ein > passendes Break-Out-Board, meist mit einem MAX23?? drauf. Arudinos haben einen Seriell-USB Umsetzer mit an Board. Von Arduino Seite wird das als ganz normale Serielle Schnittstelle angesprochen. Ebenso auf PC Seite. Das die eigentliche Übertragung über USB läuft, braucht den Programmierer nicht zu kümmern. > Problematisch wird die Anbindung einer Wägezelle. Dazu ist mir kein > Board bzw. keine Erweiterung bekannt - was nicht heißt, dass es diese > nicht gibt. Ob du es glaubst oder nicht. Aber man kann auch ganz einfach an den herausgeführten Pins einfach etwas anschliessen. Gilt genauso für einen Schrittmotortreiber. Man kann Shields benutzen. Man muss aber nicht.
:
Bearbeitet durch User
Amateur schrieb: > Problematisch wird die Anbindung einer Wägezelle. Dazu ist mir kein > Board bzw. keine Erweiterung bekannt - was nicht heißt, dass es diese > nicht gibt. guck mal bei ebay nach HX711 (o.k. kann man nicht stecken, geht aber noch mit einem dicken Lötkolben)
Andreas L. schrieb: > ich habe auch schon 2 Tage lang versucht, eine Kommunikation > direkt aufzubauen zu dem Treiber, über einen USB -> RS485 Konverter. > Jedoch ohne Erfolg. Das ist aber schade.... Denn das Modul muss vor der Inbetriebnahme für den konkreten Motor parametrisiert werden. Also: Die Software, vom Hersteller, muss erstmal mit der Box quatschen können.
@Amateur Das mit der seriellen Schnittstelle verstehe ich nicht. Vielleicht hast du mich falsch verstanden, es soll nur eine serielle Verbindung zum PC geben. D.h. es wird einfach das beigelieferte USB Kabel verwendet, oder? Dann zu der Motorsteuerung: Die ist ja schon vorhanden, und zwar die von Nanotec. Da gibt man 5-24V Signale drauf und der Motor läuft. Das sollte der Arduino ja hinkriegen. Dann kommt noch die Wägezelle. Es wird eine 620 von Soemer verwendet mit einem LAU 63.1 Messverstärker. Dann habe ich ein Signal von 0V bis +/- 10V. Das wollte ich dann über Spannungsteiler lösen, damit ich ein 0-5V Signal für den Arduino habe. MfG
Karl schrieb: > Karl H. schrieb: > >> >> https://www.pjrc.com/teensy/td_libs_AccelStepper.html > > Die lib arbeitet ohne Timer und ist nur für "langsame" Sachen geeignet. Kommt drauf an, was du unter langsam verstehst. Der Code hat eine entsprechende Zeitsteuerung auf Eventbasis mit drinn
1 | boolean AccelStepper::runSpeed() |
2 | {
|
3 | // Dont do anything unless we actually have a step interval
|
4 | if (!_stepInterval) |
5 | return false; |
6 | |
7 | unsigned long time = micros(); |
8 | // Gymnastics to detect wrapping of either the nextStepTime and/or the current time
|
9 | unsigned long nextStepTime = _lastStepTime + _stepInterval; |
10 | if ( ((nextStepTime >= _lastStepTime) && ((time >= nextStepTime) || (time < _lastStepTime))) |
11 | || ((nextStepTime < _lastStepTime) && ((time >= nextStepTime) && (time < _lastStepTime)))) |
12 | ....
|
ob er die Schrittzeiten, die ihm vorschweben damit erreichen kann oder nicht, weiss ich nicht. Wichtig ist aber, dass es eine nicht blockierende Schrittmotoransteuerung ist.
Andreas L. schrieb: > Das wollte ich dann über Spannungsteiler lösen, damit ich ein 0-5V 0 bis 1,1V Vcc ist meist viel wackeliger
Zum Aufbau: Es handelt sich um einen sogenannten Dauersteckplatz, welcher Steckerkontakte mit einer einstellbaren Kraft zusammenstecken und wieder auseinanderziehen soll. Das ganze dann, je nach Einstellung, hunderte, tausende Male. Dadurch soll der Verschleiß ermittelt werden. D.h. der Motor muss nicht schnell laufen, im Gegenteil.
Andreas L. schrieb: > Da gibt man 5-24V Signale drauf und der Motor läuft. > Das sollte der Arduino ja hinkriegen. Wenn's ein 5V-Arduino ist.
Karl H. schrieb: > Der Code hat eine entsprechende Zeitsteuerung auf Eventbasis mit drinn Hab nicht behauptet, dass das so wäre. Hier mal aus der Doku: "Speeds of more than 1000 steps per second are unreliable. Very slow speeds may be set (eg 0.00027777 for once per hour, approximately. Speed accuracy depends on the Arduino crystal. Jitter depends on how frequently you call the runSpeed() function." 1000 Schritte pro Sekund macht im Vollschritt 300 U/min, im Achtelschritt nur noch 37,5 300 U/min.
@ Andreas L Ja, ja, jein. Die meisten Mikrokontroller können mit negativen Spannungen nichts anfangen. Eine Standartangabe ist hier Vcc+0,7V bis -0,7V als erlaubter Bereich. Der Messbereich liegt meist viel tiefer. Z.T. abhängig vom tatsächlichen Prozessor.
Karl schrieb: > 1000 Schritte pro Sekund macht im Vollschritt 300 U/min, im > Achtelschritt nur noch 37,5 300 U/min. Dann passt es ja. Wie der TO mitlerweile gepostet hat, ist er gar nicht an möglichst hoher Geschwindigkeit interessiert. Der Code ist natürlich in typischer Arduino Manier an alle möglichen Dinge anpassbar. Da gibt es noch viel Spielraum. Das Grundprinzip des Codes ist aber ok und wird in einer ähnlichen Form auch bei selbst Geschriebenem auftreten.
:
Bearbeitet durch User
Andreas L. schrieb: > Es handelt sich um einen sogenannten Dauersteckplatz, welcher > Steckerkontakte mit einer einstellbaren Kraft zusammenstecken und wieder > auseinanderziehen soll. Die Kraft ist bei einem Einsteckvorgang nicht wirklich einstellbar. Man Braucht eine Kraft F_krit zum Einstecken. Ist die Kraft kleiner geht der Stecker nicht rein. Ist die Kraft größer, wir der Stecker Beschleunigt, biss er in den Endanschlag kracht. Sinnvoller ist es den Stecker Weggesteuert zu bewegen und die Kraft zu messen. Nach x Zyklen wird man dann eine Veränderung feststellen. Wie wird die Drehbewegung in eine Linearbewegung umgesetzt?
Karl schrieb: > > Wie wird die Drehbewegung in eine Linearbewegung umgesetzt? Über ein Gewindetrieb(Nennt man das so?).
Andreas L. schrieb: > Es wird eine 620 von Soemer verwendet mit einem LAU 63.1 Messverstärker. > Dann habe ich ein Signal von 0V bis +/- 10V. Warum kein LAC 74.1 Messverstärker, der hat 0-10 V Ausgang, da bist du auf der sicheren Seite. Mit einem Spannungsteiler machst du dann max 5V draus, Oder du nimmst einen digitalen und sparrst dir den Umweg über den Arduino.
Karl schrieb: > Warum kein LAC 74.1 Messverstärker, der hat 0-10 V Ausgang, da bist du Der LAU 63.1 ist schon vorhanden, das ist der einzige Grund. Wollte jetzt nicht nochmal etwas anderes bestellen.
Kann das Ganze leider erst morgen früh testen, da ich den Arduino nicht hier habe. Werde mich dann aber wieder hier melden und berichten, ob es geklappt hat :)
Was ich mich bei der ganzen Sache frage: Wieso willst du da einen Arduino zwischen schalten? Das macht das ganze doch nur unnötig kompliziert? Dieser Controller nimmt ASCII Befehle wie: gehe 1000 schritte, oder gehe zu position 0, entgegen. Das kannst du doch direkt per RS485-USB Adapter vom PC zum Controller schicken, das zwischendurch noch durch einen Arduino zu schleifen macht für mich keinen Sinn...
:
Bearbeitet durch User
Thomas Z. schrieb: > Was ich mich bei der ganzen Sache frage: Wieso willst du da einen > Arduino zwischen schalten? Vermutlich, weil zusätzlich eine Wägezelle ausgelesen werden soll und diese Daten auch über die gleiche Schnittstelle übertragen werden sollen.
Genau, ansonsten hätte ich es auch direkt über die schon vorhandene Steuerung gemacht..
Andreas L. schrieb: > Genau, ansonsten hätte ich es auch direkt über die schon vorhandene > Steuerung gemacht.. Und warum nicht gleich ein digitaler Messverstärker und alles über den PC? Der ADC vom Arduino hat nur 10 bit. Dass ist wahrscheinlich für deine Anwendung zu grob, es sei den du nutzt den vollen Nennlastbereich des Kraftaufnehmers wirklich aus.
Dann hätte ich ja den Messverstärker UND den Arduino/Motorsteuerung am PC hängen. Oder wie meinst du das genau? Habe den Motor jetzt übrigens zum Laufen bekommen. Habe eine kleine C#-Anwendung geschrieben mit 3 Buttons (Hoch, Runter, Stop), die Befehle an den Arduino sendet und den Motor steuert. Jetzt bin ich gerade dabei die Sensoren (Oberge/Untere Grenze erreicht) mit dem Arduino zu verbinden. Das Ganze erstmal über einen Spannungsteiler, da die Ausgänge der Sensoren 24V haben. MfG
Thomas Z. schrieb: > Was ich mich bei der ganzen Sache frage: Wieso willst du da einen > Arduino zwischen schalten? So etwas kann Vorteile haben. Allerdings nur dann, wenn der µC einen erklecklichen Anteil der Steuerungsarbeit übernimmt. Solange er nur als reiner Befehlsweitergeber fungiert hast du recht: dann ist es eher Mehrarbeit. Sinnvoll kann das ganze deswegen sein, weil ein PC unter Windows nicht wirklich echtzeitfähig ist (für hinreichend kleine praktische garantierte Antwortzeiten). Wenn Windows anfängt die Festplatte aufzuräumen kann es zB schon mal sein, dass die Systemleistung kurz einbricht. Fährt dir dadurch ein Greifarm in eine Mauer, weil das Abschaltkommando zu spät gekommen ist, dann ist die Kacke am dampfen. Hier kann ein µC entlastend wirken, weil es da viel leichter ist in ausreichenden Zeiträumen garantiert eine entsprechende Aktion auszulösen. Nur muss man dem µC dann aber auch entsprechende Verantwortung übertragen. Kurz gesagt: alles was einer Regelung bedarf, willst du vom PC weghaben. Denn da läuft nebenher zu viel auf der Maschine, als dass du dich auf die Rechenpower verlassen kannst. Auf einem µC hingegen läuft im Normalfall nur dein Programm - da hast du alles unter Kontrolle. (Regelung: Das Programm reagiert aufgrund Rückmeldungen des zu steuernden Systems Steuerung: Das Programm wirft einfach Befehle raus und kümmert sich nicht weiter darum, ob und wie die ausgeführt werden bzw. was passiert)
:
Bearbeitet durch User
Ich habe es jetzt geschafft, die Motorsteuerung mit dem PC zu verbinden. Damit ist es kinderleicht, den Motor zu steuern, auch Positionsdaten kann man so leicht auslesen. Jetzt bräuchte ich theoretisch den Arduino nicht mehr, jedoch weiß ich nicht, wie ich sonst die Kraftwerte der Wägezelle auslesen soll? Habt ihr da vielleicht eine Idee? Das Ganze sollte über einen USB-Anschluss am PC laufen, wenn möglich. MfG
Dafür ist der Arduino doch vollkommen Ok. Und falls du zu wenig USB Ports hast, gibt es ja USB Hubs. Jetzt hast du einfach 2 getrennt serielle Schnittstellen und kannst in deiner Software sauber getrennt auf beides zugreifen ohne dir den Aufwand zu machen beides irgendwie aus einem seriellen Interface herauszupopeln. Mein Einwand war nur dass es unnötig kompliziert ist beides über den Arduino zu machen. Da du dann die Befehle zur und die Anworten von der Motorsteuerung und die Ergebnisse der Wägezelle irgendwie zusammen schmeißen und dann wieder trennen musst. Sinnvoll wäre es auch noch gewesen, wenn, wie Karl Heinz sagte, die Motorsteurung direkt auf die Wägezelle reagieren soll, ohne Umweg über den PC. Aber das scheint bei dir ja nicht so zu sein.
Andreas L. schrieb: > Jetzt bräuchte ich theoretisch den Arduino nicht mehr, jedoch weiß ich > nicht, wie ich sonst die Kraftwerte der Wägezelle auslesen soll? > Habt ihr da vielleicht eine Idee? > Das Ganze sollte über einen USB-Anschluss am PC laufen, wenn möglich. Hast du dir denn Gedanken über die gebrauchte Auflösung und Abtastrate gemacht? Hast du den Messverstärker schon gekauft?
Hier eine gute Arduino Multitaking Anleitung: https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview
Karl schrieb: > Hast du dir denn Gedanken über die gebrauchte Auflösung und Abtastrate > gemacht? Hast du den Messverstärker schon gekauft? Naja Gedanken gemacht schon, jedoch ist mir noch nicht so wirklich klar, wie man aus den Spannungsdaten später die Kraft ermittelt. Finde dazu auf der Herstellerseite nicht wirklich was. Die Wägezelle und ein analoger Messverstärker sind schon vorhanden und sollten nach Möglichkeit auch für das Projekt benutzt werden: http://www.soemer.de/waegezellen/waegezelle-620.html http://www.soemer.de/messverstaerker/messverstaerker-lau-63_1.html
Andreas L. schrieb: > Die Wägezelle und ein analoger Messverstärker sind schon vorhanden und > sollten nach Möglichkeit auch für das Projekt benutzt werden: Die Wägezelle kannst Du nehmen, wenn der Kraftbereich auch paßt. Ich denke aber, das ist schon berücksichtigt. Der Meßverstärker nutzt Dir nicht so viel, da der AD-Wandler noch fehlt. Der ADC des Arduino wäre mir nicht ausreichend genug, sodaß ein ADC mit >= 12 Bit Auflösung+Genauigkeit ergänzt werden müßte. Hinzu käme noch ein Instrumentenverstärker, der das Signal entsprechend verstärkt. Der Bauteileaufwand liegt bei ca. € 10, wobei ich allerdings nicht weiß, ob Du nur fertige Komponenten einsetzen möchtest oder auch löten kannst. Mit diesen Bauteilen kann man locker 1000 Messungen/s ausführen. Wenn es langsamer sein kann (10-50 Messungen/s), gibt es auch hochauflösende ADCs, die keinen separaten Verstärker brauchen. Du solltest noch näher beschreiben, wie die Anforderungen sind.
m.n. schrieb: > Hinzu käme noch > ein Instrumentenverstärker, der das Signal entsprechend verstärkt. Einen Messverstärker hat er doch schon. Mit den Ausgang kann man ggf. über einen Spannungsteiler, an den ADC gehen, wobei halt der +/- 10 V Ausgang nicht sehr optimal ist. Wenn nichts neues angeschafft werden soll, würde ich mal den Arduino mit Oversampeling probieren, damit kann man das Ergebnis noch ein paar Bit aufblasen. Andreas L. schrieb: > Naja Gedanken gemacht schon, jedoch ist mir noch nicht so wirklich klar, > wie man aus den Spannungsdaten später die Kraft ermittelt. > Finde dazu auf der Herstellerseite nicht wirklich was. > Die Wägezelle und ein analoger Messverstärker sind schon vorhanden und > sollten nach Möglichkeit auch für das Projekt benutzt werden: > > http://www.soemer.de/waegezellen/waegezelle-620.html > > http://www.soemer.de/messverstaerker/messverstaerker-lau-63_1.html Das musst du ausrechnen. Der Aufnehmer liefert 2mV/V bei Nennlast. Jetzt musst du die Brückenversorgungsspannung vom Messverstärker einsetzen, das sind 10 V. Wenn du beispielsweise 500 kG Nennlast hast, ergibt eine Belastung von 250 kG 2mV/V*10V/500kG*250kG = 10mV. Die Verstärkung ist einstellbar: "in 8 Schritten, von 1 = +/-32mV Inp./10 Volt Outp. bis 8 = +/-4mV Inp./10 Volt Outp." Bei Option 1 +/-32mV in = +/-10V out wird dann ein Signal von 10V/32mV*10mV=3,125V ausgegeben. Du kommst also auf einen Faktor von 250kG/3,125V = 80kG/V. Du misst also die Spannung und multiplizierst sie mit 80 und hast das Gewicht in kG.
Karl schrieb: > Einen Messverstärker hat er doch schon. Mit den Ausgang kann man ggf. > über einen Spannungsteiler, an den ADC gehen, wobei halt der +/- 10 V > Ausgang nicht sehr optimal ist. Damit verspielt er aber die Möglichkeit der ratiometrischen Messung. > Wenn nichts neues angeschafft werden > soll, würde ich mal den Arduino mit Oversampeling probieren, damit kann > man das Ergebnis noch ein paar Bit aufblasen. Ein Zufallszahlengenerator würde schon reichen um viele, viele bunte Bits zu erzeugen. Vergiss es, die Blase platzt!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.