Forum: Mikrocontroller und Digitale Elektronik Arduino geeignet?


von Andreas L. (rakuzo)


Lesenswert?

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

von Frank L. (hermastersvoice)


Lesenswert?

da du so garkeine Randbedingungen nennst kann man darauf nur mit jein 
antworten.

von Georg (Gast)


Lesenswert?

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

von Ulrich F. (Gast)


Lesenswert?

Andreas L. schrieb:
> Ist der Arduino dafür überhaupt geeignet?

Klar....

von Karl H. (kbuchegg)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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
von Hans (Gast)


Lesenswert?

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.

von Jonas G. (jstjst)


Lesenswert?

> 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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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
von Motorsteuer (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Karl H. (kbuchegg)


Lesenswert?

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
von Ulrich F. (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

@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

von Andreas L. (rakuzo)


Lesenswert?

@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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Amateur (Gast)


Lesenswert?

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.

von Karl (Gast)


Lesenswert?

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?

von Karl H. (kbuchegg)


Lesenswert?

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
von Karl (Gast)


Lesenswert?

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)

von Ulrich F. (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

@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

von Karl H. (kbuchegg)


Lesenswert?

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.

von Ulrich F. (Gast)


Lesenswert?

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

von Andreas L. (rakuzo)


Lesenswert?

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.

von Motorsteuer (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

Es ist ein Arduino Uno

von Karl (Gast)


Lesenswert?

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.

von Amateur (Gast)


Lesenswert?

@ 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.

von Karl H. (kbuchegg)


Lesenswert?

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
von Karl (Gast)


Lesenswert?

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?

von Andreas L. (rakuzo)


Lesenswert?

Karl schrieb:

>
> Wie wird die Drehbewegung in eine Linearbewegung umgesetzt?

Über ein Gewindetrieb(Nennt man das so?).

von Karl (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

Andreas L. schrieb:
> Es ist ein Arduino Uno

Und, dreht sich der Motor schon?

von Andreas L. (rakuzo)


Lesenswert?

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 :)

von Thomas Z. (thomas_z41)


Lesenswert?

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
von npn (Gast)


Lesenswert?

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.

von Andreas L. (Gast)


Lesenswert?

Genau, ansonsten hätte ich es auch direkt über die schon vorhandene 
Steuerung gemacht..

von Karl (Gast)


Lesenswert?

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.

von Andreas L. (rakuzo)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von Andreas L. (rakuzo)


Lesenswert?

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

von Thomas Z. (thomas_z41)


Lesenswert?

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.

von Karl (Gast)


Lesenswert?

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?

von chris_ (Gast)


Lesenswert?

Hier eine gute Arduino Multitaking Anleitung:
https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview

von Andreas L. (rakuzo)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Karl (Gast)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.