Forum: Mikrocontroller und Digitale Elektronik Drehzahlmessung mit CNY70 am Atmega32


von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

vorab: Ich habe schon einige Theards zu diesem Thema durchgelesen, aber 
wie bei so manch anderen passen die Theards nur bedingt zu meiner 
Anwendung. Den sehr ausfuehrlichen Theard von Peter Dannenberger habe 
ich ebenfalls schon gesehen... allerdings können die Beiträge mir nur 
bedingt zur Lösung meines speziellen Problems helfen. Ich hoffe, dass 
ich nichts übersehen habe.

Nun zum eigentlichen Thema: Ich moechten 3 Optoreflexkoppler vom Typ 
CNY70 auslesen um daraus auf die zurueckgelegte Wegstrecke von 3 Rädern 
zu schließen. Der Schaltplan ist oben sichtbar. Ich habe die CNY70 an 
die Interrupt Pins des Atmega32 angeschlossen und bin mir bei dieser 
Sache schon nicht wirklich sicher.

1.) Ich habe schon einen kleinen Test mit einer blinkenden LED gemacht, 
die aufleuchdet, wenn der Sensor Kontakt hat und aus ist wenn er keinen 
hat. Das funktionierte soweit ganz gut. Allerdings habe ich, wie man 
sehr gut sehen kann, keinen Schmitt Trigger eingebaut und bin mir 
deshalb nicht sicher, inwiefern das die Messergebnisse beeinflussen 
koennte.

2.) Wenn ich die 3 CNY an die Interrupt Pins anschließe, koennte das ja 
unter Umstaenden eine sehr hohe CPU-Auslastung zur Folge haben, wie ich 
in dem Artikel "Drehgeber" auf dieser Seite nachgelesen habe. Außerdem 
war mit INT2 irgendwas besonderes, das weis ich aber nicht mehr genau. 
Ist es vielleicht sinnvoll die Sensoren an einen anderen Pin 
anzuschließen?

3.) Die Frage ist vielleicht wirklich idiotisch, aber ich bin relativ 
neu in diesem Geschaeft. Ich nehme mal an, dass ich keinen Timer 
brauche, wenn ich die Sensoren direkt an die Interrupt Pins anschliesse? 
Ist es vielleicht nicht sinnvoller auf einen Atmega128 umzusteigen und 
dann einen Sensor jeweils an einen Timer Pin anzuschließen, um somit die 
Zählung mithilfe eines Timers vorzunehmen?

Gruß,
Bernd

von Helmut L. (helmi1)


Lesenswert?

>1.) Ich habe schon einen kleinen Test mit einer blinkenden LED gemacht,
>die aufleuchdet, wenn der Sensor Kontakt hat und aus ist wenn er keinen
>hat. Das funktionierte soweit ganz gut. Allerdings habe ich, wie man
>sehr gut sehen kann, keinen Schmitt Trigger eingebaut und bin mir
>deshalb nicht sicher, inwiefern das die Messergebnisse beeinflussen
>koennte.

 Ein Schmitttrigger vor dem Eingang wuerde die Stoerscherheit deutlich 
erhoehen. Eventuell noch mit einem kleinen RC-Filter.


>2.) Wenn ich die 3 CNY an die Interrupt Pins anschließe, koennte das ja
>unter Umstaenden eine sehr hohe CPU-Auslastung zur Folge haben,

Um wieviele Impulse / Sekunde reden wir hier ? Nur um mal kurz einen 
Zaehler hochzuzaehlen da wurde ich sagen da schaut die CPU fast den 
ganzen Tag zum Fenster raus. Da geht dir die CPU vor Langeweile ein.

Gruss Helmi

von Bernd (Gast)


Lesenswert?

Hi,

