Hallo Freunde Mein Name ist Hoonse und ich bin der Neue hier =) Mein Problem: Ich habe eine Schaltung mit der ich über ein Mechanisches Potentiometer die Drehzahl eines DrehstromMotors steuern kann. (über einen Frequenzumformer) Das ganze würde ich jetzt gerne fernsteuern können und habe mir dazu eine kleine "Schaltung" mit einem ArduinoBoard und einem digitalen Potentiometer aufgebaut. (eigentlich habe ich schon 3 verschieden digitale Potentiometer ausprobiert aber leider ohne erfolg: intersil X9318, Dallas DS 1669, und Xicor X9C103) Ich glaube mein Problem gefunden zu haben: Über den Arduino werden die digitalen Potentiometer mit +5V versorgt. Die SteuerSpannung des Frequenzumformers beträgt aber +10V (4mA). Ich bin quasi noch ein Anfänger im Bereich Elektronik und nach langen Nächten des Datenblätter lesens bin ich einfach zu keiner Lösung gekommen... Vielleicht könnte mir jemand einen Wink mit dem Zaunpfahl geben: Ich brauche einen Bausteiner gerne IC DIP der sich mit +5V ansteuern lässt und +10V steuern kann. Am liebsten mit INCrement, DECrement Ansteuerung Bin auch für andere Lösungsvorschläge offen... =) Hier noch mein Code wie ich die potentiometer von intersil und Xicor angesteuert habe die aber total sinnlose werte geliefert haben: DigitalPotentiometer Library:
1 | void DigitalPotentiometer::startupSequence(int incrementpin, int updownpin) |
2 | {
|
3 | inc = incrementpin; |
4 | updown = updownpin; |
5 | |
6 | updownstate = false; |
7 | |
8 | pinMode(updown, OUTPUT); |
9 | pinMode(inc, OUTPUT); |
10 | digitalWrite(updown, HIGH); |
11 | |
12 | i = 0; |
13 | |
14 | setToZero(); |
15 | }
|
16 | |
17 | void DigitalPotentiometer::setToZero() |
18 | {
|
19 | digitalWrite(updown, LOW); |
20 | for(i = 0; i <= 99; i++) |
21 | {
|
22 | digitalWrite(inc, LOW); |
23 | delay(1); |
24 | digitalWrite(inc, HIGH); |
25 | delay(1); |
26 | }
|
27 | currentposition = 0; |
28 | }
|
29 | |
30 | boolean DigitalPotentiometer::setCurrentPosition(int position) |
31 | {
|
32 | |
33 | if(currentposition == position || position > 99 || position < 0) return(false); |
34 | |
35 | else if(currentposition > position) |
36 | {
|
37 | digitalWrite(updown, LOW); |
38 | updownstate = false; |
39 | }
|
40 | else if(currentposition < position) |
41 | {
|
42 | digitalWrite(updown, HIGH); |
43 | updownstate = true; |
44 | }
|
45 | |
46 | if(updownstate) |
47 | {
|
48 | for(; currentposition < position; currentposition++) |
49 | {
|
50 | digitalWrite(inc, LOW); |
51 | delay(1); |
52 | digitalWrite(inc, HIGH); |
53 | delay(1); |
54 | }
|
55 | |
56 | return(true); |
57 | }
|
58 | |
59 | else
|
60 | {
|
61 | for(; currentposition > position; currentposition--) |
62 | {
|
63 | digitalWrite(inc, LOW); |
64 | delay(1); |
65 | digitalWrite(inc, HIGH); |
66 | delay(1); |
67 | }
|
68 | |
69 | return(true); |
70 | }
|
71 | }
|
72 | |
73 | int DigitalPotentiometer::getCurrentPosition() |
74 | {
|
75 | return(currentposition); |
76 | }
|
Arduino Test Programm:
1 | for(i = 0; i != 98; i++) |
2 | {
|
3 | geschw.setCurrentPosition(i); |
4 | Serial.println(geschw.getCurrentPosition()); |
5 | delay(500); |
6 | }
|
Vielen Dank für eure Hilfe Grüße aus Österreich Hoonse