Der Hall-Sensor

Handbücher zur Programmiersprache. Kleine übersichtliche Programme, die gut Dokumentiert sind. u.v.m.
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Ich habe vor Jahren mal einen Frequenzzähler gebaut. Also ein Uno ein Display und ein Pin auf dem die Frequenz reinkommt, die ich auswerten will. Ich habe erst mal versucht einen Sinsus, also einal Plus, einmal Minus Halbwelle feststellen. Dann kam natürlich gleich die Idee, daraus einen Frequenzzähler zu bauen. Ich weiß nicht mehr, wieviel Hz ich damit am Anfang zählen konnte. Ich glaube ich kam auf 2000Hz, also 2000 Impulse in der Sekunde. Wenn da damit die Drehzahl eines Motors misst, bist du bei 2000 in der sekunden ja schon 120.000 in der Minute. Also 120.000 Umdrehungen. Ich habe da ohne Interrupts gearbeitet. Habe bis heute noch in keinem Programm, das ich selber gemacht habe, Interrupte benötigt. Ich schaue mal ob ich das Programm noch ausgraben kann. Das war eines meiner ersten "C" Programme. Sicher noch recht umständlich.

Servus
Franz :(V):
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Ich habs gefunden. Das war von 2017. In dem Jahr habe ich angefangen mit dem Arduino und mit "C". Ich teste das mal heute abend. Es interessiert mich, wie weit das richtig gezählt hat. Ich habe irgendwas mit 2000Hz im Hinterkopf.

Hier ist das Programm. Ich muss es noch ein bischen umstellen, dass es mit der heutigen Display Lib. läuft. Aber jetzt ist erst mal Fernsehen angesagt. Bis später :(iii):

So, ich habe das Programm an die neue Lib. angepasst und das Programm getestet. Also es macht nicht 2.000Hz sondern 20.000Hz problemlos. Habe es noch ein wenig mehr strapaziert und 25.000Hz ist es auch noch gut. Sieh mal einer an, das dachte ich nicht. Also 20.000 Impulse in der Sekunde zählt das Ding noch sauber. Ich hänge mal einen Hallsensor dran, dann gehts weiter. Und nen schnellen Elektromotor, der genug Umdrehungen macht. Das wird ein Spielchen für morgen. Ich weiß auf die Schnelle gerade nicht, wo ich einen schnellen Motor her bekomme, dem ich ein paar Magneten umhängen kann. Meine Schrittmotoren sind Schlaftabletten in Sachen Drehzahl :sad: Und 24Volt DC-Motoren habe ich noch, aber die sind auch Schlaftabletten in Sachen Drehzahl. Denen geht bei 300-400 Umdrehungen auch die Luft aus, nur in Sachen Kraft sind die nicht sooo schlecht. :roll:

Code: Alles auswählen

//#########################################
//######## Frequenzzähler von 2017#########
//#########################################
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 20, 4);
unsigned long messzeit = 0;
unsigned long startzeit = 0;
unsigned long millimessung = 0;
unsigned long ergebnis = 0;
int led = 13;
int pin = 7;
int messung = LOW;
int messungAlt = LOW;
int zaehler = 0;
//-----------------------------------------------------------------------------------------------
void setup() {
  pinMode(pin, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  startzeit = millis();
  lcd.setCursor(0, 0); lcd.print("                   ");
  lcd.setCursor(0, 0); lcd.print ("Gemessene Frequenz");
  lcd.setCursor(10, 2); lcd.print("                   ");
  lcd.setCursor(10, 2); lcd.print("Hz");
}
//-----------------------------------------------------------------------------------------------
void loop() {
  messung = digitalRead(pin);

  // Auswertung Sinus Start mit High //
  if (messung == HIGH && messungAlt == LOW) {
    digitalWrite(led, HIGH);
    messungAlt = messung;
  }

  // Auswertung ein Sinus High-Low //
  if (messung == LOW && messungAlt == HIGH) {
    digitalWrite(led, LOW);
    messungAlt = messung;
    millimessung = millis();
    messzeit = millimessung - startzeit;
    zaehler = zaehler + 1;
    if (messzeit >= 1000) {
      ergebnis = zaehler;
      zaehler = 0;
      lcd.setCursor(0, 2); lcd.print("        ");
      lcd.setCursor(0, 2); lcd.print(ergebnis);
      startzeit = millis();
    }
  }

}
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Max »

Servus Franz,
versuchs mal mit einem alten Festplattenmotor, falls vorhanden.
Der dürfte so um die 7000 schaffen?
Gruß
Max
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Eine Festplatte schrotten ist mir zuviel Aufwand. Ausserdem sind das doch Schrittmotoren?
Der einzige DC Motor denn ich hier gerade habe ist der den ich auf 300-400 UPM geschätzt habe. Aber der hat 2580 Umdrehungen. Gerade gemessen. :)