also das habe ich noch vergessen zu schreiben: Die Motoren habe eine 
maximale Umdrehungsgeschwindigkeit von 200U/min. Ich wollte dann bei 
jeder viertel Umdrehung einen Zähler hochzähln lassen.
Wie siehst du das denn mit dem Anschluss an INT0, INT1, INT2. Wuerdest 
du das anders machen?

Gruß,
Bernd

von Helmut L. (helmi1)


Lesenswert?

>Die Motoren habe eine maximale Umdrehungsgeschwindigkeit von 200U/min.

Das sind ja mal gerade ca. 13 Hz. Da schlaeft die CPU ein.

>Wie siehst du das denn mit dem Anschluss an INT0, INT1, INT2. Wuerdest
>du das anders machen?

Da es mehrere moeglichkeiten gibt waere das ein davon. Bei 13 Hz kannst 
du das ganze aber auch per Polling der IO Pins machen in einer 
Timerinterrupt routine. Aber mach das mal per INT 0 ..

Aber denk daran das du ein sauberes Signal auf die Pins gibst. Also 
RC-Filter -> Schmitttrigger -> Eingang.

Ich habe so was aenliches vor ein paar Wochen fuer einen Kunden gemacht.

von Bernd (Gast)


Lesenswert?

Moin,

danke fuer die schnelle Hilfe. Ich denke, dass ich die Prellungen durch 
einen Schmitttrigger von dieser Art beseitigen kann:
http://www.reichelt.de/?;ACTION=3;LA=444;GROUP=A2211;GROUPID=2924;ARTICLE=12636;START=0;SORT=user;OFFSET=16;SID=32Iy6GdKwQASAAAEZ@VfAd7521acc4438dd631887bef3b55d1ad2
Oder brauche ich sonst noch Extrateile?

Gruß,
Bernd

von STK500-Besitzer (Gast)


Lesenswert?

Wozu braucht man denn einen externen Schmitt-Trigger, wenn der AVR schon 
an jedem Pin einen eingebauten hat?

Bei 200U/min dauert eine Umdrehung 0,3 Sekunden (60 Sekunden/200 
Umdrehungen) das ist eine halbe Ewigkeit für einen Mikrocontroller.
Die Abtastrate ergibt sich dann noch aus der Teilung (10 Striche pro 
Umdrehung benötigen eine höhere Abtastrate als 5...)
Bei einer Viertelteilung ergibt sich also alle 0,075 Sekunden (75ms) ein 
"Tick".
Das sollte sich per Timer-Interrupt und Polling erreichen lassen...
Zum Vergleich: Ein 16Bit-Timer mit 1MHz betrieben braucht für einen 
Überlauf 65,536ms...

Wie kommt Helmut eigentlich auf ca. 13Hz? Das wären nach meiner 
Rechznung ~800 Umdrehungen/Min.

von Helmut L. (helmi1)


Lesenswert?

>Oder brauche ich sonst noch Extrateile?

Ausser Huehnerfutter wie R und C nicht.

Kannst aber auch einen 74HC14 verwenden. Dann haste sogar 6 Mann drin.

Denk daran das die Teile das Signale invertieren.

von Helmut L. (helmi1)


Lesenswert?

>Wie kommt Helmut eigentlich auf ca. 13Hz? Das wären nach meiner
>Rechznung ~800 Umdrehungen/Min.

Oben stand was von 4 Impulse / Umdrehung.

Ok die Schmitttrigger kann man weglassen hatte ich im Moment nicht daran 
gedacht.

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

also ich habe wohl ein Missverstaendnis selbst produziert. Ich habe 
natuerlich eine Odometriescheibe mit 60Segmenten und ich wollte von 
dieser Odometriescheibe jeweils eine Viertel Drehung nehmen. Also nach 
15 Segmenten eine variable z.b "vierteldrehung=0,1,2,3,4" oder so 
setzen, danach beginnt die natuerlich wieder bei 0. Ich wollte das fuer 
jede einzelne Scheibe machen, da ich dachte, dass ich spaeter auch jeden 
einzelnen Motor selbst regle. Dieser vierteldrehungswert soll dann fuer 
eine bessere Reglung der Motoren sorgen. Ich mache das zum ersten mal 
und deswegen kann es natuerlich sein, dass das totaler Unsinn ist. Ich 
nehme aber mal an, dass ich die Variable, wenn ich sie Global als 
volatile bezeichne auch außerhalb der ISR verwenden kann oder?

Nun noch eine Frage wegen dem Schmitt Trigger: Der CNY70 liefert doch 
nur analoge Signale, die eigentlich digitalisiert werden muessten, oder? 
Natuerlich kann man das per Software machen, aber wenns mit nem kleinen 
IC geht waere mir das wesentlich lieber. Habt ihr da ne Idee?

Gruß,
Daniel

von Helmut L. (helmi1)


Lesenswert?

>Der CNY70 liefert doch
>nur analoge Signale, die eigentlich digitalisiert werden muessten, oder?

Der wird dir keine TTL Pegel liefern. Meistens kommt da was Sinusartiges 
beir raus. Um das auf einen vernüftigen Pegel zu bekommen kannst du 
einen Komparator ala LM339/LM393  dazwischen schalten.

von holger (Gast)


Lesenswert?

>Ich habe
>natuerlich eine Odometriescheibe mit 60Segmenten und ich wollte von
>dieser Odometriescheibe jeweils eine Viertel Drehung nehmen.

Ich muß jetzt gar bitterlich weinen.
Das erinnert mich so unglaublich an die Kunden
die so gar nicht mit Infos rüberkommen.
Da baut man etwas was funktioniert (nach Kundenvorgabe),
und mit einmal schaut man nur noch blöd aus der Wäsche weil
IRGENDEIN VOLLTROTTEL WICHTIGE INFORMATIONEN unterschlagen hat.

Wer hat dich eigentlich zum Hardwareentwickler gemacht?

von spess53 (Gast)


Lesenswert?

Hi

>Das erinnert mich so unglaublich an die Kunden
>die so gar nicht mit Infos rüberkommen.
>Da baut man etwas was funktioniert (nach Kundenvorgabe),
>und mit einmal schaut man nur noch blöd aus der Wäsche weil
>IRGENDEIN VOLLTROTTEL WICHTIGE INFORMATIONEN unterschlagen hat.

Und ich dachte das geht nur mir so.

MfG Spess

von holger (Gast)


Lesenswert?

@spess
>Und ich dachte das geht nur mir so.

Du bist nicht allein :(

von avr (Gast)


Lesenswert?

Ich kann auch mitjammern.

(Die 10 KM/H max. sollen auch Obergrenze sein und eigentlich
sind es 5 KM/H. Hat ihnen das keiner gesagt? Also nicht
zählen wenn zu schnell.).

avr

von ichbinsofrei (Gast)


Lesenswert?

ich sag, der is student... hoffentlich googlet dein betreuer fleißig.
die transistoren im cny70 sind verqeuer angeschlossen.
viel spaß

von holger (Gast)


Lesenswert?

>die transistoren im cny70 sind verqeuer angeschlossen.

Und der Snubber bringt auch nichts mit 15k Widerstand.

von spess53 (Gast)


Lesenswert?

Hi

>die transistoren im cny70 sind verqeuer angeschlossen.

Vorsicht, darauf bin ich auch schon einmal hereingefallen. Es gibt 
verschiedene Datenblätter von dem Teil, die sich genau darin 
unterscheiden.
Wenn er schon Tests gemacht hat wird die Belegung schon stimmen.

MfG Spess

von ichbinsofrei (Gast)


Lesenswert?

interessant. danke spess!
vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^

von spess53 (Gast)


Lesenswert?

Hi

>vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^

Wie kommst du darauf?

MfG Spess

von Bernd (Gast)


Lesenswert?

Ich trau mich ja fast schon garnichtmehr irgendwas zu schreiben, da man 
hier ja sofort öffentlich gesteinigt wird, wenn man MAL EINEN FEHLER 
MACHT. Außerdem hab ich irgendwie das Gefühl, dass manche User in diesem 
Forum es als Sport ansehen, die Leute, die vielleicht noch nicht soviel 
Erfahrung haben verbal zu kreuzigen. Ob sie dann soviel besser sind, wie 
sie vorgeben sei dann auch mal dahingestellt. Das ist schließlich ein 
öffentliches Forum und ihr habt sogar eingestellt, dass JEDER hier 
posten darf, ohne sich anzumelden... also worueber regt ihr euch hier 
eigentlich so kuenstlich auf? Wenn ihr doch eh schon im Beruf mit 
solchen Deppen wie mir zu schaffen habt, dann kapier ich nich, wieso ihr 
meine Beitraege lest und dann auch noch so kommentiert ;)
Ich habe mich ja auch fuer die nicht gepostete Odometriescheibe 
entschuldigt. So das musste raus, weil ich schon etliche solcher Posts 
gelesen hab.

