PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tachosimulator



RHS
24.06.2005, 17:17
Hallo,

ich will mit einem Mega32 einen Tacho programmieren bzw.
simulieren. Für die Zählung der Impulse will ich einen
(Fahrrad-)Tachogeber von Sigma verwenden. Das ist eine
Reed-Relais / Magnet-Kombination mit 2 Drähten (offen/geschlossen).

Mein Problem ist nun: wie schließe ich das Ding am Mega32 an?
Ein Kabel an GND, das andere direkt an einen Port-Pin? Oder
muß da sonst noch was hin (Widerstand, 5V) oder so?

2. Problem:

Wenn ich den Mega32 nun einsetzen will, um ein Tachosignal zu
generieren (also praktisch als Ersatz des Tachogebers von oben),
wie muß ich denn einen Port-Pin beschalten, damit sich das Signal
analog dem o.g. Geber verhält?

Danke: - Reinhard -

Marco78
24.06.2005, 17:43
Den Kontakt kannst du einfach an Masse und Eingang des M32 anschliessen. Den Pin dan als Eingang einstellen und den internen Pullup aktivieren. Dann brauchst du extern kein Widerstand und 5V mehr.

Das zweite Problem versteh ich allerdings nicht. Soll das Signal vom Reedkontakt einfach nur durch den M32 geleitet werden?

RHS
24.06.2005, 17:57
Hallo Marco78,

danke für Deine Antwort. Dann ist das erste Problem ja einfach
zu lösen.

Zum 2. Problem: ich will mit einem Mega32 praktisch den Geber
simulieren und mit einem anderen die Tachoanzeige. Also Mega32 (Tachogeber) -> Mega32 (Tachoanzeige).

Mein Problem ist dabei, wie erzeuge ich das "offen/geschlossen"
Signal? Ich könnte ein Relais nehmen, aber es müßte doch auch
einfacher gehen? Port-Pin auf Masse ziehen oder so ...

- Reinhard -

Marco78
24.06.2005, 18:44
Und dafür ein M32? Ich geh mal davon aus, das du die so rumliegen hast und nicht extra dafür bestellst. Das würde auch ein kleiner Tiny schaffen und der wäre günstiger. Aber unabhänig welchen µC du nimmst, das Problem lässt sich bei allen gleich lösen.

Offen/geschlossen ist ja nur an/aus. An Reedkontakt liegt an einem der beiden Anschlüsse ein Potential an das zum anderen Anschluss geleitet wird, wenn der Magnet den Kontakt schliesst.
Da ein zweiter M32 das Signal auswerten soll und kein Fahrradtacho ist das eigentlich nicht so das Problem. Du musst nur den Ausgang des M32 (Tachogeber) immer ein- und ausschalten. Der andere M32 (Tachoanzeige) reagiert dann dadrauf.
Es ist ja unerheblich, wie lange der Kontakt geschlossen ist, sondern nur interessant, wie oft der Kontakt pro Zeit geschlossen wird.
Allerdings sollte der Kontakt so lange geschlossen bleiben, das die Tachoanzeige im Programmablauf genug Zeit hat das Signal auch abzufragen.

Wenn die Tachoanzeige durch ein IC angesteuert wird, muss eigentlich nix weiter beachtet werden (außer das ein Signal lange genug anliegt. Lange genug ist aber im Millisekundenbereich.)
Wird die Tachoanzeige durch den Reedkontakt angesteuert muss der Eingang entprellt werden.
Der Schalter schlieest sich nicht nur einmal pro Schaltvorgang sondern mehrmals. Schaltet man z.B. ein normalen Lichtschalter, passiert das gleiche. Man kann es aber nur mit den Augen nicht erkennen, aber der Schalter schliesst und öffnet beim Betätigen mehrmals. Die Tachoanzeige würde dann eine um das vielfache und nicht gleichbleibende Geschwindigkeit anzeigen.
In BASCOM gibt es ein Befehl zum entprellen. (DEBOUNCE) Oder man wartet eine kurze Zeit, bevor der Kontakt nochmal abgefragt wird. Man kann das ganze auch Schaltungstechnisch entprellen.

