FIx 1c13 index manually, nLoops is back
This commit is contained in:
@@ -148,8 +148,8 @@ private:
|
|||||||
// For the example
|
// For the example
|
||||||
#define BASE_PERIOD 40000 // 40000 is max
|
#define BASE_PERIOD 40000 // 40000 is max
|
||||||
#define SERVO_PERIOD 1000000
|
#define SERVO_PERIOD 1000000
|
||||||
#define JOINT_X_STEPGEN_MAXACCEL (52000.0)
|
#define JOINT_X_STEPGEN_MAXACCEL 0.0
|
||||||
#define JOINT_Z_STEPGEN_MAXACCEL (52000.0)
|
#define JOINT_Z_STEPGEN_MAXACCEL 0.0
|
||||||
#define JOINT_X_SCALE -200
|
#define JOINT_X_SCALE -200
|
||||||
#define JOINT_Z_SCALE -80
|
#define JOINT_Z_SCALE -80
|
||||||
|
|
||||||
|
|||||||
@@ -237,8 +237,8 @@ const _objd SDO1C13[] =
|
|||||||
{0x07, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_07, 0x1A06, NULL},
|
{0x07, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_07, 0x1A06, NULL},
|
||||||
{0x08, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_08, 0x1A07, NULL},
|
{0x08, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_08, 0x1A07, NULL},
|
||||||
{0x09, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_09, 0x1A08, NULL},
|
{0x09, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_09, 0x1A08, NULL},
|
||||||
{0x10, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_10, 0x1A09, NULL},
|
{0x0a, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_10, 0x1A09, NULL},
|
||||||
{0x11, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_11, 0x1A0A, NULL},
|
{0x0b, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_11, 0x1A0A, NULL},
|
||||||
};
|
};
|
||||||
const _objd SDO6000[] =
|
const _objd SDO6000[] =
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1096,9 +1096,9 @@ StepGen3::StepGen3(void)
|
|||||||
rtapi_app_main();
|
rtapi_app_main();
|
||||||
stepgen_array[0].enable = 1;
|
stepgen_array[0].enable = 1;
|
||||||
stepgen_array[0].pos_scale = JOINT_X_SCALE;
|
stepgen_array[0].pos_scale = JOINT_X_SCALE;
|
||||||
//stepgen_array[0].maxaccel = JOINT_X_STEPGEN_MAXACCEL;
|
stepgen_array[0].maxaccel = JOINT_X_STEPGEN_MAXACCEL;
|
||||||
stepgen_array[1].pos_scale = JOINT_Z_SCALE;
|
stepgen_array[1].pos_scale = JOINT_Z_SCALE;
|
||||||
//stepgen_array[1].maxaccel = JOINT_Z_STEPGEN_MAXACCEL;
|
stepgen_array[1].maxaccel = JOINT_Z_STEPGEN_MAXACCEL;
|
||||||
stepgen_array[0].enable = stepgen_array[1].enable = 1;
|
stepgen_array[0].enable = stepgen_array[1].enable = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ volatile double pos_cmd1, pos_cmd2;
|
|||||||
void syncWithLCNC()
|
void syncWithLCNC()
|
||||||
{
|
{
|
||||||
syncTimer->pause();
|
syncTimer->pause();
|
||||||
|
baseTimer->pause();
|
||||||
prevSyncTime = syncTime;
|
prevSyncTime = syncTime;
|
||||||
syncTime = longTime.extendTime(micros());
|
syncTime = longTime.extendTime(micros());
|
||||||
deltaSyncTime = syncTime - prevSyncTime;
|
deltaSyncTime = syncTime - prevSyncTime;
|
||||||
@@ -61,40 +62,34 @@ void syncWithLCNC()
|
|||||||
Step->updateStepGen(pos_cmd1, pos_cmd2); // Update positions
|
Step->updateStepGen(pos_cmd1, pos_cmd2); // Update positions
|
||||||
Step->makeAllPulses(); // Make first step right here
|
Step->makeAllPulses(); // Make first step right here
|
||||||
basePeriodCnt = 1000000 / BASE_PERIOD; //
|
basePeriodCnt = 1000000 / BASE_PERIOD; //
|
||||||
baseTimer->setCount(0);
|
baseTimer->refresh(); //
|
||||||
baseTimer->refresh(); //
|
baseTimer->resume(); // Make the other steps in ISR
|
||||||
baseTimer->resume(); // Make the other steps in ISR
|
|
||||||
// baseTimer->isRunning();
|
// baseTimer->isRunning();
|
||||||
}
|
}
|
||||||
|
|
||||||
void basePeriodCB(void)
|
void basePeriodCB(void)
|
||||||
{
|
{
|
||||||
uint32_t one = micros();
|
if (--basePeriodCnt > 0) // Stop
|
||||||
|
Step->makeAllPulses();
|
||||||
Step->makeAllPulses();
|
else
|
||||||
|
|
||||||
isrTime = micros() - one;
|
|
||||||
if (--basePeriodCnt <= 0) // Stop
|
|
||||||
{
|
|
||||||
baseTimer->pause();
|
baseTimer->pause();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16_t nLoops;
|
uint64_t timeDiff; // Timediff in microseconds
|
||||||
uint64_t reallyNowTime = 0, reallyThenTime = 0; // Times in microseconds
|
|
||||||
uint64_t timeDiff; // Timediff in microseconds
|
|
||||||
int32_t delayT;
|
int32_t delayT;
|
||||||
uint16_t avgCycleTime, thisCycleTime; // In usecs
|
uint16_t avgCycleTime, thisCycleTime; // In usecs
|
||||||
int16_t maxCycleTime = 0;
|
int16_t maxCycleTime = 0;
|
||||||
|
|
||||||
volatile uint64_t oldIrqTime = 0;
|
volatile uint64_t oldIrqTime = 0;
|
||||||
|
uint16_t nLoops;
|
||||||
void handleStepper(void)
|
void handleStepper(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (oldIrqTime != 0)
|
if (oldIrqTime != 0)
|
||||||
{
|
{
|
||||||
thisCycleTime = irqTime - oldIrqTime;
|
thisCycleTime = irqTime - oldIrqTime;
|
||||||
cycleTimes.add(thisCycleTime);
|
cycleTimes.add(thisCycleTime);
|
||||||
|
nLoops = 1 + (irqTime - oldIrqTime) / 960;
|
||||||
}
|
}
|
||||||
oldIrqTime = irqTime;
|
oldIrqTime = irqTime;
|
||||||
|
|
||||||
@@ -162,10 +157,11 @@ void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation
|
|||||||
uint16_t newCnt = isrTime;
|
uint16_t newCnt = isrTime;
|
||||||
// Obj.D1 = newCnt - oldCnt;
|
// Obj.D1 = newCnt - oldCnt;
|
||||||
oldCnt = newCnt;
|
oldCnt = newCnt;
|
||||||
|
Obj.DiffT = nLoops;
|
||||||
Obj.D1 = 1000 * Obj.CommandedPosition2; // abs(1000 * (ap2 - Obj.CommandedPosition2)); // Step2.actPos();
|
Obj.D1 = 1000 * Obj.CommandedPosition2; // abs(1000 * (ap2 - Obj.CommandedPosition2)); // Step2.actPos();
|
||||||
Obj.D2 = 1000 * Step->stepgen_array[1].pos_fb; // Step->stepgen_array[1].rawcount % INT16_MAX; // Step->stepgen_array[1].freq;
|
Obj.D2 = 1000 * Step->stepgen_array[1].pos_fb; // Step->stepgen_array[1].rawcount % INT16_MAX; // Step->stepgen_array[1].freq;
|
||||||
Obj.D3 = Step->stepgen_array[1].freq;
|
Obj.D3 = Step->stepgen_array[1].freq;
|
||||||
Obj.D4 = Step->stepgen_array[1].rawcount % UINT16_MAX;
|
Obj.D4 = deltaMakePulsesCnt; // Step->stepgen_array[1].rawcount % UINT16_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESC_interrupt_enable(uint32_t mask);
|
void ESC_interrupt_enable(uint32_t mask);
|
||||||
@@ -213,9 +209,10 @@ void setup(void)
|
|||||||
|
|
||||||
Step = new StepGen3;
|
Step = new StepGen3;
|
||||||
|
|
||||||
baseTimer = new HardwareTimer(TIM1); // The base period timer
|
baseTimer = new HardwareTimer(TIM11); // The base period timer
|
||||||
uint32_t usecs = BASE_PERIOD / 1000;
|
uint32_t usecs = BASE_PERIOD / 1000;
|
||||||
setFrequencyAdjustedMicrosSeconds(baseTimer, usecs);
|
// setFrequencyAdjustedMicrosSeconds(baseTimer, usecs);
|
||||||
|
baseTimer->setOverflow(20, MICROSEC_FORMAT);
|
||||||
baseTimer->attachInterrupt(basePeriodCB);
|
baseTimer->attachInterrupt(basePeriodCB);
|
||||||
|
|
||||||
syncTimer = new HardwareTimer(TIM3); // The Linuxcnc servo period sync timer
|
syncTimer = new HardwareTimer(TIM3); // The Linuxcnc servo period sync timer
|
||||||
@@ -244,9 +241,12 @@ void loop(void)
|
|||||||
|
|
||||||
void sync0Handler(void)
|
void sync0Handler(void)
|
||||||
{
|
{
|
||||||
irqTime = longTime.extendTime(micros());
|
|
||||||
ALEventIRQ = ESC_ALeventread();
|
ALEventIRQ = ESC_ALeventread();
|
||||||
serveIRQ = 1;
|
if (ALEventIRQ & ESCREG_ALEVENT_SM2)
|
||||||
|
{
|
||||||
|
irqTime = longTime.extendTime(micros());
|
||||||
|
serveIRQ = 1;
|
||||||
|
}
|
||||||
irqCnt++;
|
irqCnt++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user