Hallo zusammen
ich habe mit E-Lab Demoboards den uL6470 Treiber getestet und festgestellt, dass die angezeigte Absolut position (L64_GetAbsPosition(stepDrv1) immer Null ist. Ich habe die Demo zum Treiber verwendet und in dem anhängenden Stück Code versucht einen Motor 64000 Schritte linksdrehend und danach 10000 Schritte rechtsdrehend machen zu lassen. Ich hätte jetzt eigentlich eine Positionsdifferenz erwartet, bekomme aber immer eine Position Null
Hier ist ein Stück Code (Standardtreiber) und danach die Ausgaben der seriellen Schnittstelle.
Vielleicht kann mir ja jemand einen Wink geben, was noch evtl zu machen ist.
Besten Dank schonmal.
InitPorts;
EnableInts;
mDelay(100);
Writeln(Serout, #13 + #10 + ' **1**** L6470 Motor Driver Test ******** ' + #13 + #10);
BeepClick;
while not L64_GetConfig(stepDrv1, wTmp) do
Writeln(Serout, 'no Hardware found');
BeepClick;
mDelay(300);
endwhile;
mDelay(100);
WriteLn(Serout, 'L6470-1 found');
BeepOutLH;
L64_ResetDevice(stepDrv1);
L64_HardHiZ(stepDrv1); // essential before SetConfig
// Micro Step Mode
L64_SetStepMode(stepDrv1, L64Step64);
L64_SetMinMaxSpeed(stepDrv1, 1, 80);
L64_SetStartStopSlope(stepDrv1, 50, 50); // Start and Stop ramps in Steps
L64_SetMotorParms(stepDrv1, 27, 1800, 1750, 500); // Volt, mAmp, mOhm, Ncm
L64_SetFlagAlert(stepDrv1, [L64OverCurrent, L64ThermDown, L64ThermWarn,
L64UnderVolt, L64StallA, L64StallB, L64TurnOnEvent, L64WrongCmd]);
L64_SetAbsPosition(stepDrv1, -1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
//-----------------------------------------------
WriteLn(SerOut, ' 64000 CCW'); // 64000 Schritte
L64_Move(stepDrv1, L64DirCCW, 64000); // 50 * 200 * 64
doWaitUntilBusy(stepDrv1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
ltemp := 11;
WriteLn(SerOut, ' 10000 CW'); // 10000 Schritte
mDelay(1000);
L64_Move(stepDrv1, L64DirCW, 10000); // 50 * 200 * 64
doWaitUntilBusy(stepDrv1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
---
Serial Daten
---
**1**** L6470 Motor Driver Test ********
L6470-1 found
abs Pos : $00000000
64000 CCW
Motor busy
GetStatus: 0032
GetStatus: 0032
GetStatus: 0032
GetStatus: 0052
GetStatus: 0052
abs Pos : $00000000
10000 CW
Motor busy
GetStatus: 0022
GetStatus: 0042
abs Pos : $00000000
ich habe mit E-Lab Demoboards den uL6470 Treiber getestet und festgestellt, dass die angezeigte Absolut position (L64_GetAbsPosition(stepDrv1) immer Null ist. Ich habe die Demo zum Treiber verwendet und in dem anhängenden Stück Code versucht einen Motor 64000 Schritte linksdrehend und danach 10000 Schritte rechtsdrehend machen zu lassen. Ich hätte jetzt eigentlich eine Positionsdifferenz erwartet, bekomme aber immer eine Position Null
Hier ist ein Stück Code (Standardtreiber) und danach die Ausgaben der seriellen Schnittstelle.
Vielleicht kann mir ja jemand einen Wink geben, was noch evtl zu machen ist.
Besten Dank schonmal.
InitPorts;
EnableInts;
mDelay(100);
Writeln(Serout, #13 + #10 + ' **1**** L6470 Motor Driver Test ******** ' + #13 + #10);
BeepClick;
while not L64_GetConfig(stepDrv1, wTmp) do
Writeln(Serout, 'no Hardware found');
BeepClick;
mDelay(300);
endwhile;
mDelay(100);
WriteLn(Serout, 'L6470-1 found');
BeepOutLH;
L64_ResetDevice(stepDrv1);
L64_HardHiZ(stepDrv1); // essential before SetConfig
// Micro Step Mode
L64_SetStepMode(stepDrv1, L64Step64);
L64_SetMinMaxSpeed(stepDrv1, 1, 80);
L64_SetStartStopSlope(stepDrv1, 50, 50); // Start and Stop ramps in Steps
L64_SetMotorParms(stepDrv1, 27, 1800, 1750, 500); // Volt, mAmp, mOhm, Ncm
L64_SetFlagAlert(stepDrv1, [L64OverCurrent, L64ThermDown, L64ThermWarn,
L64UnderVolt, L64StallA, L64StallB, L64TurnOnEvent, L64WrongCmd]);
L64_SetAbsPosition(stepDrv1, -1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
//-----------------------------------------------
WriteLn(SerOut, ' 64000 CCW'); // 64000 Schritte
L64_Move(stepDrv1, L64DirCCW, 64000); // 50 * 200 * 64
doWaitUntilBusy(stepDrv1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
ltemp := 11;
WriteLn(SerOut, ' 10000 CW'); // 10000 Schritte
mDelay(1000);
L64_Move(stepDrv1, L64DirCW, 10000); // 50 * 200 * 64
doWaitUntilBusy(stepDrv1);
lTemp:= L64_GetAbsPosition(stepDrv1);
Writeln(Serout, 'abs Pos : $' + LongToHex(lTemp));
---
Serial Daten
---
**1**** L6470 Motor Driver Test ********
L6470-1 found
abs Pos : $00000000
64000 CCW
Motor busy
GetStatus: 0032
GetStatus: 0032
GetStatus: 0032
GetStatus: 0052
GetStatus: 0052
abs Pos : $00000000
10000 CW
Motor busy
GetStatus: 0022
GetStatus: 0042
abs Pos : $00000000