Wenn der Tachogeber ein anderer M32 ist ist entprellen nicht notwendig. Du schaltest einen Ausgang einfach für eine gewise Zeit an, wartest eine gewisse Zeit, schaltest ihn wieder aus und wieder eine gewisse Zeit warten. Und dann wieder von vorne.

Ich hoffe ich konnte es halbwegs verständlich erklären. Womit programmierst du denn? Und was wird die maximal zu erwartende Geschwindigkeit sein? Und die max. Impulse pro Sekunde?

RHS
24.06.2005, 19:17
Hallo Marco78,

>> Und dafür ein M32?

nein, nicht nur einen M32, sondern gleich 'ne ganze RN-Control ... ;-)

>> Offen/geschlossen ist ja nur an/aus. An Reedkontakt liegt an
>> einem der beiden Anschlüsse ein Potential an das zum anderen
>> Anschluss geleitet wird, wenn der Magnet den Kontakt schliesst.

Ok, soweit ist das klar. Ich soll also die beiden GND's der Megas
verbinden und den Portpin des tachogebenden Mega wie beschalten?
Pulldown nach Masse, oder wie?

Programmieren tu ich übrigens mit Bascom. Entprellen beim normalen
Tachogeber mit Debounce ist auch soweit klar. Die Programmierung
an sich ist bei mir nicht das Problem, sondern die Bauteilseite ...

Damit das vielleicht etwas klarer wird: ich will mit einer RN-Control
einen Bordcomputer bauen. U.a. mit einer Tachoanzeige und dem
besagten Geber von Sigma. Max. Geschwindigkeit wird 100 km/h
sein. Das wären dann max. 18-20 Impulse/Sekunde.

Die andere RN-Control will ich mometan nur dazu nutzen, mir
variable Geschwindigkeiten zu generieren. Ich stelle also bspw.
Reifenumfang x und Geschwindigkeit y ein und das Ding generiert
mir ein passendes Tachosignal, welches der Bordcomputer aus-
werten soll. Ich will so vermeiden, das ich mir ein Rad an den Tisch
schrauben muss ... ;-).

- Reinhard -

Laeubi
24.06.2005, 19:28
Benutz docvh als "Testgenrator" Das Tachosignal eines Luefters.

Marco78
24.06.2005, 19:28
Das der zweite M32 erstmal nur für Testzwecke ist hab ich mir schon fast gedacht ;)



nein, nicht nur einen M32, sondern gleich 'ne ganze RN-Control ...

Na, du musst es ja Dicke haben :D

Die Massen der beiden RN-Controls müssen auf jeden Fall verbunden werden. Das hast du richtig erkannt.
Und dann wird einfach ein Ausgang und ein Eingang verbunden.
Ein Widerstand dazwischen ist eigentlich nicht nötig, da die Eingänge hochohmig sind. Aber 1kOhm schadet der Funktion auch nicht.

Am Eingang (Bordcomputer) musst du nur den Pullup aktivieren. Pulldowm gibt es bei AVRs meiner Meinung auch nicht.
So ist der Eingang immer auf High, bis er vom anderen M32 (Simulator) auf Masse gezogen wird.
Da am Ausgang brauchst du auch keinen externen Pullup- oder Pulldownwiderstand. Der M32 hat genug 'Kraft' um den Eingang am Boradcomputer auf Masse zu ziehen.

Ok, wenn du auch BASCOM nimmst und DEBOUNCE kennst sollte es dann mit nem Rad keine Probleme geben. Und 20 Impulse pro Sekunde sind locker möglich. Das würde der M32 ja sogar noch mit 1MHz intern schaffen (die Genauigkeit ist dann ne andere Sache).

Also einfach die Massen der beiden RNs verbinden (wird ja wahrscheinlich der Fall sein weil du bestimmt nur eine Spannungsversorgung hast) und den Ausgang am Simulator direkt an den Eingang des Bordcomputers, wo der Pullup aktiviert ist.

