Forum: Mikrocontroller und Digitale Elektronik Motoren lösen immer einen Interrupt über einen silberlegierten Taster aus


von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich habe einen Linienverfolgungs/Funk/Sprach/Objekterkennungs mit 
Display Menü gesteuerten Roboter gebaut.

Ich habe jetzt noch keine Motortreiber raufgemacht, da diese noch nicht 
angekommen sind (2* TLE5205-2). Also wollte ich mal schauen wieviel 
Strom die Motoren ziehen und habe in Serie ein Amperemeter zum Motor und 
vom Motor wieder zum Minuspol der Batterie (In dem Fall des 
Netzgerätes).

Die Cancel Mode Taster Taste ist folgende:
http://www.conrad.at/ce/de/product/701855/VANDGESCH-TASTER-16MM-2A48VDC-RING-BL/SHOP_AREA_17386&promotionareaSearchDetail=005

Mein Problem ist es jetzt wenn ich mit dem Amperemeter zum 
Motoranschluss gehe und ich im Menü schon in irgend einerm Modus bin, so 
wechselt sich der Modus.

Nochmal im Klartext:
Mit dem Roboter lassen sich viele Aufgabenstellungen lösen. Um diese 
auszuwählen muss man jetzt mit den Tasten rauf, runter, ok den Modi 
auswählen.
Jeder Modus besteht aus einer Endlosschleife, die nur unterbrochen 
werden kann wenn die boolsche Variable cancelmode = true ist.

Beispiel:
1
void Linienverfolgung_debugFUNC()
2
{
3
  //Schreibe auf Display kurz welchen Modus:
4
  LCD_Linie_debug;
5
6
  //Enable Timer0
7
  TIMSK0 |= (1<<TOIE0);
8
9
  //Main-Loop:*********************************************************************
10
  while(!cancel_mode)
11
  {
12
  
13
    _delay_ms(50);  //Anzeigezeit
14
    lcd_clear();  //Wieder löschen
15
  }
16
  //back***************************************************************************
17
18
  //Motoren ausschalten
19
  MotorLINKS = 0;
20
  MotorRECHTS = 0;
21
  PWMleft = 0;
22
  PWMright = 0;
23
24
  //Schreibe auf Display Verlassen des aktuellen Modus
25
  LCD_Mode_Verlassen;
26
27
  //Disable Timer0
28
  TIMSK0 &=~ (1<<TOIE0);
29
30
  cancel_mode = false;
31
32
}

Cancelmode wird immer gesetzt wenn der Interupt Int0 ausgelöst wird.
Dieser wird mit Signal() abgefragt und wird durch die Cancelmode Taste 
ausgelöst.

Und beim anlegen einer Spannung am Motor wird Cancelmode gesetzt.

Wenn ich die Tastenverbindung (Bild) vom Roboter jedoch trenne und ich 
in einem Modus drinnen bin, dann löst der Int0 nicht aus wenn ich den 
Motor drehen lasse, sondern nur wenn ich den Tastenverbinder drinnen 
stecken lasse (was ja praktischerweise immer sein soll).

Das kann aber nur bedeuten, dass das Falschsignal über den Taster 
ausgelöst wird.

Meine Frage jetzt: Kann ich den Taster irgendwie abschirmen, damit sich 
keine Störung mehr über ihn übertragen lässt?
Wenn ja wie?
Oder soll ich einfach einen anderen nehmen aus Kunststoff vielleicht?

Bin für allen Rat dankbat

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

RC Glied anbringen zur entstörung oder per software polling und 
entprellung abfragen, dazu gibts genug code in der Codesammlung.
Da wird auf jeden fall irgendwo eine Störung induziert durch die Ströme 
die bei deinem Motor fließen (vermutlich anlaufstrom).

Ein Taster direkt an einen Interrupt ist sowieso nicht zu empfehlen, da 
wenn der Taster prellt der Interrupt gleich mehrfach aufgerufen werden 
kann.