Ich habe das Programm für das Display schnell erweitert auf Umdrehungen pro Minute. Also das Programm ist auf jedem Fall für jede Drehzahl gut. Die Drehzahl 2580 Upm ist 43 Hz. Der Zähler macht 20.000 Hz mal 60 Sekunden ist Upm das wären 1.200.000 Upm :(o): :(o): Die Grenze ist also auf jeden Fall der HallSensor :oo:

Code: Alles auswählen

//#########################################
//######## Frequenzzähler von 2023#########
//#########################################
#include <LiquidCrystal_I2C.h> // LCD Display
// Displayadresse ist 0x27 oder 0x3F
LiquidCrystal_I2C lcd(0x27, 20, 4);
unsigned long messzeit = 0;
unsigned long startzeit = 0;
unsigned long millimessung = 0;
unsigned long ergebnis = 0;
const byte led = 13;
const byte pin = 7;
int messung = LOW;
int messungAlt = LOW;
int zaehler = 0;
//-----------------------------------------------------------------------------------------------
void setup() {
  pinMode(pin, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
  lcd.begin();
  lcd.backlight();
  lcd.clear();
  startzeit = millis();
  lcd.setCursor(0, 0); lcd.print ("   Frequenz / Upm");
  lcd.setCursor(10, 2); lcd.print("Hz");
  lcd.setCursor(10, 3); lcd.print("Upm");
}
//-----------------------------------------------------------------------------------------------
void loop() {
  messung = digitalRead(pin);
  // Auswertung Sinus Start mit High //
  if (messung == HIGH && messungAlt == LOW) {
    digitalWrite(led, HIGH);
    messungAlt = messung;
  }
  // Auswertung ein Sinus High-Low //
  if (messung == LOW && messungAlt == HIGH) {
    digitalWrite(led, LOW);
    messungAlt = messung;
    millimessung = millis();
    messzeit = millimessung - startzeit;
    zaehler = zaehler + 1;
    if (messzeit >= 1000) {
      ergebnis = zaehler;
      zaehler = 0;
      lcd.setCursor(0, 2); lcd.print("        ");
      lcd.setCursor(0, 2); lcd.print(ergebnis);
      lcd.setCursor(0, 3); lcd.print("        ");
      lcd.setCursor(0, 3); lcd.print(ergebnis * 60);
      startzeit = millis();
    }
  }
}
.
Frequenzzähler und UPM.jpg
Frequenzzähler und UPM.jpg (377.24 KiB) 857 mal betrachtet
Ich habe mal auf den Motor eine Scheibe gebaut, in die habe ich zwei Löchter gebohrt, und in diese je einen Magneten gesteckt. Mit verschiedener magnetischer Polung. So kann ich damit auch testen, mit nem Analogen HallSensor die beiden Magneten zu unterscheiden. Also halbe und volle Umdrehungen. Da ich die Magneten nur reingesteckt habe, nicht reingeklebt, habe ich sie mit Tesaband überklebt. Denn ich denke, bei 2500 Upm werden das schon kräftige Geschoße.
.
HallSensor_Motor.jpg
HallSensor_Motor.jpg (199.6 KiB) 838 mal betrachtet
Max
Beiträge: 78
Registriert: Di 27. Sep 2022, 17:37
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Max »

Servus Franz,
das sieht schon sehr gut aus mit deinem Prüfstand.
Dein Programm werde ich mal gelegendlich ausprobieren,
mit meiner UNO, da kann ich ein LCD Display anschließen.
Gruß
Max
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Ja, die Motordrehzahl fehlt mir, dass wir mal an die Grenzen des Hallgebers gehen könnten. :sad: Aber mal schauen was ich noch ausgrabe.

Franz
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Ich habe einen Motor gefunden, der nach Angaben bei 12 Volt bis 12000 Upm macht. Habe mich aber nicht mehr getraut, noch weiter Gas zu geben. Er hat auch pro Volt etwa 1000 Umdrehungen zugelegt. Auf der Welle ich nur ein Zahnrad mit 5mm Durchmesser, da habe ich den Magneten dran und dann mit einem Testaband bischen umwickelt. Das schnellste war 9700 Upm. Ich muss da erst was bauen, dass ich den Motor nicht festhalten muss und dann ein Blech um die Achse, dass der Magnet nicht absegeln kann. Nicht dass der mir was zertrümmert. Der würde ja wahrscheinlich wie ein Geschoß los gehen. Das ist mir zu heikel :agt: Wenn ich den Magneten dann aus der Hand schneiden muss :sad: Oder er holt mir meine Deckenlampe runter :O: Vielleicht lasse ich es auch. 9700 Upm, also Impulse in der Minute sind ja schon mal ne Ansage für den Sensor. Der Motor nimmt eigendlich bis 12 Volt und hatte bei 13 Volt dann noch keine 10.000 Umdrehungen, weil ihn wohl die Unwucht mit dem einen Magneten bremst.

Das ist mir zu gefährlich :(o): :(o):
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

OK, neuer Versuch und gelungen. :(V):

Diesmal habe ich zwei Magneten, einer rechts, einer links, auf dem Zahnrad. Ein Magnet war in der Polrichtung, auf die mein Sensor regiert. Somit nur eine Impuls pro Umdrehung. Das ganze mit Schrumpfschlauch, der auch Kleber enthält schön fest gemacht. Dann habe ich es auf 11880 Upm geschafft, bei 15 Volt :(o): Den Motor gut befestigt auf einem Holzbrett, das Brett mit 300gr Blei beschwert, dass es nicht abfliegt. Und gehofft dass der Schrumpfschlauch hält, sonst wäre das für irgendwas hier übel ausgegangen :agt:
.
HallSensor_Motor_02.jpg
HallSensor_Motor_02.jpg (436.89 KiB) 810 mal betrachtet
Ich habe nicht gedacht, dass der Hallsensor so schnell reagiert!! 198 umpolungen in der Sekunde. Das ist schon ne Hausnummer, die ich nicht glaubte zu erreichen.
Benutzeravatar
Admin
Administrator
Beiträge: 1197
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Re: Der Hall-Sensor

Beitrag von Admin »

Hey Max.
Ich werde mir dein Programm in den nächsten Tagen mal vornehmen. Mal schauen, ob wir auf ähnliche Drehzahlen kommen. :(V): Ich verwende zum Testen gerne meinen Funktionsgenerator. damit kann ich die Impulse, also die Frequenz erzeugen, und sehe mit welcher Frequenz ich reinfahre. Dann sollte der Frequenzzähler eine ähnliche Frequenz anzeigen. Man muss nur beachten, dass die Frequenz Impulse pro Sekunde sind und die Drehzahl Impulse pro Minute. Deshalb zeige ich am Display beides an.

Servus
Franz
Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste