Show Posts
Pages: 1 ... 17 18 [19] 20 21 ... 79
271  International / Deutsch / Projektvorstellung: Digitales Servo. on: March 04, 2014, 12:15:04 pm
Blödes Projekt, oder?
Schliesslich kann man die überall kaufen!

Vieleicht zum Hintergrund:
ich hatte mir ja einen Grillregler gebaut, der die Temperatur im Grill konstant hält, in dem er die Lüftungsklappen mittels Servo auf und zu macht. (hier im Grillforum dokumentiert: http://forum.mybbq.net/viewtopic.php?f=35&t=36986)

Das funktioniert auch soweit ganz gut, bis auf einen Schönheitsfehler: (analoge) Servos haben eine brutale Temperaturdrift!
von -10°C bis 10°C verschiebt sich der Nullpunkt um ca. 25°. Da ich nun auch im Winter grille passiert foglendes: ich lerne die Nullstellung an. Dann kommt die Sonne raus, bzw. das Servo wird durch etwas Strahlungswärme des Grills erwärmt, und schon geht die Lüftungsklappe nicht mehr zu, wenn das Servo auf "null" fährt.

Nun habe ich mir beim  Chinesen billige Servos MG996R bestellt, die mit "digital" beworben wurden. Ich dachte, diese hätten die Temperaturdrift nicht mehr.  Denkste! die waren genauso schlimm. Und nach dem Öffnen war auch klar warum: die hatten den gleichen analogen Servo-IC drin wie die billig-Servos von Conrad.

Da echte digitale Servos Geld kosten und ich schon lange mal was mit ATtinys machen wollte, war bald klar: ich baue mir ein microprozessorgesteuertes Servo!  (ein analoges mit kaputter Elektronik hatte ich noch).

Der Gedanke war: wenn ich das Poti im Servo mit 5V und GND versorge und die Spannung über den AD-Einlese, dann muß ich eine Temperaturunabhängiges Lagesignal erhalten. Messungen mit Tiefgekühlten und Erwärmten Servos bestätigten das.
Als Motorantrieb wollte ich eine fertigen integrierte H-Brücke, weil ich mit dem Timing der Einzelfets nicht herumschlagen wollte, und ich ja auch keinen Platz für viele Komponenten hatte.
Meine Wahl fiel auf den BD6211, einen 5V 1A H-Brücketreiber im SO8 Gehäuse. Dazu einen ATtiny85 (auch im SO8), einen Widerstand, 3 Kondensatoren. Der Schaltplan ist recht übersichtlich.

Zuerst auf Lochraster und Breadboard aufgebaut, den ATtiny nach der Anleitung von http://highlowtech.org/?p=1695 programmiert, konnte ich die einzelnen Funktionen entwickeln und Testen.

Als besonders schwierig stellte sich heraus, den Regler, der den Servo in die richtige Lage bringt, einzustellen. Ich dachte zuerst, der PID-Regler kann das perfekt, aber es stellte sich heraus, dass es doch recht dynamisches System mit hoher Trägheit ist. Eigentlich ein Widerspruch. Am besten lief der Servo, mit einem reinen P-Regler. Dann allerdings kam er nicht exakt auf die gewünschte Stelle.
(ich hatte mir extra in Prozessing ein Programm geschrieben, dass mir Servo-Reaktion grafisch darstellte). Aber sobald ich einen I-Anteil dazupackte, hatte ich heftige Überschwinger. Die Lösung war dann ein P-Regler, bei dem der P-Anteil dynamisch an die Abweichung angepasst wurde.

Andererseits: in meiner Anwendung habe ich ja nicht das Problem, dass ich besonders schnelle Reaktionen brauche. Im Gegenteil, wenn das Servo die Lüftungschieber wild hin und her bewegt, macht das unnötigen Lärm.
Also bin ich zurüch auf einen einfachen P-REgler, dem ich dann noch einen sehr kleinen I-Anteil draufpacke, der auch nur im Kleinsignalbereich wirkt. So fährt das Servo zunächst in die Nähe der gewünschten Position, um dann langsam vom I-Anteil an die genaue Wunschposition hingezogen zu werden.

Als nächstes störte mich das noch immer recht ruckartige Verhalten bei Sollwertsprüngen. Ich hätte gerne ein eher sanftes Anfahren der nächsten Position. Dazu entwickelte ich die Funktion "ServoWegstrecke_sanft()".
Die wandelt einen Sollwertsprung um in eine S-förmige Wegkurve. Der Servomotor beschleunigt zunächste sanft, um dann aber der Mitte des Weges wieder langsamer zu werden und schliesslich genauso sanft in die Zielposition zu gleiten.

Nachdem ich sicher war, dass alles funktioniert, konnte ich mir mein Platinchen basteln. (mittels Toner Transfer Methode von Thomas Pfeifer). Die passiven Componenten kamen als bedrahtetet Version auf die Unterseiten.  Bei löten merkte ich, das ich mir vorher besser eine SMD-Spitze gekauft hätte. :-(

Bei Test drehte der Motor sofort in die Endstellung. Mist!
Es stellte sich heraus, dass ich den Motor im Testaufbau wohl verpolt angeschlossen hatte. Also nochmal Kabel an die Pins anlöten, (Lötpads hatte ich glücklicherweise vorgesehen) den Regler invertieren, und siehe da, es läuft!

Und, nein, keine Fragen an die Gemeinde. Es läuft, ich bin  zufrieden.
Es muß aber erst noch den Praxistest bestehen. Aber diese Woche habe ich keine Zeit mehr.
Möge sich der eine oder andere vielleicht inspiriert fühlen!
272  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: March 04, 2014, 06:28:50 am
Ein delay in einer ISR geht nicht
Oh, danke.
Das wußte ich nicht.
Ich habe delay in der ISR bisher immer vermieden, weils einfach "unschön" ist. Mir war nicht klar, dass es garnicht funktioniert.
Danke.
273  International / Deutsch / Re: PWM Zeitversätzt nach Start ansprechen on: March 04, 2014, 06:06:20 am
Leute, wartet doch mal, bis er sich selber wieder meldet, und sagt, was genau er will.

Ich glaube, es ich für einen Anfänger sehr abschreckend, wenn man eine einfach Frage stellt, und dann am nächsten Abend eine lange diskussion vorfindet die er größtenteils garnicht nachvollziehen kann.
274  International / Deutsch / Re: SD_Card Pin Belegung? on: March 03, 2014, 02:30:52 pm
In den Examples meiner DS-Lib steht:
// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.


Das bedeutet, du kannst deinen CS-Pin frei wählen, aber der PIN53 MUSS( ausserdem auch ) als Output definiert sein.
275  International / Deutsch / Re: PWM Zeitversätzt nach Start ansprechen on: March 03, 2014, 11:29:32 am
Das Geheimnis liegt, wie so oft, in dem Beispiel "blink without delay".

Schau dir das mal an.
WEnn du das verstanden hast, geht deine Umsetzung so:

Beim Tastendruck merkst du dir die Zeit:
 If ( Tastegedrückt) Startzeit = millis();

Dann läuft einfach immer weiter die loop durch und fragst jedes mal nach, ob die Zeit für deine Aktionen schon gekommen ist:
if (millis()-Startzeit > Aktionszeit1) {
  aktion1 starten
}
if (millis()-Startzeit > Aktionszeit2) {
  aktion2 starten
}

dabei ist es völlig egal in welcher Reihenfolge die Aktionen kommen sollen.
Wichtig dabei: delay() ist verboten!
276  International / Deutsch / Re: Servo.h austricksen oder lieber anders? on: March 03, 2014, 11:23:02 am
aufs Display z.B. warte ich ja noch.
Dann würde ich die Servo.h sowieso nicht nehmen. Ich habe den Eindruck, die verträgt sich nicht mit dem I2C bus.
277  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: March 03, 2014, 11:21:11 am
Quote
Da könntest du das vielleicht sogar in der ISR mit delay machen.
Wenn du aber die Phasenanschnittdauern länger machst (>8ms-9ms), dann kommt er ja aus der ISR garnicht mehr raus.

Was ist ISR? delay sollte möglichst nicht vorkommen. Und den 2. Satz verstehe ich nicht.

ISR ist die Interrupt Service Routine, das ist die Funktion, die du mit attachinterrupt() an den Interrupt koppelst.
da deine ISR immer im Nulldurchgang aufgerufen wird, wird sei alle 10ms aufgerufen.
Wenn du in der ISR deine Phasenanschnittdauer mit delay() machst und diese auf 8ms anwächst, dann ruft du alle 10m ein delay(8 ) auf. => der Rechner ist zu.

Die Frage ist: willst du deine Heizleistung nur auf dem Niveau 3KW halten, also nur die Netzschwankungen aussteuern?
Oder willst du über einen weiten Bereich (0-3kw) die Heizleistung steuern?

Im ersten Fall würdest du ja nur sehr kleine Phasenverschiebungen fahren, die könntest du mit delay in der ISR umsetzen.

Zur Formel:
Hast du dir das Thema linare Interpolation schon mal angesehen? Das ist meines Erachtens geeigneter.
Ich habe momentan zu wenig Zeit um mir die Kenntnisse anzueignen, die Formel umzustellen.
278  International / Deutsch / Re: Servo.h austricksen oder lieber anders? on: March 03, 2014, 10:42:30 am
Du kannst Servos auch Problemlos ohne die Servo.h ansteuern.

Servos erwarten ca. alle 20ms einen Impuls einer Länge von ca. 700µs bis 2400µs. Die Länge des Pulses bestimmt die Lage des Servoarmes.
die  20ms sind unkritisch. Wenn die Pulse seltener werden, reagieren die meisten Servos darauf, in dem sie langsamer werden.

du kannst also sowas machen:
Code:
if (millis() - lastpulse > 20){
  lastpulse = millis();
  noInterrupts();
  digitalWrite(ServoPin,HIGH); /
  delayMicroseconds(pulselength);
  digitalWrite(ServoPin,LOW);
  interrupts();
}
(Nach einer Idee von Jurs)

Das unschöne daran ist, dass du eben alle 20ms deinen Code mit delayMicroseconds() für ca. 2ms blockierst.
Wenn das für deinen Fall kein Problem ist, dann kann du es machen.
Wenn dein Ständer in beiden Positionen mechanisch eigenstabil ist, reicht es ja auch, den Servo nur zum Stellen anzusteuern, dann brauchst du keine Pulse mehr schicken.

Im Anhang ein Sketch mit einer Funktion, die die Umrechnung von Winkel in Pulse übernimmt, für die Ansteuerung von mehreren Servos. wenn du die Konstante "wievieleServos" auf 1 setzt, dann eben nur für Ein Servo.
 
279  International / Deutsch / Re: Noch eine Anfängerfrage on: March 02, 2014, 01:07:03 pm
Danke für die prompte Antwort.
Könnt Ihr auch einen empfehlen. Später sollen insgemsamt 4 bis 6 dieser Pumpen seperat angesteuert werden.

Mosfet: IRLZ44N
Relais: z.B.:  8 Kanal 5V Relais Modul Arduino
280  International / Deutsch / Re: Noch eine Anfängerfrage on: March 02, 2014, 11:38:18 am
Ein Arduino-Pin kann maximal 40mA nicht mehr, und, vor allem es kommen nur 5V raus.

für höhere Ströme oder Spannugen mußt du ein Schaltelement dazwischen schalten, das die benötigten Leistungen kann.
z.B. ein Relais, einen Transistor, einen Mosfet.

Mit Relais kannst du nur EIN/AUS Schalten, mit Transistoren und Mosfet, kannst du auch PWM fahren und regeln.
Die gibt es als fertige Shields zu kaufen, muß du nur noch aufstecken.

oder du machst es selbst. Kauft dir einen Mosfet, Widerstände, ein Breadbord, Kabel und fängst an zu experimentieren:
http://bildr.org/2012/03/rfp30n06le-arduino/
http://www.apcc.tk/diy-projects/pwm-arduino
281  International / Deutsch / Re: Strom messen mit dem Arduino on: March 02, 2014, 11:24:53 am
Möchtest du Strom messen, oder Verbrauch zählen?
Die ACS712 sind schon ok, aber sie messen halt wirklich den Momentanstrom, du kriegst als Signal einen überlagerten Sinus, den du dann auswerten kannst.

Die Frage ist: Was genau willst du tun?
282  International / Deutsch / Re: Strom messen mit dem Arduino on: March 02, 2014, 10:07:28 am
Sensoren zum Strom messen findet man ja viele bei eBay und co, aber bei keinem finde ich so richtig die Angabe auf was für eine Spannungsart und Höhe die Primärseite der Sensoren ausgelegt ist.
Da du ja den Strom messen willst, ist die Spannungshöhe nicht relevant.
Wenn du z.B. eines der ACS712-Module nimmst, dann fallen da gerade mal ein paar mV ab. Wie große die Spannung zum anderen Leiter ist, ist irrelevant.

Ach und bevor die Anmerkung kommt, ich bin Elektrotechnikerund darf und kann in 230V Stromkreise eingreifen.
Nix für ungut, aber deine Frage läßt mich da leicht zweifeln...
283  International / Deutsch / Re: Modellbahn Licht mit Arduino schalten on: March 02, 2014, 03:06:25 am
Da gibt es fertige Relais-module, mit 2,4,8,16 Schaltkreisen drauf.

z.B. sowas: 8 Kanal 5V Relais Modul Arduino

Wennst du aber gerade am neue konzipieren der Anlage bist, dann schau dir mal die anderen Modellbahnfred  hier im Forum an. Da geht noch viel mehr als nur Blockweise Ein- und Ausschalten! Suche einfach mal "Modellbahn" im Forum.

Da findest du komplette Haussimulationen, inkl Fernseher, Schattenbahnhofsteuererung, flackernde Leuchstoffröhren an Bahnhöfen....
284  International / Deutsch / Re: Servo dreht sich nicht on: March 01, 2014, 02:05:27 pm
laut datenblatt von conrad sollte der servo sehr wohl mit 4.8V funktionieren.
Das stimmt. Aber es ist der Strom, der Probleme macht. Der Servo zieht im Anlaufen sehr hohe Ströme, mehr als der USB-port schafft.
Dann bricht die Spannung zusammen, der Arduino kriegt einen Reset, und das gibt dann
dieses geräusch als ob der USB vom arduino immer raus und wieder reingesteckt wird.
285  International / Deutsch / Re: Servo dreht sich nicht on: March 01, 2014, 01:32:57 pm
Du braucht eine extra Versorung für deinen Servo.
Die USB-Schnittstelle (und auch der Arduino-5V Regler) kann nicht genügend Strom liefern.

Nimm ein externes Netzteil (z.B. USB) oder 3 Batterien als Versorgung für den Servo.
Pages: 1 ... 17 18 [19] 20 21 ... 79