Marco78
24.06.2005, 20:06
Benutz docvh als "Testgenrator" Das Tachosignal eines Luefters.
Ich dachte immer, das Tachosignal wäre eine analoge Spannung und nicht digitale Impulse?!

RHS
24.06.2005, 20:42
Hallo Marco,

>> Ich dachte immer, das Tachosignal wäre eine analoge
>> Spannung und nicht digitale Impulse?!

ich glaube, die meisten Tachogeber (im Fahrradbereich) sind heute
digital, bestehen also aus Reed-Kontakt und Magnet.

Nochmal zu meinen Problemchen: bevor ich die beiden Megas
verbinde, habe ich mal einen richtigen Tacho an den "Mega-
Simulator" gehängt. Ein Kabel an GND, ein Kabel auf Port A.0.
Den Pin dann auf Output und einfach 10x / Sekunde Pin = 1
und nach Waitms 10 wieder Pin = 0.

Der Tacho macht dann einen Reset, Display wird
gelöscht/leer. Ich dachte schon, das Ding ist defekt ...

Wieder abgeklemmt und 10k zwischen Port und
Tacho. Dann wird nur irgendein Wert angezeigt und
die Anzeige geht wieder auf Null.

Mein Problem ist also immer noch: wie simuliere
ich mit GND und einem Port-Pin die Zustände
offen/geschlossen?

Danke für Eure Geduld: - Reinhard -

Marco78
24.06.2005, 21:32
Benutz docvh als "Testgenrator" Das Tachosignal eines Luefters.
Ich dachte immer, das Tachosignal wäre eine analoge Spannung und nicht digitale Impulse?!
Hier ging es um die Lüfter und nicht um Fahrradtachos.

Wenn du den Mega am Tacho anklemmst glaube ich dir, das der Tacho da nicht mitspielt.
Erstmal sind 5V sicherlich zu viel für so n Tacho und dann ist immer noch die Frage ob + oder Masse geschaltet wird.

Ich glaube die siehst da ein Problem, wo keines ist bei deiner Schaltung.

die beiden RNs flashen, nebeneinander legen und mit Spannung versorgen. den einen Ausgang auf den anderen Eingang und das war's.

Du musst ja nicht Zustände wie offen/geschlossen für den Bordcomputer darstellen, sondern High oder Low. Das ist das gleiche als wenn du nur n normalen Taster anklemmen würdest.
Und der Simulator macht ja auch nix anderes als High oder Low auszugeben.

Also, der Bordcomputer (besser gesagt die Firmware dazu) reagiert wenn der Eingang (pullup aktiviert) auf 0 ist.
Es werden die Nullen pro Sekunde gezählt und dann die Geschwindigkeit in Anhänigkeit des Radumfangs berechnet.
Wenn dein reedkontakt dran ist, wird der Eingang ja auch auf Masse gezogen. Radumfang 2m, ein Impuls pro Sekunde = 2m/s.

Aber jetzt kommt erstmal nur der Simulator dran.
Der macht nix anderes als den Ausgang immer von High auf Low zu schalten. Die Schaltgeschwindigkeit legst du ja mit deiner Software fest.
Wenn der Ausgang auf H ist, ist der Eingang am Bordcomputer auch auf H. Es pasiert nichts. Es wird nix gezählt.
Jetzt schaltet der Simulator für eine kurze Zeit auf L. Der Bordcomputer bekommt die 0 am Eingang, die du dann pro Zeit zählen lässt.
Nichts anderes als wenn der Reedkontakt angeschlossen wäre.

Probier es einfach aus. Programmier beide Boards und verbinde sie wie beschrieben. Die beiden Massen zusammen und den Ausgang auf den Eingang.

Wenn dann alles so läuft wie du es dir vorgestellt hast musst du den Eingang nur noch entprellen und kannst dein Rad anschliessen.

RHS
24.06.2005, 21:44
Hallo Marco78,

Du hast recht, wenn ich die beiden Megas verbinde, so wie Du es
beschrieben hast, funktioniert es korrekt.

Ich bin schon dabei, den "Simulator" so zu programmieren, das
ich die Geschwindigkeit des Tachosignals über Tasten regeln
kann ... ;-).

