Hallo,
nach einer Weile experimentieren, lesen und suchen muss ich Euch nun
doch fragen, ob Ihr mir helfen könnt. Ich kann (vorerst) einen
Schrittmotor, bipolar, 4 Anschlüsse, 12-24 V, 0,67 A, ca. 10 R nicht zum
Laufen bringen.
Alles geht zurück auf ein altes Projekt:
https://www.mikrocontroller.net/articles/Sonnenfolger_/_Heliostat
Die Ansteuerschaltung scheint (was ich mit einem Multimeter messen kann)
soweit zu funktionieren. Wenn ich folgenden vereinfachten Codeauszug
verwende:
1
//############## Für Motortest ##################
2
3
PORTD&=~_BV(4);// PORT D 4 ( 6) = SL2:8 Motor pan Enable on (0=on)
4
// I0 und I1 sind so auf +5V
5
6
{PORTD|=_BV(6);PORTD&=~_BV(7);}//Motor pan PH2 = 1 , Motor pan PH1 = 0
7
set_cursor(0,3);
8
lcd_data('1');lcd_data('0');
9
_delay_ms(1000);
10
{PORTD|=_BV(6);PORTD|=_BV(7);}//Motor pan PH2 = 1 , Motor pan PH1 = 1
11
set_cursor(0,3);
12
lcd_data('1');lcd_data('1');
13
_delay_ms(1000);
14
{PORTD&=~_BV(6);PORTD|=_BV(7);}//Motor pan PH2 = 0 , Motor pan PH1 = 1
15
set_cursor(0,3);
16
lcd_data('0');lcd_data('1');
17
_delay_ms(1000);
18
{PORTD&=~_BV(6);PORTD&=~_BV(7);}//Motor pan PH2 = 0 , Motor pan PH1 = 0
19
set_cursor(0,3);
20
lcd_data('0');lcd_data('0');
21
_delay_ms(1000);
22
set_cursor(0,1);
23
24
PORTD|=_BV(4);
25
26
//############## Motortest Ende #############
dann kann ich an Ph1 und Ph2 gut die wechselnden TTL-Pegel messen. I0
und I1 liegen auf +5Volt. Ich bin zwar verunsichert, da im Datenblatt
steht, dass für maximalen Stromfluss diese Pins auf low sein müssen,
doch ist der aus dem Projekt stammende Code ja mal lauffähig gewesen.
Dennoch habe ich I0 und I1 auch mit PORTD |= _BV(4) angesteuert. Keine
Änderung.
Vss liegt mit 12 Volt am Pin 24 an.
In der alten Schaltung ist Vref mit Vs zusammengeschaltet, also +5 Volt.
Ich habe mittlerweile gelesen, dass dies aus einem falschen Datenblatt
resultiert. Die Platine ist so aber nun fertig :-(
Anders betrachtet habe ich die Sense-Widerstände auf 0,75 Ohm gesetzt.
Das müsste doch so passen: 5 V / 10*0,75 R = 0,67 A
Wenn ich also nun so takten lasse, kann ich bei den Motorspulen gegen
Masse keine Spannung messen. Wenn ich das Multimeter in eine Spule
zwischenschalte (wie zum Strom messen) steigt und fällt die Spannung im
ca. 200 mV-Bereich. Ein Stromfluss ist nicht zu verzeichnen.
Ich habe auch mal Strom auf die einzelnen Spulen des Motors gegeben.
Dieser reagiert – müsste somit i. O. Sein.
Was kann ich jetzt noch prüfen/ändern? Hat da jemand einen Tipp?
Danke.
Gruß Michael
Mit den I-Eingänge stellst du den Strom ein. Wenn beide auf high sind,
dann fließt kein Strom.
Mit Vref auf Vs hast du keine Strombegrenzung.
Du solltest mal die Schaltung zeigen wie sie tatsächlich ist.
Hallo Hubert G.,
habe mal den Schaltplan angehängt.
Zu den I-Eingängen: Wenn beide (oder alle vier) auf high stehen fließt
kein Strom. Das seh ich lt. Datenblatt auch so. Aber bitte nur nochmal
zu meiner Absicherung: Wenn ich
1
PORTD|=_BV(4);
bei dieser Schaltung vor dem "klappern" mit Phase programmiere müssten
doch alle vier Leitungen auf low gesetzt sein und maximaler Strom
fließen (können), oder?
Eine Strombegrenzung müsste doch gem. meiner Berechnung auf 0,67 A
gegeben sein. Warum nicht?
Michael P. schrieb:> zu meiner Absicherung: Wenn ich> PORTD |= _BV(4);>> bei dieser Schaltung vor dem "klappern" mit Phase programmiere müssten> doch alle vier Leitungen auf low gesetzt sein und maximaler Strom> fließen (können), oder?
Hier setzt du PORTD4 aber auf 1.
Laut Datenblatt müsste deine Berechnung des Imax richtig sein.
Michael P. schrieb:> bei dieser Schaltung vor dem "klappern" mit Phase programmiere müssten> doch alle vier Leitungen auf low gesetzt sein und maximaler Strom> fließen (können), oder?
Steht so jedenfalls im Datenblatt.
> Eine Strombegrenzung müsste doch gem. meiner Berechnung auf 0,67 A> gegeben sein. Warum nicht?
Nach meiner Berechnung eher 0.5A.
sein, um das Bit zu löschen und somit I0 und I1 auf low zu setzen. Dann
müsste ich aber an den Pins 8, 9, 17 und 20 gegen Masse 0 Volt messen,
oder?
Ich messe aber +5 Volt!?
1. Pflicht des Thread-openers: Link zum Datenblatt angeben:
www.st.com/resource/en/datasheet/l6219.pdf
2. Pflicht des Thread-openers: Link zu Application Notes angeben:
www.st.com/resource/en/application_note/cd00003774.pdf
www.st.com/resource/en/application_note/cd00003771.pdf
www.st.com/resource/en/application_note/cd00004353.pdf
Sense-Rs müssen LoInductive sein, also keine gewickelten
Drahtwiderstände, sondern Metallband-Rs.
Warum wird die Fähigkeit, den Phasenstrom einzustellen (microstepping),
nicht genutzt?
Warum wurde kein L6218 verwendet? Den steuert man mit Step + Direction
an.
D3 und D4 müssen auf Ausgang geschaltet werden.
DDRD |= 3<<3;
Hallo eProfi,
danke für die Resonanz.
Zu 1: Ok, versuche ich bei den nächsten Beiträgen, die ich verfasse, zu
befolgen.
Zu 2: ich habe diese Beiträge erstens nicht gekannt und zweitens meine
ich, dass diese derzeit zu tief in Details einsteigen (habe sie aber
bislang nur überflogen). Ich stehe momentan vor dem Problem, dass sich
nichts tut.
Rsense: Ja, da habe ich derzeit Lastwiderstände drin. Ist wahrscheinlich
nicht die optimale Wahl. Aber können diese bewirken, dass gar nichts
geht? Oder wäre eher "nur" das timing unsauber?
Phasenstrom/Microstepping nicht genutzt, da bisher gar nichts geht. Ich
wollte zuerst das Einfachste zum Laufen bringen. Das erscheint mir der
Vollstep zu sein, oder ist das nicht so?
L6219 wurde verwendet, da der Entwickler der Platine und der Software
diesen Chip vorgesehen hat. Ich bin kein Elektrotechniker, der sich
professionell mit IC's beschäftigt. Daher wäre ich nie darauf gekommen
einen anderen Chip zu nehmen.
Am Anfang der main() steht:
1
// **** Setting of inputs and outputs ***************
2
DDRD=0xf8;// PortD7-3 outputs PORTD2-0 inputs
3
PORTD=0x07;// set Enable engines to 1 = disable, to avoid a jerk when you turn on the motors
D3 und D4 sollten Outputs sein.
Aber was ist mit +5 Volt bei den I0 und I1-Pins, obwohl PORTD 4 auf low
steht bzw. stehen sollte? Liegt hier nicht der Fehler?
Was empfehlt ihr mir:
Vref von Vss trennen und trimmbar machen?
Rsense gegen Metallschicht tauschen?
> Warum wurde kein L6218
Ich meine den L6208 oder moderneres aus der L64xx-Serie
> PORTD= 0x07; // set Enable engines to 1 = disable, to ...
Da widerspricht sich Code mit Kommentar.
Kann auch sein, dass das Pin bereits im Siliziumhimmel ist.
Zu schnell rutscht man beim Messen ab und "Hoch"spannung liegt am
Prozessor an.
Deshalb baue ich gerne "Angst"widerstände (zur Strombegrenzung) ein.
100 Ohm stören das Signal nicht und können viel retten.
Oder massive Unterschwinger infolge schlechten Gnd-Layouts.
Hast du die Leitungen zu den I schon mal gemessen, möglicherweise
unterbrochen, dann sind sie nämlich auch auf high.
Trenn die Verbindung zum PD4 und leg die Leitung manuell auf low.
gute Idee mit dem Durchgang der I-Leitungen. Hatte ich zwar auch im
Datenblatt gelesen, dass offene Pins high geschaltet werden, aber nicht
mehr im Kopf. Letztlich hat die Prüfung aber zur Lösung geführt.
Eine unterbrochene Leitung war es aber nicht. Es war ein Fehler in der
Darstellung des Bestückungsplanes. Dort sieht es so aus ob Drahtbrücken
zusammengelötet sind. Das habe ich jedenfalls gemacht und damit Vref mit
I0 und I1 verbunden. Ich habe die Leitungen nun getrennt und es läuft.
Vielen Dank an Alle, die sich um eine Lösung bemüht haben.
Michael