von Lukas K. (carrotindustries)


Lesenswert?

Wie hochohmig ist dein Pullup-Widerstand?

von Bernd H. (bhallinger) Benutzerseite


Lesenswert?

Hauke Radtki schrieb:
> RC Glied anbringen zur entstörung oder per software polling und
> entprellung abfragen, dazu gibts genug code in der Codesammlung.
> Da wird auf jeden fall irgendwo eine Störung induziert durch die Ströme
> die bei deinem Motor fließen (vermutlich anlaufstrom).
>
Finde ich ne sinnvolle Lösung, sollte man immer vorsehen.
Außerdem drauf achten, dass nicht durch Spannungsabfall auf der Masse 
Leitung (Strom des Motors) ein Schalten unmöglich wird.

> Ein Taster direkt an einen Interrupt ist sowieso nicht zu empfehlen, da
> wenn der Taster prellt der Interrupt gleich mehrfach aufgerufen werden
> kann.

Taster am Interrupt geht schon. Wenn der Int auslöst, wird er einfach 
abgeschaltet. Dann eine Timerveriable gesetzt. Die wird im Timer 
decrementiert bis sie null ist. Wenn 0 dann Int wieder zulassen. So wird 
der Taster entprellt.

von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Luk4s K. schrieb:
> Wie hochohmig ist dein Pullup-Widerstand?

5k

Bernd Hallinger schrieb:
> Hauke Radtki schrieb:
>> RC Glied anbringen zur entstörung oder per software polling und
>> entprellung abfragen, dazu gibts genug code in der Codesammlung.
>> Da wird auf jeden fall irgendwo eine Störung induziert durch die Ströme
>> die bei deinem Motor fließen (vermutlich anlaufstrom).
>>
> Finde ich ne sinnvolle Lösung, sollte man immer vorsehen.
> Außerdem drauf achten, dass nicht durch Spannungsabfall auf der Masse
> Leitung (Strom des Motors) ein Schalten unmöglich wird.

Also schaut meine ganze Zusatzbeschaltung wie im Bild aus?
Welche Werte empfehlen sich da für Rt und Ct?

Der RC Tiefpass löst aber hier aber das Prellen und die Entstörung 
gleichzeitig oder?

lg andy

von Andy S. (Gast)


Lesenswert?

Das war jetz reiner bledsinnm, wartet noch abissi.

lg andy

von Andy S. (Gast)


Lesenswert?

Pascal Haury schrieb im Beitrag #1996034:
> Darf ich mal fragen, warum du oben Rechts im Foto (HPIM2330.JPG)
> Leitungen in Wasser gelegt hast??

Das ist kein Wasser.

Hauke Radtki schrieb:
> RC Glied anbringen zur entstörung

Wo genau soll ich den TIefpass reingeben?
Am Motor ist einer drann, und es gibt keinen Grund wieso ich einen 
TIefpass am Int Eingang legen soll wenn ich so recht überlege.

lg andy

von Floh (Gast)


Lesenswert?

Andy S. schrieb:
> Am Motor ist einer drann, und es gibt keinen Grund wieso ich einen
> TIefpass am Int Eingang legen soll wenn ich so recht überlege.

Genau da soll er aber hin.
Das Problem existiert bei dir, weil du die Tasterkabel über einen 
Gleichstrommotor legst. Dessen Bürstenfeuer sorgt für Störungen in 
umliegenden Leitungen. Deine Tasterleitung ist da ja ideal, da sie recht 
lang und nahe am Motor ist.
:-)
Übrigends solltest du die Leitungen sowieso besser verlegen, so wickelts 
die unter Garantie irgendwann in die Reifen.

von Andy S. (Gast)


Lesenswert?

Floh schrieb:
> Genau da soll er aber hin.

