From 49c804516d5c7581c12bcbfcbe35a8af400862e9 Mon Sep 17 00:00:00 2001 From: Hakan Bastedt Date: Sun, 24 Dec 2023 23:28:10 +0100 Subject: [PATCH] Tested in the lathe. Works, of course --- Pcb-1-lan9252/Firmware/.vscode/settings.json | 3 +- .../lib/soes/MetalMusings_EaserCAT_2000.xml | 710 ++++++++ .../MetalMusings_EaserCAT_2000_encoder.xml | 1462 ----------------- .../Firmware/lib/soes/ecat_options.h | 8 +- Pcb-1-lan9252/Firmware/lib/soes/eeprom.bin | Bin 2048 -> 2048 bytes Pcb-1-lan9252/Firmware/lib/soes/eeprom.hex | 14 +- Pcb-1-lan9252/Firmware/lib/soes/esi.json | 216 +-- Pcb-1-lan9252/Firmware/lib/soes/objectlist.c | 226 +-- Pcb-1-lan9252/Firmware/lib/soes/utypes.h | 30 +- Pcb-1-lan9252/Firmware/platformio.ini | 7 +- Pcb-1-lan9252/Firmware/src/main.cpp | 77 +- Pcb-1-lan9252/Kicad/Ethercat-stm32/.gitignore | 2 + .../Ethercat-stm32/Ethercat-stm32.kicad_prl | 2 +- 13 files changed, 874 insertions(+), 1883 deletions(-) create mode 100755 Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml delete mode 100755 Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000_encoder.xml diff --git a/Pcb-1-lan9252/Firmware/.vscode/settings.json b/Pcb-1-lan9252/Firmware/.vscode/settings.json index 4d135b6..a9268bf 100755 --- a/Pcb-1-lan9252/Firmware/.vscode/settings.json +++ b/Pcb-1-lan9252/Firmware/.vscode/settings.json @@ -1,6 +1,7 @@ { "files.associations": { "ecat_slv.h": "c", - "compare": "cpp" + "compare": "cpp", + "*.tpp": "cpp" } } \ No newline at end of file diff --git a/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml b/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml new file mode 100755 index 0000000..98657fa --- /dev/null +++ b/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000.xml @@ -0,0 +1,710 @@ + + + + 2730 + MetalMusings + + + + + MachineControl + Incremental encoder + + + + + EaserCAT2000 + MetalMusings EaserCAT 2000 + MachineControl + + 5001 + 0 + + + + DT1018 + 144 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + Vendor ID + UDINT + 32 + 16 + + ro + + + + 2 + Product Code + UDINT + 32 + 48 + + ro + + + + 3 + Revision Number + UDINT + 32 + 80 + + ro + + + + 4 + Serial Number + UDINT + 32 + 112 + + ro + + + + + DT1600 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + EncPosScale + UDINT + 32 + 16 + + ro + + + + + DT1601 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + EncIndexCEnable + UDINT + 32 + 16 + + ro + + + + + DT1A00 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + EncPos + UDINT + 32 + 16 + + ro + + + + + DT1A01 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + 1 + EncFrequency + UDINT + 32 + 16 + + ro + + + + + DT1C00ARR + USINT + 32 + + 1 + 4 + + + + DT1C00 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + Elements + DT1C00ARR + 32 + 16 + + ro + + + + + DT1C12ARR + UINT + 32 + + 1 + 2 + + + + DT1C12 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + Elements + DT1C12ARR + 32 + 16 + + ro + + + + + DT1C13ARR + UINT + 32 + + 1 + 2 + + + + DT1C13 + 48 + + 0 + Max SubIndex + USINT + 8 + 0 + + ro + + + + Elements + DT1C13ARR + 32 + 16 + + ro + + + + + UDINT + 32 + + + STRING(26) + 208 + + + STRING(5) + 40 + + + USINT + 8 + + + UINT + 16 + + + REAL + 32 + + + DINT + 32 + + + + + #x1000 + Device Type + UDINT + 32 + + 5001 + + + ro + m + + + + #x1008 + Device Name + STRING(26) + 208 + + MetalMusings EaserCAT 2000 + + + ro + + + + #x1009 + Hardware Version + STRING(5) + 40 + + 0.0.1 + + + ro + o + + + + #x100A + Software Version + STRING(5) + 40 + + 0.0.1 + + + ro + + + + #x1018 + Identity Object + DT1018 + 144 + + + Max SubIndex + + 4 + + + + Vendor ID + + 2730 + + + + Product Code + + 12303564 + + + + Revision Number + + 2 + + + + Serial Number + + 1 + + + + + ro + + + + #x1600 + EncPosScale + DT1600 + 48 + + + Max SubIndex + + 1 + + + + EncPosScale + + #x70000020 + + + + + ro + + + + #x1601 + EncIndexCEnable + DT1601 + 48 + + + Max SubIndex + + 1 + + + + EncIndexCEnable + + #x70010020 + + + + + ro + + + + #x1A00 + EncPos + DT1A00 + 48 + + + Max SubIndex + + 1 + + + + EncPos + + #x60000020 + + + + + ro + + + + #x1A01 + EncFrequency + DT1A01 + 48 + + + Max SubIndex + + 1 + + + + EncFrequency + + #x60010020 + + + + + ro + + + + #x1C00 + Sync Manager Communication Type + DT1C00 + 48 + + + Max SubIndex + + 4 + + + + Communications Type SM0 + + 1 + + + + Communications Type SM1 + + 2 + + + + Communications Type SM2 + + 3 + + + + Communications Type SM3 + + 4 + + + + + ro + + + + #x1C12 + Sync Manager 2 PDO Assignment + DT1C12 + 48 + + + Max SubIndex + + 2 + + + + PDO Mapping + + #x1600 + + + + PDO Mapping + + #x1601 + + + + + ro + + + + #x1C13 + Sync Manager 3 PDO Assignment + DT1C13 + 48 + + + Max SubIndex + + 2 + + + + PDO Mapping + + #x1A00 + + + + PDO Mapping + + #x1A01 + + + + + ro + + + + #x6000 + EncPos + REAL + 32 + + 0 + + + ro + T + + + + #x6001 + EncFrequency + REAL + 32 + + 0 + + + ro + T + + + + #x7000 + EncPosScale + DINT + 32 + + 0 + + + ro + R + + + + #x7001 + EncIndexCEnable + UDINT + 32 + + 0 + + + ro + R + + + + + + Outputs + Inputs + MBoxState + MBoxOut + MBoxIn + Outputs + Inputs + + #x1600 + EncPosScale + + #x7000 + #x0 + 32 + EncPosScale + DINT + + + + #x1601 + EncIndexCEnable + + #x7001 + #x0 + 32 + EncIndexCEnable + UDINT + + + + #x1A00 + EncPos + + #x6000 + #x0 + 32 + EncPos + REAL + + + + #x1A01 + EncFrequency + + #x6001 + #x0 + 32 + EncFrequency + REAL + + + + + + + + SM-Synchron + SM-Synchron + #x000 + + + DC + DC-Synchron + #x300 + + + + 2048 + 80060344640000 + + + + + \ No newline at end of file diff --git a/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000_encoder.xml b/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000_encoder.xml deleted file mode 100755 index b123ab5..0000000 --- a/Pcb-1-lan9252/Firmware/lib/soes/MetalMusings_EaserCAT_2000_encoder.xml +++ /dev/null @@ -1,1462 +0,0 @@ - - - - 4321 - MetalMusings - - - - - myEncoder - lan9252 - - - - - EaserCAT2000 - MetalMusings EaserCAT 2000 encoder - myEncoder - - 5001 - 0 - - - - DT1018 - 144 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - Vendor ID - UDINT - 32 - 16 - - ro - - - - 2 - Product Code - UDINT - 32 - 48 - - ro - - - - 3 - Revision Number - UDINT - 32 - 80 - - ro - - - - 4 - Serial Number - UDINT - 32 - 112 - - ro - - - - - DT1600 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - StatusWord - UDINT - 32 - 16 - - ro - - - - - DT1601 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - OpModeDisplay - UDINT - 32 - 16 - - ro - - - - - DT1602 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ActualPosition - UDINT - 32 - 16 - - ro - - - - - DT1603 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ActualVelocity - UDINT - 32 - 16 - - ro - - - - - DT1604 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ActualTorque - UDINT - 32 - 16 - - ro - - - - - DT1605 - 80 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - IndexEnable - UDINT - 32 - 16 - - ro - - - - 2 - Reset - UDINT - 32 - 48 - - ro - - - - - DT1A00 - 80 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ECount - UDINT - 32 - 16 - - ro - - - - 2 - IndexTriggered - UDINT - 32 - 48 - - ro - - - - - DT1A01 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ControlWord - UDINT - 32 - 16 - - ro - - - - - DT1A02 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - OpMode - UDINT - 32 - 16 - - ro - - - - - DT1A03 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - TargetPosition - UDINT - 32 - 16 - - ro - - - - - DT1A04 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - TargetVelocity - UDINT - 32 - 16 - - ro - - - - - DT1C00ARR - USINT - 32 - - 1 - 4 - - - - DT1C00 - 48 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - Elements - DT1C00ARR - 32 - 16 - - ro - - - - - DT1C12ARR - UINT - 96 - - 1 - 6 - - - - DT1C12 - 112 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - Elements - DT1C12ARR - 96 - 16 - - ro - - - - - DT1C13ARR - UINT - 80 - - 1 - 5 - - - - DT1C13 - 96 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - Elements - DT1C13ARR - 80 - 16 - - ro - - - - - DT2000 - 64 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - Period - UINT - 16 - 16 - - ro - - - - 2 - Resolution - REAL - 32 - 32 - - ro - - - - - DT6000 - 56 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - ECount - DINT - 32 - 16 - - ro - T - - - - 2 - IndexTriggered - USINT - 8 - 48 - - rw - T - - - - - DT7000 - 32 - - 0 - Max SubIndex - USINT - 8 - 0 - - ro - - - - 1 - IndexEnable - USINT - 8 - 16 - - ro - R - - - - 2 - Reset - USINT - 8 - 24 - - ro - R - - - - - UDINT - 32 - - - STRING(34) - 272 - - - STRING(1) - 8 - - - USINT - 8 - - - UINT - 16 - - - REAL - 32 - - - DINT - 32 - - - - - #x1000 - Device Type - UDINT - 32 - - 5001 - - - ro - m - - - - #x1008 - Device Name - STRING(34) - 272 - - MetalMusings EaserCAT 2000 encoder - - - ro - - - - #x1009 - Hardware Version - STRING(1) - 8 - - 3 - - - ro - o - - - - #x100A - Software Version - STRING(1) - 8 - - 4 - - - ro - - - - #x1018 - Identity Object - DT1018 - 144 - - - Max SubIndex - - 4 - - - - Vendor ID - - 4321 - - - - Product Code - - 1234 - - - - Revision Number - - 1 - - - - Serial Number - - 2 - - - - - ro - - - - #x1600 - StatusWord - DT1600 - 48 - - - Max SubIndex - - 1 - - - - StatusWord - - #x60410010 - - - - - ro - - - - #x1601 - OpModeDisplay - DT1601 - 48 - - - Max SubIndex - - 1 - - - - OpModeDisplay - - #x60610008 - - - - - ro - - - - #x1602 - ActualPosition - DT1602 - 48 - - - Max SubIndex - - 1 - - - - ActualPosition - - #x60640020 - - - - - ro - - - - #x1603 - ActualVelocity - DT1603 - 48 - - - Max SubIndex - - 1 - - - - ActualVelocity - - #x606C0020 - - - - - ro - - - - #x1604 - ActualTorque - DT1604 - 48 - - - Max SubIndex - - 1 - - - - ActualTorque - - #x60770020 - - - - - ro - - - - #x1605 - EncoderIn - DT1605 - 80 - - - Max SubIndex - - 2 - - - - IndexEnable - - #x70000108 - - - - Reset - - #x70000208 - - - - - ro - - - - #x1A00 - EncoderOut - DT1A00 - 80 - - - Max SubIndex - - 2 - - - - ECount - - #x60000120 - - - - IndexTriggered - - #x60000208 - - - - - ro - - - - #x1A01 - ControlWord - DT1A01 - 48 - - - Max SubIndex - - 1 - - - - ControlWord - - #x60400010 - - - - - ro - - - - #x1A02 - OpMode - DT1A02 - 48 - - - Max SubIndex - - 1 - - - - OpMode - - #x60600008 - - - - - ro - - - - #x1A03 - TargetPosition - DT1A03 - 48 - - - Max SubIndex - - 1 - - - - TargetPosition - - #x607A0020 - - - - - ro - - - - #x1A04 - TargetVelocity - DT1A04 - 48 - - - Max SubIndex - - 1 - - - - TargetVelocity - - #x60FF0020 - - - - - ro - - - - #x1C00 - Sync Manager Communication Type - DT1C00 - 48 - - - Max SubIndex - - 4 - - - - Communications Type SM0 - - 1 - - - - Communications Type SM1 - - 2 - - - - Communications Type SM2 - - 3 - - - - Communications Type SM3 - - 4 - - - - - ro - - - - #x1C12 - Sync Manager 2 PDO Assignment - DT1C12 - 112 - - - Max SubIndex - - 6 - - - - PDO Mapping - - #x1600 - - - - PDO Mapping - - #x1601 - - - - PDO Mapping - - #x1602 - - - - PDO Mapping - - #x1603 - - - - PDO Mapping - - #x1604 - - - - PDO Mapping - - #x1605 - - - - - ro - - - - #x1C13 - Sync Manager 3 PDO Assignment - DT1C13 - 96 - - - Max SubIndex - - 5 - - - - PDO Mapping - - #x1A00 - - - - PDO Mapping - - #x1A01 - - - - PDO Mapping - - #x1A02 - - - - PDO Mapping - - #x1A03 - - - - PDO Mapping - - #x1A04 - - - - - ro - - - - #x2000 - StepperData - DT2000 - 64 - - - Max SubIndex - - 2 - - - - Period - - 1000 - - - - Resolution - - 2.5 - - - - - ro - - - - #x6000 - EncoderOut - DT6000 - 56 - - - Max SubIndex - - 2 - - - - ECount - - 0 - - - - IndexTriggered - - 0 - - - - - ro - - - - #x6040 - ControlWord - UINT - 16 - - 0 - - - ro - T - - - - #x6041 - StatusWord - UINT - 16 - - 0 - - - ro - R - - - - #x6060 - OpMode - USINT - 8 - - 0 - - - ro - T - - - - #x6061 - OpModeDisplay - USINT - 8 - - 0 - - - ro - R - - - - #x6064 - ActualPosition - DINT - 32 - - 0 - - - ro - R - - - - #x606C - ActualVelocity - DINT - 32 - - 0 - - - ro - R - - - - #x6077 - ActualTorque - DINT - 32 - - 0 - - - ro - R - - - - #x607A - TargetPosition - DINT - 32 - - 0 - - - ro - T - - - - #x60FF - TargetVelocity - DINT - 32 - - 0 - - - ro - T - - - - #x7000 - EncoderIn - DT7000 - 32 - - - Max SubIndex - - 2 - - - - IndexEnable - - 0 - - - - Reset - - 0 - - - - - ro - - - - - - Outputs - Inputs - MBoxState - MBoxOut - MBoxIn - Outputs - Inputs - - #x1600 - StatusWord - - #x6041 - #x0 - 16 - StatusWord - UINT - - - - #x1601 - OpModeDisplay - - #x6061 - #x0 - 8 - OpModeDisplay - USINT - - - - #x1602 - ActualPosition - - #x6064 - #x0 - 32 - ActualPosition - DINT - - - - #x1603 - ActualVelocity - - #x606C - #x0 - 32 - ActualVelocity - DINT - - - - #x1604 - ActualTorque - - #x6077 - #x0 - 32 - ActualTorque - DINT - - - - #x1605 - EncoderIn - - #x7000 - #x1 - 8 - IndexEnable - USINT - - - #x7000 - #x2 - 8 - Reset - USINT - - - - #x1A00 - EncoderOut - - #x6000 - #x1 - 32 - ECount - DINT - - - #x6000 - #x2 - 8 - IndexTriggered - USINT - - - - #x1A01 - ControlWord - - #x6040 - #x0 - 16 - ControlWord - UINT - - - - #x1A02 - OpMode - - #x6060 - #x0 - 8 - OpMode - USINT - - - - #x1A03 - TargetPosition - - #x607A - #x0 - 32 - TargetPosition - DINT - - - - #x1A04 - TargetVelocity - - #x60FF - #x0 - 32 - TargetVelocity - DINT - - - - - - - - SM-Synchron - SM-Synchron - #x000 - - - DC - DC-Synchron - #x300 - - - - 2048 - 80060344640000 - - - - - \ No newline at end of file diff --git a/Pcb-1-lan9252/Firmware/lib/soes/ecat_options.h b/Pcb-1-lan9252/Firmware/lib/soes/ecat_options.h index 61675e3..e9dd679 100755 --- a/Pcb-1-lan9252/Firmware/lib/soes/ecat_options.h +++ b/Pcb-1-lan9252/Firmware/lib/soes/ecat_options.h @@ -4,8 +4,8 @@ #define USE_FOE 0 #define USE_EOE 0 -#define MBXSIZE 128 -#define MBXSIZEBOOT 128 +#define MBXSIZE 512 +#define MBXSIZEBOOT 512 #define MBXBUFFERS 3 #define MBX0_sma 0x1000 @@ -33,8 +33,8 @@ #define SM3_smc 0x20 #define SM3_act 1 -#define MAX_MAPPINGS_SM2 7 -#define MAX_MAPPINGS_SM3 6 +#define MAX_MAPPINGS_SM2 2 +#define MAX_MAPPINGS_SM3 2 #define MAX_RXPDO_SIZE 512 #define MAX_TXPDO_SIZE 512 diff --git a/Pcb-1-lan9252/Firmware/lib/soes/eeprom.bin b/Pcb-1-lan9252/Firmware/lib/soes/eeprom.bin index 5f3083cd2fdc7f99d6730bd38a0771ecef602d8b..47287efda82e87b9f57d5f04bfdce0ce920dd01c 100755 GIT binary patch delta 147 zcmZn=Xb_NXU}JVkVSoV^uHNn(y~X>n#=da(jbsRBr? ZLMlY%#3M#r4Gd}wjEo@jH!=QW0|0+FBPjp? diff --git a/Pcb-1-lan9252/Firmware/lib/soes/eeprom.hex b/Pcb-1-lan9252/Firmware/lib/soes/eeprom.hex index 7b9cb4a..4291203 100755 --- a/Pcb-1-lan9252/Firmware/lib/soes/eeprom.hex +++ b/Pcb-1-lan9252/Firmware/lib/soes/eeprom.hex @@ -1,12 +1,12 @@ -:2000000080060344640000000000000000001400E1100000D20400000100000002000000D1 -:2000200000000000000000000000000000000000001080008010800004000000000000001C +:2000000080060344640000000000000000001400AA0A0000CCBCBB000200000001000000A1 +:20002000000000000000000000000000000000000010000200120002040000000000000096 :200040000000000000000000000000000000000000000000000000000000000000000000A0 :20006000000000000000000000000000000000000000000000000000000000000F00010070 -:200080000A002100040C456173657243415432303030096D79456E636F64657206494D479 -:2000A000434259224D6574616C4D7573696E67732045617365724341542032303030206518 -:2000C0006E636F6465721E0010000203010400130000000000000000000011000000000049 -:2000E00000000000000000000000280002000102030029001000001080002600010180104F -:200100008000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFC7 +:200080000A002000040C4561736572434154323030300E4D616368696E65436F6E74726F64 +:2000A0006C06494D474342591A4D6574616C4D7573696E67732045617365724341542032E6 +:2000C000303030001E00100002030104001300000000000000000000110000000000000034 +:2000E000000000000000000028000200010203002900100000100002260001010012000249 +:20010000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFFFFF49 :20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF :20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF :20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F diff --git a/Pcb-1-lan9252/Firmware/lib/soes/esi.json b/Pcb-1-lan9252/Firmware/lib/soes/esi.json index ce6926f..8f0ffaf 100755 --- a/Pcb-1-lan9252/Firmware/lib/soes/esi.json +++ b/Pcb-1-lan9252/Firmware/lib/soes/esi.json @@ -1,32 +1,39 @@ { - "form": {}, + "form": { + "VendorName": "MetalMusings", + "VendorID": "0xaaa", + "ProductCode": "0xbbbccc", + "ProfileNo": "5001", + "RevisionNumber": "0x002", + "SerialNumber": "0x001", + "HWversion": "0.0.1", + "SWversion": "0.0.1", + "EEPROMsize": "2048", + "RxMailboxOffset": "0x1000", + "TxMailboxOffset": "0x1200", + "MailboxSize": "512", + "SM2Offset": "0x1600", + "SM3Offset": "0x1A00", + "TextGroupType": "MachineControl", + "TextGroupName5": "Incremental encoder", + "ImageName": "IMGCBY", + "TextDeviceType": "EaserCAT2000", + "TextDeviceName": "MetalMusings EaserCAT 2000", + "Port0Physical": "Y", + "Port1Physical": "Y", + "Port2Physical": " ", + "Port3Physical": " ", + "ESC": "LAN9252", + "SPImode": "3", + "CoeDetailsEnableSDO": "EnableSDO", + "CoeDetailsEnableSDOInfo": "EnableSDOInfo", + "CoeDetailsEnablePDOAssign": "EnablePDOAssign", + "CoeDetailsEnablePDOConfiguration": "EnablePDOConfiguration", + "CoeDetailsEnableUploadAtStartup": "EnableUploadAtStartup", + "CoeDetailsEnableSDOCompleteAccess": "EnableSDOCompleteAccess" + }, "od": { "sdo": { - "2000": { - "otype": "RECORD", - "name": "StepperData", - "access": "RO", - "items": [ - { - "name": "Max SubIndex" - }, - { - "name": "Period", - "dtype": "UNSIGNED16", - "data": "&Obj.StepperData.Period", - "value": "1000", - "access": "RO" - }, - { - "name": "Resolution", - "dtype": "REAL32", - "value": "2.5", - "access": "RO", - "data": "&Obj.StepperData.Resolution" - } - ], - "isSDOitem": true - }, "A": { "otype": "RECORD", "name": "Error Settings", @@ -44,148 +51,50 @@ }, "txpdo": { "6000": { - "otype": "RECORD", - "name": "EncoderOut", - "access": "RO", - "items": [ - { - "name": "Max SubIndex" - }, - { - "name": "ECount", - "dtype": "INTEGER32", - "value": "0", - "access": "RO", - "data": "&Obj.EncoderOut.ECount" - }, - { - "name": "IndexTriggered", - "dtype": "UNSIGNED8", - "value": "0", - "access": "RW", - "data": "&Obj.EncoderOut.IndexTriggered" - } - ], - "pdo_mappings": [ - "txpdo" - ] - }, - "6040": { "otype": "VAR", - "name": "ControlWord", + "name": "EncPos", "access": "RO", "pdo_mappings": [ "txpdo" ], - "dtype": "UNSIGNED16", + "dtype": "REAL32", "value": "0", - "data": "&Obj.ControlWord" + "data": "&Obj.EncPos" }, - "6060": { + "6001": { "otype": "VAR", - "name": "OpMode", + "name": "EncFrequency", "access": "RO", "pdo_mappings": [ "txpdo" ], - "dtype": "UNSIGNED8", + "dtype": "REAL32", "value": "0", - "data": "&Obj.OpMode" - }, - "607A": { - "otype": "VAR", - "name": "TargetPosition", - "access": "RO", - "pdo_mappings": [ - "txpdo" - ], - "dtype": "INTEGER32", - "value": "0", - "data": "&Obj.TargetPosition" - }, - "60FF": { - "otype": "VAR", - "name": "TargetVelocity", - "access": "RO", - "pdo_mappings": [ - "txpdo" - ], - "dtype": "INTEGER32", - "value": "0", - "data": "&Obj.TargetVelocity" + "data": "&Obj.EncFrequency" } }, "rxpdo": { - "6041": { - "otype": "VAR", - "name": "StatusWord", - "access": "RO", - "pdo_mappings": [ - "rxpdo" - ], - "dtype": "UNSIGNED16", - "value": "0", - "data": "&Obj.StatusWord" - }, - "6061": { - "otype": "VAR", - "name": "OpModeDisplay", - "access": "RO", - "pdo_mappings": [ - "rxpdo" - ], - "dtype": "UNSIGNED8", - "value": "0", - "data": "&Obj.OpModeDisplay" - }, - "6064": { - "otype": "VAR", - "name": "ActualPosition", - "access": "RO", - "pdo_mappings": [ - "rxpdo" - ], - "dtype": "INTEGER32", - "value": "0", - "data": "&Obj.ActualPosition" - }, - "6077": { - "otype": "VAR", - "name": "ActualTorque", - "access": "RO", - "pdo_mappings": [ - "rxpdo" - ], - "dtype": "INTEGER32", - "value": "0", - "data": "&Obj.ActualTorque" - }, "7000": { - "otype": "RECORD", - "name": "EncoderIn", + "otype": "VAR", + "name": "EncPosScale", "access": "RO", - "items": [ - { - "name": "Max SubIndex" - }, - { - "name": "IndexEnable", - "dtype": "UNSIGNED8", - "value": "0", - "access": "RO", - "data": "&Obj.EncoderIn.IndexEnable" - }, - { - "name": "Reset", - "dtype": "UNSIGNED8", - "value": "0", - "access": "RO", - "data": "&Obj.EncoderIn.Reset" - } - ], "pdo_mappings": [ "rxpdo" - ] + ], + "dtype": "INTEGER32", + "value": "0", + "data": "&Obj.EncPosScale" + }, + "7001": { + "otype": "VAR", + "name": "EncIndexCEnable", + "access": "RO", + "pdo_mappings": [ + "rxpdo" + ], + "dtype": "UNSIGNED32", + "value": "0", + "data": "&Obj.EncIndexCEnable" }, "60664": { "otype": "VAR", @@ -196,17 +105,6 @@ ], "dtype": "INTEGER32", "value": "0" - }, - "606C": { - "otype": "VAR", - "name": "ActualVelocity", - "access": "RO", - "pdo_mappings": [ - "rxpdo" - ], - "dtype": "INTEGER32", - "value": "0", - "data": "&Obj.ActualVelocity" } } }, diff --git a/Pcb-1-lan9252/Firmware/lib/soes/objectlist.c b/Pcb-1-lan9252/Firmware/lib/soes/objectlist.c index 340922e..51f6370 100755 --- a/Pcb-1-lan9252/Firmware/lib/soes/objectlist.c +++ b/Pcb-1-lan9252/Firmware/lib/soes/objectlist.c @@ -13,41 +13,18 @@ static const char acName1018_01[] = "Vendor ID"; static const char acName1018_02[] = "Product Code"; static const char acName1018_03[] = "Revision Number"; static const char acName1018_04[] = "Serial Number"; -static const char acName1600[] = "StatusWord"; +static const char acName1600[] = "EncPosScale"; static const char acName1600_00[] = "Max SubIndex"; -static const char acName1600_01[] = "StatusWord"; -static const char acName1601[] = "OpModeDisplay"; +static const char acName1600_01[] = "EncPosScale"; +static const char acName1601[] = "EncIndexCEnable"; static const char acName1601_00[] = "Max SubIndex"; -static const char acName1601_01[] = "OpModeDisplay"; -static const char acName1602[] = "ActualPosition"; -static const char acName1602_00[] = "Max SubIndex"; -static const char acName1602_01[] = "ActualPosition"; -static const char acName1603[] = "ActualVelocity"; -static const char acName1603_00[] = "Max SubIndex"; -static const char acName1603_01[] = "ActualVelocity"; -static const char acName1604[] = "ActualTorque"; -static const char acName1604_00[] = "Max SubIndex"; -static const char acName1604_01[] = "ActualTorque"; -static const char acName1605[] = "EncoderIn"; -static const char acName1605_00[] = "Max SubIndex"; -static const char acName1605_01[] = "IndexEnable"; -static const char acName1605_02[] = "Reset"; -static const char acName1A00[] = "EncoderOut"; +static const char acName1601_01[] = "EncIndexCEnable"; +static const char acName1A00[] = "EncPos"; static const char acName1A00_00[] = "Max SubIndex"; -static const char acName1A00_01[] = "ECount"; -static const char acName1A00_02[] = "IndexTriggered"; -static const char acName1A01[] = "ControlWord"; +static const char acName1A00_01[] = "EncPos"; +static const char acName1A01[] = "EncFrequency"; static const char acName1A01_00[] = "Max SubIndex"; -static const char acName1A01_01[] = "ControlWord"; -static const char acName1A02[] = "OpMode"; -static const char acName1A02_00[] = "Max SubIndex"; -static const char acName1A02_01[] = "OpMode"; -static const char acName1A03[] = "TargetPosition"; -static const char acName1A03_00[] = "Max SubIndex"; -static const char acName1A03_01[] = "TargetPosition"; -static const char acName1A04[] = "TargetVelocity"; -static const char acName1A04_00[] = "Max SubIndex"; -static const char acName1A04_01[] = "TargetVelocity"; +static const char acName1A01_01[] = "EncFrequency"; static const char acName1C00[] = "Sync Manager Communication Type"; static const char acName1C00_00[] = "Max SubIndex"; static const char acName1C00_01[] = "Communications Type SM0"; @@ -58,38 +35,14 @@ static const char acName1C12[] = "Sync Manager 2 PDO Assignment"; static const char acName1C12_00[] = "Max SubIndex"; static const char acName1C12_01[] = "PDO Mapping"; static const char acName1C12_02[] = "PDO Mapping"; -static const char acName1C12_03[] = "PDO Mapping"; -static const char acName1C12_04[] = "PDO Mapping"; -static const char acName1C12_05[] = "PDO Mapping"; -static const char acName1C12_06[] = "PDO Mapping"; static const char acName1C13[] = "Sync Manager 3 PDO Assignment"; static const char acName1C13_00[] = "Max SubIndex"; static const char acName1C13_01[] = "PDO Mapping"; static const char acName1C13_02[] = "PDO Mapping"; -static const char acName1C13_03[] = "PDO Mapping"; -static const char acName1C13_04[] = "PDO Mapping"; -static const char acName1C13_05[] = "PDO Mapping"; -static const char acName2000[] = "StepperData"; -static const char acName2000_00[] = "Max SubIndex"; -static const char acName2000_01[] = "Period"; -static const char acName2000_02[] = "Resolution"; -static const char acName6000[] = "EncoderOut"; -static const char acName6000_00[] = "Max SubIndex"; -static const char acName6000_01[] = "ECount"; -static const char acName6000_02[] = "IndexTriggered"; -static const char acName6040[] = "ControlWord"; -static const char acName6041[] = "StatusWord"; -static const char acName6060[] = "OpMode"; -static const char acName6061[] = "OpModeDisplay"; -static const char acName6064[] = "ActualPosition"; -static const char acName606C[] = "ActualVelocity"; -static const char acName6077[] = "ActualTorque"; -static const char acName607A[] = "TargetPosition"; -static const char acName60FF[] = "TargetVelocity"; -static const char acName7000[] = "EncoderIn"; -static const char acName7000_00[] = "Max SubIndex"; -static const char acName7000_01[] = "IndexEnable"; -static const char acName7000_02[] = "Reset"; +static const char acName6000[] = "EncPos"; +static const char acName6001[] = "EncFrequency"; +static const char acName7000[] = "EncPosScale"; +static const char acName7001[] = "EncIndexCEnable"; const _objd SDO1000[] = { @@ -97,80 +50,43 @@ const _objd SDO1000[] = }; const _objd SDO1008[] = { - {0x0, DTYPE_VISIBLE_STRING, 272, ATYPE_RO, acName1008, 0, "MetalMusings EaserCAT 2000 encoder"}, + {0x0, DTYPE_VISIBLE_STRING, 208, ATYPE_RO, acName1008, 0, "MetalMusings EaserCAT 2000"}, }; const _objd SDO1009[] = { - {0x0, DTYPE_VISIBLE_STRING, 8, ATYPE_RO, acName1009, 0, "3"}, + {0x0, DTYPE_VISIBLE_STRING, 40, ATYPE_RO, acName1009, 0, "0.0.1"}, }; const _objd SDO100A[] = { - {0x0, DTYPE_VISIBLE_STRING, 8, ATYPE_RO, acName100A, 0, "4"}, + {0x0, DTYPE_VISIBLE_STRING, 40, ATYPE_RO, acName100A, 0, "0.0.1"}, }; const _objd SDO1018[] = { {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1018_00, 4, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_01, 4321, NULL}, - {0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_02, 1234, NULL}, - {0x03, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_03, 1, NULL}, - {0x04, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_04, 2, &Obj.serial}, + {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_01, 2730, NULL}, + {0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_02, 12303564, NULL}, + {0x03, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_03, 2, NULL}, + {0x04, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1018_04, 1, &Obj.serial}, }; const _objd SDO1600[] = { {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1600_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1600_01, 0x60410010, NULL}, + {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1600_01, 0x70000020, NULL}, }; const _objd SDO1601[] = { {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1601_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1601_01, 0x60610008, NULL}, -}; -const _objd SDO1602[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1602_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1602_01, 0x60640020, NULL}, -}; -const _objd SDO1603[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1603_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1603_01, 0x606C0020, NULL}, -}; -const _objd SDO1604[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1604_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1604_01, 0x60770020, NULL}, -}; -const _objd SDO1605[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1605_00, 2, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1605_01, 0x70000108, NULL}, - {0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1605_02, 0x70000208, NULL}, + {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1601_01, 0x70010020, NULL}, }; const _objd SDO1A00[] = { - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A00_00, 2, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A00_01, 0x60000120, NULL}, - {0x02, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A00_02, 0x60000208, NULL}, + {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A00_00, 1, NULL}, + {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A00_01, 0x60000020, NULL}, }; const _objd SDO1A01[] = { {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A01_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A01_01, 0x60400010, NULL}, -}; -const _objd SDO1A02[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A02_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A02_01, 0x60600008, NULL}, -}; -const _objd SDO1A03[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A03_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A03_01, 0x607A0020, NULL}, -}; -const _objd SDO1A04[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A04_00, 1, NULL}, - {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A04_01, 0x60FF0020, NULL}, + {0x01, DTYPE_UNSIGNED32, 32, ATYPE_RO, acName1A01_01, 0x60010020, NULL}, }; const _objd SDO1C00[] = { @@ -182,76 +98,31 @@ const _objd SDO1C00[] = }; const _objd SDO1C12[] = { - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C12_00, 6, NULL}, + {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C12_00, 2, NULL}, {0x01, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_01, 0x1600, NULL}, {0x02, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_02, 0x1601, NULL}, - {0x03, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_03, 0x1602, NULL}, - {0x04, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_04, 0x1603, NULL}, - {0x05, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_05, 0x1604, NULL}, - {0x06, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C12_06, 0x1605, NULL}, }; const _objd SDO1C13[] = { - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C13_00, 5, NULL}, + {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C13_00, 2, NULL}, {0x01, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_01, 0x1A00, NULL}, {0x02, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_02, 0x1A01, NULL}, - {0x03, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_03, 0x1A02, NULL}, - {0x04, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_04, 0x1A03, NULL}, - {0x05, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_05, 0x1A04, NULL}, -}; -const _objd SDO2000[] = -{ - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName2000_00, 2, NULL}, - {0x01, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName2000_01, 1000, &Obj.StepperData.Period}, - {0x02, DTYPE_REAL32, 32, ATYPE_RO, acName2000_02, 0x40200000, &Obj.StepperData.Resolution}, }; const _objd SDO6000[] = { - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName6000_00, 2, NULL}, - {0x01, DTYPE_INTEGER32, 32, ATYPE_RO, acName6000_01, 0, &Obj.EncoderOut.ECount}, - {0x02, DTYPE_UNSIGNED8, 8, ATYPE_RW, acName6000_02, 0, &Obj.EncoderOut.IndexTriggered}, + {0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_TXPDO, acName6000, 0x00000000, &Obj.EncPos}, }; -const _objd SDO6040[] = +const _objd SDO6001[] = { - {0x0, DTYPE_UNSIGNED16, 16, ATYPE_RO | ATYPE_TXPDO, acName6040, 0, &Obj.ControlWord}, -}; -const _objd SDO6041[] = -{ - {0x0, DTYPE_UNSIGNED16, 16, ATYPE_RO | ATYPE_RXPDO, acName6041, 0, &Obj.StatusWord}, -}; -const _objd SDO6060[] = -{ - {0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_TXPDO, acName6060, 0, &Obj.OpMode}, -}; -const _objd SDO6061[] = -{ - {0x0, DTYPE_UNSIGNED8, 8, ATYPE_RO | ATYPE_RXPDO, acName6061, 0, &Obj.OpModeDisplay}, -}; -const _objd SDO6064[] = -{ - {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_RXPDO, acName6064, 0, &Obj.ActualPosition}, -}; -const _objd SDO606C[] = -{ - {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_RXPDO, acName606C, 0, &Obj.ActualVelocity}, -}; -const _objd SDO6077[] = -{ - {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_RXPDO, acName6077, 0, &Obj.ActualTorque}, -}; -const _objd SDO607A[] = -{ - {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_TXPDO, acName607A, 0, &Obj.TargetPosition}, -}; -const _objd SDO60FF[] = -{ - {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_TXPDO, acName60FF, 0, &Obj.TargetVelocity}, + {0x0, DTYPE_REAL32, 32, ATYPE_RO | ATYPE_TXPDO, acName6001, 0x00000000, &Obj.EncFrequency}, }; const _objd SDO7000[] = { - {0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName7000_00, 2, NULL}, - {0x01, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName7000_01, 0, &Obj.EncoderIn.IndexEnable}, - {0x02, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName7000_02, 0, &Obj.EncoderIn.Reset}, + {0x0, DTYPE_INTEGER32, 32, ATYPE_RO | ATYPE_RXPDO, acName7000, 0, &Obj.EncPosScale}, +}; +const _objd SDO7001[] = +{ + {0x0, DTYPE_UNSIGNED32, 32, ATYPE_RO | ATYPE_RXPDO, acName7001, 0, &Obj.EncIndexCEnable}, }; const _objectlist SDOobjects[] = @@ -263,29 +134,14 @@ const _objectlist SDOobjects[] = {0x1018, OTYPE_RECORD, 4, 0, acName1018, SDO1018}, {0x1600, OTYPE_RECORD, 1, 0, acName1600, SDO1600}, {0x1601, OTYPE_RECORD, 1, 0, acName1601, SDO1601}, - {0x1602, OTYPE_RECORD, 1, 0, acName1602, SDO1602}, - {0x1603, OTYPE_RECORD, 1, 0, acName1603, SDO1603}, - {0x1604, OTYPE_RECORD, 1, 0, acName1604, SDO1604}, - {0x1605, OTYPE_RECORD, 2, 0, acName1605, SDO1605}, - {0x1A00, OTYPE_RECORD, 2, 0, acName1A00, SDO1A00}, + {0x1A00, OTYPE_RECORD, 1, 0, acName1A00, SDO1A00}, {0x1A01, OTYPE_RECORD, 1, 0, acName1A01, SDO1A01}, - {0x1A02, OTYPE_RECORD, 1, 0, acName1A02, SDO1A02}, - {0x1A03, OTYPE_RECORD, 1, 0, acName1A03, SDO1A03}, - {0x1A04, OTYPE_RECORD, 1, 0, acName1A04, SDO1A04}, {0x1C00, OTYPE_ARRAY, 4, 0, acName1C00, SDO1C00}, - {0x1C12, OTYPE_ARRAY, 6, 0, acName1C12, SDO1C12}, - {0x1C13, OTYPE_ARRAY, 5, 0, acName1C13, SDO1C13}, - {0x2000, OTYPE_RECORD, 2, 0, acName2000, SDO2000}, - {0x6000, OTYPE_RECORD, 2, 0, acName6000, SDO6000}, - {0x6040, OTYPE_VAR, 0, 0, acName6040, SDO6040}, - {0x6041, OTYPE_VAR, 0, 0, acName6041, SDO6041}, - {0x6060, OTYPE_VAR, 0, 0, acName6060, SDO6060}, - {0x6061, OTYPE_VAR, 0, 0, acName6061, SDO6061}, - {0x6064, OTYPE_VAR, 0, 0, acName6064, SDO6064}, - {0x606C, OTYPE_VAR, 0, 0, acName606C, SDO606C}, - {0x6077, OTYPE_VAR, 0, 0, acName6077, SDO6077}, - {0x607A, OTYPE_VAR, 0, 0, acName607A, SDO607A}, - {0x60FF, OTYPE_VAR, 0, 0, acName60FF, SDO60FF}, - {0x7000, OTYPE_RECORD, 2, 0, acName7000, SDO7000}, + {0x1C12, OTYPE_ARRAY, 2, 0, acName1C12, SDO1C12}, + {0x1C13, OTYPE_ARRAY, 2, 0, acName1C13, SDO1C13}, + {0x6000, OTYPE_VAR, 0, 0, acName6000, SDO6000}, + {0x6001, OTYPE_VAR, 0, 0, acName6001, SDO6001}, + {0x7000, OTYPE_VAR, 0, 0, acName7000, SDO7000}, + {0x7001, OTYPE_VAR, 0, 0, acName7001, SDO7001}, {0xffff, 0xff, 0xff, 0xff, NULL, NULL} }; diff --git a/Pcb-1-lan9252/Firmware/lib/soes/utypes.h b/Pcb-1-lan9252/Firmware/lib/soes/utypes.h index 7ef1b39..0c38401 100755 --- a/Pcb-1-lan9252/Firmware/lib/soes/utypes.h +++ b/Pcb-1-lan9252/Firmware/lib/soes/utypes.h @@ -13,36 +13,14 @@ typedef struct /* Inputs */ - struct - { - int32_t ECount; - uint8_t IndexTriggered; - } EncoderOut; - uint16_t ControlWord; - uint8_t OpMode; - int32_t TargetPosition; - int32_t TargetVelocity; + float EncPos; + float EncFrequency; /* Outputs */ - uint16_t StatusWord; - uint8_t OpModeDisplay; - int32_t ActualPosition; - int32_t ActualVelocity; - int32_t ActualTorque; - struct - { - uint8_t IndexEnable; - uint8_t Reset; - } EncoderIn; + int32_t EncPosScale; + uint32_t EncIndexCEnable; - /* Parameters */ - - struct - { - uint16_t Period; - float Resolution; - } StepperData; } _Objects; extern _Objects Obj; diff --git a/Pcb-1-lan9252/Firmware/platformio.ini b/Pcb-1-lan9252/Firmware/platformio.ini index 337b95f..20ca4b3 100755 --- a/Pcb-1-lan9252/Firmware/platformio.ini +++ b/Pcb-1-lan9252/Firmware/platformio.ini @@ -14,9 +14,10 @@ platform = ststm32 board = genericSTM32F407VGT6 upload_protocol = stlink debug_tool = stlink -debug_build_flags = -O0 -g -ggdb +debug_build_flags = -O0 -g -ggdb monitor_port = COM7 monitor_speed = 115200 build_flags = -Wl,--no-warn-rwx-segment -lib_deps = - SPI \ No newline at end of file +lib_deps = + SPI + rlogiacco/CircularBuffer@^1.3.3 diff --git a/Pcb-1-lan9252/Firmware/src/main.cpp b/Pcb-1-lan9252/Firmware/src/main.cpp index 42f8843..b2394e4 100755 --- a/Pcb-1-lan9252/Firmware/src/main.cpp +++ b/Pcb-1-lan9252/Firmware/src/main.cpp @@ -6,44 +6,59 @@ extern "C" #include "ecat_slv.h" #include "utypes.h" }; +#include +#define RINGBUFFERLEN 101 +CircularBuffer Pos; +CircularBuffer TDelta; int64_t PreviousEncoderCounterValue = 0; int64_t unwrap_encoder(uint16_t in, int64_t *prev); #include Encoder EncoderInit; -#include "Stepper.h" +// #include "Stepper.h" HardwareSerial Serial1(PA10, PA9); _Objects Obj; -void StepGen(void); +void indexPulse(void); +double PosScaleRes = 1.0; +uint32_t CurPosScale = 1; +uint8_t OldIndexCEnable = 0; -volatile uint8_t IndexEnable = 1; -volatile uint8_t IndexTriggered = 0; void cb_set_outputs(void) // Master outputs gets here, slave inputs, first operation { - IndexEnable = Obj.EncoderIn.IndexEnable; - if (!IndexEnable) - IndexTriggered = 0; + if (Obj.EncIndexCEnable && !OldIndexCEnable) // Should only happen first time IndexCEnable is set + { + attachInterrupt(digitalPinToInterrupt(PA2), indexPulse, RISING); // PA2 = Index pulse + } + OldIndexCEnable = Obj.EncIndexCEnable; + + if (CurPosScale != Obj.EncPosScale && Obj.EncPosScale != 0) + { + CurPosScale = Obj.EncPosScale; + PosScaleRes = 1.0 / double(CurPosScale); + } } void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation { - // Obj.EncoderOut.ECount = TIM2->CNT; - Obj.EncoderOut.ECount = unwrap_encoder(TIM2->CNT, &PreviousEncoderCounterValue); - Obj.EncoderOut.IndexTriggered = IndexTriggered; - uint32_t diffT = ESCvar.Time - ESCvar.PrevTime; + int64_t pos = unwrap_encoder(TIM2->CNT, &PreviousEncoderCounterValue); + double CurPos = pos * PosScaleRes; + Obj.EncPos = CurPos; + + double diffT = 0; + double diffPos = 0; + TDelta.push(ESCvar.Time); // Too bad resolution to measure over 1 ms. The length of the circular buffers + Pos.push(CurPos); // tells over how long time the position is measured. + if (Pos.size() >= 2) + { + diffT = 1.0e-9 * (TDelta.last() - TDelta.first()); // Time is in nanoseconds + diffPos = fabs(Pos.last() - Pos.first()); + } + Obj.EncFrequency = diffT != 0 ? diffPos / diffT : 0.0; // Revolutions per second } -void indexPulse(void) -{ - if (IndexEnable && !IndexTriggered) - { - TIM2->CNT = 0; - IndexTriggered = 1; - } -} static esc_cfg_t config = { .user_arg = NULL, @@ -52,7 +67,7 @@ static esc_cfg_t config = .set_defaults_hook = NULL, .pre_state_change_hook = NULL, .post_state_change_hook = NULL, - .application_hook = StepGen, + .application_hook = NULL, // StepGen, .safeoutput_override = NULL, .pre_object_download_hook = NULL, .post_object_download_hook = NULL, @@ -71,14 +86,12 @@ void setup(void) rcc_config(); // Set starting count value - // EncoderInit.SetCount(Tim2, 0); + EncoderInit.SetCount(Tim2, 0); // EncoderInit.SetCount(Tim3, 0); // EncoderInit.SetCount(Tim4, 0); // EncoderInit.SetCount(Tim8, 0); - attachInterrupt(digitalPinToInterrupt(PA2), indexPulse, RISING); // PA2 = Index pulse - StepperSetup(); -// delay(5000); // To give serial port monitor time to receive + // delay(5000); // To give serial port monitor time to receive Serial1.printf("Before Ecat config\n"); ecat_slv_init(&config); @@ -110,16 +123,10 @@ int64_t unwrap_encoder(uint16_t in, int64_t *prev) return unwrapped + HALF_PERIOD; // remove the shift we applied at the beginning, and return } -void StepGen(void) +void indexPulse(void) { - uint16_t Period = Obj.StepperData.Period; // Period in microseconds, so 1000 is 1 ms. - - float StepperResolution = Obj.StepperData.Resolution; // 2.5 pulses/um - int32_t TargetPosition = Obj.TargetPosition; // um - int32_t ActualPosition = 0; // um - int32_t DistanceToGo = TargetPosition - ActualPosition; // um - int32_t PulsesToMake = DistanceToGo * StepperResolution; - int32_t Frequency = PulsesToMake * 1000000 / Period; - - // Check if timer done. + detachInterrupt(digitalPinToInterrupt(PA2)); // PA2 = Index pulse; + EncoderInit.SetCount(Tim2, 0); + Pos.clear(); + TDelta.clear(); } \ No newline at end of file diff --git a/Pcb-1-lan9252/Kicad/Ethercat-stm32/.gitignore b/Pcb-1-lan9252/Kicad/Ethercat-stm32/.gitignore index 27075ef..bba9e59 100644 --- a/Pcb-1-lan9252/Kicad/Ethercat-stm32/.gitignore +++ b/Pcb-1-lan9252/Kicad/Ethercat-stm32/.gitignore @@ -1 +1,3 @@ fp-info-cache +Ethercat-stm32-backup* +*.lck diff --git a/Pcb-1-lan9252/Kicad/Ethercat-stm32/Ethercat-stm32.kicad_prl b/Pcb-1-lan9252/Kicad/Ethercat-stm32/Ethercat-stm32.kicad_prl index 1916e46..727f528 100755 --- a/Pcb-1-lan9252/Kicad/Ethercat-stm32/Ethercat-stm32.kicad_prl +++ b/Pcb-1-lan9252/Kicad/Ethercat-stm32/Ethercat-stm32.kicad_prl @@ -64,7 +64,7 @@ 39, 40 ], - "visible_layers": "002ffe8_00000001", + "visible_layers": "002202a_00000001", "zone_display_mode": 0 }, "meta": {