Archiv verlassen und diese Seite im Standarddesign anzeigen : Hal-Sensor direkt oder mit Wiederstand an das Board?
Hallo,
möchte die Drehzahl mittels Hal-Sensor an einem RNBFRA messen. Benötigt man eine Schaltung dazwischen (m. Widerstand) oder Schliesst man den Hal Sensor direkt an einen Eingang an? Ein Schaltbild habe ich in der Beschreibung, die da bei war nämlich nicht gefunden.
Man will sich ja nichts zerschiessen und fragt Experten lieber vorher.
Gruss
Sascha
Ein Hallsensor liefert nur geringe Ausgangsspannungen und es braucht also eine "Auswerteschaltung", um das Signal an der RNBFRA nutzen zu können.
Gruß Dirk
Hallo Dirk,
nochmals vielen Dank für die schnelle Antwort. Wie könnte denn so eine Schaltung aussehen? Gibt es evtl. Beispiele bzw. Schaltpläne?
Hier im Forum habe ich im Bereich RN-Wissen/Bascom-Quellcode/Drehzahlmessung nur einen Inkremental-Geber mit einem 330 Ohm Vorwiederstand gefunden. Ist das mit einem Hal-Sensor vergleichbar oder müsste diese Auswerteschaltung komplexer aussehen?
Viele Grüße
Sascha
Da gbt's im Forum einige Experten-Gespräche.
Geh' mal auf die Suche.
Z.B.: https://www.roboternetz.de/phpBB2/viewtopic.php?t=26341
oder https://www.roboternetz.de/phpBB2/viewtopic.php?t=24248
Gruß Dirk
vielen Dank für die Links. Nur leider kenne ich mich mit Elektrotechnik überhaupt nicht aus - bis auf dass ich eine Schaltung nach Plan löten kann. Auf den Seiten habe ich sehr unterschiedliche Baupläne gefunden, die mir jedoch sehr wenig sagen. (Bin nämlich Wirtschafts-Inf. von Beruf) Vielleicht habe ich ein paar detailliertere Infos für den Hall-Sensor vergessen mit an zu geben. Den Hall-Sensor habe ich bei Robotikhardware.de gekauft. In dem Datenblatt-PDF stehen so einige Abbildungen für Schaltungen. Dort steht zum einen, dass in dem Hall-Sensor schon eine Schaltung drin ist, die gegen Verpolung sowie den Output schützt (m. Schmitt-Trigger - was auch immer das zu heissen mag).
Er hat ein digitales Output-Signal und auf Seite 6 im PDF steht u.a. dass er bis zu 32 Volt Ausgeben kann. Finde eigentlich diesen Output nicht gerade sehr gering -oder ich versteh das ganze falsch... Auf Seite 10 ist zwar eine Schöne Schaltung hinter dem Hall-Sensor zu sehen, aber es fehlen die Angaben des Widerstandes sowie von einem Kondensator. Auf Seite 11 ist dann eine ähnliche Schaltung, die sich aber von jeder anderen hier und über google gefundenen unterscheidet. Das PDF-File ist hier angehängt.
Kann der Hall-Sensor eigentlich vom direkten Anschliessen ans Board zerstört werden? Habe den Hall-Sensor testweise mal an +12V, GND und den Hall-Output an Signaleingang 1 des ersten Eingabeports angeschlossen. Aber es konnte kein Signal verarbeitet werden, als ich den Magneten mit einem Abstand von ca 1mm an einer Bohrmaschiene vor dem Sensor kreisen liess. Als Ausgabe sollte ein Servo Drehzahlabhängig seine Stellung verändern. (Quellcode ist auch beigefügt)
Gruß
Sascha
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000 'Quarzfrequenz
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Config Int0 = Falling
Config Timer1 = Timer
Const Timervorgabe = 3036
Dim Zaehlerirq0 As Long
Dim Impulseprosekunde As Long
Dim Impulseprominute As Long
Dim Umdrehungenprominute As Integer
Dim I As Byte
Zaehlerirq0 = 0
On Int0 Irq0
Enable Int0
On Timer1 Timer_irq
Enable Timer1
Enable Interrupts
Do
Impulseprominute = Impulseprosekunde * 60
Umdrehungenprominute = Impulseprominute
I = Umdrehungenprominute
Call Rnb_servo(1 , I)
Wait 1
Loop
Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Print "#s" ; Chr(servonummer) ; Chr(position)
End Sub
End
'Pro Impuls ein Aufruf
Irq0:
Incr Zaehlerirq0
Return
'Pro Sekunde ein Aufruf
Timer_irq:
Timer1 = Timervorgabe
Impulseprosekunde = Zaehlerirq0
Zaehlerirq0 = 0
Return
Irgendwie ist das Attachment nicht mitgekommen...
Dieser Sensor hat den Verstärker etc schon eingebaut.
Der Ausgang ist ein open-collector, dh du brauchst einen Pullup, so ca 10k. Vielleicht reicht auch der interne des AVRs.
Anschluss: Ausgang (Q) an den AVR, Q über einen Pullup an 5V, Vs an 5V und GND an GND.
Auswertung: wenn ein Magnet erkannt wird, zieht Q auf low. Ansonsten liegt Q auf high.
Testmöglichkeit: An Q eine LED mit Vorwiderstand nach 5V anschließen. Sie leuchtet, wenn der Ausgang aktiv ist.
der Test mit der LED funktioniert. Nur das Board kann offenbar Int0 (Int1 habe ich auch mal zum testen angeschlossen - da hat sich auch nichts getan) nicht verarbeiten - die Interrupt-Routine wird nicht aufgerufen. Habe es mit einem 10 K Widerstand zwischen Q und 5V sowie auch ohne probiert. Habe es dann komplett ohne Sensor versucht: nur mit einem Kabel von +5v an den Int0 gehalten, um Rising hervor zu rufen. Hat aber auch keinen Sprung in die Interrupt Routine hervorgerufen.
Habe es auch mit und ohne Getriebemotoren-modus probiert - auch ohne erfolg.
habe meine Fusebit-Einstellungen als Anlage beigefügt. Vielleicht liegt es ja daran. Mit Fusebit KLA987= 111111... habe ich es auch schon ausprobiert - jedoch auch ohne erfolg. Nutzt evtl. jemand Interrupts bei einem ATMEGA32 und kann hier die Fusebit-Einstellungen posten? Anmerkung: das Pony-Programm funktioniert bei mir nicht, da ich einen USB-ISP-Programmer habe. Daher kann ich nur BASCOM für die Fusebit-Konfiguration nutzen.
Die Fusebits haben keinerlei Einfluss auf die Interrupts.
Wie sieht dein aktuelles Programm aus?
habe den Code zum testen des Interrupt wie folgt umgeschrieben (erstmal ohne Drehzahlermittlung):
$regfile = "m32def.dat" 'z.B. rn-control
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000 'Quarzfrequenz
$baud = 9600
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Config Int0 = Rising 'Interrupt bei steigender Flanke
On Int0 Irq0 'Festlegen wo bei externem Interrupt hin gesprungen wird
Enable Int0 'Diesen Interrupt aktivieren
Enable Interrupts 'Alle aktivierten Interrupts einschalten
Do 'Endlosschleife
Call Rnb_servo(1 , 1)
Waitms 500
'goto IRQ0
'$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes.$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes. Goto Irq0
Loop
Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Print "#s" ; Chr(servonummer) ; Chr(position)
End Sub
End
'Interrupt Routine wird immer ausgelöst wenn der Pegel von 0 auf 1 am
'INT0 (Pin 18 PD2) Eingang wechselt
Irq0:
Call Rnb_servo(1 , 255)
Waitms 1000
Return
linux_80
01.03.2008, 23:32
Hallo,
also das ist keine gute Idee in der ISR den gleichen Befehl wie im Hauptprogramm aufzurufen. Denn was ist, wenn der IRQ genau dann auftritt, wenn der Print-Befehl von der Hauptschleife halb gesendet ist ?
Und ein Wait in der ISR ist noch schlechter [-X
Die ISR soll so schnell wie möglich wieder verlassen werden, hier max. eine Variable hochzählen und in der Hauptschleife auswerten.
cigarron
02.03.2008, 00:20
Heu HAL9999 & Dirk - HALL-Sensor an AVR
Sicherheithalber ist ohnehin eine Pufferstufe anzuraten, dazu hier ein Schaltungskniff zur Anbindung HALL/AVR über 2-Draht - auch über mehrere Meter !
HALL-Sensor TLE4905L : 1. Leitung ist der gemeinsamer GND; 2. Leitung von dem Versorgungs-Pin HALL an die Basis eines pnp (BC557) vorm AVR; output-Pin HALL mit 1k an diese Leitung; Emitter des pnp an +5V; 100 Ohm von Basis pnp an +5V; Kollektor pnp mit 10k nach GND; wenn der HALL per Magnet durchschaltet, geht der Kollektot nach high; ggf noch die Basis mit 22 Ohm in Reihe bei Kurzschluß schützen.
mfg von cigarron
vielen Dank für die Antworten. habe den code wie folgt verändert:
Wait in ISP entfernt und nur schalter setzen... - leider ohne erfolg. Das servo zuckt immer noch nicht. Nur manchmal geht es eine sechstel umdrehung weiter - ist aber nicht davon abhängig, ob der magnet grade vorbei ging oder nicht. - ein sehr merkwürdiges verhalten. Mit dem Multimeter habe ich den Strom gemessen, der sich beim vorbeifahren des Magneten vom Output des Hallsensors verändert. Da scheint alles soweit in Ordnung zu sein. Also wenn der Magnet davor ist schaltet der Ausgang auf Low sodass eine Differenzspannung zu Plus und dem Ausgang in Höhe der eingegebenen Spannung (hier 12V) herrscht.
Die für die vorgeschlagene Schaltung notwendigen Teile müsste ich erst noch bestellen - Ein weiterer Test mit der Schaltung kann daher also bis ende nächster Woche dauern.
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000 'Quarzfrequenz
$baud = 9600
Declare Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Config Int0 = Low Level 'Interrupt bei steigender Flanke
On Int0 Irq0 'Festlegen wo bei externem Interrupt hin gesprungen wird
Enable Int0 'Diesen Interrupt aktivieren
Enable Interrupts 'Alle aktivierten Interrupts einschalten
Dim Irqschalter As Integer 'Schalter für Interrupt definieren.
Irqschalter = 0
Do
If Irqschalter = 0 Then
Call Rnb_servo(1 , 1)
Waitms 1000
Else
Call Rnb_servo(1 , 255)
Waitms 1000
End If
'goto IRQ0
'$PROG &HFF,&HEF,&HD9,&H00' generated. Take care that the chip supports all fuse bytes. Goto Irq0
Loop
Sub Rnb_servo(byval Servonummer As Byte , Byval Position As Byte)
Print "#s" ; Chr(servonummer) ; Chr(position)
End Sub
End
Irq0:
Irqschalter = 1
Return
linux_80
02.03.2008, 12:56
Hast Du mal statt dem Servo-Board den PC an die UART gehängt, was und ob da was gesendet wird ? Aber beachten das hier binäre Werte gesendet werden, die mit Ascii nicht unbedingt dagestellt werden können !
Und Du musst den 'Schalter' Irqschalter irgendwann auch mal wieder zurücksetzen, sonst wird das ganze nur einmal geändert. Also beim ersten IRQ wird das 1 und bleibt dann so.
cigarron
03.03.2008, 12:46
Hui HAL9999 & Dirk - HALL an AVR
Mein Laborbuch aus dem letzten Jahrhundert weist eine alternative Beschaltung mit TL172C (TO18) als Sensor aus. Der Widerstand am Hall ist dann mit 10k bemessen, an der Basis 220 Ohm nach +5V. Der pnp kann in beiden Fällen ein üblicher Universeller sein.
Ich habe mir mit Absicht eine Funktionsbeschreibung verkniiffen - nur so weit: Im durchgeschalteten Zustand nehmen die Sensoren den 3- bis 4-fachen Strom auf - da fällt doch gleich der Cent.
Notiert habe ich damals 2,7 / 10,7 mA bei TL 172C und 2,9 / 8,3 mA bei TLE 4905L.
Der Daumen zum Erfolg zeigt nach oben, mfg cigarron
@linux_80:
der Test mit Uart also RS232 hat bei diesem Code
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 8000000 'Quarzfrequenz
$baud = 9600
Dim I As Byte
I = 0
do
Print I ; "interrupt-wert=" ; Int0
Waitms 1000
Incr I
loop
immer das folgende resultat ergeben:
31interrupt-wert=6
32interrupt-wert=6
usw...
egal was ich mit dem INT0 gemacht habe. (Int0 mal an GND und mal an +5v mit einer Brücke verbunden - immer das gleiche.)
@cigarron:
was meinst Du mit der Widerstand am Hall 10k?
- von wo nach wo soll der 10k gehen?
und was ist beim Hallsensor die Basis? kenne Basis nur vom transistor.
Der Hallsensor hat nur ein output-pin (u. natürlich GND sowie 5V+ )
Eine Funktions bzw. Schaltplan wäre für mich als elektronik-laien ein große Hilfe. Es reicht natürlich auch in Textform ohne dass ms-paine oder ähnliches zu hilfe genommen wird.
------------
Hat hier vielleicht irgend jemand einen Hallsensor m. open-collector an einem Interrupt (Int0) angeschlossen und kann hier die vorschaltung dafür veröffentlichen?
Gruß
Sascha
linux_80
04.03.2008, 23:42
Hi,
INT0 ist eine Konstante die den Wert 6 hat, deshalb steht da immer 6 !
Der Ansatz von oben war ja nicht so schlecht, nur musst Du noch das beachten was ich oben schon mal erwähnt hab, sonst passiert nix.
Hallo,
es lag wohl am Servo-Code, dass es nicht funktioniert hat.
Also jetzt funktioniert es undzwar mit einem 10k widerstand zwischen Q und +5v - die ISR wird bei jeder umdrehung aufgerufen. Super.
Vielen vielen Dank an alle!
Gruß
Euer Sascha
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.