Forum: Mikrocontroller und Digitale Elektronik Hallsensor VMA313 Verhalten


von Martin E. (formalin)


Lesenswert?

Mit einem VMA313 und Arduino habe ich mir provisorisch einen
Wickelzähler für Spulen gebaut.
Mit Interrupt funktioniert das auch sehr zufriedenstellend.
Ab und zu kommt es vor, dass der Sensor "durcheinander" kommt.
Das passiert nicht während des Betriebs, sondern meist beim
Einrichten der Spulen.
Er reagiert dann einfach nicht mehr. Erst wenn ich ihn ein
paar mal dem Wechsel von Süd- und Nordpol ausgesetzt habe
läuft es wieder. Bleibt da irgend ein Restmagnetismus im
Sensor oder der Platine? Wie kann ich das verhindern?

von hinz (Gast)


Lesenswert?

Martin E. schrieb:
> VMA313

So wie es aussieht ein Allegro A3144.


> Bleibt da irgend ein Restmagnetismus im
> Sensor oder der Platine?

Sicher nicht.


Zeig doch mal deinen Aufbau.

von Martin E. (formalin)


Lesenswert?

Im Moment ist der Aufbau größtenteils wieder zerlegt.
Ich kann dir aber sagen, dass der Südpol eines Magneten
am Sensor vorbei geführt wurde.
Du hattest ja anscheinend einen Verdacht, was den Aufbau
betrifft. Meinst du es wäre besser, beide Pole im Wechsel
zu verwenden, oder was hattest du für Gedanken?

von hinz (Gast)


Lesenswert?

Martin E. schrieb:
> Meinst du es wäre besser, beide Pole im Wechsel
> zu verwenden?

Das ist bei dem Sensor nicht nötig, der ist unipolar. Allerdings hat er 
eine ziemlich geringe Hysterese, das kann je nach Aufbau ungünstig sein.

Du hast aber schon den Südpol an der Seite mit dem Aufdruck vorbei 
geführt?

von hinz (Gast)


Lesenswert?

Kann es sein, dass du den Pull-Up vergessen hast?

von Martin E. (formalin)


Lesenswert?

hinz schrieb:
> Kann es sein, dass du den Pull-Up vergessen hast?

Das ist jetzt die Frage.
Ich habe tatsächlich einen Pull-Up drin.
Es ist ja so, dass der Sensor speziell für Arduino
mit 3 Pins geliefert wird. GND VCC S
Auf der Platine sitzt noch ein Widerstand für die
vorhandene LED die immer schön blinkt, wenn man
(unter Versorgungsspannung) einen Magneten vorbei
führt.
Laut Datenblatt sollte es reichen, den Sensorausgang
direkt an z.B. A10 zu hängen.
https://www.velleman.eu/downloads/29/vma313_a4v01.pdf

Und wie schon beschrieben, das Ding läuft tausende
Impulse einwandfrei, aber plötzlich wenn man mal
gestoppt hat, fängt es nicht wieder an.

Erst wenn ich dann mit dem Magneten am Sensor ein
paar Mal vorbeigefuchtelt habe fängt er sich wieder.

: Bearbeitet durch User
von hinz (Gast)


Lesenswert?

Martin E. schrieb:
> Laut Datenblatt sollte es reichen, den Sensorausgang
> direkt an z.B. A10 zu hängen.

Dann sollte man aber unbedingt den zugehörigen Pull-Up des AVR 
aktivieren.


> Erst wenn ich dann mit dem Magneten am Sensor ein
> paar Mal vorbeigefuchtelt habe fängt er sich wieder.

Ist es denn wirklich ein A3144? Marking, 1.Zeile: 44E?

von Martin E. (formalin)


Lesenswert?

Auf dem Sensor steht
3144
402
Sonst nichts.

Ich habe einen 10K Pullup die ganze Zeit verwendet.

: Bearbeitet durch User
von hinz (Gast)


Lesenswert?

Martin E. schrieb im Beitrag \#6395587:
> Auf dem Sensor steht
> 3144
> 402
> Sonst nichts.

Chinesischer Nachbau des A3144. Aber das sollte kein Problem sein.


> Ich habe einen 10K Pullup die ganze Zeit verwendet.

Dann sehe ich auch keinen Grund für das merkwürdige Verhalten.

von C.S. (Gast)


Lesenswert?

Befindet sich der Sensor in der Nähe von Metall? Schraube oder 
Befestigung ?
Metall in der Nähe des Sensors wird  durch den vorbeilaufenden Magneten 
magnetisiert.
Das hin und her bewegen entmagnetisiert !

von Martin E. (formalin)


Lesenswert?

Daran hatte ich auch schon gedacht,
ich hatte den Sensor mit Klebeband an eine
Handbohrmaschine befestigt. Da sollte zwar einiges
an Metall drin sein, aber dort wo er befestigt war
ist gar nicht mal so viel, als dass ein Magnet dort
hängen bleiben würde. Und so weit ich mich daran erinnere
hatte ich den Effekt auch ganz am Anfang meiner Experimente,
als ich einfach nur einen Magneten am Sensor vorbei bewegte.
Aus dem Grunde hatte ich dann sogar mein Ersatzexemplar
für die weiteren Versuche verwendet.
Vielleicht muss ich mir die Signale doch mal einige
Zeit am Oszi anschauen.