Nun zum Thema:
@Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt 
Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist? 
Ich lasse mich da gerne korrigieren. Ich habe eigentlich sehr 
zuverlaessige Signale, da ich das mal mit nem Papierstreifen getestet 
habe: Immer wenn der von weiß auf Schwarz wechselt hat die LED 
geschaltet. Also brauch ich solche Dinge nun, oder kann ich das auch 
erstmal ohne probieren?
Das mit der variablen sollte doch gehen, wenn man die global als 
volatile bezeichnet, oder? Dann sollte der Wert ja auch von anderen 
Funktionen übernommen werden können.

von holger (Gast)


Lesenswert?

> also worueber regt ihr euch hier
>eigentlich so kuenstlich auf?

Hast du dir schon mal überlegt das es evtl.
etwas Zeit der Leser benötigt dein Problem zu lösen?
Wenn du ungenügende Informationen gibst dann
verschwendest du unsere Zeit. Wenn dir der Ton hier
nicht gefällt dann geh doch woanders hin.

von ichbinsofrei (Gast)


Lesenswert?

Bernd wrote:
> Nun zum Thema:
> @Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt
ich bin zwar nicht angesprochen, aber ichbinsofrei =)

> Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist?
naja, die wikipage hast du schon mal gelesen. ad rem...

> Ich lasse mich da gerne korrigieren. Ich habe eigentlich sehr
> zuverlaessige Signale, da ich das mal mit nem Papierstreifen getestet
> habe: Immer wenn der von weiß auf Schwarz wechselt hat die LED
und du kannst der led mit 100Hz zuschaun? schau dir lieber auf einem 
oszi an, wie die signale ausschaun. prellen wirst du nicht haben, aber 
einflüsse von der umwelt. schalt doch mal eine neonröhre in der nähe an 
und schau am oszi, was sich tut.
evtl brauchst du ja einen variablen schaltpunkt oder hysterese... das 
siehst du dann.

> geschaltet. Also brauch ich solche Dinge nun, oder kann ich das auch
> erstmal ohne probieren?
zum testen tuts auch die led. wenn das ganze ne ordentliche arbeit sein 
soll, nimm nen integrierten schmitttrigger oder nen komparator.
diese lösung herauszufinden ist deine sache, weil du das system vor dir 
hast.

> Das mit der variablen sollte doch gehen, wenn man die global als
> volatile bezeichnet, oder? Dann sollte der Wert ja auch von anderen
> Funktionen übernommen werden können.
richtig.

zu deinen vorigen fragen: der interrupt-pin ist genau der richtige. es 
würde genau genommen einer langen. dazu einfach alle leitungen von den 
komparatoren an ein ODER gatter und dessen ausgang an eine 
interrup-leitung deiner wahl. zusätzliche jeden komparator-ausgang auch 
an einen portpin.
im interrupt kannst dann den portpin abfragen und feststellen, von 
welchem komparator der int ausgelöst wurde.

