From e8ef618fcccad0d7fc9319e3a5ccd36f4667d6d0 Mon Sep 17 00:00:00 2001 From: Hakan Bastedt Date: Sun, 3 Mar 2024 17:02:04 +0100 Subject: [PATCH] Test in lathe coming. --- EEPROM_generator/index.html | 3 +- EEPROM_generator/src/constants.js | 4 +- .../lib/soes/MetalMusings_EaserCAT_2000.xml | 739 +++++++----------- Firmware/lib/soes/ecat_options.h | 2 +- Firmware/lib/soes/ecat_slv.c | 8 +- Firmware/lib/soes/ecat_slv.h | 2 +- Firmware/lib/soes/eeprom.bin | Bin 2048 -> 2048 bytes Firmware/lib/soes/eeprom.hex | 2 +- Firmware/lib/soes/esi.json | 147 ++-- Firmware/lib/soes/objectlist.c | 159 ++-- Firmware/lib/soes/utypes.h | 39 +- Firmware/src/StepGen2.cpp | 4 +- Firmware/src/main.cpp | 34 +- 13 files changed, 472 insertions(+), 671 deletions(-) diff --git a/EEPROM_generator/index.html b/EEPROM_generator/index.html index 4fa7f27..4609771 100644 --- a/EEPROM_generator/index.html +++ b/EEPROM_generator/index.html @@ -55,7 +55,8 @@ - + + diff --git a/EEPROM_generator/src/constants.js b/EEPROM_generator/src/constants.js index a7f3793..f4a7a0d 100644 --- a/EEPROM_generator/src/constants.js +++ b/EEPROM_generator/src/constants.js @@ -28,11 +28,11 @@ const DTYPE = { INTEGER8 : 'INTEGER8', INTEGER16 : 'INTEGER16', INTEGER32 : 'INTEGER32', - INTEGER32 : 'INTEGER64', + INTEGER64 : 'INTEGER64', UNSIGNED8 : 'UNSIGNED8', UNSIGNED16 : 'UNSIGNED16', UNSIGNED32 : 'UNSIGNED32', - UNSIGNED32 : 'UNSIGNED64', + UNSIGNED64 : 'UNSIGNED64', REAL32 : 'REAL32', REAL64 : 'REAL64', VISIBLE_STRING : 'VISIBLE_STRING', diff --git a/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml b/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml index 917deff..9174c51 100755 --- a/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml +++ b/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml @@ -23,7 +23,7 @@ DT1018 - 272 + 144 0 Max SubIndex @@ -37,8 +37,8 @@ 1 Vendor ID - ULINT - 64 + UDINT + 32 16 ro @@ -47,9 +47,9 @@ 2 Product Code - ULINT - 64 - 80 + UDINT + 32 + 48 ro @@ -57,9 +57,9 @@ 3 Revision Number - ULINT - 64 - 144 + UDINT + 32 + 80 ro @@ -67,9 +67,9 @@ 4 Serial Number - ULINT - 64 - 208 + UDINT + 32 + 112 ro @@ -77,31 +77,7 @@ DT1600 - 80 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - EncPosScale - ULINT - 64 - 16 - - ro - - - - - DT1601 - 80 + 48 0 Max SubIndex @@ -115,8 +91,32 @@ 1 IndexLatchEnable - ULINT - 64 + UDINT + 32 + 16 + + ro + + + + + DT1601 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + CommandedPosition1 + UDINT + 32 16 ro @@ -125,7 +125,7 @@ DT1602 - 144 + 48 0 Max SubIndex @@ -138,28 +138,18 @@ 1 - CommandedPosition - ULINT - 64 + CommandedPosition2 + UDINT + 32 16 ro - - 2 - StepsPerMM - ULINT - 64 - 80 - - ro - - DT1603 - 144 + 48 0 Max SubIndex @@ -172,20 +162,34 @@ 1 - CommandedPosition - ULINT - 64 + StepsPerMM1 + UDINT + 32 16 ro + + + DT1604 + 48 - 2 - StepsPerMM - ULINT - 64 - 80 + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + StepsPerMM2 + UDINT + 32 + 16 ro @@ -193,7 +197,7 @@ DT1A00 - 80 + 48 0 Max SubIndex @@ -207,8 +211,8 @@ 1 EncPos - ULINT - 64 + UDINT + 32 16 ro @@ -217,7 +221,7 @@ DT1A01 - 80 + 48 0 Max SubIndex @@ -231,8 +235,8 @@ 1 EncFrequency - ULINT - 64 + UDINT + 32 16 ro @@ -241,7 +245,7 @@ DT1A02 - 80 + 48 0 Max SubIndex @@ -255,8 +259,8 @@ 1 DiffT - ULINT - 64 + UDINT + 32 16 ro @@ -265,7 +269,7 @@ DT1A03 - 80 + 48 0 Max SubIndex @@ -279,8 +283,8 @@ 1 IndexByte - ULINT - 64 + UDINT + 32 16 ro @@ -289,7 +293,7 @@ DT1A04 - 80 + 48 0 Max SubIndex @@ -303,8 +307,8 @@ 1 IndexStatus - ULINT - 64 + UDINT + 32 16 ro @@ -313,7 +317,7 @@ DT1A05 - 80 + 48 0 Max SubIndex @@ -326,9 +330,9 @@ 1 - ActualPosition - ULINT - 64 + ActualPosition1 + UDINT + 32 16 ro @@ -337,7 +341,7 @@ DT1A06 - 80 + 48 0 Max SubIndex @@ -350,9 +354,9 @@ 1 - ActualPosition - ULINT - 64 + ActualPosition2 + UDINT + 32 16 ro @@ -361,7 +365,7 @@ DT1A07 - 80 + 48 0 Max SubIndex @@ -375,8 +379,8 @@ 1 D1 - ULINT - 64 + UDINT + 32 16 ro @@ -385,7 +389,7 @@ DT1A08 - 80 + 48 0 Max SubIndex @@ -399,8 +403,8 @@ 1 D2 - ULINT - 64 + UDINT + 32 16 ro @@ -409,7 +413,7 @@ DT1A09 - 80 + 48 0 Max SubIndex @@ -423,8 +427,8 @@ 1 D3 - ULINT - 64 + UDINT + 32 16 ro @@ -433,7 +437,7 @@ DT1A0A - 80 + 48 0 Max SubIndex @@ -447,8 +451,8 @@ 1 D4 - ULINT - 64 + UDINT + 32 16 ro @@ -490,15 +494,15 @@ DT1C12ARR UINT - 64 + 80 1 - 4 + 5 DT1C12 - 80 + 96 0 Max SubIndex @@ -512,7 +516,7 @@ Elements DT1C12ARR - 64 + 80 16 ro @@ -552,130 +556,8 @@ - DT6005 - 80 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ActualPosition - LREAL - 64 - 16 - - ro - T - - - - - DT6006 - 80 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ActualPosition - LREAL - 64 - 16 - - ro - T - - - - - DT7002 - 96 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - CommandedPosition - LREAL - 64 - 16 - - ro - R - - - - 2 - StepsPerMM - INT - 16 - 80 - - ro - R - - - - - DT7003 - 96 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - CommandedPosition - LREAL - 64 - 16 - - ro - R - - - - 2 - StepsPerMM - INT - 16 - 80 - - ro - R - - - - - ULINT - 64 + UDINT + 32 STRING(26) @@ -694,15 +576,7 @@ 16 - LREAL - 64 - - - UDINT - 32 - - - DINT + REAL 32 @@ -714,8 +588,8 @@ #x1000 Device Type - ULINT - 64 + UDINT + 32 5001 @@ -765,7 +639,7 @@ #x1018 Identity Object DT1018 - 272 + 144 Max SubIndex @@ -804,9 +678,9 @@ #x1600 - EncPosScale + IndexLatchEnable DT1600 - 80 + 48 Max SubIndex @@ -815,7 +689,7 @@ - EncPosScale + IndexLatchEnable #x70000020 @@ -827,9 +701,9 @@ #x1601 - IndexLatchEnable + CommandedPosition1 DT1601 - 80 + 48 Max SubIndex @@ -838,7 +712,7 @@ - IndexLatchEnable + CommandedPosition1 #x70010020 @@ -850,26 +724,20 @@ #x1602 - StepGenIn1 + CommandedPosition2 DT1602 - 144 + 48 Max SubIndex - 2 + 1 - CommandedPosition + CommandedPosition2 - #x70020140 - - - - StepsPerMM - - #x70020210 + #x70020020 @@ -879,26 +747,43 @@ #x1603 - StepGenIn2 + StepsPerMM1 DT1603 - 144 + 48 Max SubIndex - 2 + 1 - CommandedPosition + StepsPerMM1 - #x70030140 + #x70030010 + + + + + ro + + + + #x1604 + StepsPerMM2 + DT1604 + 48 + + + Max SubIndex + + 1 - StepsPerMM + StepsPerMM2 - #x70030210 + #x70040010 @@ -910,7 +795,7 @@ #x1A00 EncPos DT1A00 - 80 + 48 Max SubIndex @@ -921,7 +806,7 @@ EncPos - #x60000040 + #x60000020 @@ -933,7 +818,7 @@ #x1A01 EncFrequency DT1A01 - 80 + 48 Max SubIndex @@ -944,7 +829,7 @@ EncFrequency - #x60010040 + #x60010020 @@ -956,7 +841,7 @@ #x1A02 DiffT DT1A02 - 80 + 48 Max SubIndex @@ -967,7 +852,7 @@ DiffT - #x60020020 + #x60020010 @@ -979,7 +864,7 @@ #x1A03 IndexByte DT1A03 - 80 + 48 Max SubIndex @@ -1002,7 +887,7 @@ #x1A04 IndexStatus DT1A04 - 80 + 48 Max SubIndex @@ -1023,9 +908,9 @@ #x1A05 - StepGenOut1 + ActualPosition1 DT1A05 - 80 + 48 Max SubIndex @@ -1034,9 +919,9 @@ - ActualPosition + ActualPosition1 - #x60050140 + #x60050020 @@ -1046,9 +931,9 @@ #x1A06 - StepGenOut2 + ActualPosition2 DT1A06 - 80 + 48 Max SubIndex @@ -1057,9 +942,9 @@ - ActualPosition + ActualPosition2 - #x60060140 + #x60060020 @@ -1071,7 +956,7 @@ #x1A07 D1 DT1A07 - 80 + 48 Max SubIndex @@ -1082,7 +967,7 @@ D1 - #x60070020 + #x60070010 @@ -1094,7 +979,7 @@ #x1A08 D2 DT1A08 - 80 + 48 Max SubIndex @@ -1105,7 +990,7 @@ D2 - #x60080020 + #x60080010 @@ -1117,7 +1002,7 @@ #x1A09 D3 DT1A09 - 80 + 48 Max SubIndex @@ -1128,7 +1013,7 @@ D3 - #x60090020 + #x60090010 @@ -1140,7 +1025,7 @@ #x1A0A D4 DT1A0A - 80 + 48 Max SubIndex @@ -1151,7 +1036,7 @@ D4 - #x600A0020 + #x600A0010 @@ -1204,12 +1089,12 @@ #x1C12 Sync Manager 2 PDO Assignment DT1C12 - 80 + 96 Max SubIndex - 4 + 5 @@ -1236,6 +1121,12 @@ #x1603 + + PDO Mapping + + #x1604 + + ro @@ -1327,8 +1218,8 @@ #x6000 EncPos - LREAL - 64 + REAL + 32 0 @@ -1340,8 +1231,8 @@ #x6001 EncFrequency - LREAL - 64 + REAL + 32 0 @@ -1353,8 +1244,8 @@ #x6002 DiffT - UDINT - 32 + UINT + 16 0 @@ -1391,55 +1282,35 @@ #x6005 - StepGenOut1 - DT6005 - 80 + ActualPosition1 + REAL + 32 - - Max SubIndex - - 1 - - - - ActualPosition - - 0 - - + 0 ro + T #x6006 - StepGenOut2 - DT6006 - 80 + ActualPosition2 + REAL + 32 - - Max SubIndex - - 1 - - - - ActualPosition - - 0 - - + 0 ro + T #x6007 D1 - DINT - 32 + INT + 16 0 @@ -1451,8 +1322,8 @@ #x6008 D2 - DINT - 32 + INT + 16 0 @@ -1464,8 +1335,8 @@ #x6009 D3 - DINT - 32 + INT + 16 0 @@ -1477,8 +1348,8 @@ #x600A D4 - DINT - 32 + INT + 16 0 @@ -1489,19 +1360,6 @@ #x7000 - EncPosScale - DINT - 32 - - 0 - - - ro - R - - - - #x7001 IndexLatchEnable UDINT 32 @@ -1514,61 +1372,55 @@ - #x7002 - StepGenIn1 - DT7002 - 96 + #x7001 + CommandedPosition1 + REAL + 32 - - Max SubIndex - - 2 - - - - CommandedPosition - - 0 - - - - StepsPerMM - - 0 - - + 0 ro + R + + + + #x7002 + CommandedPosition2 + REAL + 32 + + 0 + + + ro + R #x7003 - StepGenIn2 - DT7003 - 96 + StepsPerMM1 + INT + 16 - - Max SubIndex - - 2 - - - - CommandedPosition - - 0 - - - - StepsPerMM - - 0 - - + 0 ro + R + + + + #x7004 + StepsPerMM2 + INT + 16 + + 0 + + + ro + R @@ -1583,20 +1435,9 @@ Inputs #x1600 - EncPosScale - - #x7000 - #x0 - 32 - EncPosScale - DINT - - - - #x1601 IndexLatchEnable - #x7001 + #x7000 #x0 32 IndexLatchEnable @@ -1604,38 +1445,46 @@ - #x1602 - StepGenIn1 + #x1601 + CommandedPosition1 - #x7002 - #x1 - 64 - CommandedPosition - LREAL + #x7001 + #x0 + 32 + CommandedPosition1 + REAL + + + #x1602 + CommandedPosition2 #x7002 - #x2 - 16 - StepsPerMM - INT + #x0 + 32 + CommandedPosition2 + REAL #x1603 - StepGenIn2 + StepsPerMM1 #x7003 - #x1 - 64 - CommandedPosition - LREAL - - - #x7003 - #x2 + #x0 16 - StepsPerMM + StepsPerMM1 + INT + + + + #x1604 + StepsPerMM2 + + #x7004 + #x0 + 16 + StepsPerMM2 INT @@ -1645,9 +1494,9 @@ #x6000 #x0 - 64 + 32 EncPos - LREAL + REAL @@ -1656,9 +1505,9 @@ #x6001 #x0 - 64 + 32 EncFrequency - LREAL + REAL @@ -1667,9 +1516,9 @@ #x6002 #x0 - 32 + 16 DiffT - UDINT + UINT @@ -1696,24 +1545,24 @@ #x1A05 - StepGenOut1 + ActualPosition1 #x6005 - #x1 - 64 - ActualPosition - LREAL + #x0 + 32 + ActualPosition1 + REAL #x1A06 - StepGenOut2 + ActualPosition2 #x6006 - #x1 - 64 - ActualPosition - LREAL + #x0 + 32 + ActualPosition2 + REAL @@ -1722,9 +1571,9 @@ #x6007 #x0 - 32 + 16 D1 - DINT + INT @@ -1733,9 +1582,9 @@ #x6008 #x0 - 32 + 16 D2 - DINT + INT @@ -1744,9 +1593,9 @@ #x6009 #x0 - 32 + 16 D3 - DINT + INT @@ -1755,9 +1604,9 @@ #x600A #x0 - 32 + 16 D4 - DINT + INT @@ -1777,7 +1626,7 @@ 2048 - 8006034C640000 + 80060344640000 diff --git a/Firmware/lib/soes/ecat_options.h b/Firmware/lib/soes/ecat_options.h index bdea3f1..c3c73f0 100755 --- a/Firmware/lib/soes/ecat_options.h +++ b/Firmware/lib/soes/ecat_options.h @@ -33,7 +33,7 @@ #define SM3_smc 0x20 #define SM3_act 1 -#define MAX_MAPPINGS_SM2 6 +#define MAX_MAPPINGS_SM2 5 #define MAX_MAPPINGS_SM3 11 #define MAX_RXPDO_SIZE 512 diff --git a/Firmware/lib/soes/ecat_slv.c b/Firmware/lib/soes/ecat_slv.c index e9c57d8..147a11a 100755 --- a/Firmware/lib/soes/ecat_slv.c +++ b/Firmware/lib/soes/ecat_slv.c @@ -191,7 +191,7 @@ void APP_setwatchdog (int watchdogcnt) * write ethercat inputs. Implement watch-dog counter to count-out if we have * made state change affecting the App.state. */ -void DIG_process (uint16_t ALEvent, uint8_t flags) +void DIG_process (uint8_t flags) { /* Handle watchdog */ if((flags & DIG_PROCESS_WD_FLAG) > 0) @@ -217,14 +217,14 @@ void DIG_process (uint16_t ALEvent, uint8_t flags) if ((flags & DIG_PROCESS_OUTPUTS_FLAG) > 0) { if(((CC_ATOMIC_GET(ESCvar.App.state) & APPSTATE_OUTPUT) > 0) && - (ALEvent & ESCREG_ALEVENT_SM2)) + (ESCvar.ALevent & ESCREG_ALEVENT_SM2)) { RXPDO_update(); CC_ATOMIC_SET(watchdog, ESCvar.watchdogcnt); /* Set outputs */ cb_set_outputs(); } - else if (ALEvent & ESCREG_ALEVENT_SM2) + else if (ESCvar.ALevent & ESCREG_ALEVENT_SM2) { RXPDO_update(); } @@ -339,7 +339,7 @@ void ecat_slv_poll (void) void ecat_slv (void) { ecat_slv_poll(); - DIG_process(ESCvar.ALevent, DIG_PROCESS_WD_FLAG | DIG_PROCESS_OUTPUTS_FLAG | + DIG_process(DIG_PROCESS_WD_FLAG | DIG_PROCESS_OUTPUTS_FLAG | DIG_PROCESS_APP_HOOK_FLAG | DIG_PROCESS_INPUTS_FLAG); } diff --git a/Firmware/lib/soes/ecat_slv.h b/Firmware/lib/soes/ecat_slv.h index b5d0d9d..c6053c0 100755 --- a/Firmware/lib/soes/ecat_slv.h +++ b/Firmware/lib/soes/ecat_slv.h @@ -36,7 +36,7 @@ void APP_setwatchdog (int watchdogcnt); * * @param[in] flags = User input what to execute */ -void DIG_process (uint16_t ALEvent, uint8_t flags); +void DIG_process (uint8_t flags); /** * Handler for SM change, SM0/1, AL CONTROL and EEPROM events, the application diff --git a/Firmware/lib/soes/eeprom.bin b/Firmware/lib/soes/eeprom.bin index 1156cd1d321d49b4f18e47e73206c498ef08b50f..47287efda82e87b9f57d5f04bfdce0ce920dd01c 100755 GIT binary patch delta 24 YcmZn=Xb|9UU}JVkVSoXVjr 0 ? HIGH : LOW); // There will be a short break here for t2 usecs, in the future. timerPulseSteps = abs(nSteps); - pulseTimer->setMode(pulseTimerChan, TIMER_OUTPUT_COMPARE_PWM2, stepPin); + pulseTimer->setMode(pulseTimerChan, TIMER_OUTPUT_COMPARE_PWM1, stepPin); pulseTimer->setOverflow(timerFrequency, HERTZ_FORMAT); pulseTimer->setCaptureCompare(pulseTimerChan, 5, MICROSEC_COMPARE_FORMAT); // 5 usecs pulseTimer->resume(); diff --git a/Firmware/src/main.cpp b/Firmware/src/main.cpp index 13c6829..06b167b 100755 --- a/Firmware/src/main.cpp +++ b/Firmware/src/main.cpp @@ -25,27 +25,31 @@ StepGen2 Step(TIM1, 4, PA_11, PA12, pulseTimerCallback, TIM10, startTimerCallbac void pulseTimerCallback(void) { Step.pulseTimerCB(); } void startTimerCallback(void) { Step.startTimerCB(); } CircularBuffer Tim; -volatile uint64_t irqTime = 0, thenTime = 0; +volatile uint64_t irqTime = 0, thenTime = 0, nowTime = 0; volatile uint32_t ccnnt = 0; extend32to64 longTime; void cb_set_outputs(void) // Master outputs gets here, slave inputs, first operation { Encoder1.setLatch(Obj.IndexLatchEnable); - Encoder1.setScale(Obj.EncPosScale); + Encoder1.setScale(500); + + // Step2.reqPos(Obj.CommandedPosition2); + // Step2.setScale(Obj.StepsPerMM2); + // Step2.enable(1); + Obj.ActualPosition1 = Obj.CommandedPosition1; // Step1.actPos(); + Obj.ActualPosition2 = Obj.CommandedPosition2; // Step2.actPos(); } volatile uint32_t cmt; void handleStepper(void) { - digitalWrite(Step.dirPin, cmt++ % 2); + //digitalWrite(Step.dirPin, cmt++ % 2); Step.enabled = true; - Step.commandedPosition = Obj.StepGenIn1.CommandedPosition; - Obj.StepGenOut1.ActualPosition = Step.commandedPosition; - Step.stepsPerMM = Obj.StepGenIn1.StepsPerMM; - Step.stepsPerMM = 400; + Step.commandedPosition = Obj.CommandedPosition1; + Step.stepsPerMM = Obj.StepsPerMM1; Step.handleStepper(irqTime); - Obj.StepGenOut2.ActualPosition = Obj.StepGenIn2.CommandedPosition; + Obj.ActualPosition1 = Obj.CommandedPosition1; } void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation @@ -55,7 +59,7 @@ void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation Obj.EncFrequency = Encoder1.frequency(ESCvar.Time); Obj.IndexByte = Encoder1.getIndexState(); - uint32_t dTim = longTime.extendTime(micros()) - irqTime; // thenTime; // Debug. Getting jitter over the last 200 milliseconds + uint32_t dTim = nowTime - thenTime; // Debug. Getting jitter over the last 200 milliseconds Tim.push(dTim); uint32_t max_Tim = 0, min_Tim = UINT32_MAX; for (decltype(Tim)::index_t i = 0; i < Tim.size(); i++) @@ -72,7 +76,7 @@ void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation Obj.D1 = Step.Tjitter; Obj.D2 = Step.Tstartf * 1e6; Obj.D3 = Step.dbg; - Obj.D4 = Obj.D1+Obj.D2-Obj.D3; + Obj.D4 = Obj.D1 + Obj.D2 - Obj.D3; } void ESC_interrupt_enable(uint32_t mask); @@ -114,9 +118,12 @@ void loop(void) uint32_t dTime; if (serveIRQ) { - CC_ATOMIC_SET(ESCvar.ALevent, ESC_ALeventread()); - DIG_process(ALEventIRQ, DIG_PROCESS_WD_FLAG | DIG_PROCESS_OUTPUTS_FLAG | - DIG_PROCESS_APP_HOOK_FLAG | DIG_PROCESS_INPUTS_FLAG); + nowTime = micros(); + /* Read local time from ESC*/ + ESC_read(ESCREG_LOCALTIME, (void *)&ESCvar.Time, sizeof(ESCvar.Time)); + ESCvar.Time = etohl(ESCvar.Time); + DIG_process(DIG_PROCESS_WD_FLAG | DIG_PROCESS_OUTPUTS_FLAG | + DIG_PROCESS_APP_HOOK_FLAG | DIG_PROCESS_INPUTS_FLAG); serveIRQ = 0; ESCvar.PrevTime = ESCvar.Time; } @@ -131,7 +138,6 @@ void sync0Handler(void) ALEventIRQ = ESC_ALeventread(); serveIRQ = 1; irqTime = longTime.extendTime(micros()); - digitalWrite(Step.dirPin, cnt++ % 2); } // Enable SM2 interrupts