Dann müsste ich aber so eine art Invertierer reinmachen weil ich ja 
gegen GND ziehe, dann wird zwar die Elektronik in der Luft hängen aber 
ich versuche es mal. Ja ich hab sowieso hingeschrieben dass sich der 
linke Motor dreht und deswegen habe ich auch die Tasterleitungen nach 
rechts gegeben, damit so wenig Störung wie möglich einkoppelt wird. Aber 
auch diese Entfernung scheint nichts zu helfen.

Danke jedenfalls für die Hilfen, ich werde einmal den RCTiefpass 
reinmachen und berichte.

lg andy

von Floh (Gast)


Lesenswert?

Andy S. schrieb:
> Dann müsste ich aber so eine art Invertierer reinmachen weil ich ja
> gegen GND ziehe

Wofür den Inverter? Einfach so wie oben in deinem Bild gezeigt aufbauen.
:-)

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Drauf achten, dass dein Rt etwa 10 mal kleiner ist als dein pullup, 
sonst versaust du dir den LOW Pegel (Spannungsteiler). C dann so 
auslegen, dass du vielleicht noch 50Hz Bandbreite hast, das reicht 
völlig, so schnell kann kein Mensch (sinnvoll) tippen.

von Andy S. (Gast)


Lesenswert?

Luk4s K. schrieb:
> Wie hochohmig ist dein Pullup-Widerstand?

Der interne Pullup ist doch 34,9 kOHM.
Ich habe ihn rausgemessen vom mega644.

Habe jetzt einen 47uF und einen 460 Ohm Widerstand für Ct imd Rt 
genommen, jedoch haut das auch nicht so hin.

Was passiert ist erstmals das selbe rausspringen aus der Schleife und 
zusätzlich warte ich 1,5s nach dem ich die Cancelmode Taste gedrückt 
habe bis das Programm reagiert, irgendwas stimmt danoch nicht so recht 
und ich muss mir das nochmal überlegen.

Denkanstöße sind aber natürlich gewünscht.

lg andy

von Spess53 (Gast)


Lesenswert?

Hi

>Der interne Pullup ist doch 34,9 kOHM.
>Ich habe ihn rausgemessen vom mega644.

Ein Blick ins Datenblatt hätte gereicht.

>Habe jetzt einen 47uF und einen 460 Ohm Widerstand für Ct imd Rt
>genommen, jedoch haut das auch nicht so hin.

Die 47µ sind zu gross.

>Was passiert ist erstmals das selbe rausspringen aus der Schleife und
>zusätzlich warte ich 1,5s nach dem ich die Cancelmode Taste gedrückt
>habe bis das Programm reagiert, irgendwas stimmt danoch nicht so recht
>und ich muss mir das nochmal überlegen.

Siehe oben.

Poste doch mal den ganzen Schaltplan.

MfG Spess

von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Spess53 schrieb:
> Ein Blick ins Datenblatt hätte gereicht.

Ich habe das ganze DB durchsucht, aber einen richtigen Wert für die 
Pullups habe ich nicht gefunden.

Spess53 schrieb:
> Poste doch mal den ganzen Schaltplan.
Der Tiefpass befindet sich allerdings beim Taster hinten, da ich nichts 
auf die Platine löten will.

lg andy

von Floh (Gast)


Lesenswert?

Andy S. schrieb:
> Der Tiefpass befindet sich allerdings beim Taster hinten, da ich nichts
> auf die Platine löten will.

Facepalm
Der Sinn dieses Tiefpasses ist es, die Störungen, die vom Kabel (= 
Antenne) empfangen werden, vom uC-Eingang fernzuhalten. Der bringt halt 
nun mal nichts, wenn er dafür am falschen Ende hockt.
-.-

von Andy S. (Gast)


Lesenswert?

Floh schrieb:
> Der Sinn dieses Tiefpasses ist es, die Störungen, die vom Kabel (=
> Antenne) empfangen werden, vom uC-Eingang fernzuhalten. Der bringt halt
> nun mal nichts, wenn er dafür am falschen Ende hockt.