was aber noch immer nichts daran ändert, dass du die transistoren 
vermutlich falsch angeschlossen hast.
oder ist die schaltung gar nicht nach dem schaltplan aufgebaut?
15k find ich übrigens auch zu klein. sind immerhin potis...


spess wrote:
>>vielleicht sind deswegen 2 optokoppler übereinander gezeichnet ^^
> Wie kommst du darauf?
sollte ein scherz gewesen sein.
aber es sind tatsächlich 2 übereinander gelegt. erkennt man an den 
überlappenden namen und den junctions an jedem bein.

von ichbinsofrei (Gast)


Lesenswert?

aber dir sollte ernsthaft bewusst werden, dass
1. google hier verdammt oft reinschaut,
2. du vermutlich mit deinem echten, mittlerweile unter studenten wohl 
seltenen vornamen, postest und
3. du deine themenbeschreibung der arbeit hier schön aufgeführt hast.

zu meiner studienzeit ging die selbstständigkeit mit in die note ein...

von Bernd (Gast)


Lesenswert?

Hi,

@ichbinsofrei:
Erstmal recht herzlichen Dank fuer die ausfuehrliche Erklaerung. Ich 
kann natuerlich nachvollziehen, dass es euch auf den Piss geht, wenn ein 
Gruenschnabel wichtige Infos vergisst zu schreiben. Aber ich konnte eben 
nicht nachvollziehen, wieso mehrere Leute dann direkt so erbost 
reagieren.

Zu den Transistoren: Ich hab die nicht falsch angeschlossen, glaube ich 
jedenfalls. Es gibt 2 Arten von den CNY70, die aeußerlich genau gleich 
aussehen, sich aber eben in der Beschaltung unterscheiden.
Um es genau zu sagen: Es gibt 2 Firmen, die diesen kleinen Sensor 
herstellen. Temi Semiconductors und Vishay. Beide unterscheiden sich in 
der Beschaltung des Phototransistors. Wieso es da nicht sowas wie eine 
DIN Norm gibt, oder die wenigstens sagen, dass einer CNY70 und der 
andere CNY71 heist weis ich auch nicht.

Zu den ODER-Gattern: Hab ich das jetzt richtig verstanden, dass ich die 
CNY70 Sensoren jeweils an einen Schmitt-Trigger anschliesse und jeden 
Schmitt-Trigger der jeweiligen Sensoren dann an das ODER-Gatter und den 
Ausgang des ODER-Gatters dann z.b an INT0 ? Wenn das so ginge waere das 
ja eine sehr pfiffige Methode um Pinne zu sparen.

Noch eine kleine Frage: Ich habe von unterschiedlichen Leuten gehoert, 
dass INT2 eine gewisse Sonderstellung bei den externen Interrupts hat. 
Allerdings hab ich dazu nix im AVR-GCC Tutorial gefunden, oder es 
einfach uebersehen. Im Datenblatt des ATMEGA32 kann ich auch keine 
großen Unterschiede erkennen. Habt ihr vielleicht eine Antwort dadrauf?

von spess53 (Gast)


Lesenswert?

Hi

>Ich habe von unterschiedlichen Leuten gehoert,
>dass INT2 eine gewisse Sonderstellung bei den externen Interrupts hat.
>Allerdings hab ich dazu nix im AVR-GCC Tutorial gefunden, oder es

INT2 beim ATmega32 kann im Gegensatz zu INT0/1 nur auf Flanken 
reagieren. Ist in der Funktionalität also etwas eingeschränkt.

>Zu den ODER-Gattern: Hab ich das jetzt richtig verstanden, dass ich die
>CNY70 Sensoren jeweils an einen Schmitt-Trigger anschliesse und jeden
>Schmitt-Trigger der jeweiligen Sensoren dann an das ODER-Gatter und den...

