Go Down

Topic: Servo ansteuern mit analogem Signal (Read 4201 times) previous topic - next topic

moepi2k

Hallo zusammen,

ich brauche Eure hilfe für meine Diplom arbeit. Ich baue ein Gerät das eine Indikation darstellen soll indem zwei gestänge aussschlagen. Meine Idee ist es das mit Servos umzusetzen welche mit dem PWM Signal angesteuert werden. Ich habe von einem Externen Gerät einen Eingangsstrom zwischen 0-50mA und dieser soll je mehr eingestellr desto mehr der Ausschlag der Servos.

Bisher habe ich ein Arduino UNO und hoffe man kann es mit dem umsetzen.
Könnt Ihr mir vielleicht dabei helfen? Tips etc?

Mit freundlichen Grüssen

Serenifly

#1
Jul 13, 2014, 08:14 pm Last Edit: Jul 13, 2014, 08:16 pm by Serenifly Reason: 1
Für die Servos gibt es eine fertige Library.

Den Eingangsstrom kannst du einfach mit einem Widerstand in eine Spannung umsetzen, die man mit dem ADC messen kann. Den Widerstand muss man dann so wählen, dass bei 50mA 5V abfallen.
Oder ein Transimpedanzverstärker wenn du es ganz schön machen willst. Ist aber nicht nötig.

moepi2k

Cool danke,

kannst du mir vielleicht kurz erklären wie du das meinst mitdem Library und der Schaltung? kenne mich mit dem Arduino bisher noch gar nicht aus

Serenifly

http://arduino.cc/en/reference/servo
http://arduino.cc/en/Tutorial/Knob
http://arduino.cc/en/Tutorial/sweep

Bemühe wegen der Servos mal Google. Da gibt es zig Anleitungen

Worauf du aber achten sollst, ist die Servos besser nicht über den Spannungsregler des Arduinos zu versorgen, da die viel Strom ziehen. Da bricht regelmäßig die Spannung ein und Leute wundern sich dann wieso der Prozessor Murks macht.


moepi2k

Habe jetzt nochmal eine Frage. Habe mir mal den Transimpedanzversätker angeschaut und der sieht sehr interessant aus für mein vorhaben.

mal angenommen: Ich habe ein Gerät das liefert mir Ströme von 0-50mA (eingestellt über Poti) Wie nutze ich den das ganze über den Versärker und wie fliesse ich das Signal am Arduino ein? Wäre das quasi nur eine 2 Draht Leitung in den Arduino?

Gruss

Klaus_ww

Du nutzt in jedem Fall einen Analogeingang vom arduino, denn am Ende der Kette misst Du die dem Strom analoge Spannung.

Ich würde aber auch Sereniflys Ratschlag folgen und den OP weglassen.
Mach Dir mal Gedanken über die gewünschte Auflösung und dann über die zur Verfügung stehenden 10 Bit des arduino.
Freizeit-Programmierer mit moderatem Ehrgeiz besseren Code zu schreiben.

moepi2k

Das mit dem an den Analogen Eingang anschliessen war mir irgendwie klar. Ich weiss nur nicht wie ich von einem externen Gerät Die verschiedenen Ströme nutzen kann als eingangsignal. Also z.B 0mA passiert nichts 10mA = geringer Aussschlag am Servo bis und mit 50mA wird der Aussschlag dann halt immer stärker.

Gruss

Serenifly

#8
Jul 14, 2014, 04:18 pm Last Edit: Jul 14, 2014, 04:24 pm by Serenifly Reason: 1

Habe jetzt nochmal eine Frage. Habe mir mal den Transimpedanzversätker angeschaut und der sieht sehr interessant aus für mein vorhaben.

Das Problem dabei ist, ist dass das ein Inverter ist, und man daher eigentlich eine symmetrische Versorgungsspannung braucht. Die Alternative ist man bastelt sich mit einem Spannungsteiler am nicht-invertierenden Eingang ein virtuelle Masse. Aber das ist nicht ganz trivial.
TIVs benutzt man eigentlich um die geringen Ströme von Photodioden zu verstärken. Hier ist das etwas zu viel des guten.

Die andere Standard-Möglichkeit mit einem OP einen Strom zu messen ist mit einem Shuntwiderstand und dann die Spannung an diesem zu verstärken. Das geht auch mit einer nicht-symmetrischen Versorgungsspannung, da es ein nicht-invertierender Verstärker ist. Das wird vor allem bei sehr hohen Strömen gemacht:
http://phil-zone.de/hilfestellung-a-tutorials/mikrocontroller-grundlagen-strommessung