Ich hatte gedacht die Störungen gehen zuerst auf den Taster und von dort 
weiter zum Kabel und dann zum Controller.
Guter Einwand,
Danke!

lg andy

von Lukas K. (carrotindustries)


Lesenswert?

Andy S. schrieb:
> Der interne Pullup ist doch 34,9 kOHM.

Verwende einen externen Pullup, der deutlich kleiner ist, z.B. 1k.

von Andy S. (Gast)


Lesenswert?

Luk4s K. schrieb:
> Verwende einen externen Pullup, der deutlich kleiner ist, z.B. 1k.

Hat das irgendeinen positiven Effekt auf meine Störungen?

lg andy

von Spess53 (Gast)


Lesenswert?

Hi

>Ich habe das ganze DB durchsucht, aber einen richtigen Wert für die
>Pullups habe ich nicht gefunden.

Electrical Characteristics -> DC Characteristics

RPU I/O Pin Pull-up Resistor 20 50 kΩ

MfG Spess

von Lukas K. (carrotindustries)


Lesenswert?

Andy S. schrieb:
> Luk4s K. schrieb:
>> Verwende einen externen Pullup, der deutlich kleiner ist, z.B. 1k.
>
> Hat das irgendeinen positiven Effekt auf meine Störungen?
>
> lg andy

Ja, hat es höchstwahrscheinlich.

von Andy S. (Gast)


Lesenswert?

Luk4s K. schrieb:
> Ja, hat es höchstwahrscheinlich.

Und welchen?

von Nachtaktiver (Gast)


Lesenswert?

Je Hochohmiger ein Eingang ist umso schlimmer sind externe 
Einstrahlungen in Bezug auf störungen.

von Andy S. (Gast)


Lesenswert?

Nachtaktiver schrieb:
> Je Hochohmiger ein Eingang ist umso schlimmer sind externe
> Einstrahlungen in Bezug auf störungen.

Das habe ich noch nie gehört, aber gut zu wissen.

Schönes neues Jahr!!

von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Ich werde jetzt einfach eine neue Platine designen mit den fehlenden 
Sachen, da sowieso mehr Fehler drauf sind. Ich weiß halt einfach nicht 
wie ich den Tiefpass da reinmachen soll ohne irgendwie einen Kurzen zu 
verursachen. Es ist einfach zu wenig Platz.

Wie siehts aus mit den Motorleitebahnen?
Kan ich die so lassen oder sollen sie noch dicker werden?

Und passt jetzt der Tiefpass?

lg andy

von Andy S. (Gast)


Lesenswert?

Kann ich den Tiefpass so mit die 100 Ohm und dem 1k pullup lassen?
Gibt es sonst noch stellen wo ich Filter einbauen sollte?

Die anderen Taster können alle Modis im Betrieb nicht verändern, also 
werde ich darauf verzichten, was könnten noch Fehlerwuellen sein?

lg andy

von Andy S. (Gast)


Angehängte Dateien:

Lesenswert?

Da noch der neue Schaltplan und das Layout. Ich habe den Komparator und 
den Mux rausgeschmissen, dafür verwende ich jetzt den internen 
Komparator und den Atmega644P der 2 Serielle Schnittstellen hat um 
weitere Fehlerquellen auszuschließen.
Die 5 Luftlinien werde ich händisch verbinden müssen.

lg andy

von Lukas K. (carrotindustries)


Lesenswert?