Kannst du dir sparen. Taste einfach die Eingänge in einem Timerinterrupt 
ab und vergleiche das Ergebnis mit dem vorherigen Zustand (Ex-Oder).

MfG Spess

von Bernd (Gast)


Lesenswert?

Hi,

also durch die Beschaltung an den externen Interrupts wollt ich mir 
eigentlich die Timer freihalten. Allerdings weis ich jetzt auch nicht so 
genau, was ich glauben soll, denn jemand dem ich eigentlich sehr 
vertraue in diesen Dingen hat den CNY70 mit Schmitt Trigger an den 
Microcontroller angeschlossen. Allerdings sagen einige ja, dass der 
Atmega32 sowas schon intus hat. Wenn ich es so machen wuerde, wie ich 
oben beschrieben habe ginge es doch auch, oder nich?

von spess53 (Gast)


Lesenswert?

Hi

Mit zusätzlichen Schmitt-Triggern machst du nichts verkehrt. Relativ 
entscheidend ist auch die Wahl deines Scheibenmaterials. Ich empfinde 
die Teile eigentlich (nach einigen Tests) als grottenschlecht. Die 
besten Ergebnisse hatte ich mit einer CD.

MfG Spess

von Helmut L. (helmi1)


Lesenswert?

>@Helmut: Ist das mit dem Komperator nicht dasselbe wie ein Schmitt
>Trigger, nur das ein Schmitt Trigger ein Komperator mit Hysterese ist?

In etwa schon, aber bei einem Komparator kannst du Hysterese und 
Triggerpunkt besser einstellen. Bei den Schmitttrigern (4093,74HC14) ist 
Umschaltpunkt und Hysterese fest vom Hersteller vorgegeben. Somit hast 
du mit einem Komparator (LM393) etwas mehr Einstellmöglichkeiten zur 
Anpassung an deine Koppler.


>Es gibt 2 Firmen, die diesen kleinen Sensor
>herstellen. Temi Semiconductors und Vishay.

Temic ist von Vishay aufgekauft worden.

von Karl H. (kbuchegg)


Lesenswert?

Bernd schrieb:

> also durch die Beschaltung an den externen Interrupts wollt ich mir
> eigentlich die Timer freihalten.

Wozu?
Einen Timer brauchst du sowieso. Denn irgendwo musst du ja eine Uhr 
realisieren, damit du feststellen kannst, wieviel Zeit zwischen 2 
Flanken vergangen ist.
Da du den Timer sowieso als Uhr brauchst, kannst du auch gleich in der 
Timer ISR die Eingänge pollen.

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

also ich bin zunehmend verunsichert. Ich dachte jetzt, dass das 
Anschließen an die externen Interrupts (INT0,INT1,INT2) erstmal geht, 
auch um die Zeit zwischen 2 Flanken zu messen. Dann wurde ja gesagt, 
dass ich die Sensoren direkt an einen 74HC ODER Gatter hängen kann, 
damit man nur einen externen Interrupt Pin benoetigt.

Jetzt schaut es so aus, alsob ich doch die externen Timer Pinne brauche. 
Ich wuerd gerne wissen, ob das in diesem Setup mit Zeitmessung zwischen 
den Flanken funzen wuerde. Ich hab halt leider noch nicht die Erfahrung, 
dass ich jetzt sagen kann, dass es so auf jeden Fall laufen wird, sorry.

Zum Schmitt-Trigger: Alle Schaltungen, die ich bis jetzt dazu gesehn 
hab, haben einen Schmitt-Trigger verwendet. Ist es denn noetig, den 
Komperator zu nehmen, denn es waere ja einfacher (wenn auch nicht so 
elegant) wenn ich als Anfänger erstmal das nachbaue, was wirklich schon 
getestet ist.

Also die Beschaltung muss eigentlich stimmen, dann ich hab das Programm, 
was oben im Anhang ist schon zum laufen gekriegt.

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.