Probier es aber erst mal mit einem einfachen Widerstand. Das sollte eigentlich gehen. 100 Ohm ergibt bei 50mA 5V. Also von deinem Gerät einen 100 Ohm Widerstand gegen Masse. Und dann misst du mit dem ADC die Spannung über den Widerstand. Bei 10mA hast du dann 100 Ohm * 0,01 A = 1V

Und lass erst mal den Servo weg. Zeige dir erst mal die gemessene Spannung am seriellen Monitor an und schaue dass die passt.

Eventuell kann man dann in Software noch den Ausschlag des Servos so anpassen, dass er nicht-linear wird.

moepi2k

Versteh ich dich richtig: Wenn ich einen 100Ohm Widerstand  benutze = 50mA 5V. habe ich somit ein ideales Eingangssignal. Stelle ich die Stromzufurh auf 10mA sinkt natürlich auch die Spannung, aber kann ich diese Spannung dann auch noch verwenden?

Das Problem ist. Ich habe von externen Gerät ja nur eine 2 Draht Leitung auf den Arduino. Und diese kann halt 0-50mA liefern.

bzw. geht das. Das am Arduino 1V = kleiner Aussschlag 5V = Grosser Ausschlag für den Servo?

Serenifly

Wieso soll das nicht gehen?

Du misst die Spannung mit einem Analog-Digital-Wandler. Der liefert dir bei 0V den Wert 0 und bei 5V den Wert 1023 (bei 5V Referenzspannung wie normal). Den Wert setzt man dann auf den Servo um. Das geht mit der map() Funktion:
http://arduino.cc/de/Reference/Map

Damit kannst dass dann so hinbiegen dass z.B. 1023 90° am Servo entspricht. Genau das wird hier gemacht:
http://arduino.cc/en/Tutorial/Knob
Nur dass man da ein Poti zum Einstellen hat. Das ist vielleicht ein Beispiel, dass du mal aufbauen solltest um das zu verstehen.

moepi2k

Werd ich ausprobieren, danke vielmal =)

Gruss

moepi2k

Nochmals eine böde Frage. Ich kenne den Arduino ja noch nicht. der ADC ist auf dem Arduino vorhanden richtig?
Also muss ich jetzt einfach mal eine kleine Schaltung bauen mit einem Widerstand von 100Ohm und schliesse mein Gerät welches 0-50mA liefert an da dran und führe das auf den Analogen eingang des Arduinos. Wie kann ich da nun die Werte herauslesen?
zum einen kann ich ja die Analogen Werte mit dem Multimeter messen, aber wie Sehe ich die Digital Werte?

Gruss

Serenifly

Dir fehlen sämtliche Grundlagen. Dafür gibt es massig Tutorials und Beispiele im Internet. Gib mal bei Google "Arduino analog" ein. Da findest du z.B. das:
http://arduino.cc/en/Tutorial/AnalogReadSerial

Und bei "Reference" gibt es auch Code-Schnippel
http://arduino.cc/de/Reference/AnalogRead

Dann den seriellen Monitor öffnen und du siehst was bei Serial ausgegeben wird.

moepi2k

So bin wieder zurück.

ich habe mir jetzt sämtliches Material besorft für die Schaltung. Das Relaxometer das mir 0-80mA liefert habe ich auch beiliegen.
Ich weiss nicht ob das jemand kennt. Dieses Gerät wird in der Anästhesie gebraucht und gibt z.B 4 Impulse hintereinander von z.B 10mA aus und erzuegt eine Muskelkontraktion. Diese zwei elektrodenanschlüsse werde ich so wie ich es verstanden habe nun einen auf GND und der andere auf einen Analogen Eingang anschliessen, vorgeschaltet einen 50 Ohm Widerstand das ich bei max Strom eine Spannung von U=50 Ohm x 0.08A = 4V erhalte. Da das Board ja nur mit maximal 5V auskommt. Mit Dem ADC kann ich damit nun einen Digitalen Wert zwischen 0-1023 erhalten, richtig?

Wie entnehme ich diesne Wert aber jetzt? kann ich denn irgendwo auslesen?

Mit freundlichen Grüssen.

Go Up