Aber mich würde trotzdem noch interessieren, was ich "schaltungs-
technisch" machen muss, damit ich einen richtigen Tacho am
Simulator anschliessen kann. Mit einem Relais gehts ja problemlos,
aber nur mit den Port-Pins?

- Reinhard -

Marco78
24.06.2005, 21:56
Wenn du den Simulator am Tacho anklemmen willst, musst du da auch die Massen verbinden. Und dann musst du messen, welcher der beiden Kontakte Spannung führt und der andere ist dann logischerweise der, der den Impuls nimmt.
Und du musst die Spannung die auf den Impulskontakt geht begrenzen. Der AVR schaltet etwa 5V am Ausgang. Ich denke mal der Tacho wird nicht mehr als 3V haben.

Messen welcher Pin wofür ist könntest du z.B. so:
Beide Kontakte jeweils gegen + und - des Tachos messen. Das wären 4 Messungen.
Dann die Kontakte überbrücken und gegen + und - vom Tacho messen. (2 Messungen).
Dann etwas überlegen und du kannst die Kontakte zuordnen und du kennst die max. zulässige Spannung am Impulskontakt.

Ich habe noch eine persönliche Frage. Kommst du zufällig aus der nähe von Bremen?

RHS
24.06.2005, 23:57
Hallo Marco78,

>> Ich habe noch eine persönliche Frage. Kommst du zufällig
>> aus der nähe von Bremen?

nein, Münsterland ...

Mit den Messungen probier ich morgen (heute) aus. Erst
mal Danke für Deine Hilfestellung.

- Reinhard -

Laeubi
25.06.2005, 02:13
Nur der vollständigkeit halber, ein lüter liefert je nach drehzahl mehr oder weniger Impulse die du auch zählen kannst..
Wenn man natuerlich nen MM dranhält sieht es aus als hättest du eien zur Drehzahl proportionale Spannung.

RHS
05.07.2005, 14:41
Hallo Marco78,

kurz noch mal zu meinen o.g. "Problemen":

Tachosimulator und (wichtiger) Tachofunktion laufen zwischen-
zeitlich einwandfrei. Auch der richtige Tacho als Anzeigemedium
geht. Mit etwas Überlegung bin ich dank Deiner Hilfestellung
auch drauf gekommen, das es eigentlich ganz einfach ist (Brett
vor'm Kopf ist weg ... ;-)).

Vielleicht noch eine Frage: ich hab's jetzt so gemacht, dass das
Tachosignal am Interrupt-Eingang des Mega32 anliegt und ich
in einer entsprechenden ISR-Routine die Auswertung mache.
Allerdings ist mir nicht klar, wie ich nun Debounce einsetzen
soll, damit ich das Signal vom Original-Geber entprellen kann.
Hast Du dazu 'ne Idee?

Gruß: - Reinhard -

Marco78
05.07.2005, 19:09
Ich weiss auch nur das es den Befehl gibt.
Du könntest ganz einfach nach der Abfrage des Reedkontakts einige ms warten. Da ist aber die Frage, wie sehr der Taster prellen kann und für was für eine Zeit er eigentlich nur betätigt ist.

Aber...
Wenn wenn beim ersten Kontakt eine ISR ausgelöst wird und sichergestellt ist, das eine gewisse Zeit keine ISR mehr ausgeführt wird sollte das ja reichen.
Also wenn im Sub der INT erstmal ausgeschaltet wird und nach kurzer Zeit wieder eingeschaltet wird.

Oder...
Per Hardware entprellen. Aber wenn man schon die Möglichkeit hat das mit einem µC zu lösen kann man auch auf 'unnütze' Zusatzbeschaltung verzichten.

Also...
Erstmal normal programmieren und dabei deutlich sehen, was das prellen eines Tasters ausmachen kann. Dann kleine Warteschleifen einbauen. Waitms 50 und das so weit steigern, das dass Programm noch Fehlerfrei läuft aber die Geschwindigkeit der Realität entspricht und konstant bleibt.