Forum: Mikrocontroller und Digitale Elektronik Motorsteuerung mit Poti


von Tim (Gast)


Lesenswert?

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

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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.

von Thomas O. (Gast)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

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.

von Tim (Gast)


Lesenswert?

Keine Ideen mehr?

von Niels H. (monarch)


Lesenswert?

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?

von Rahul (Gast)


Lesenswert?

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...

von Tim (Gast)


Lesenswert?

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

von Niels H. (monarch)


Lesenswert?

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 ;)

von Rahul (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.