von nachtmix (Gast)


Lesenswert?

Martin E. schrieb:
> Ab und zu kommt es vor, dass der Sensor "durcheinander" kommt.
> Das passiert nicht während des Betriebs, sondern meist beim
> Einrichten der Spulen.
> Er reagiert dann einfach nicht mehr. Erst wenn ich ihn ein
> paar mal dem Wechsel von Süd- und Nordpol ausgesetzt habe
> läuft es wieder.

Softwaremacke?
Ich habe gelegentlich schon Programme erlebt, die einfrieren, wenn es 
nichts zu tun gibt.
Grund sind vermutlich Stacküberläufe o.dgl. und das Programm 
initialisiert sich per Timeout oder nach jeder korrekten Aktivität 
teilweise neu, so dass der Fehler dann nicht auffällt.

von Einer K. (Gast)


Lesenswert?

Martin E. schrieb:
> Vielleicht muss ich mir die Signale doch mal einige
> Zeit am Oszi anschauen.

Ja, tu du das!

Meine Glaskugel sagt, der Fehler steckt genau da, wo du nicht danach 
suchst!
z.B. blendest du hier die Software völlig aus.
Das steckt es, möchte darauf wetten.

von Martin E. (formalin)


Lesenswert?

1
#include <Wire.h>
2
#include <LiquidCrystal_I2C.h>
3
LiquidCrystal_I2C lcd(0x27, 16, 2);
4
const byte HallPin =2;
5
volatile long zaehler = 0;
6
7
void setup() {
8
  // put your setup code here, to run once:
9
  lcd.init();
10
  lcd.backlight();
11
  lcd.clear();
12
  zaehler=0;
13
  attachInterrupt(digitalPinToInterrupt(HallPin),Hall_ISR,FALLING);
14
}
15
16
void loop() {
17
  // put your main code here, to run repeatedly:
18
  lcd.setCursor(0,0);
19
  lcd.print("Anzahl Windungen");
20
  lcd.setCursor(0,1);
21
  lcd.print(zaehler);
22
  delay(50);
23
  }
24
 
25
26
27
void Hall_ISR() {
28
  zaehler++;
29
}

von Einer K. (Gast)


Lesenswert?

Martin E. schrieb:
> volatile long zaehler = 0;
volatile unsigned long

Martin E. schrieb:
> lcd.print(zaehler);
zaehler solle atomar ausgelesen werden.


Aber einen Grund, für das genannte Fehlverhalten, sehe ich nicht.

von Martin E. (formalin)


Lesenswert?

Ja, ich fange erst an, mich mit Arduino zu beschäftigen.
'Weiß jetzt auch nicht, was du mit atomar auslesen meinst.

Ich hatte dran gedacht, FALLING und RISING auszulesen
und dann durch 2 zu teilen. Wäre so etwas möglich?

von Einer K. (Gast)


Lesenswert?

https://www.nongnu.org/avr-libc/user-manual/group__util__atomic.html

Martin E. schrieb:
> Ich hatte dran gedacht, FALLING und RISING auszulesen
> und dann durch 2 zu teilen. Wäre so etwas möglich?

Möglich ist vieles.
Aber nicht alles sinnvoll.

von MaWin (Gast)


Lesenswert?

Martin E. schrieb:
> Auf der Platine sitzt noch ein Widerstand für die
> vorhandene LED die immer schön blinkt, wenn man
> (unter Versorgungsspannung) einen Magneten vorbei
> führt.

Blinkts denn, wenn der Sensor feststreckt, oder blinkts dann nicht mehr 
?

Martin E. schrieb:
> Erst wenn ich ihn ein
> paar mal dem Wechsel von Süd- und Nordpol ausgesetzt habe
> läuft es wieder.

Hat die Platine irgendwo Gold, dann hat sie auch Nickel und damit 
magnetische Remanenz:

Martin E. schrieb:
> Bleibt da irgend ein Restmagnetismus im
> Sensor oder der Platine

Martin E. schrieb:
> Meinst du es wäre besser, beide Pole im Wechsel
> zu verwenden,

Ja.

von hinz (Gast)


Lesenswert?

MaWin schrieb:
> Hat die Platine irgendwo Gold, dann hat sie auch Nickel und damit
> magnetische Remanenz:

Das bisschen wird dem Sensor aber nicht reichen.

von Martin E. (formalin)


Lesenswert?

Also Gold ist keines sichtbar auf der Platine.
Das wäre auch nur ein Hauch, falls vorhanden.

Nur die angebrachte Stiftleiste (20mm vom Sensor entfernt)
ist vergoldet und besteht wohl aus Eisenstiften.

Das mit dem Polwechsel werde ich einmal testen.
Werde mir mal eine Spule aufbauen, die den Sensor
ansteuert. Dann kann ich auch gleich nach der LED schauen.

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.