www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Motorsteuerung mit Poti


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Keine Ideen mehr?

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.