Andy S. schrieb:
> Kann ich den Tiefpass so mit die 100 Ohm und dem 1k pullup lassen?
> Gibt es sonst noch stellen wo ich Filter einbauen sollte?
In der Software, um kurze Impulse zu ignorieren; bzw. Entprellung.
Andy S. schrieb:
> und das Layout.
Soweit ich das dem JPEG-Pixelmuß richtig entnehmen kann kommen sich 
manche Leiterbahnen beträchtlich nahe. z.B. Am Atmega644 unten links. 
Dito unter D1. Die Leiterbanhführung ist überaus ... kreativ; könnte man 
ein wenig aufräumen (entweder nur rund (70er Jahre-Stil) oder 
vollständig 45°/90° Winkel). Eine willkommene Abwechselung zu dem 
eckigen Bauhausstil ist es dennoch allemal, aber über Geschmack lässt 
sich vortrefflich streiten.

von Andy S (Gast)


Angehängte Dateien:

Lesenswert?

Luk4s K. schrieb:
> Soweit ich das dem JPEG-Pixelmuß richtig entnehmen kann kommen sich
> manche Leiterbahnen beträchtlich nahe. z.B. Am Atmega644 unten links.

ja, stimmt, habe jetzt sowieso alles wieder umändern müssen (Bild) weil 
die Leiterbahnen zu dünn waren.

Ich habe jetzt einen Tiefpass ganz nah an der Platine reingemacht. 
Jedoch bekomme ich immer noch Störungen und zwar die selben. Ct ist 
jetzt 4,7uF und Rt ist 470R. Ich benutze immer noch den internen 34k 
Pullup, da sich das auf der Platine nur schwer ändern lässt.
Es hat den Anschein dass der Tiefpass überhaupt nichts macht. Noch dazu 
kommt jetzt, dass auch wenn ich die Taster rausgebe die Störung 
entsteht. Liegt aber wahrscheinlich daran, dass die Anschlüsse vom 
Kondensator einbisschen rausshauen weil er ja nicht direkt auf der 
Platine drauf ist.

von Lukas K. (carrotindustries)


Lesenswert?

Andy S schrieb:
> da sich das auf der Platine nur schwer ändern lässt.
Einen Widerstand kann man auch auf der Unterseite noch nachträglich 
auflöten, ist zwar unschön, reicht aber zum ausprobieren.
Was die Platine anbetrifft: Mach mal einen DRC, manche Leiterbahnen 
berühren sich sogar... Außerdem scheint mir so, als ob dein 
"Massepolygon" nicht den Namen GND hat; lass mal die EAGLE-Dateien 
rüberwachsen :)

von Andy S (Gast)



Lesenswert?

Luk4s K. schrieb:
> Außerdem scheint mir so, als ob dein
> "Massepolygon" nicht den Namen GND hat

Soll ja auch nicht mit GND verbunden sein, sondern nur zum Ätzmittel 
sparen.

von Lukas K. (carrotindustries)


Lesenswert?

Andy S schrieb:
> Luk4s K. schrieb:
>> Außerdem scheint mir so, als ob dein
>> "Massepolygon" nicht den Namen GND hat
>
> Soll ja auch nicht mit GND verbunden sein, sondern nur zum Ätzmittel
> sparen.
Mach's dennoch schaden tut's nicht und du sparst nochmals ein wenig mehr 
Ätzmittel, meinetwegen setz' auch die orphans auf on. Wenn du deinen 
Ätzprozess im Griff hast, kannst du die Leiterbahnbreite deutlich 
reduzieren, z.B. auf 24mil, dann entschäft sich vieles. Mit 10mil kommst 
du bequem unter 2 2.54mm Pins durch. Die Abblock-Cs könnten ebenfalls 
noch besser platziert werden. Wenn du diese in einem kleineren Rastermaß 
nimmst, bekommst du sie sogar direkt an die Pins. Alternativ kannst du 
auch SMDs nehmen. 1206 bekommst du bequem neben die Pads. Wenn du die 
Peripherie an den Pins des AVRs geschickter verteilst, lösen sich manche 
langen Luftlinien fast in Wohlgefallen auf bzw. werden deutlich kürzer. 
Drahtbrücken musst du nicht im Schaltplan als solche kennzeichnen; 
einfach beim Routen das Layer wechseln (mittlere Maustaste). Beim 
Drucken blendest du dann das obere Layer aus und lötest die Brücken wie 
gehabt ein.
EDIT:
Andy S schrieb:
> ja, stimmt, habe jetzt sowieso alles wieder umändern müssen (Bild) weil
> die Leiterbahnen zu dünn waren.

