Hallo Leute, vielleicht kann mir einer von euch einen Tip geben, wo ich einen fertigen Schaltungsentwurf für folgende Anwendung finde: Ich wíll eine Endstufe für einen 12V DC Motor (1Q PWM) bauen, womit ich den Motor in unterschiedlichen Drehzahlen fahren kann. Dabei möchte ich weiter, dass ich (z.b. mittels Poti) eine Pendeln zwischen verschiedenen Geschwindigkeiten erreiche. Ich stelle mir das etwa so vor: 1 POti für die Maximalgeschwindigkeit (Ueff=0..12V) 1 Poti für die Minimalgeschwindigkeit 1 POti für die Zeit zwischen dem Pendeln von langsam nach schnell 1 weiters Poti, daß kurzzeitig zufällige Pulse bis zur doppelten Maximalgeschwindigkeit einstellt. Das ganze hat folgenden Hintergrund. Bin begeisteter Boots Angler. Habe mir einen 50A DC Motor für meine kleines Angelboot gekauft. Ich mache viel Schleppfischen, das heißt künstliche Ködern hinterm Boot ziehen. Hierbei ist mir aufgefallen, daß ich die besten Fangergebnisse erziele, wenn ich die Geschwindigkeit ständig variiere. Hierzu muss ich dann ständig zwischen den Fahrstufen 1..3 umschalten. Kurze Pulse mit bis zu 50A (Fahrstufe 5) sind dabei auch oft erfolgreich. Der Köder ändert dadurch ständig seine Geschwindigkeit und Tiefe. Habe mir selber schon eine kleine SChaltung mit einer 1Q PWM und mehreren OP's überlegt. Das ganze ist jedoch analog. Vielleicht wäre ein uP oder kleines CPLD/FPGA besser? Das ganze muß an 12V Versorgungsspannung laufen. Freue mich über Tips eurerseits. Eine 1Q Endstufe bis 30A kostet bei Conrad bereits über 200. Grüße Daniel
Tiny15 -> TLP250 -> IRFR064N -> MOtOr. Freilaufdiode nicht vergessen. Ich hatte mir mal eine Schaltung ausgedacht. Da Du "nur" mit 12Volt arbeitest, kannst Du auf dicke MOSFETs zurückgreifen. http://www.mikrocontroller.net/forum/read-1-194331.html#240973 AxelR.
Sehr kompetetente Antwort. Danke warum selbermachen wenns schon was gibt... Danke
Hallo Alex, sieht erstmal einfach aus. Hab da aber noch n paar Fragen. Habe (außer auf der Uni) noch nicht viel mit uP gemacht. Mein Fachgebiet sind FPGA's derzeit. Was benötige ich um den Tiny15 zu programmieren? Sind die Tools frei? Welchen Adapter brauche ich? Geht die Programmierung in C oder Assembler? Wenn Assembler, gibt es fertige Codebeispiele für das Mappen von AD, PWM etc..? Freue mich über weitere Tips und Links. Werde mir gleich ein paar der Bister bestellen. Danke Daniel.
Der Tiny15 war jetzt nur so ein Vorschlag. ich würde es wahrscheinlich mit einem Mega48 im DIL gehäuse auf Lochraster aufbauen. Dann kommt man überall besser ran, wenn man ändern muss. In diesem Fall lieber etwas größer bauen! Wie Du im "Gokart" Thread sehen kannst, habe ich den Tiny15 in Assembler programmiert. Die Tools sind alle frei. Den Programmieradapter hatte ich mir mal "geleistet". Ist in meinem Fall ein STK500. Heir gibt es sicher auch div. Anleitungen im Netz, wie man sowas selbser stricken kann. Da ich mit dem STK500 zufrieden bin, habe ich mich nicht um Alternativen gekümmert. Vlt. kann Dir jemand anderes hier aus dem Forum einen Hinweis geben, wie das mit PonyProg funktioniert. Die paar Assembler Befehle sind von der Logik her sehr schnell zu einem Gesamtgerüst zusammengestrickt. Konsequente Nutzung des Datenblatts des jeweiligen Controllers und natürlich etwas Erfahrung vorausgesetzt. Das ganze läuft am besten Interruptgesteuert: alle paar Millisekunden den ADC anschubsen. Der ADC "meldet sich" mit einem Interrupt, wenn er fertig gewandelt hat. man kann die 10Bit gleich auf 8Bit "abrunden" und den Wert etweder direkt der PWM Section zuweisen (am einfachsten), oder den aktuellen Stand der PWM auslesen und mit dem Vorgabewert aus dem ADC vergleichen und langsam an diesen heranfahren. Da der Motorpower nicht linear mit dem aktuell vorliegenden Dutycycle steigt, habe ich mir eine kleine Tabelle im Flash angelget, über dessen Index dem Motor im unteren Bereich mehr Leistung zugewiesen wird, als im oberen Bereich. Muss man ausprobieren. Da Du in deinem Fall mehr als nur ein Poti anschliessen willst, musst Du noch zusätzlich nach jeder Wandlung wissen, welches Poti gerade abgefragt wurde, den Wert entsprechend weglegen und einen Kanal weiter schalten. Der AVR hat nur einen AD Wandler. Die Eingänge werden über einen integrierten Multiplexer umgeschaltet. Ich habe mir gerade nochmal meinen Quelltext vom Tiny15 angesehen und festgestellt, das die KOmmentare etwas spärlich ausfielen. Hat sich zwar niemand beschwert - aber naja... http://www.mikrocontroller.net/forum/read-1-194331.html#236742 Du brauchst also 3Potis: 1.Poti Geschwindigkeit 2.Poti Wobbelhub Geschwindigkeit 3.Poti Wobblefrequenz des Wobbelhubs Hmm: denk ich mal drüber nach. Du kannst das ganze natürllich auch in "C" programmieren. Habe ich mich in letzter Zeit auch mit angefreundet. Ist dann etwas flexibler, wenn man später den Controller wechselt und es kann auch mal jemand anders draufsehen - machmal sehr hilfreich. Hat bei mir allerdings etwas gedauert, mich mit dem Makefile und der WinAVR installation zu beschäftigen. Hier haben sicher noch viele Leute tolle Ideen, wie man das am besten umsetzt. Viele Grüße AxelR.
Also bei einem Tiny15 mit seinem 1KB entsprechend 512 Befehlen kann ich nur zur puren Assemblerprogrammierung raten. Zumal das Teil kein RAM hat. Ich hab mit dem Ding mal einen 1Q-RC-Motorsteller gebaut - war hartes Brot, aber möglich. Die Amperes der Endstufe sind übrigens kein Thema, es sei denn, die sollen noch überwacht werden. Gruß Johannes
Ich habe das mal grob geschnitzt. Bin eigentlich Hardwaremensch, in C habe ich auch erst das eine oder andere zusamengetippt, der eine oder andere möge bitte mal drüber gehen und verbessern - danke! Du hast drei Potis. 1. Maximale Geschwindigkeit (ADC0) 2. Minimale Geschwindigkeit (ADC1) 3. Geschwindigkeit des Auf-und Abfahrens zwischen diesen beiden.(ADC2) Steht das 3.Poti auf Null, fährt der Motor NICHT auf und ab, Du kannst Ihn mit dem ersten Poti reglen. Hier werden 64 Fahrstufen aus dem Flash gelesen und die aktuelle Motorgeschwindigkeit fährt an die jeweilige Vorgabe heran. Die Auslesegeschwindigkeit hängt wieder vom Timer0 ab. Der Reload steht bei werten kleiner 10 fest auf 10. Prescaler usw. muss man testen, wie es sich in Real verhält. Aber vom Ablauf sollte das so gehen. Quelltext im Anhang. +++ Size after: AVR Memory Usage ---------------- Device: atmega168 Program: 638 bytes (3.9% Full) (.text + .data + .bootloader) Data: 16 bytes (1.6% Full) (.data + .bss + .noinit) +++ Da wäre auch was kleineres gegangen, hatte jetzt aber nur einen 168er hier... Um Kommentar wird gebeten - ist zwar hier weder die GCC-Runde, noch die Codesammlung, aber ich will ja hier bei dem Spass schliesslich noch was lernen. Ich brauch sowas in der Art nächte Woche sicher auffa Arbeit. Gruß AxelR.
Hallo Axel, also ich bin auch eigentlich Hardwaremensch, und deshalb: Warum so kompliziert, wenn es auch einfach geht... In diesem Fall: Wozu die vielen Stufenwerte im Flash, mit dem ganzen Gedöns drumherum? Nimm doch einfach zwei Variablen - die eine mit dem Zielwert, und die andere für die Annäherung in irgendeiner Stufung, die zu Deinem Timing passt und pro Timer-Intervall in Richtung Zielwert um einen jeweils angemessenen Betrag hoch- oder heruntergezählt wird und den jeweiligen PWM-Wert darstellt. Der Timer bestimmt dann die Rampenanstiegs- oder -abfallgeschwindigkeit, und wenn sich der Zielwert zwischendurch ändert, ist das auch nicht weiter tragisch. In C formuliert, liest sich das etwa so: if (timer_fuer_ausgabe_abgelaufen) { if (zielwert >= aktuellerwert) { aktuellerwert += stufung_hoch; if (aktuellerwert > zielwert) aktuellerwert = zielwert); } else /* zielwert < aktuellerwert */ { aktuellerwert -= stufung_runter; if (aktuellerwert < zielwert) aktuellerwert = zielwert); } ausgabe = aktuellerwert; } und fertig aus. Wenigstens dieser Teil des Programms. Was brauchst Du sonst noch? Gruß Johannes
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.