Hallo, ich möchte mit einem µC einen Motor steuern. Dazu benutze ich ein Poti. Das Einlesen über ADC funktioniert soweit. Ich habe nun ein Problem mit dem Motor. Ich hab mir die ADC Werte für 3 Poti Stellungen (links, mitte, rechts) ausgerechnet. Die Drehbewegung des Motors wird über einen Timer gesteuert, d.h. Motor dreht sich zwischen links und mitte 2s und zwischen mitte und rechts 4s. Zum erkennen, des letzten Standes des Potis, speichere ich dessen Wert im EEPROM. Zum Teil funktioniert das auch, aber eben noch nicht 100%ig. Weiterhin hab ich ein Problem mit den Zwischenwerten der 3 Potistellungen. Ich weiß noch nicht, wie ich die verweten kann. Ist der Ansatz mit dem Timer üblich oder kann man das anders machen? MfG Tim
machs doch so: Wenn ADCWERT > 200 Wenn ADCWERT < 100 Wenn ADCWERT >100 UND ADCWERT <200 dann hast du die drei Stellungen sicher erkannt samt zwischenstellungen.
Ja genau so hagbe ich es gemacht. Zusätzlich habe ich noch eine Bedingung eingbaut, die überprüft, ob der neue ADC Wert um 10 größer ist als der vorherige aus dem EEPROM. Ich habe aber das Problem die Werte zu verarbeiten und den Motor korrekt drehen zu lassen.
um was für einen Motor handelt es sich eigentlich, ein ganz normaler den du für eine gewisse Zeit mittels Umpolung in die entsprechende Richtung bewegst oder fürst du evtl. mittel Schrittmotor Schritte aus. Was hast du genau vor, vielleicht weiß man dazu ne bessere Lösung.
Es handelt sich um einen ganz normalen Motor. Dieser soll einen Schiebedachmotor simulieren, den ich über das erwähnte Poti steuern will. Das Poti hat 3 feste Stellungen (Kipp, Zu, Auf) und mehrere Zwischenstellungen. Der Motor soll von Kipp nach zu 2s und von Zu nach Auf 4s laufen. Zum Teil klappt das auch. Ich weiß aber nicht, wie ich die Zwischenwerte verarbeiten kann.
Ich weiss nicht, wie es den Anderen geht, aber ich hab dein Problem nicht verstanden... Wo genau hast du Probleme? Beim Erkennen in welcher Position das Poti gerade ist?
Wo sitzt dein Poti? Am Motor und gibt so die Position des Schiebedachs wieder? (so wie ich deinen Text verstanden habe, aber eher unwahrscheinlich). Übrigens eignet sich ein Poti nicht wirklich gut, als Schalter benutzt zu werden. Normalerweise erfordert deine "Aufgabe" einen Kipptaster mit Mittelstellung: in die eine Richtung auf, in die andere Richtung Kipp, in der Mitte Stop. Mir fehlt bei dieser Problemstellung die Notwendigkeit eines Poti. Die gesamte Steuerung könnte man problemlos in einen Tiny stecken...
Hallo, also nochmal verständlicher (hoffe ich): Das Poti ist ein Schiebedachvorwahlpotentiometer aus dem KFZ Bereich, wie es z.B. bei VW eingestzt wird. Diese Poti wird über den ADC eines PICs eingelesen und soll einen kleinen Motor, der anstelle des Schiebedachmotors als Modell steht, steuern. Der kleine Motor besitzt eine eigene Motorsteuerung mit Vollbrücke. Bis jetzt mach ich das so: wenn ADCWERT < 100 -> Poti Linksanschlag (Dach in Kipp Stellung) wenn ADCWERT > 100 UND ADCWERT <400 -> Poti in Mittelstellung (Dach zu) wenn ADCWERT > 700 -> Poti in Rechtsanschlag (Dach auf) Bei jedem Abfragen des ADC wird der Wert im EEPROM gespeichert. Wird das Poti nun von Linksstellung in Mittelstellung gedreht soll der Motor 2s laufen. Von Mittelstellung zu Rechtsanschlag soll er 4s laufen. Beispiel: Wir das Poti in Mittelstellung gedreht ist ADCWERT >100 && ADCWERT<400. Danach wird der vorherige Potiwert aus demm EEPROM geholt und mit dem neuen verglichen. Ist alter_Wert > neuer_Wert muß der Motor 2s linksdrehen, Ist alter_Wert < neuer_Wert muß der Motor 4s rechts drehen. Wie gesagt funktioniert das auch teilweise. Der Motor fährt von poti_links nach poti_mitte oder von poti_mitte nach poti_links 2s poti_mitte nach poti_rechts oder von poti_rechts nach poti_mitte 4s. 1. Problem: Die ganze Geschichte kommt ab und zu durcheinander, d.h. die 2s werden mal mit den 4s vertauscht oder umgekehrt. 2. Problem: Ich habe die Zwischenstellungen des Potis zwischen Linksanschlag, Mitte und Rechtsanschlag nicht abgedeckt. Ich hoffe es war jetzt etwas verständlicher. MfG Tim
Zunächstmal würde ich irgendwo einen Schalter hinsetzen, der Ausgelöst wird, wenn das Schiebedach an einer bestimmten Position ist. Damit könntest du das Schiebedach zur initialisierung immer an eine fest definierte Ausgangsposition fahren. Beim Abtasten des Potis würde ich 2 Dinge einbauen: 1.) Die Position des Potis nur dann Auswerten, wenn es sich über eine gewisse Zeit nicht geändert hat, damit sichergestellt wird, das nicht gerade eine Position angefahren wird, wärend das Poti gerade bedient wird. 2.) Dem A/D-Wert gewisse 'verbotene Bereiche' zuordnen damit keine Kippeffekte entstehen. Wenn du z.B. bei 100 eine Schaltschwelle würde ich 90-110 als 'verboten' definieren, wo keine Funktion ausgeführt wird. Viel Glück ;)
Wenn du jedes Mal den gemessenen Wert ins EEPROM schreibst, ist das Ding nach ziemlich kurzer Zeit hinüber... Vom Prinzip her ist es doch so, dass das Poti während der Motor-Bewegung gar nicht abgefragt werden muß/darf, weil es sonst ja zu einer möglichen Bewegungsverfälschung kommen kann. Solange der Motor sich bewegt, keine Potiabfrage. Sobald der Motor steht kann das Poti konstantabgefragt werden. Dir Totbereiche, die Niels erwähnte, sind natürlich auch recht sinnvoll.
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.