weshalb?

von Andy S (Gast)


Lesenswert?

Luk4s K. schrieb:
> meinetwegen setz' auch die orphans auf on.

Was ist das?

Luk4s K. schrieb:
> Wenn du diese in einem kleineren Rastermaß
> nimms

Kann ich theoretisch auch auf 0,635mm gehen?

Luk4s K. schrieb:
> 1206 bekommst du bequem neben die Pads.

Sry, ich bin jetzt nicht der beste elektroniker, das gebe ich zu. Was 
heißt das?

Luk4s K. schrieb:
> Drahtbrücken musst du nicht im Schaltplan als solche kennzeichnen;
> einfach beim Routen das Layer wechseln (mittlere Maustaste). Beim
> Drucken blendest du dann das obere Layer aus und lötest die Brücken wie
> gehabt ein.

Aha, ok gut zu wissen

Luk4s K. schrieb:
> Andy S schrieb:
>> ja, stimmt, habe jetzt sowieso alles wieder umändern müssen (Bild) weil
>> die Leiterbahnen zu dünn waren.
>
> weshalb?

Naja weil das unser Werkstättenlehrer das so gesagt hat.

Danke für die Tipps!

lg andy

von Lukas K. (carrotindustries)


Lesenswert?

Andy S schrieb:
> Luk4s K. schrieb:
>> meinetwegen setz' auch die orphans auf on.
>
> Was ist das?
EAGLE Hilfe:
1
he po
 in die Kommandozeile von Eagle eingeben; abschnitt Orphans
> Luk4s K. schrieb:
>> Wenn du diese in einem kleineren Rastermaß
>> nimms
>
> Kann ich theoretisch auch auf 0,635mm gehen?
Ich meine Damit das Rastermaß der Abblock-Cs, hier ist dasselbe 
Rastermaß wie vom Atmega sinnvoll.
> Luk4s K. schrieb:
>> 1206 bekommst du bequem neben die Pads.
>
> Sry, ich bin jetzt nicht der beste elektroniker, das gebe ich zu. Was
> heißt das?
1206 ist eine SMD-Baugröße, siehe Wikipedia, zählt dabei noch zu den 
größeren. 0603 lässt sich auch noch relativ gut von Hand verarbeiten.
> Luk4s K. schrieb:
>> Drahtbrücken musst du nicht im Schaltplan als solche kennzeichnen;
>> einfach beim Routen das Layer wechseln (mittlere Maustaste). Beim
>> Drucken blendest du dann das obere Layer aus und lötest die Brücken wie
>> gehabt ein.
>
> Aha, ok gut zu wissen
>
> Luk4s K. schrieb:
>> Andy S schrieb:
>>> ja, stimmt, habe jetzt sowieso alles wieder umändern müssen (Bild) weil
>>> die Leiterbahnen zu dünn waren.
>>
>> weshalb?
>
> Naja weil das unser Werkstättenlehrer das so gesagt hat.
Hmm mit welcher Begründung? Ich denke mal, dass ihr die Platinen selbst 
ätzt. Mit einfachen Mitteln (Tintenstrahldrucker, Plastikfolie und 
UV-Belichter) bekommt man, wenn der Prozess stimmt, auch noch 
3.94mil=0.1mm Leiterbahnen hin. Bei Isolate sollte man allerdings nicht 
sparen. 20mil~0.5mm sollten es mindestens bei SMD sein, bei Bedrahteten 
Bauteilen bin ich mit 32mil~0.8mm gut gefahren. Gutes Gelingen!
> Danke für die Tipps!
Gern geschehen
> lg andy
mfg lukas

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.