Ich verstehe da gerade was nicht. Kann mir jemand helfen? Ich probiere mit BLDC-Motoren rum, welche Hallsensoren besitzen. Diese Motoren haben 3 Hallsensoren, welche entweder High oder Low-Signal ausgeben können. Somit sind am Motor auch stets 3 Kabel für die drei Hallsensoren vorhanden. Ich dachte bis jetzt, dass das immer so ist. Jetzt habe ich aber ICs gefunden ( z.B. TB6585FG ) welche aufeinmal zwei Eingänge für jeden Hallsensor haben (einen positiven und einen negativen) alo insgesamt 6 Eingänge für 3 Hallsensoren haben. Das ganze wird dann einem sog. Hallverstärker zugeführt. Gibt es denn noch andere Motoren, welche zwei Kabel pro Sensor haben oder wie soll ich das verstehen?
Ja, es gibt solche Motore, in denen Hall-Sensoren ohne Auswert-Elektronik eingebaut werden.
Alles klar danke für die schnelle Antwort. Jetzt ist meine Welt wieder heil. Kann ich den IC halt nicht verwenden.
Hallo zusammen, ich hoffe, dass ich hier richtig bin. Ich beschäftige mich auch mit BLDC-Motoren. Mein Motor hat allerdings 3 um 120° versetzte Hall-Sensoren. Die Application Note AVR435 von Atmel habe ich versucht nachzuempfinden. Der Motor läuft nicht so wirklich rund. Also versuche ich zunächst die Software der App.-Note zu verstehen. Im grossen und ganzen durchschaue ich das prinzip auch. Aber eine Stelle beschäftigt mich schon seit einiger Zeit. Es handelt sich um das Modul mc_drv.c. Dort gibt es eine Funktion void Do_Sensor_interrupt():
1 | inline void Do_Sensor_Interrupt(void) |
2 | {
|
3 | if ( Sensor_Counter_Up > 3 ) |
4 | {
|
5 | |
6 | if (Delay_For_Change != 0) |
7 | {
|
8 | /* Last Delay not finished : Force Change_Sector */
|
9 | Top_Counter = Mem_Top_Counter; |
10 | if (Top_Counter == 0) Top_Counter++; /* to avoid "divide by 0" */ |
11 | |
12 | Sensor_Counter_Down = Mem_Top_Counter; |
13 | Hall_Sector = Mem_Hall_Sector; |
14 | /* end Change_Sector */
|
15 | }
|
16 | |
17 | /* Filter and memorize the Conuter_Up in the Top_Counter */
|
18 | Mem_Top_CounterX8 = (((U16)7 * Mem_Top_CounterX8) + (U16)8 * Sensor_Counter_Up) >>3; |
19 | Mem_Top_Counter = Mem_Top_CounterX8 >> 3; |
20 | |
21 | Sensor_Counter_Up = 0; /* reset the Counter_Up */ |
22 | |
23 | /* Get the status of the 3 Hall sensors */
|
24 | /* Hall_Sector = PIND7.PIND6.0.0.0.PINB2.0 */
|
25 | // Mem_Hall_Sector = ( PIND & ( (1<<PIND7)|(1<<PIND6) ) ) | (PINB & (1<<PINB2)); //MC200
|
26 | Mem_Hall_Sector = ( PIND & ( (1<<PIND7)|(1<<PIND5) ) ) | (PINC & (1<<PINC6)); //MC100 |
27 | |
28 | /* arm the Delay_For_Change */
|
29 | Delay_For_Change = Mem_Top_Counter - ADVANCE; |
30 | |
31 | } /* else false interrupt */ |
32 | |
33 | }
|
Was mir an dieser Funktion überhaupt nicht verständlich ist, ist der Filter:
1 | /* Filter and memorize the Conuter_Up in the Top_Counter */
|
2 | Mem_Top_CounterX8 = (((U16)7 * Mem_Top_CounterX8) + (U16)8 * Sensor_Counter_Up) >>3; |
3 | Mem_Top_Counter = Mem_Top_CounterX8 >> 3; |
Der Sinn dieses Filters erschliesst sich mit nicht. Versteht vielleicht jemand diesen Filter? Warum wird ein zweites mal durch 8 dividiert (möglicherweise zur Skalierung)?
@Peter mal probiert das Signal nur an den (+)-Pin des Verstärkers zu legen? (-)-Pin gegen Masse. Muß auf jeden Fall ein Widerstand dran, da der TB6585 nur bis 3.5V Eingangsspannung an den Pins mag. Ohne Gewähr. Gruß
@ Michael Leusink Nein probiert hab ichs noch nicht, werde es Montag aber gleich mal versuchen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.