Compare commits
104 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1850912aca | ||
|
|
c21d42cf0b | ||
|
|
7ffd757fb5 | ||
|
|
934f3cb028 | ||
|
|
d60822388e | ||
|
|
31d24e2676 | ||
|
|
c444f9a496 | ||
|
|
e234ea7a97 | ||
|
|
eb63adbdc2 | ||
|
|
70014d3b1d | ||
|
|
990801f2d0 | ||
|
|
329474309d | ||
|
|
da2b1f6376 | ||
|
|
a88090a853 | ||
|
|
aa955aec67 | ||
|
|
e641fd04b7 | ||
|
|
ac711cd168 | ||
|
|
ee56f85c53 | ||
|
|
69357d35a4 | ||
|
|
84d790c687 | ||
|
|
e7fc20fec5 | ||
|
|
f8cec1ac69 | ||
|
|
ddffbe5f8b | ||
|
|
e95a098367 | ||
|
|
1d36ffbf69 | ||
|
|
c97e1fa96a | ||
|
|
ef84d552e4 | ||
|
|
d93adac4a2 | ||
|
|
ca3ceac5c6 | ||
|
|
b534e3d4da | ||
|
|
6ac0949f26 | ||
|
|
1f97534133 | ||
|
|
e6bfe4f880 | ||
|
|
8f05f33e58 | ||
|
|
9e311038c1 | ||
|
|
9ab4afabe4 | ||
|
|
38825bbaf3 | ||
|
|
0a04124b35 | ||
|
|
760944afe5 | ||
|
|
044e8fd2c5 | ||
|
|
697ea19dae | ||
|
|
20ca9d4974 | ||
|
|
c6857d0be2 | ||
|
|
f14b0160f6 | ||
|
|
deadd488dd | ||
|
|
25c2aa7b3c | ||
|
|
7a63d27303 | ||
|
|
6176166b3a | ||
|
|
5df911296c | ||
|
|
a4488da9fa | ||
|
|
cd8388ea58 | ||
|
|
6f29a0d492 | ||
|
|
3bbf089d01 | ||
|
|
2e4e768d5e | ||
|
|
6c168d96d9 | ||
|
|
f8fc5fccd6 | ||
|
|
f6abd73c58 | ||
|
|
c5a95074dc | ||
|
|
8614d1dfd3 | ||
|
|
251fd29d23 | ||
|
|
5ad02fae03 | ||
|
|
9adae08b98 | ||
|
|
0b9ce37200 | ||
|
|
120b423f59 | ||
|
|
222e5857dc | ||
|
|
b242ec3315 | ||
|
|
f66c600dc7 | ||
|
|
9a41ccd2bc | ||
|
|
9dcc713fab | ||
|
|
ccde6ef15e | ||
|
|
7e06b0ce68 | ||
|
|
37d3ea6567 | ||
|
|
ed168df64e | ||
|
|
1168f7e5ad | ||
|
|
93405efd63 | ||
|
|
484c984e49 | ||
|
|
e6cd5356c9 | ||
|
|
5978ebec24 | ||
|
|
d4a83eae80 | ||
|
|
2e8e938345 | ||
|
|
cc1ca73219 | ||
|
|
b57bd740ab | ||
|
|
8007a2ff6c | ||
|
|
a21e932b5a | ||
|
|
64d62a954a | ||
|
|
f99d9bab77 | ||
|
|
703bbfb03a | ||
|
|
f0ec7a834c | ||
|
|
28f01a9919 | ||
|
|
bf8fccd0d6 | ||
|
|
f27a27ed1b | ||
|
|
485901120c | ||
|
|
1851f4168e | ||
|
|
ab034e93f8 | ||
|
|
0929d23207 | ||
|
|
818f853af0 | ||
|
|
5abaf4ace7 | ||
|
|
2a1111c537 | ||
|
|
d9b088687f | ||
|
|
2790280c4a | ||
|
|
890a81952b | ||
|
|
d878101c62 | ||
|
|
3cd2755645 | ||
|
|
49c804516d |
1
.gitignore
vendored
@@ -3,3 +3,4 @@
|
|||||||
.vscode/c_cpp_properties.json
|
.vscode/c_cpp_properties.json
|
||||||
.vscode/launch.json
|
.vscode/launch.json
|
||||||
.vscode/ipch
|
.vscode/ipch
|
||||||
|
Octave
|
||||||
|
|||||||
@@ -9,8 +9,9 @@ Mcu.CPN=STM32F407VGT6
|
|||||||
Mcu.Family=STM32F4
|
Mcu.Family=STM32F4
|
||||||
Mcu.IP0=DAC
|
Mcu.IP0=DAC
|
||||||
Mcu.IP1=I2C2
|
Mcu.IP1=I2C2
|
||||||
Mcu.IP10=TIM8
|
Mcu.IP10=TIM5
|
||||||
Mcu.IP11=USART1
|
Mcu.IP11=TIM9
|
||||||
|
Mcu.IP12=USART1
|
||||||
Mcu.IP2=NVIC
|
Mcu.IP2=NVIC
|
||||||
Mcu.IP3=RCC
|
Mcu.IP3=RCC
|
||||||
Mcu.IP4=SPI1
|
Mcu.IP4=SPI1
|
||||||
@@ -19,48 +20,44 @@ Mcu.IP6=TIM1
|
|||||||
Mcu.IP7=TIM2
|
Mcu.IP7=TIM2
|
||||||
Mcu.IP8=TIM3
|
Mcu.IP8=TIM3
|
||||||
Mcu.IP9=TIM4
|
Mcu.IP9=TIM4
|
||||||
Mcu.IPNb=12
|
Mcu.IPNb=13
|
||||||
Mcu.Name=STM32F407V(E-G)Tx
|
Mcu.Name=STM32F407V(E-G)Tx
|
||||||
Mcu.Package=LQFP100
|
Mcu.Package=LQFP100
|
||||||
Mcu.Pin0=PA0-WKUP
|
Mcu.Pin0=PE5
|
||||||
Mcu.Pin1=PA1
|
Mcu.Pin1=PA0-WKUP
|
||||||
Mcu.Pin10=PB1
|
Mcu.Pin10=PB0
|
||||||
Mcu.Pin11=PE7
|
Mcu.Pin11=PB1
|
||||||
Mcu.Pin12=PE8
|
Mcu.Pin12=PE7
|
||||||
Mcu.Pin13=PE9
|
Mcu.Pin13=PE8
|
||||||
Mcu.Pin14=PE10
|
Mcu.Pin14=PE9
|
||||||
Mcu.Pin15=PE11
|
Mcu.Pin15=PE10
|
||||||
Mcu.Pin16=PE12
|
Mcu.Pin16=PE11
|
||||||
Mcu.Pin17=PE13
|
Mcu.Pin17=PE12
|
||||||
Mcu.Pin18=PE14
|
Mcu.Pin18=PE13
|
||||||
Mcu.Pin19=PE15
|
Mcu.Pin19=PE14
|
||||||
Mcu.Pin2=PA2
|
Mcu.Pin2=PA1
|
||||||
Mcu.Pin20=PB10
|
Mcu.Pin20=PE15
|
||||||
Mcu.Pin21=PB11
|
Mcu.Pin21=PB10
|
||||||
Mcu.Pin22=PD11
|
Mcu.Pin22=PB11
|
||||||
Mcu.Pin23=PD12
|
Mcu.Pin23=PD11
|
||||||
Mcu.Pin24=PD13
|
Mcu.Pin24=PD12
|
||||||
Mcu.Pin25=PC6
|
Mcu.Pin25=PC9
|
||||||
Mcu.Pin26=PC7
|
Mcu.Pin26=PA8
|
||||||
Mcu.Pin27=PC9
|
Mcu.Pin27=PA9
|
||||||
Mcu.Pin28=PA8
|
Mcu.Pin28=PA10
|
||||||
Mcu.Pin29=PA9
|
Mcu.Pin29=PA11
|
||||||
Mcu.Pin3=PA4
|
Mcu.Pin3=PA2
|
||||||
Mcu.Pin30=PA10
|
Mcu.Pin30=PA12
|
||||||
Mcu.Pin31=PA11
|
Mcu.Pin31=PC10
|
||||||
Mcu.Pin32=PA12
|
Mcu.Pin32=PB6
|
||||||
Mcu.Pin33=PC10
|
Mcu.Pin33=VP_SYS_VS_Systick
|
||||||
Mcu.Pin34=PB4
|
Mcu.Pin4=PA4
|
||||||
Mcu.Pin35=PB5
|
Mcu.Pin5=PA5
|
||||||
Mcu.Pin36=PB6
|
Mcu.Pin6=PA6
|
||||||
Mcu.Pin37=VP_SYS_VS_Systick
|
Mcu.Pin7=PA7
|
||||||
Mcu.Pin4=PA5
|
Mcu.Pin8=PC4
|
||||||
Mcu.Pin5=PA6
|
Mcu.Pin9=PC5
|
||||||
Mcu.Pin6=PA7
|
Mcu.PinsNb=34
|
||||||
Mcu.Pin7=PC4
|
|
||||||
Mcu.Pin8=PC5
|
|
||||||
Mcu.Pin9=PB0
|
|
||||||
Mcu.PinsNb=38
|
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F407VGTx
|
Mcu.UserName=STM32F407VGTx
|
||||||
@@ -84,8 +81,7 @@ PA10.Signal=USART1_RX
|
|||||||
PA11.Signal=S_TIM1_CH4
|
PA11.Signal=S_TIM1_CH4
|
||||||
PA12.Locked=true
|
PA12.Locked=true
|
||||||
PA12.Signal=GPIO_Output
|
PA12.Signal=GPIO_Output
|
||||||
PA2.Locked=true
|
PA2.Signal=S_TIM5_CH3
|
||||||
PA2.Signal=GPIO_Input
|
|
||||||
PA4.Signal=COMP_DAC1_group
|
PA4.Signal=COMP_DAC1_group
|
||||||
PA5.Mode=Full_Duplex_Master
|
PA5.Mode=Full_Duplex_Master
|
||||||
PA5.Signal=SPI1_SCK
|
PA5.Signal=SPI1_SCK
|
||||||
@@ -105,8 +101,6 @@ PB10.Mode=I2C
|
|||||||
PB10.Signal=I2C2_SCL
|
PB10.Signal=I2C2_SCL
|
||||||
PB11.Mode=I2C
|
PB11.Mode=I2C
|
||||||
PB11.Signal=I2C2_SDA
|
PB11.Signal=I2C2_SDA
|
||||||
PB4.Signal=S_TIM3_CH1
|
|
||||||
PB5.Signal=S_TIM3_CH2
|
|
||||||
PB6.Locked=true
|
PB6.Locked=true
|
||||||
PB6.Signal=GPIO_Input
|
PB6.Signal=GPIO_Input
|
||||||
PC10.Locked=true
|
PC10.Locked=true
|
||||||
@@ -115,13 +109,10 @@ PC4.Locked=true
|
|||||||
PC4.Signal=GPIO_Output
|
PC4.Signal=GPIO_Output
|
||||||
PC5.Locked=true
|
PC5.Locked=true
|
||||||
PC5.Signal=GPIO_Input
|
PC5.Signal=GPIO_Input
|
||||||
PC6.Signal=S_TIM8_CH1
|
PC9.Signal=S_TIM3_CH4
|
||||||
PC7.Signal=S_TIM8_CH2
|
|
||||||
PC9.Signal=S_TIM8_CH4
|
|
||||||
PD11.Locked=true
|
PD11.Locked=true
|
||||||
PD11.Signal=GPIO_Input
|
PD11.Signal=GPIO_Input
|
||||||
PD12.Signal=S_TIM4_CH1
|
PD12.Signal=S_TIM4_CH1
|
||||||
PD13.Signal=S_TIM4_CH2
|
|
||||||
PE10.Locked=true
|
PE10.Locked=true
|
||||||
PE10.Signal=GPIO_Output
|
PE10.Signal=GPIO_Output
|
||||||
PE11.Locked=true
|
PE11.Locked=true
|
||||||
@@ -134,6 +125,7 @@ PE14.Locked=true
|
|||||||
PE14.Signal=GPIO_Input
|
PE14.Signal=GPIO_Input
|
||||||
PE15.Locked=true
|
PE15.Locked=true
|
||||||
PE15.Signal=GPIO_Input
|
PE15.Signal=GPIO_Input
|
||||||
|
PE5.Signal=S_TIM9_CH1
|
||||||
PE7.Locked=true
|
PE7.Locked=true
|
||||||
PE7.Signal=GPIO_Output
|
PE7.Signal=GPIO_Output
|
||||||
PE8.Locked=true
|
PE8.Locked=true
|
||||||
@@ -200,20 +192,14 @@ SH.S_TIM2_CH1_ETR.0=TIM2_CH1,Encoder_Interface
|
|||||||
SH.S_TIM2_CH1_ETR.ConfNb=1
|
SH.S_TIM2_CH1_ETR.ConfNb=1
|
||||||
SH.S_TIM2_CH2.0=TIM2_CH2,Encoder_Interface
|
SH.S_TIM2_CH2.0=TIM2_CH2,Encoder_Interface
|
||||||
SH.S_TIM2_CH2.ConfNb=1
|
SH.S_TIM2_CH2.ConfNb=1
|
||||||
SH.S_TIM3_CH1.0=TIM3_CH1,Encoder_Interface
|
SH.S_TIM3_CH4.0=TIM3_CH4,PWM Generation4 CH4
|
||||||
SH.S_TIM3_CH1.ConfNb=1
|
SH.S_TIM3_CH4.ConfNb=1
|
||||||
SH.S_TIM3_CH2.0=TIM3_CH2,Encoder_Interface
|
SH.S_TIM4_CH1.0=TIM4_CH1,PWM Generation1 CH1
|
||||||
SH.S_TIM3_CH2.ConfNb=1
|
|
||||||
SH.S_TIM4_CH1.0=TIM4_CH1,Encoder_Interface
|
|
||||||
SH.S_TIM4_CH1.ConfNb=1
|
SH.S_TIM4_CH1.ConfNb=1
|
||||||
SH.S_TIM4_CH2.0=TIM4_CH2,Encoder_Interface
|
SH.S_TIM5_CH3.0=TIM5_CH3,Input_Capture3_from_TI3
|
||||||
SH.S_TIM4_CH2.ConfNb=1
|
SH.S_TIM5_CH3.ConfNb=1
|
||||||
SH.S_TIM8_CH1.0=TIM8_CH1,Encoder_Interface
|
SH.S_TIM9_CH1.0=TIM9_CH1,PWM Generation1 CH1
|
||||||
SH.S_TIM8_CH1.ConfNb=1
|
SH.S_TIM9_CH1.ConfNb=1
|
||||||
SH.S_TIM8_CH2.0=TIM8_CH2,Encoder_Interface
|
|
||||||
SH.S_TIM8_CH2.ConfNb=1
|
|
||||||
SH.S_TIM8_CH4.0=TIM8_CH4,PWM Generation4 CH4
|
|
||||||
SH.S_TIM8_CH4.ConfNb=1
|
|
||||||
SPI1.CalculateBaudRate=8.0 MBits/s
|
SPI1.CalculateBaudRate=8.0 MBits/s
|
||||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
|
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate
|
||||||
@@ -221,8 +207,14 @@ SPI1.Mode=SPI_MODE_MASTER
|
|||||||
SPI1.VirtualType=VM_MASTER
|
SPI1.VirtualType=VM_MASTER
|
||||||
TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||||
TIM1.IPParameters=Channel-PWM Generation4 CH4
|
TIM1.IPParameters=Channel-PWM Generation4 CH4
|
||||||
TIM8.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
TIM3.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4
|
||||||
TIM8.IPParameters=Channel-PWM Generation4 CH4
|
TIM3.IPParameters=Channel-PWM Generation4 CH4
|
||||||
|
TIM4.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
|
TIM4.IPParameters=Channel-PWM Generation1 CH1
|
||||||
|
TIM5.Channel-Input_Capture3_from_TI3=TIM_CHANNEL_3
|
||||||
|
TIM5.IPParameters=Channel-Input_Capture3_from_TI3
|
||||||
|
TIM9.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
||||||
|
TIM9.IPParameters=Channel-PWM Generation1 CH1
|
||||||
USART1.IPParameters=VirtualMode
|
USART1.IPParameters=VirtualMode
|
||||||
USART1.VirtualMode=VM_ASYNC
|
USART1.VirtualMode=VM_ASYNC
|
||||||
VP_SYS_VS_Systick.Mode=SysTick
|
VP_SYS_VS_Systick.Mode=SysTick
|
||||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
@@ -1,6 +1,6 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>🔁 EEPROM Generator | ESI, EEPORM, SOES C code configuration tool</title>
|
<title>🔁 EEPROM Generator | ESI, EEPROM, SOES C code configuration tool</title>
|
||||||
<!--
|
<!--
|
||||||
* SOES EEPROM generator
|
* SOES EEPROM generator
|
||||||
* This tool serves as:
|
* This tool serves as:
|
||||||
@@ -52,10 +52,12 @@
|
|||||||
<option value="INTEGER8">INTEGER8</option>
|
<option value="INTEGER8">INTEGER8</option>
|
||||||
<option value="INTEGER16">INTEGER16</option>
|
<option value="INTEGER16">INTEGER16</option>
|
||||||
<option value="INTEGER32">INTEGER32</option>
|
<option value="INTEGER32">INTEGER32</option>
|
||||||
|
<option value="INTEGER64">INTEGER64</option>
|
||||||
<option value="UNSIGNED8">UNSIGNED8</option>
|
<option value="UNSIGNED8">UNSIGNED8</option>
|
||||||
<option value="UNSIGNED16">UNSIGNED16</option>
|
<option value="UNSIGNED16">UNSIGNED16</option>
|
||||||
<option value="UNSIGNED32">UNSIGNED32</option>
|
<option value="UNSIGNED32">UNSIGNED64</option>
|
||||||
<option value="REAL32">REAL32</option>
|
<option value="REAL32">REAL32</option>
|
||||||
|
<option value="REAL64">REAL64</option>
|
||||||
<option value="VISIBLE_STRING">VISIBLE STRING</option>
|
<option value="VISIBLE_STRING">VISIBLE STRING</option>
|
||||||
</select></td>
|
</select></td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -412,4 +414,4 @@
|
|||||||
<input id="restoreFileInput" type='file' accept=".json" style="visibility:hidden;" onchange="readFile(event)" />
|
<input id="restoreFileInput" type='file' accept=".json" style="visibility:hidden;" onchange="readFile(event)" />
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -28,10 +28,13 @@ const DTYPE = {
|
|||||||
INTEGER8 : 'INTEGER8',
|
INTEGER8 : 'INTEGER8',
|
||||||
INTEGER16 : 'INTEGER16',
|
INTEGER16 : 'INTEGER16',
|
||||||
INTEGER32 : 'INTEGER32',
|
INTEGER32 : 'INTEGER32',
|
||||||
|
INTEGER32 : 'INTEGER64',
|
||||||
UNSIGNED8 : 'UNSIGNED8',
|
UNSIGNED8 : 'UNSIGNED8',
|
||||||
UNSIGNED16 : 'UNSIGNED16',
|
UNSIGNED16 : 'UNSIGNED16',
|
||||||
UNSIGNED32 : 'UNSIGNED32',
|
UNSIGNED32 : 'UNSIGNED32',
|
||||||
|
UNSIGNED32 : 'UNSIGNED64',
|
||||||
REAL32 : 'REAL32',
|
REAL32 : 'REAL32',
|
||||||
|
REAL64 : 'REAL64',
|
||||||
VISIBLE_STRING : 'VISIBLE_STRING',
|
VISIBLE_STRING : 'VISIBLE_STRING',
|
||||||
/* TODO implement missing less common types */
|
/* TODO implement missing less common types */
|
||||||
// OCTET_STRING : 'OCTET_STRING',
|
// OCTET_STRING : 'OCTET_STRING',
|
||||||
@@ -49,10 +52,13 @@ const dtype_bitsize = {
|
|||||||
'INTEGER8' : 8,
|
'INTEGER8' : 8,
|
||||||
'INTEGER16' : 16,
|
'INTEGER16' : 16,
|
||||||
'INTEGER32' : 32,
|
'INTEGER32' : 32,
|
||||||
|
'INTEGER64' : 64,
|
||||||
'UNSIGNED8' : 8,
|
'UNSIGNED8' : 8,
|
||||||
'UNSIGNED16' : 16,
|
'UNSIGNED16' : 16,
|
||||||
'UNSIGNED32' : 32,
|
'UNSIGNED32' : 32,
|
||||||
|
'UNSIGNED64' : 64,
|
||||||
'REAL32' : 32,
|
'REAL32' : 32,
|
||||||
|
'REAL64' : 64,
|
||||||
'VISIBLE_STRING' : 8,
|
'VISIBLE_STRING' : 8,
|
||||||
};
|
};
|
||||||
const booleanPaddingBitsize = 7;
|
const booleanPaddingBitsize = 7;
|
||||||
@@ -62,10 +68,13 @@ const ESI_DT = {
|
|||||||
'INTEGER8': { name: 'SINT', bitsize: 8, ctype: 'int8_t' },
|
'INTEGER8': { name: 'SINT', bitsize: 8, ctype: 'int8_t' },
|
||||||
'INTEGER16': { name: 'INT', bitsize: 16, ctype: 'int16_t' },
|
'INTEGER16': { name: 'INT', bitsize: 16, ctype: 'int16_t' },
|
||||||
'INTEGER32': { name: 'DINT', bitsize: 32, ctype: 'int32_t' },
|
'INTEGER32': { name: 'DINT', bitsize: 32, ctype: 'int32_t' },
|
||||||
|
'INTEGER64': { name: 'LINT', bitsize: 64, ctype: 'int64_t' },
|
||||||
'UNSIGNED8': { name: 'USINT', bitsize: 8, ctype: 'uint8_t' },
|
'UNSIGNED8': { name: 'USINT', bitsize: 8, ctype: 'uint8_t' },
|
||||||
'UNSIGNED16': { name: 'UINT', bitsize: 16, ctype: 'uint16_t' },
|
'UNSIGNED16': { name: 'UINT', bitsize: 16, ctype: 'uint16_t' },
|
||||||
'UNSIGNED32': { name: 'UDINT', bitsize: 32, ctype: 'uint32_t' },
|
'UNSIGNED32': { name: 'UDINT', bitsize: 32, ctype: 'uint32_t' },
|
||||||
'REAL32': { name: 'REAL', bitsize: 32, ctype: 'float' }, // TODO check C type name
|
'UNSIGNED64': { name: 'ULINT', bitsize: 64, ctype: 'uint64_t' },
|
||||||
|
'REAL32': { name: 'REAL', bitsize: 32, ctype: 'float' },
|
||||||
|
'REAL64': { name: 'LREAL', bitsize: 64, ctype: 'double' },
|
||||||
'VISIBLE_STRING': { name: 'STRING', bitsize: 8, ctype: 'char *' }, // TODO check C type name
|
'VISIBLE_STRING': { name: 'STRING', bitsize: 8, ctype: 'char *' }, // TODO check C type name
|
||||||
};
|
};
|
||||||
|
|
||||||
17
Firmware/.vscode/settings.json
vendored
Executable file
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"files.associations": {
|
||||||
|
"ecat_slv.h": "c",
|
||||||
|
"compare": "cpp",
|
||||||
|
"*.tpp": "cpp",
|
||||||
|
"*.tcc": "cpp",
|
||||||
|
"deque": "cpp",
|
||||||
|
"string": "cpp",
|
||||||
|
"unordered_map": "cpp",
|
||||||
|
"vector": "cpp",
|
||||||
|
"system_error": "cpp",
|
||||||
|
"numeric": "cpp",
|
||||||
|
"ostream": "cpp"
|
||||||
|
},
|
||||||
|
"C_Cpp.errorSquiggles": "disabled",
|
||||||
|
"cmake.configureOnOpen": false
|
||||||
|
}
|
||||||
37
Firmware/include/MyEncoder.h
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#ifndef MYENCODER
|
||||||
|
#define MYENCODER
|
||||||
|
#include "Stm32F4_Encoder.h"
|
||||||
|
#include <CircularBuffer.h>
|
||||||
|
#define RINGBUFFERLEN 101
|
||||||
|
|
||||||
|
class MyEncoder
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MyEncoder(TIM_TypeDef *_tim_base, uint8_t _indexPin, void irq(void));
|
||||||
|
int64_t unwrapEncoder(uint16_t in);
|
||||||
|
void indexPulse(void);
|
||||||
|
uint8_t indexHappened();
|
||||||
|
double currentPos();
|
||||||
|
double frequency(uint64_t time);
|
||||||
|
uint8_t getIndexState();
|
||||||
|
void setScale(double scale);
|
||||||
|
void setLatch(uint8_t latchEnable);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int64_t previousEncoderCounterValue = 0;
|
||||||
|
double PosScaleRes = 1.0;
|
||||||
|
uint32_t CurPosScale = 1;
|
||||||
|
uint8_t oldLatchCEnable = 0;
|
||||||
|
volatile uint8_t indexPulseFired = 0;
|
||||||
|
volatile uint8_t pleaseZeroTheCounter = 0;
|
||||||
|
Encoder EncoderInit;
|
||||||
|
uint8_t indexPin;
|
||||||
|
|
||||||
|
CircularBuffer<double_t, RINGBUFFERLEN> Pos;
|
||||||
|
CircularBuffer<uint32_t, RINGBUFFERLEN> TDelta;
|
||||||
|
double curPos;
|
||||||
|
|
||||||
|
TIM_TypeDef *tim_base;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
42
Firmware/include/StepGen.h
Executable file
@@ -0,0 +1,42 @@
|
|||||||
|
|
||||||
|
#ifndef STEPGEN
|
||||||
|
#define STEPGEN
|
||||||
|
#include <HardwareTimer.h>
|
||||||
|
|
||||||
|
class StepGen
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
volatile uint8_t timerIsRunning;
|
||||||
|
volatile int32_t timerStepPosition;
|
||||||
|
volatile int32_t timerStepDirection;
|
||||||
|
volatile int32_t timerStepPositionAtEnd;
|
||||||
|
volatile int32_t timerNewEndStepPosition;
|
||||||
|
volatile uint32_t timerNewCycleTime;
|
||||||
|
volatile double_t actualPosition;
|
||||||
|
volatile double_t requestedPosition;
|
||||||
|
volatile uint8_t enabled;
|
||||||
|
HardwareTimer *MyTim;
|
||||||
|
uint16_t stepsPerMM;
|
||||||
|
uint8_t dirPin;
|
||||||
|
PinName stepPin;
|
||||||
|
uint32_t timerChan;
|
||||||
|
const uint32_t maxFreq = 100000;
|
||||||
|
volatile uint32_t prevFreq1 = 0;
|
||||||
|
volatile uint32_t prevFreq2 = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static uint32_t sync0CycleTime;
|
||||||
|
volatile uint32_t pwmCycleTime;
|
||||||
|
|
||||||
|
StepGen(TIM_TypeDef *Timer, uint32_t timerChannel, PinName stepPin, uint8_t dirPin, void irq(void));
|
||||||
|
void reqPos(double_t pos);
|
||||||
|
double reqPos();
|
||||||
|
void actPos(double_t pos);
|
||||||
|
double actPos();
|
||||||
|
void handleStepper(void);
|
||||||
|
void timerCB();
|
||||||
|
void setScale(int16_t spm);
|
||||||
|
void enable(uint8_t yes);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
651
Firmware/include/Stm32F4_Encoder.h
Executable file
@@ -0,0 +1,651 @@
|
|||||||
|
|
||||||
|
#ifndef __Stm32F4_Encoder_H__
|
||||||
|
#define __Stm32F4_Encoder_H__
|
||||||
|
#include <Arduino.h>
|
||||||
|
|
||||||
|
#define GPIO_Speed_50MHz 0x02 /*!< Fast speed */
|
||||||
|
|
||||||
|
// #define GPIO_MODER_MODER0 ((uint32_t)0x00000003)
|
||||||
|
#define GPIO_Mode_OUT 0x01
|
||||||
|
// #define GPIO_OSPEEDER_OSPEEDR0 ((uint32_t)0x00000003)
|
||||||
|
// #define GPIO_OTYPER_OT_0 ((uint32_t)0x00000001)
|
||||||
|
// #define GPIO_PUPDR_PUPDR0 ((uint32_t)0x00000003)
|
||||||
|
|
||||||
|
#define GPIO_PuPd_NOPULL 0x00
|
||||||
|
#define GPIO_Mode_AF 0x02
|
||||||
|
#define GPIO_OType_PP 0x00
|
||||||
|
#define GPIO_PuPd_NOPULL 0x00
|
||||||
|
#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */
|
||||||
|
#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */
|
||||||
|
#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */
|
||||||
|
#define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */
|
||||||
|
#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */
|
||||||
|
#define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */
|
||||||
|
#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */
|
||||||
|
#define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */
|
||||||
|
#define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */
|
||||||
|
#define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */
|
||||||
|
#define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */
|
||||||
|
#define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */
|
||||||
|
#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */
|
||||||
|
#define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */
|
||||||
|
#define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */
|
||||||
|
#define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */
|
||||||
|
#define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */
|
||||||
|
|
||||||
|
typedef struct TIM_TimeBaseInitTypeDef
|
||||||
|
{
|
||||||
|
uint16_t TIM_Prescaler; /*!< Specifies the prescaler value used to divide the TIM clock.
|
||||||
|
This parameter can be a number between 0x0000 and 0xFFFF */
|
||||||
|
|
||||||
|
uint16_t TIM_CounterMode; /*!< Specifies the counter mode.
|
||||||
|
This parameter can be a value of @ref TIM_Counter_Mode */
|
||||||
|
|
||||||
|
uint32_t TIM_Period; /*!< Specifies the period value to be loaded into the active
|
||||||
|
Auto-Reload Register at the next update event.
|
||||||
|
This parameter must be a number between 0x0000 and 0xFFFF. */
|
||||||
|
|
||||||
|
uint16_t TIM_ClockDivision; /*!< Specifies the clock division.
|
||||||
|
This parameter can be a value of @ref TIM_Clock_Division_CKD */
|
||||||
|
|
||||||
|
uint8_t TIM_RepetitionCounter; /*!< Specifies the repetition counter value. Each time the RCR downcounter
|
||||||
|
reaches zero, an update event is generated and counting restarts
|
||||||
|
from the RCR value (N).
|
||||||
|
This means in PWM mode that (N+1) corresponds to:
|
||||||
|
- the number of PWM periods in edge-aligned mode
|
||||||
|
- the number of half PWM period in center-aligned mode
|
||||||
|
This parameter must be a number between 0x00 and 0xFF.
|
||||||
|
@note This parameter is valid only for TIM1 and TIM8. */
|
||||||
|
} TIM_TimeBaseInitTypeDef;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t setcount;
|
||||||
|
|
||||||
|
} encoder;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint16_t TIM_OCMode; /*!< Specifies the TIM mode.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_and_PWM_modes */
|
||||||
|
|
||||||
|
uint16_t TIM_OutputState; /*!< Specifies the TIM Output Compare state.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_State */
|
||||||
|
|
||||||
|
uint16_t TIM_OutputNState; /*!< Specifies the TIM complementary Output Compare state.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_N_State
|
||||||
|
@note This parameter is valid only for TIM1 and TIM8. */
|
||||||
|
|
||||||
|
uint32_t TIM_Pulse; /*!< Specifies the pulse value to be loaded into the Capture Compare Register.
|
||||||
|
This parameter can be a number between 0x0000 and 0xFFFF */
|
||||||
|
|
||||||
|
uint16_t TIM_OCPolarity; /*!< Specifies the output polarity.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_Polarity */
|
||||||
|
|
||||||
|
uint16_t TIM_OCNPolarity; /*!< Specifies the complementary output polarity.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_N_Polarity
|
||||||
|
@note This parameter is valid only for TIM1 and TIM8. */
|
||||||
|
|
||||||
|
uint16_t TIM_OCIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_Idle_State
|
||||||
|
@note This parameter is valid only for TIM1 and TIM8. */
|
||||||
|
|
||||||
|
uint16_t TIM_OCNIdleState; /*!< Specifies the TIM Output Compare pin state during Idle state.
|
||||||
|
This parameter can be a value of @ref TIM_Output_Compare_N_Idle_State
|
||||||
|
@note This parameter is valid only for TIM1 and TIM8. */
|
||||||
|
} TIM_OCInitTypeDef;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
uint16_t TIM_Channel; /*!< Specifies the TIM channel.
|
||||||
|
This parameter can be a value of @ref TIM_Channel */
|
||||||
|
|
||||||
|
uint16_t TIM_ICPolarity; /*!< Specifies the active edge of the input signal.
|
||||||
|
This parameter can be a value of @ref TIM_Input_Capture_Polarity */
|
||||||
|
|
||||||
|
uint16_t TIM_ICSelection; /*!< Specifies the input.
|
||||||
|
This parameter can be a value of @ref TIM_Input_Capture_Selection */
|
||||||
|
|
||||||
|
uint16_t TIM_ICPrescaler; /*!< Specifies the Input Capture Prescaler.
|
||||||
|
This parameter can be a value of @ref TIM_Input_Capture_Prescaler */
|
||||||
|
|
||||||
|
uint16_t TIM_ICFilter; /*!< Specifies the input capture filter.
|
||||||
|
This parameter can be a number between 0x0 and 0xF */
|
||||||
|
} TIM_ICInitTypeDef;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
|
||||||
|
uint16_t TIM_OSSRState; /*!< Specifies the Off-State selection used in Run mode.
|
||||||
|
This parameter can be a value of @ref TIM_OSSR_Off_State_Selection_for_Run_mode_state */
|
||||||
|
|
||||||
|
uint16_t TIM_OSSIState; /*!< Specifies the Off-State used in Idle state.
|
||||||
|
This parameter can be a value of @ref TIM_OSSI_Off_State_Selection_for_Idle_mode_state */
|
||||||
|
|
||||||
|
uint16_t TIM_LOCKLevel; /*!< Specifies the LOCK level parameters.
|
||||||
|
This parameter can be a value of @ref TIM_Lock_level */
|
||||||
|
|
||||||
|
uint16_t TIM_DeadTime; /*!< Specifies the delay time between the switching-off and the
|
||||||
|
switching-on of the outputs.
|
||||||
|
This parameter can be a number between 0x00 and 0xFF */
|
||||||
|
|
||||||
|
uint16_t TIM_Break; /*!< Specifies whether the TIM Break input is enabled or not.
|
||||||
|
This parameter can be a value of @ref TIM_Break_Input_enable_disable */
|
||||||
|
|
||||||
|
uint16_t TIM_BreakPolarity; /*!< Specifies the TIM Break Input pin polarity.
|
||||||
|
This parameter can be a value of @ref TIM_Break_Polarity */
|
||||||
|
|
||||||
|
uint16_t TIM_AutomaticOutput; /*!< Specifies whether the TIM Automatic Output feature is enabled or not.
|
||||||
|
This parameter can be a value of @ref TIM_AOE_Bit_Set_Reset */
|
||||||
|
} TIM_BDTRInitTypeDef;
|
||||||
|
|
||||||
|
#define GPIO_PinSource0 ((uint8_t)0x00)
|
||||||
|
#define GPIO_PinSource1 ((uint8_t)0x01)
|
||||||
|
#define GPIO_PinSource2 ((uint8_t)0x02)
|
||||||
|
#define GPIO_PinSource3 ((uint8_t)0x03)
|
||||||
|
#define GPIO_PinSource4 ((uint8_t)0x04)
|
||||||
|
#define GPIO_PinSource5 ((uint8_t)0x05)
|
||||||
|
#define GPIO_PinSource6 ((uint8_t)0x06)
|
||||||
|
#define GPIO_PinSource7 ((uint8_t)0x07)
|
||||||
|
#define GPIO_PinSource8 ((uint8_t)0x08)
|
||||||
|
#define GPIO_PinSource9 ((uint8_t)0x09)
|
||||||
|
#define GPIO_PinSource10 ((uint8_t)0x0A)
|
||||||
|
#define GPIO_PinSource11 ((uint8_t)0x0B)
|
||||||
|
#define GPIO_PinSource12 ((uint8_t)0x0C)
|
||||||
|
#define GPIO_PinSource13 ((uint8_t)0x0D)
|
||||||
|
#define GPIO_PinSource14 ((uint8_t)0x0E)
|
||||||
|
#define GPIO_PinSource15 ((uint8_t)0x0F)
|
||||||
|
#define GPIO_AF_TIM8 ((uint8_t)0x03) /* TIM8 Alternate Function mapping */
|
||||||
|
#define GPIO_AF_TIM3 ((uint8_t)0x02) /* TIM3 Alternate Function mapping */
|
||||||
|
#define GPIO_AF_TIM4 ((uint8_t)0x02) /* TIM4 Alternate Function mapping */
|
||||||
|
#define GPIO_AF_TIM5 ((uint8_t)0x02) /* TIM5 Alternate Function mapping */
|
||||||
|
#define GPIO_AF_TIM1 ((uint8_t)0x01) /* TIM1 Alternate Function mapping */
|
||||||
|
#define GPIO_AF_TIM2 ((uint8_t)0x01) /* TIM2 Alternate Function mapping */
|
||||||
|
|
||||||
|
// #define TIM4 ((TIM_TypeDef *)TIM4_BASE)
|
||||||
|
// #define TIM8 ((TIM_TypeDef *)TIM8_BASE)
|
||||||
|
#define TIM_EncoderMode_TI12 ((uint16_t)0x0003)
|
||||||
|
#define TIM_ICPolarity_Rising ((uint16_t)0x0000)
|
||||||
|
#define TIM_ICPolarity_Falling ((uint16_t)0x0002)
|
||||||
|
// #define TIM_CR1_CEN ((uint16_t)0x0001) /*!<Counter enable */
|
||||||
|
// #define TIM_CR1_CEN ((uint16_t)0x0001) /*!<Counter enable */
|
||||||
|
|
||||||
|
#define IS_TIM_ALL_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM2) || \
|
||||||
|
((PERIPH) == TIM3) || \
|
||||||
|
((PERIPH) == TIM4) || \
|
||||||
|
((PERIPH) == TIM5) || \
|
||||||
|
((PERIPH) == TIM6) || \
|
||||||
|
((PERIPH) == TIM7) || \
|
||||||
|
((PERIPH) == TIM8) || \
|
||||||
|
((PERIPH) == TIM9) || \
|
||||||
|
((PERIPH) == TIM10) || \
|
||||||
|
((PERIPH) == TIM11) || \
|
||||||
|
((PERIPH) == TIM12) || \
|
||||||
|
(((PERIPH) == TIM13) || \
|
||||||
|
((PERIPH) == TIM14)))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST1_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM2) || \
|
||||||
|
((PERIPH) == TIM3) || \
|
||||||
|
((PERIPH) == TIM4) || \
|
||||||
|
((PERIPH) == TIM5) || \
|
||||||
|
((PERIPH) == TIM8) || \
|
||||||
|
((PERIPH) == TIM9) || \
|
||||||
|
((PERIPH) == TIM10) || \
|
||||||
|
((PERIPH) == TIM11) || \
|
||||||
|
((PERIPH) == TIM12) || \
|
||||||
|
((PERIPH) == TIM13) || \
|
||||||
|
((PERIPH) == TIM14))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST2_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM2) || \
|
||||||
|
((PERIPH) == TIM3) || \
|
||||||
|
((PERIPH) == TIM4) || \
|
||||||
|
((PERIPH) == TIM5) || \
|
||||||
|
((PERIPH) == TIM8) || \
|
||||||
|
((PERIPH) == TIM9) || \
|
||||||
|
((PERIPH) == TIM12))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST3_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM2) || \
|
||||||
|
((PERIPH) == TIM3) || \
|
||||||
|
((PERIPH) == TIM4) || \
|
||||||
|
((PERIPH) == TIM5) || \
|
||||||
|
((PERIPH) == TIM8))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST4_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM8))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST5_PERIPH(PERIPH) (((PERIPH) == TIM1) || \
|
||||||
|
((PERIPH) == TIM2) || \
|
||||||
|
((PERIPH) == TIM3) || \
|
||||||
|
((PERIPH) == TIM4) || \
|
||||||
|
((PERIPH) == TIM5) || \
|
||||||
|
((PERIPH) == TIM6) || \
|
||||||
|
((PERIPH) == TIM7) || \
|
||||||
|
((PERIPH) == TIM8))
|
||||||
|
|
||||||
|
#define IS_TIM_LIST6_PERIPH(TIMx) (((TIMx) == TIM2) || \
|
||||||
|
((TIMx) == TIM5) || \
|
||||||
|
((TIMx) == TIM11))
|
||||||
|
|
||||||
|
#define TIM_OCMode_Timing ((uint16_t)0x0000)
|
||||||
|
#define TIM_OCMode_Active ((uint16_t)0x0010)
|
||||||
|
#define TIM_OCMode_Inactive ((uint16_t)0x0020)
|
||||||
|
#define TIM_OCMode_Toggle ((uint16_t)0x0030)
|
||||||
|
#define TIM_OCMode_PWM1 ((uint16_t)0x0060)
|
||||||
|
#define TIM_OCMode_PWM2 ((uint16_t)0x0070)
|
||||||
|
//#define IS_TIM_OC_MODE(MODE) (((MODE) == TIM_OCMode_Timing) || \
|
||||||
|
// ((MODE) == TIM_OCMode_Active) || \
|
||||||
|
// ((MODE) == TIM_OCMode_Inactive) || \
|
||||||
|
// ((MODE) == TIM_OCMode_Toggle)|| \
|
||||||
|
// ((MODE) == TIM_OCMode_PWM1) || \
|
||||||
|
// ((MODE) == TIM_OCMode_PWM2))
|
||||||
|
#define IS_TIM_OCM(MODE) (((MODE) == TIM_OCMode_Timing) || \
|
||||||
|
((MODE) == TIM_OCMode_Active) || \
|
||||||
|
((MODE) == TIM_OCMode_Inactive) || \
|
||||||
|
((MODE) == TIM_OCMode_Toggle) || \
|
||||||
|
((MODE) == TIM_OCMode_PWM1) || \
|
||||||
|
((MODE) == TIM_OCMode_PWM2) || \
|
||||||
|
((MODE) == TIM_ForcedAction_Active) || \
|
||||||
|
((MODE) == TIM_ForcedAction_InActive))
|
||||||
|
|
||||||
|
#define TIM_OPMode_Single ((uint16_t)0x0008)
|
||||||
|
#define TIM_OPMode_Repetitive ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \
|
||||||
|
// ((MODE) == TIM_OPMode_Repetitive))
|
||||||
|
|
||||||
|
#define TIM_Channel_1 ((uint16_t)0x0000)
|
||||||
|
#define TIM_Channel_2 ((uint16_t)0x0004)
|
||||||
|
#define TIM_Channel_3 ((uint16_t)0x0008)
|
||||||
|
#define TIM_Channel_4 ((uint16_t)0x000C)
|
||||||
|
|
||||||
|
#define IS_TIM_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
||||||
|
((CHANNEL) == TIM_Channel_2) || \
|
||||||
|
((CHANNEL) == TIM_Channel_3) || \
|
||||||
|
((CHANNEL) == TIM_Channel_4))
|
||||||
|
|
||||||
|
#define IS_TIM_PWMI_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
||||||
|
((CHANNEL) == TIM_Channel_2))
|
||||||
|
#define IS_TIM_COMPLEMENTARY_CHANNEL(CHANNEL) (((CHANNEL) == TIM_Channel_1) || \
|
||||||
|
((CHANNEL) == TIM_Channel_2) || \
|
||||||
|
((CHANNEL) == TIM_Channel_3))
|
||||||
|
|
||||||
|
#define TIM_CKD_DIV1 ((uint16_t)0x0000)
|
||||||
|
#define TIM_CKD_DIV2 ((uint16_t)0x0100)
|
||||||
|
#define TIM_CKD_DIV4 ((uint16_t)0x0200)
|
||||||
|
#define IS_TIM_CKD_DIV(DIV) (((DIV) == TIM_CKD_DIV1) || \
|
||||||
|
((DIV) == TIM_CKD_DIV2) || \
|
||||||
|
((DIV) == TIM_CKD_DIV4))
|
||||||
|
|
||||||
|
#define TIM_CounterMode_Up ((uint16_t)0x0000)
|
||||||
|
#define TIM_CounterMode_Down ((uint16_t)0x0010)
|
||||||
|
#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020)
|
||||||
|
#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040)
|
||||||
|
#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060)
|
||||||
|
//#define IS_TIM_COUNTER_MODE(MODE) (((MODE) == TIM_CounterMode_Up) || \
|
||||||
|
// ((MODE) == TIM_CounterMode_Down) || \
|
||||||
|
// ((MODE) == TIM_CounterMode_CenterAligned1) || \
|
||||||
|
// ((MODE) == TIM_CounterMode_CenterAligned2) || \
|
||||||
|
// ((MODE) == TIM_CounterMode_CenterAligned3))
|
||||||
|
|
||||||
|
#define TIM_OCPolarity_High ((uint16_t)0x0000)
|
||||||
|
#define TIM_OCPolarity_Low ((uint16_t)0x0002)
|
||||||
|
//#define IS_TIM_OC_POLARITY(POLARITY) (((POLARITY) == TIM_OCPolarity_High) || \
|
||||||
|
// ((POLARITY) == TIM_OCPolarity_Low))
|
||||||
|
|
||||||
|
#define TIM_OCNPolarity_High ((uint16_t)0x0000)
|
||||||
|
#define TIM_OCNPolarity_Low ((uint16_t)0x0008)
|
||||||
|
//#define IS_TIM_OCN_POLARITY(POLARITY) (((POLARITY) == TIM_OCNPolarity_High) || \
|
||||||
|
// ((POLARITY) == TIM_OCNPolarity_Low))
|
||||||
|
|
||||||
|
#define TIM_OutputState_Disable ((uint16_t)0x0000)
|
||||||
|
#define TIM_OutputState_Enable ((uint16_t)0x0001)
|
||||||
|
#define IS_TIM_OUTPUT_STATE(STATE) (((STATE) == TIM_OutputState_Disable) || \
|
||||||
|
((STATE) == TIM_OutputState_Enable))
|
||||||
|
|
||||||
|
#define TIM_OutputNState_Disable ((uint16_t)0x0000)
|
||||||
|
#define TIM_OutputNState_Enable ((uint16_t)0x0004)
|
||||||
|
#define IS_TIM_OUTPUTN_STATE(STATE) (((STATE) == TIM_OutputNState_Disable) || \
|
||||||
|
((STATE) == TIM_OutputNState_Enable))
|
||||||
|
|
||||||
|
#define TIM_CCx_Enable ((uint16_t)0x0001)
|
||||||
|
#define TIM_CCx_Disable ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_CCX(CCX) (((CCX) == TIM_CCx_Enable) || \
|
||||||
|
((CCX) == TIM_CCx_Disable))
|
||||||
|
|
||||||
|
#define TIM_CCxN_Enable ((uint16_t)0x0004)
|
||||||
|
#define TIM_CCxN_Disable ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_CCXN(CCXN) (((CCXN) == TIM_CCxN_Enable) || \
|
||||||
|
((CCXN) == TIM_CCxN_Disable))
|
||||||
|
|
||||||
|
#define TIM_Break_Enable ((uint16_t)0x1000)
|
||||||
|
#define TIM_Break_Disable ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_BREAK_STATE(STATE) (((STATE) == TIM_Break_Enable) || \
|
||||||
|
// ((STATE) == TIM_Break_Disable))
|
||||||
|
|
||||||
|
#define TIM_BreakPolarity_Low ((uint16_t)0x0000)
|
||||||
|
#define TIM_BreakPolarity_High ((uint16_t)0x2000)
|
||||||
|
//#define IS_TIM_BREAK_POLARITY(POLARITY) (((POLARITY) == TIM_BreakPolarity_Low) || \
|
||||||
|
// ((POLARITY) == TIM_BreakPolarity_High))
|
||||||
|
|
||||||
|
#define TIM_AutomaticOutput_Enable ((uint16_t)0x4000)
|
||||||
|
#define TIM_AutomaticOutput_Disable ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_AUTOMATIC_OUTPUT_STATE(STATE) (((STATE) == TIM_AutomaticOutput_Enable) || \
|
||||||
|
// ((STATE) == TIM_AutomaticOutput_Disable))
|
||||||
|
|
||||||
|
#define TIM_LOCKLevel_OFF ((uint16_t)0x0000)
|
||||||
|
#define TIM_LOCKLevel_1 ((uint16_t)0x0100)
|
||||||
|
#define TIM_LOCKLevel_2 ((uint16_t)0x0200)
|
||||||
|
#define TIM_LOCKLevel_3 ((uint16_t)0x0300)
|
||||||
|
//#define IS_TIM_LOCK_LEVEL(LEVEL) (((LEVEL) == TIM_LOCKLevel_OFF) || \
|
||||||
|
// ((LEVEL) == TIM_LOCKLevel_1) || \
|
||||||
|
// ((LEVEL) == TIM_LOCKLevel_2) || \
|
||||||
|
// ((LEVEL) == TIM_LOCKLevel_3))
|
||||||
|
|
||||||
|
#define TIM_OSSIState_Enable ((uint16_t)0x0400)
|
||||||
|
#define TIM_OSSIState_Disable ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_OSSI_STATE(STATE) (((STATE) == TIM_OSSIState_Enable) || \
|
||||||
|
// ((STATE) == TIM_OSSIState_Disable))
|
||||||
|
|
||||||
|
#define TIM_OSSRState_Enable ((uint16_t)0x0800)
|
||||||
|
#define TIM_OSSRState_Disable ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_OSSR_STATE(STATE) (((STATE) == TIM_OSSRState_Enable) || \
|
||||||
|
// ((STATE) == TIM_OSSRState_Disable))
|
||||||
|
|
||||||
|
#define TIM_OCIdleState_Set ((uint16_t)0x0100)
|
||||||
|
#define TIM_OCIdleState_Reset ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_OCIDLE_STATE(STATE) (((STATE) == TIM_OCIdleState_Set) || \
|
||||||
|
// ((STATE) == TIM_OCIdleState_Reset))
|
||||||
|
//
|
||||||
|
|
||||||
|
#define TIM_OCNIdleState_Set ((uint16_t)0x0200)
|
||||||
|
#define TIM_OCNIdleState_Reset ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_OCNIDLE_STATE(STATE) (((STATE) == TIM_OCNIdleState_Set) || \
|
||||||
|
// ((STATE) == TIM_OCNIdleState_Reset))
|
||||||
|
|
||||||
|
#define TIM_ICPolarity_Rising ((uint16_t)0x0000)
|
||||||
|
#define TIM_ICPolarity_Falling ((uint16_t)0x0002)
|
||||||
|
#define TIM_ICPolarity_BothEdge ((uint16_t)0x000A)
|
||||||
|
//#define IS_TIM_IC_POLARITY(POLARITY) (((POLARITY) == TIM_ICPolarity_Rising) || \
|
||||||
|
// ((POLARITY) == TIM_ICPolarity_Falling)|| \
|
||||||
|
// ((POLARITY) == TIM_ICPolarity_BothEdge))
|
||||||
|
|
||||||
|
#define TIM_ICSelection_DirectTI ((uint16_t)0x0001) /*!< TIM Input 1, 2, 3 or 4 is selected to be \
|
||||||
|
connected to IC1, IC2, IC3 or IC4, respectively */
|
||||||
|
#define TIM_ICSelection_IndirectTI ((uint16_t)0x0002) /*!< TIM Input 1, 2, 3 or 4 is selected to be \
|
||||||
|
connected to IC2, IC1, IC4 or IC3, respectively. */
|
||||||
|
#define TIM_ICSelection_TRC ((uint16_t)0x0003) /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC. */
|
||||||
|
//#define IS_TIM_IC_SELECTION(SELECTION) (((SELECTION) == TIM_ICSelection_DirectTI) || \
|
||||||
|
// ((SELECTION) == TIM_ICSelection_IndirectTI) || \
|
||||||
|
// ((SELECTION) == TIM_ICSelection_TRC))
|
||||||
|
|
||||||
|
// #define TIM_ICPSC_DIV1 ((uint16_t)0x0000) /*!< Capture performed each time an edge is detected on the capture input. */
|
||||||
|
// #define TIM_ICPSC_DIV2 ((uint16_t)0x0004) /*!< Capture performed once every 2 events. */
|
||||||
|
// #define TIM_ICPSC_DIV4 ((uint16_t)0x0008) /*!< Capture performed once every 4 events. */
|
||||||
|
// #define TIM_ICPSC_DIV8 ((uint16_t)0x000C) /*!< Capture performed once every 8 events. */
|
||||||
|
// #define IS_TIM_IC_PRESCALER(PRESCALER) ( ((PRESCALER) == TIM_ICPSC_DIV1) || \
|
||||||
|
// ((PRESCALER) == TIM_ICPSC_DIV2) || \
|
||||||
|
// ((PRESCALER) == TIM_ICPSC_DIV4) || \
|
||||||
|
// ((PRESCALER) == TIM_ICPSC_DIV8))
|
||||||
|
|
||||||
|
#define TIM_IT_Update ((uint16_t)0x0001)
|
||||||
|
// #define TIM_IT_CC1 ((uint16_t)0x0002)
|
||||||
|
// #define TIM_IT_CC2 ((uint16_t)0x0004)
|
||||||
|
// #define TIM_IT_CC3 ((uint16_t)0x0008)
|
||||||
|
// #define TIM_IT_CC4 ((uint16_t)0x0010)
|
||||||
|
// #define TIM_IT_COM ((uint16_t)0x0020)
|
||||||
|
#define TIM_IT_Trigger ((uint16_t)0x0040)
|
||||||
|
#define TIM_IT_Break ((uint16_t)0x0080)
|
||||||
|
#define IS_TIM_IT(IT) ((((IT) & (uint16_t)0xFF00) == 0x0000) && ((IT) != 0x0000))
|
||||||
|
|
||||||
|
#define IS_TIM_GET_IT(IT) (((IT) == TIM_IT_Update) || \
|
||||||
|
((IT) == TIM_IT_CC1) || \
|
||||||
|
((IT) == TIM_IT_CC2) || \
|
||||||
|
((IT) == TIM_IT_CC3) || \
|
||||||
|
((IT) == TIM_IT_CC4) || \
|
||||||
|
((IT) == TIM_IT_COM) || \
|
||||||
|
((IT) == TIM_IT_Trigger) || \
|
||||||
|
((IT) == TIM_IT_Break))
|
||||||
|
|
||||||
|
// #define TIM_DMABase_CR1 ((uint16_t)0x0000)
|
||||||
|
// #define TIM_DMABase_CR2 ((uint16_t)0x0001)
|
||||||
|
// #define TIM_DMABase_SMCR ((uint16_t)0x0002)
|
||||||
|
// #define TIM_DMABase_DIER ((uint16_t)0x0003)
|
||||||
|
// #define TIM_DMABase_SR ((uint16_t)0x0004)
|
||||||
|
// #define TIM_DMABase_EGR ((uint16_t)0x0005)
|
||||||
|
// #define TIM_DMABase_CCMR1 ((uint16_t)0x0006)
|
||||||
|
// #define TIM_DMABase_CCMR2 ((uint16_t)0x0007)
|
||||||
|
// #define TIM_DMABase_CCER ((uint16_t)0x0008)
|
||||||
|
// #define TIM_DMABase_CNT ((uint16_t)0x0009)
|
||||||
|
// #define TIM_DMABase_PSC ((uint16_t)0x000A)
|
||||||
|
// #define TIM_DMABase_ARR ((uint16_t)0x000B)
|
||||||
|
// #define TIM_DMABase_RCR ((uint16_t)0x000C)
|
||||||
|
// #define TIM_DMABase_CCR1 ((uint16_t)0x000D)
|
||||||
|
// #define TIM_DMABase_CCR2 ((uint16_t)0x000E)
|
||||||
|
// #define TIM_DMABase_CCR3 ((uint16_t)0x000F)
|
||||||
|
// #define TIM_DMABase_CCR4 ((uint16_t)0x0010)
|
||||||
|
// #define TIM_DMABase_BDTR ((uint16_t)0x0011)
|
||||||
|
// #define TIM_DMABase_DCR ((uint16_t)0x0012)
|
||||||
|
// #define TIM_DMABase_OR ((uint16_t)0x0013)
|
||||||
|
// #define IS_TIM_DMA_BASE(BASE) ( ((BASE) == TIM_DMABase_CR1) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CR2) || \
|
||||||
|
// ((BASE) == TIM_DMABase_SMCR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_DIER) || \
|
||||||
|
// ((BASE) == TIM_DMABase_SR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_EGR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCMR1) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCMR2) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCER) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CNT) || \
|
||||||
|
// ((BASE) == TIM_DMABase_PSC) || \
|
||||||
|
// ((BASE) == TIM_DMABase_ARR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_RCR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCR1) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCR2) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCR3) || \
|
||||||
|
// ((BASE) == TIM_DMABase_CCR4) || \
|
||||||
|
// ((BASE) == TIM_DMABase_BDTR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_DCR) || \
|
||||||
|
// ((BASE) == TIM_DMABase_OR))
|
||||||
|
|
||||||
|
// #define TIM_DMABurstLength_1Transfer ((uint16_t)0x0000)
|
||||||
|
// #define TIM_DMABurstLength_2Transfers ((uint16_t)0x0100)
|
||||||
|
// #define TIM_DMABurstLength_3Transfers ((uint16_t)0x0200)
|
||||||
|
// #define TIM_DMABurstLength_4Transfers ((uint16_t)0x0300)
|
||||||
|
// #define TIM_DMABurstLength_5Transfers ((uint16_t)0x0400)
|
||||||
|
// #define TIM_DMABurstLength_6Transfers ((uint16_t)0x0500)
|
||||||
|
// #define TIM_DMABurstLength_7Transfers ((uint16_t)0x0600)
|
||||||
|
// #define TIM_DMABurstLength_8Transfers ((uint16_t)0x0700)
|
||||||
|
// #define TIM_DMABurstLength_9Transfers ((uint16_t)0x0800)
|
||||||
|
// #define TIM_DMABurstLength_10Transfers ((uint16_t)0x0900)
|
||||||
|
// #define TIM_DMABurstLength_11Transfers ((uint16_t)0x0A00)
|
||||||
|
// #define TIM_DMABurstLength_12Transfers ((uint16_t)0x0B00)
|
||||||
|
// #define TIM_DMABurstLength_13Transfers ((uint16_t)0x0C00)
|
||||||
|
// #define TIM_DMABurstLength_14Transfers ((uint16_t)0x0D00)
|
||||||
|
// #define TIM_DMABurstLength_15Transfers ((uint16_t)0x0E00)
|
||||||
|
// #define TIM_DMABurstLength_16Transfers ((uint16_t)0x0F00)
|
||||||
|
// #define TIM_DMABurstLength_17Transfers ((uint16_t)0x1000)
|
||||||
|
// #define TIM_DMABurstLength_18Transfers ((uint16_t)0x1100)
|
||||||
|
// #define IS_TIM_DMA_LENGTH(LENGTH) ( ((LENGTH) == TIM_DMABurstLength_1Transfer) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_2Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_3Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_4Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_5Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_6Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_7Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_8Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_9Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_10Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_11Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_12Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_13Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_14Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_15Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_16Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_17Transfers) || \
|
||||||
|
// ((LENGTH) == TIM_DMABurstLength_18Transfers))
|
||||||
|
|
||||||
|
// #define TIM_DMA_Update ((uint16_t)0x0100)
|
||||||
|
// #define TIM_DMA_CC1 ((uint16_t)0x0200)
|
||||||
|
// #define TIM_DMA_CC2 ((uint16_t)0x0400)
|
||||||
|
// #define TIM_DMA_CC3 ((uint16_t)0x0800)
|
||||||
|
// #define TIM_DMA_CC4 ((uint16_t)0x1000)
|
||||||
|
// #define TIM_DMA_COM ((uint16_t)0x2000)
|
||||||
|
// #define TIM_DMA_Trigger ((uint16_t)0x4000)
|
||||||
|
// #define IS_TIM_DMA_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0x80FF) == 0x0000) && ((SOURCE) != 0x0000))
|
||||||
|
|
||||||
|
#define TIM_ExtTRGPSC_OFF ((uint16_t)0x0000)
|
||||||
|
#define TIM_ExtTRGPSC_DIV2 ((uint16_t)0x1000)
|
||||||
|
#define TIM_ExtTRGPSC_DIV4 ((uint16_t)0x2000)
|
||||||
|
#define TIM_ExtTRGPSC_DIV8 ((uint16_t)0x3000)
|
||||||
|
#define IS_TIM_EXT_PRESCALER(PRESCALER) (((PRESCALER) == TIM_ExtTRGPSC_OFF) || \
|
||||||
|
((PRESCALER) == TIM_ExtTRGPSC_DIV2) || \
|
||||||
|
((PRESCALER) == TIM_ExtTRGPSC_DIV4) || \
|
||||||
|
((PRESCALER) == TIM_ExtTRGPSC_DIV8))
|
||||||
|
|
||||||
|
// #define TIM_TS_ITR0 ((uint16_t)0x0000)
|
||||||
|
// #define TIM_TS_ITR1 ((uint16_t)0x0010)
|
||||||
|
// #define TIM_TS_ITR2 ((uint16_t)0x0020)
|
||||||
|
// #define TIM_TS_ITR3 ((uint16_t)0x0030)
|
||||||
|
// #define TIM_TS_TI1F_ED ((uint16_t)0x0040)
|
||||||
|
// #define TIM_TS_TI1FP1 ((uint16_t)0x0050)
|
||||||
|
// #define TIM_TS_TI2FP2 ((uint16_t)0x0060)
|
||||||
|
// #define TIM_TS_ETRF ((uint16_t)0x0070)
|
||||||
|
// #def ine IS_TIM_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
|
||||||
|
// ((SELECTION) == TIM_TS_ITR1) || \
|
||||||
|
// ((SELECTION) == TIM_TS_ITR2) || \
|
||||||
|
// ((SELECTION) == TIM_TS_ITR3) || \
|
||||||
|
// ((SELECTION) == TIM_TS_TI1F_ED) || \
|
||||||
|
// ((SELECTION) == TIM_TS_TI1FP1) || \
|
||||||
|
// ((SELECTION) == TIM_TS_TI2FP2) || \
|
||||||
|
// ((SELECTION) == TIM_TS_ETRF))
|
||||||
|
#define IS_TIM_INTERNAL_TRIGGER_SELECTION(SELECTION) (((SELECTION) == TIM_TS_ITR0) || \
|
||||||
|
((SELECTION) == TIM_TS_ITR1) || \
|
||||||
|
((SELECTION) == TIM_TS_ITR2) || \
|
||||||
|
((SELECTION) == TIM_TS_ITR3))
|
||||||
|
|
||||||
|
#define TIM_TIxExternalCLK1Source_TI1 ((uint16_t)0x0050)
|
||||||
|
#define TIM_TIxExternalCLK1Source_TI2 ((uint16_t)0x0060)
|
||||||
|
#define TIM_TIxExternalCLK1Source_TI1ED ((uint16_t)0x0040)
|
||||||
|
|
||||||
|
#define TIM_ExtTRGPolarity_Inverted ((uint16_t)0x8000)
|
||||||
|
#define TIM_ExtTRGPolarity_NonInverted ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_EXT_POLARITY(POLARITY) (((POLARITY) == TIM_ExtTRGPolarity_Inverted) || \
|
||||||
|
((POLARITY) == TIM_ExtTRGPolarity_NonInverted))
|
||||||
|
|
||||||
|
#define TIM_PSCReloadMode_Update ((uint16_t)0x0000)
|
||||||
|
#define TIM_PSCReloadMode_Immediate ((uint16_t)0x0001)
|
||||||
|
#define IS_TIM_PRESCALER_RELOAD(RELOAD) (((RELOAD) == TIM_PSCReloadMode_Update) || \
|
||||||
|
((RELOAD) == TIM_PSCReloadMode_Immediate))
|
||||||
|
|
||||||
|
#define TIM_ForcedAction_Active ((uint16_t)0x0050)
|
||||||
|
#define TIM_ForcedAction_InActive ((uint16_t)0x0040)
|
||||||
|
#define IS_TIM_FORCED_ACTION(ACTION) (((ACTION) == TIM_ForcedAction_Active) || \
|
||||||
|
((ACTION) == TIM_ForcedAction_InActive))
|
||||||
|
|
||||||
|
#define TIM_EncoderMode_TI1 ((uint16_t)0x0001)
|
||||||
|
#define TIM_EncoderMode_TI2 ((uint16_t)0x0002)
|
||||||
|
#define TIM_EncoderMode_TI12 ((uint16_t)0x0003)
|
||||||
|
//#define IS_TIM_ENCODER_MODE(MODE) (((MODE) == TIM_EncoderMode_TI1) || \
|
||||||
|
// ((MODE) == TIM_EncoderMode_TI2) || \
|
||||||
|
// ((MODE) == TIM_EncoderMode_TI12))
|
||||||
|
|
||||||
|
// #define TIM_EventSource_Update ((uint16_t)0x0001)
|
||||||
|
// #define TIM_EventSource_CC1 ((uint16_t)0x0002)
|
||||||
|
// #define TIM_EventSource_CC2 ((uint16_t)0x0004)
|
||||||
|
// #define TIM_EventSource_CC3 ((uint16_t)0x0008)
|
||||||
|
// #define TIM_EventSource_CC4 ((uint16_t)0x0010)
|
||||||
|
// #define TIM_EventSource_COM ((uint16_t)0x0020)
|
||||||
|
// #define TIM_EventSource_Trigger ((uint16_t)0x0040)
|
||||||
|
// #define TIM_EventSource_Break ((uint16_t)0x0080)
|
||||||
|
// #define IS_TIM_EVENT_SOURCE(SOURCE) ((((SOURCE) & (uint16_t)0xFF00) == 0x0000) && ((SOURCE) != 0x0000))
|
||||||
|
|
||||||
|
#define TIM_UpdateSource_Global ((uint16_t)0x0000) /*!< Source of update is the counter overflow/underflow \
|
||||||
|
or the setting of UG bit, or an update generation \
|
||||||
|
through the slave mode controller. */
|
||||||
|
#define TIM_UpdateSource_Regular ((uint16_t)0x0001) /*!< Source of update is counter overflow/underflow. */
|
||||||
|
#define IS_TIM_UPDATE_SOURCE(SOURCE) (((SOURCE) == TIM_UpdateSource_Global) || \
|
||||||
|
((SOURCE) == TIM_UpdateSource_Regular))
|
||||||
|
|
||||||
|
#define TIM_OCPreload_Enable ((uint16_t)0x0008)
|
||||||
|
#define TIM_OCPreload_Disable ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_OCPRELOAD_STATE(STATE) (((STATE) == TIM_OCPreload_Enable) || \
|
||||||
|
((STATE) == TIM_OCPreload_Disable))
|
||||||
|
|
||||||
|
#define TIM_OCFast_Enable ((uint16_t)0x0004)
|
||||||
|
#define TIM_OCFast_Disable ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_OCFAST_STATE(STATE) (((STATE) == TIM_OCFast_Enable) || \
|
||||||
|
((STATE) == TIM_OCFast_Disable))
|
||||||
|
|
||||||
|
#define TIM_OCClear_Enable ((uint16_t)0x0080)
|
||||||
|
#define TIM_OCClear_Disable ((uint16_t)0x0000)
|
||||||
|
#define IS_TIM_OCCLEAR_STATE(STATE) (((STATE) == TIM_OCClear_Enable) || \
|
||||||
|
((STATE) == TIM_OCClear_Disable))
|
||||||
|
|
||||||
|
#define TIM_TRGOSource_Reset ((uint16_t)0x0000)
|
||||||
|
#define TIM_TRGOSource_Enable ((uint16_t)0x0010)
|
||||||
|
#define TIM_TRGOSource_Update ((uint16_t)0x0020)
|
||||||
|
#define TIM_TRGOSource_OC1 ((uint16_t)0x0030)
|
||||||
|
#define TIM_TRGOSource_OC1Ref ((uint16_t)0x0040)
|
||||||
|
#define TIM_TRGOSource_OC2Ref ((uint16_t)0x0050)
|
||||||
|
#define TIM_TRGOSource_OC3Ref ((uint16_t)0x0060)
|
||||||
|
#define TIM_TRGOSource_OC4Ref ((uint16_t)0x0070)
|
||||||
|
//#define IS_TIM_TRGO_SOURCE(SOURCE) (((SOURCE) == TIM_TRGOSource_Reset) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_Enable) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_Update) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_OC1) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_OC1Ref) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_OC2Ref) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_OC3Ref) || \
|
||||||
|
// ((SOURCE) == TIM_TRGOSource_OC4Ref))
|
||||||
|
|
||||||
|
#define TIM_SlaveMode_Reset ((uint16_t)0x0004)
|
||||||
|
#define TIM_SlaveMode_Gated ((uint16_t)0x0005)
|
||||||
|
#define TIM_SlaveMode_Trigger ((uint16_t)0x0006)
|
||||||
|
#define TIM_SlaveMode_External1 ((uint16_t)0x0007)
|
||||||
|
//#define IS_TIM_SLAVE_MODE(MODE) (((MODE) == TIM_SlaveMode_Reset) || \
|
||||||
|
// ((MODE) == TIM_SlaveMode_Gated) || \
|
||||||
|
// ((MODE) == TIM_SlaveMode_Trigger) || \
|
||||||
|
// ((MODE) == TIM_SlaveMode_External1))
|
||||||
|
|
||||||
|
#define TIM_MasterSlaveMode_Enable ((uint16_t)0x0080)
|
||||||
|
#define TIM_MasterSlaveMode_Disable ((uint16_t)0x0000)
|
||||||
|
//#define IS_TIM_MSM_STATE(STATE) (((STATE) == TIM_MasterSlaveMode_Enable) || \
|
||||||
|
// ((STATE) == TIM_MasterSlaveMode_Disable))
|
||||||
|
|
||||||
|
#define TIM2_TIM8_TRGO ((uint16_t)0x0000)
|
||||||
|
#define TIM2_ETH_PTP ((uint16_t)0x0400)
|
||||||
|
#define TIM2_USBFS_SOF ((uint16_t)0x0800)
|
||||||
|
#define TIM2_USBHS_SOF ((uint16_t)0x0C00)
|
||||||
|
|
||||||
|
#define TIM5_GPIO ((uint16_t)0x0000)
|
||||||
|
#define TIM5_LSI ((uint16_t)0x0040)
|
||||||
|
#define TIM5_LSE ((uint16_t)0x0080)
|
||||||
|
#define TIM5_RTC ((uint16_t)0x00C0)
|
||||||
|
|
||||||
|
#define TIM11_GPIO ((uint16_t)0x0000)
|
||||||
|
#define TIM11_HSE ((uint16_t)0x0002)
|
||||||
|
|
||||||
|
class Encoder
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
int _pin;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TIM_TypeDef *tim_base;
|
||||||
|
Encoder();
|
||||||
|
void SetCount(int64_t Counter);
|
||||||
|
uint16_t GetCount();
|
||||||
|
};
|
||||||
|
|
||||||
|
void rcc_config();
|
||||||
|
void GpioConfigPortA(GPIO_TypeDef *GPIOx);
|
||||||
|
void GpioConfigPortC(GPIO_TypeDef *GPIOx);
|
||||||
|
void GpioConfigPortD(GPIO_TypeDef *GPIOx);
|
||||||
|
void TIM_EncoderInterConfig(TIM_TypeDef *TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);
|
||||||
|
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct);
|
||||||
|
void TIM_TimeBaseInit(TIM_TypeDef *TIMx, TIM_TimeBaseInitTypeDef *TIM_TimeBaseInitStruct);
|
||||||
|
#endif
|
||||||
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
@@ -4,8 +4,8 @@
|
|||||||
#define USE_FOE 0
|
#define USE_FOE 0
|
||||||
#define USE_EOE 0
|
#define USE_EOE 0
|
||||||
|
|
||||||
#define MBXSIZE 128
|
#define MBXSIZE 512
|
||||||
#define MBXSIZEBOOT 128
|
#define MBXSIZEBOOT 512
|
||||||
#define MBXBUFFERS 3
|
#define MBXBUFFERS 3
|
||||||
|
|
||||||
#define MBX0_sma 0x1000
|
#define MBX0_sma 0x1000
|
||||||
@@ -33,8 +33,8 @@
|
|||||||
#define SM3_smc 0x20
|
#define SM3_smc 0x20
|
||||||
#define SM3_act 1
|
#define SM3_act 1
|
||||||
|
|
||||||
#define MAX_MAPPINGS_SM2 7
|
#define MAX_MAPPINGS_SM2 8
|
||||||
#define MAX_MAPPINGS_SM3 6
|
#define MAX_MAPPINGS_SM3 7
|
||||||
|
|
||||||
#define MAX_RXPDO_SIZE 512
|
#define MAX_RXPDO_SIZE 512
|
||||||
#define MAX_TXPDO_SIZE 512
|
#define MAX_TXPDO_SIZE 512
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
:2000000080060344640000000000000000001400E1100000D20400000100000002000000D1
|
:2000000080060344640000000000000000001400AA0A0000CCBCBB000200000001000000A1
|
||||||
:2000200000000000000000000000000000000000001080008010800004000000000000001C
|
:20002000000000000000000000000000000000000010000200120002040000000000000096
|
||||||
:200040000000000000000000000000000000000000000000000000000000000000000000A0
|
:200040000000000000000000000000000000000000000000000000000000000000000000A0
|
||||||
:20006000000000000000000000000000000000000000000000000000000000000F00010070
|
:20006000000000000000000000000000000000000000000000000000000000000F00010070
|
||||||
:200080000A002100040C456173657243415432303030096D79456E636F64657206494D479
|
:200080000A002000040C4561736572434154323030300E4D616368696E65436F6E74726F64
|
||||||
:2000A000434259224D6574616C4D7573696E67732045617365724341542032303030206518
|
:2000A0006C06494D474342591A4D6574616C4D7573696E67732045617365724341542032E6
|
||||||
:2000C0006E636F6465721E0010000203010400130000000000000000000011000000000049
|
:2000C000303030001E00100002030104001300000000000000000000110000000000000034
|
||||||
:2000E00000000000000000000000280002000102030029001000001080002600010180104F
|
:2000E000000000000000000028000200010203002900100000100002260001010012000249
|
||||||
:200100008000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFC7
|
:20010000220001020016000024000103001A000020000104FFFFFFFFFFFFFFFFFFFFFFFF49
|
||||||
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
|
:20012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
|
||||||
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
|
:20014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
|
||||||
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
|
:20016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
|
||||||
269
Firmware/lib/soes/esi.json
Executable file
@@ -0,0 +1,269 @@
|
|||||||
|
{
|
||||||
|
"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": {
|
||||||
|
"A": {
|
||||||
|
"otype": "RECORD",
|
||||||
|
"name": "Error Settings",
|
||||||
|
"access": "RO",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Max SubIndex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "New record subitem",
|
||||||
|
"dtype": "UNSIGNED8"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"txpdo": {
|
||||||
|
"6000": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "EncPos",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
],
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.EncPos"
|
||||||
|
},
|
||||||
|
"6001": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "EncFrequency",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
],
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.EncFrequency"
|
||||||
|
},
|
||||||
|
"6002": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "DiffT",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
],
|
||||||
|
"dtype": "UNSIGNED32",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.DiffT"
|
||||||
|
},
|
||||||
|
"6003": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "IndexByte",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
],
|
||||||
|
"dtype": "UNSIGNED32",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.IndexByte"
|
||||||
|
},
|
||||||
|
"6004": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "IndexStatus",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
],
|
||||||
|
"dtype": "UNSIGNED32",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.IndexStatus"
|
||||||
|
},
|
||||||
|
"6005": {
|
||||||
|
"otype": "RECORD",
|
||||||
|
"name": "StepGenOut1",
|
||||||
|
"access": "RO",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Max SubIndex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ActualPosition",
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"data": "&Obj.StepGenOut1.ActualPosition",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"6006": {
|
||||||
|
"otype": "RECORD",
|
||||||
|
"name": "StepGenOut2",
|
||||||
|
"access": "RO",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Max SubIndex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ActualPosition",
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"data": "&Obj.StepGenOut2.ActualPosition",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pdo_mappings": [
|
||||||
|
"txpdo"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rxpdo": {
|
||||||
|
"7000": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "EncPosScale",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
],
|
||||||
|
"dtype": "INTEGER32",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.EncPosScale"
|
||||||
|
},
|
||||||
|
"7001": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "IndexLatchEnable",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
],
|
||||||
|
"dtype": "UNSIGNED32",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.IndexLatchEnable"
|
||||||
|
},
|
||||||
|
"7002": {
|
||||||
|
"otype": "RECORD",
|
||||||
|
"name": "StepGenIn1",
|
||||||
|
"access": "RO",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Max SubIndex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CommandedPosition",
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"data": "&Obj.StepGenIn1.CommandedPosition",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "StepsPerMM",
|
||||||
|
"dtype": "INTEGER16",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO",
|
||||||
|
"data": "&Obj.StepGenIn1.StepsPerMM"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"7003": {
|
||||||
|
"otype": "RECORD",
|
||||||
|
"name": "StepGenIn2",
|
||||||
|
"access": "RO",
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "Max SubIndex"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "CommandedPosition",
|
||||||
|
"dtype": "REAL64",
|
||||||
|
"data": "&Obj.StepGenIn2.CommandedPosition",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "StepsPerMM",
|
||||||
|
"dtype": "INTEGER16",
|
||||||
|
"value": "0",
|
||||||
|
"access": "RO",
|
||||||
|
"data": "&Obj.StepGenIn2.StepsPerMM"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"7004": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "Enable1",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
],
|
||||||
|
"dtype": "BOOLEAN",
|
||||||
|
"value": "0",
|
||||||
|
"data": "&Obj.Enable1"
|
||||||
|
},
|
||||||
|
"60664": {
|
||||||
|
"otype": "VAR",
|
||||||
|
"name": "ActualPosition",
|
||||||
|
"access": "RO",
|
||||||
|
"pdo_mappings": [
|
||||||
|
"rxpdo"
|
||||||
|
],
|
||||||
|
"dtype": "INTEGER32",
|
||||||
|
"value": "0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dc": [
|
||||||
|
{
|
||||||
|
"Name": "SM-Synchron",
|
||||||
|
"Description": "SM-Synchron",
|
||||||
|
"AssignActivate": "#x000",
|
||||||
|
"Sync0cycleTime": "0",
|
||||||
|
"Sync0shiftTime": "0",
|
||||||
|
"Sync1cycleTime": "0",
|
||||||
|
"Sync1shiftTime": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "DC",
|
||||||
|
"Description": "DC-Synchron",
|
||||||
|
"AssignActivate": "#x300",
|
||||||
|
"Sync0cycleTime": "0",
|
||||||
|
"Sync0shiftTime": "0",
|
||||||
|
"Sync1cycleTime": "0",
|
||||||
|
"Sync1shiftTime": "0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
305
Firmware/lib/soes/objectlist.c
Executable file
@@ -0,0 +1,305 @@
|
|||||||
|
#include "esc_coe.h"
|
||||||
|
#include "utypes.h"
|
||||||
|
#include <stddef.h>
|
||||||
|
|
||||||
|
|
||||||
|
static const char acName1000[] = "Device Type";
|
||||||
|
static const char acName1008[] = "Device Name";
|
||||||
|
static const char acName1009[] = "Hardware Version";
|
||||||
|
static const char acName100A[] = "Software Version";
|
||||||
|
static const char acName1018[] = "Identity Object";
|
||||||
|
static const char acName1018_00[] = "Max SubIndex";
|
||||||
|
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[] = "EncPosScale";
|
||||||
|
static const char acName1600_00[] = "Max SubIndex";
|
||||||
|
static const char acName1600_01[] = "EncPosScale";
|
||||||
|
static const char acName1601[] = "IndexLatchEnable";
|
||||||
|
static const char acName1601_00[] = "Max SubIndex";
|
||||||
|
static const char acName1601_01[] = "IndexLatchEnable";
|
||||||
|
static const char acName1602[] = "StepGenIn1";
|
||||||
|
static const char acName1602_00[] = "Max SubIndex";
|
||||||
|
static const char acName1602_01[] = "CommandedPosition";
|
||||||
|
static const char acName1602_02[] = "StepsPerMM";
|
||||||
|
static const char acName1603[] = "StepGenIn2";
|
||||||
|
static const char acName1603_00[] = "Max SubIndex";
|
||||||
|
static const char acName1603_01[] = "CommandedPosition";
|
||||||
|
static const char acName1603_02[] = "StepsPerMM";
|
||||||
|
static const char acName1604[] = "Enable1";
|
||||||
|
static const char acName1604_00[] = "Max SubIndex";
|
||||||
|
static const char acName1604_01[] = "Enable1";
|
||||||
|
static const char acName1604_02[] = "Padding 1";
|
||||||
|
static const char acName1A00[] = "EncPos";
|
||||||
|
static const char acName1A00_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A00_01[] = "EncPos";
|
||||||
|
static const char acName1A01[] = "EncFrequency";
|
||||||
|
static const char acName1A01_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A01_01[] = "EncFrequency";
|
||||||
|
static const char acName1A02[] = "DiffT";
|
||||||
|
static const char acName1A02_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A02_01[] = "DiffT";
|
||||||
|
static const char acName1A03[] = "IndexByte";
|
||||||
|
static const char acName1A03_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A03_01[] = "IndexByte";
|
||||||
|
static const char acName1A04[] = "IndexStatus";
|
||||||
|
static const char acName1A04_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A04_01[] = "IndexStatus";
|
||||||
|
static const char acName1A05[] = "StepGenOut1";
|
||||||
|
static const char acName1A05_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A05_01[] = "ActualPosition";
|
||||||
|
static const char acName1A06[] = "StepGenOut2";
|
||||||
|
static const char acName1A06_00[] = "Max SubIndex";
|
||||||
|
static const char acName1A06_01[] = "ActualPosition";
|
||||||
|
static const char acName1C00[] = "Sync Manager Communication Type";
|
||||||
|
static const char acName1C00_00[] = "Max SubIndex";
|
||||||
|
static const char acName1C00_01[] = "Communications Type SM0";
|
||||||
|
static const char acName1C00_02[] = "Communications Type SM1";
|
||||||
|
static const char acName1C00_03[] = "Communications Type SM2";
|
||||||
|
static const char acName1C00_04[] = "Communications Type SM3";
|
||||||
|
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 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 acName1C13_06[] = "PDO Mapping";
|
||||||
|
static const char acName1C13_07[] = "PDO Mapping";
|
||||||
|
static const char acName6000[] = "EncPos";
|
||||||
|
static const char acName6001[] = "EncFrequency";
|
||||||
|
static const char acName6002[] = "DiffT";
|
||||||
|
static const char acName6003[] = "IndexByte";
|
||||||
|
static const char acName6004[] = "IndexStatus";
|
||||||
|
static const char acName6005[] = "StepGenOut1";
|
||||||
|
static const char acName6005_00[] = "Max SubIndex";
|
||||||
|
static const char acName6005_01[] = "ActualPosition";
|
||||||
|
static const char acName6006[] = "StepGenOut2";
|
||||||
|
static const char acName6006_00[] = "Max SubIndex";
|
||||||
|
static const char acName6006_01[] = "ActualPosition";
|
||||||
|
static const char acName7000[] = "EncPosScale";
|
||||||
|
static const char acName7001[] = "IndexLatchEnable";
|
||||||
|
static const char acName7002[] = "StepGenIn1";
|
||||||
|
static const char acName7002_00[] = "Max SubIndex";
|
||||||
|
static const char acName7002_01[] = "CommandedPosition";
|
||||||
|
static const char acName7002_02[] = "StepsPerMM";
|
||||||
|
static const char acName7003[] = "StepGenIn2";
|
||||||
|
static const char acName7003_00[] = "Max SubIndex";
|
||||||
|
static const char acName7003_01[] = "CommandedPosition";
|
||||||
|
static const char acName7003_02[] = "StepsPerMM";
|
||||||
|
static const char acName7004[] = "Enable1";
|
||||||
|
|
||||||
|
const _objd SDO1000[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1000, 5001, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1008[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_VISIBLE_STRING, 208, ATYPE_RO, acName1008, 0, "MetalMusings EaserCAT 2000"},
|
||||||
|
};
|
||||||
|
const _objd SDO1009[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_VISIBLE_STRING, 40, ATYPE_RO, acName1009, 0, "0.0.1"},
|
||||||
|
};
|
||||||
|
const _objd SDO100A[] =
|
||||||
|
{
|
||||||
|
{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_UNSIGNED64, 64, ATYPE_RO, acName1018_01, 2730, NULL},
|
||||||
|
{0x02, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1018_02, 12303564, NULL},
|
||||||
|
{0x03, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1018_03, 2, NULL},
|
||||||
|
{0x04, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1018_04, 1, &Obj.serial},
|
||||||
|
};
|
||||||
|
const _objd SDO1600[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1600_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1600_01, 0x70000020, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1601[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1601_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1601_01, 0x70010020, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1602[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1602_00, 2, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1602_01, 0x70020140, NULL},
|
||||||
|
{0x02, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1602_02, 0x70020210, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1603[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1603_00, 2, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1603_01, 0x70030140, NULL},
|
||||||
|
{0x02, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1603_02, 0x70030210, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1604[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1604_00, 2, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1604_01, 0x70040001, NULL},
|
||||||
|
{0x02, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1604_02, 0x00000007, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A00[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A00_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A00_01, 0x60000040, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A01[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A01_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A01_01, 0x60010040, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A02[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A02_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A02_01, 0x60020020, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A03[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A03_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A03_01, 0x60030020, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A04[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A04_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A04_01, 0x60040020, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A05[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A05_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A05_01, 0x60050140, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1A06[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1A06_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED64, 64, ATYPE_RO, acName1A06_01, 0x60060140, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1C00[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C00_00, 4, NULL},
|
||||||
|
{0x01, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C00_01, 1, NULL},
|
||||||
|
{0x02, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C00_02, 2, NULL},
|
||||||
|
{0x03, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C00_03, 3, NULL},
|
||||||
|
{0x04, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C00_04, 4, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO1C12[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C12_00, 5, 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},
|
||||||
|
};
|
||||||
|
const _objd SDO1C13[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName1C13_00, 7, 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},
|
||||||
|
{0x06, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_06, 0x1A05, NULL},
|
||||||
|
{0x07, DTYPE_UNSIGNED16, 16, ATYPE_RO, acName1C13_07, 0x1A06, NULL},
|
||||||
|
};
|
||||||
|
const _objd SDO6000[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_REAL64, 64, ATYPE_RO | ATYPE_TXPDO, acName6000, 0, &Obj.EncPos},
|
||||||
|
};
|
||||||
|
const _objd SDO6001[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_REAL64, 64, ATYPE_RO | ATYPE_TXPDO, acName6001, 0, &Obj.EncFrequency},
|
||||||
|
};
|
||||||
|
const _objd SDO6002[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RO | ATYPE_TXPDO, acName6002, 0, &Obj.DiffT},
|
||||||
|
};
|
||||||
|
const _objd SDO6003[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RO | ATYPE_TXPDO, acName6003, 0, &Obj.IndexByte},
|
||||||
|
};
|
||||||
|
const _objd SDO6004[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_UNSIGNED32, 32, ATYPE_RO | ATYPE_TXPDO, acName6004, 0, &Obj.IndexStatus},
|
||||||
|
};
|
||||||
|
const _objd SDO6005[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName6005_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_REAL64, 64, ATYPE_RO, acName6005_01, 0, &Obj.StepGenOut1.ActualPosition},
|
||||||
|
};
|
||||||
|
const _objd SDO6006[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName6006_00, 1, NULL},
|
||||||
|
{0x01, DTYPE_REAL64, 64, ATYPE_RO, acName6006_01, 0, &Obj.StepGenOut2.ActualPosition},
|
||||||
|
};
|
||||||
|
const _objd SDO7000[] =
|
||||||
|
{
|
||||||
|
{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.IndexLatchEnable},
|
||||||
|
};
|
||||||
|
const _objd SDO7002[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName7002_00, 2, NULL},
|
||||||
|
{0x01, DTYPE_REAL64, 64, ATYPE_RO, acName7002_01, 0, &Obj.StepGenIn1.CommandedPosition},
|
||||||
|
{0x02, DTYPE_INTEGER16, 16, ATYPE_RO, acName7002_02, 0, &Obj.StepGenIn1.StepsPerMM},
|
||||||
|
};
|
||||||
|
const _objd SDO7003[] =
|
||||||
|
{
|
||||||
|
{0x00, DTYPE_UNSIGNED8, 8, ATYPE_RO, acName7003_00, 2, NULL},
|
||||||
|
{0x01, DTYPE_REAL64, 64, ATYPE_RO, acName7003_01, 0, &Obj.StepGenIn2.CommandedPosition},
|
||||||
|
{0x02, DTYPE_INTEGER16, 16, ATYPE_RO, acName7003_02, 0, &Obj.StepGenIn2.StepsPerMM},
|
||||||
|
};
|
||||||
|
const _objd SDO7004[] =
|
||||||
|
{
|
||||||
|
{0x0, DTYPE_BOOLEAN, 1, ATYPE_RO | ATYPE_RXPDO, acName7004, 0, &Obj.Enable1},
|
||||||
|
};
|
||||||
|
|
||||||
|
const _objectlist SDOobjects[] =
|
||||||
|
{
|
||||||
|
{0x1000, OTYPE_VAR, 0, 0, acName1000, SDO1000},
|
||||||
|
{0x1008, OTYPE_VAR, 0, 0, acName1008, SDO1008},
|
||||||
|
{0x1009, OTYPE_VAR, 0, 0, acName1009, SDO1009},
|
||||||
|
{0x100A, OTYPE_VAR, 0, 0, acName100A, SDO100A},
|
||||||
|
{0x1018, OTYPE_RECORD, 4, 0, acName1018, SDO1018},
|
||||||
|
{0x1600, OTYPE_RECORD, 1, 0, acName1600, SDO1600},
|
||||||
|
{0x1601, OTYPE_RECORD, 1, 0, acName1601, SDO1601},
|
||||||
|
{0x1602, OTYPE_RECORD, 2, 0, acName1602, SDO1602},
|
||||||
|
{0x1603, OTYPE_RECORD, 2, 0, acName1603, SDO1603},
|
||||||
|
{0x1604, OTYPE_RECORD, 2, 0, acName1604, SDO1604},
|
||||||
|
{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},
|
||||||
|
{0x1A05, OTYPE_RECORD, 1, 0, acName1A05, SDO1A05},
|
||||||
|
{0x1A06, OTYPE_RECORD, 1, 0, acName1A06, SDO1A06},
|
||||||
|
{0x1C00, OTYPE_ARRAY, 4, 0, acName1C00, SDO1C00},
|
||||||
|
{0x1C12, OTYPE_ARRAY, 5, 0, acName1C12, SDO1C12},
|
||||||
|
{0x1C13, OTYPE_ARRAY, 7, 0, acName1C13, SDO1C13},
|
||||||
|
{0x6000, OTYPE_VAR, 0, 0, acName6000, SDO6000},
|
||||||
|
{0x6001, OTYPE_VAR, 0, 0, acName6001, SDO6001},
|
||||||
|
{0x6002, OTYPE_VAR, 0, 0, acName6002, SDO6002},
|
||||||
|
{0x6003, OTYPE_VAR, 0, 0, acName6003, SDO6003},
|
||||||
|
{0x6004, OTYPE_VAR, 0, 0, acName6004, SDO6004},
|
||||||
|
{0x6005, OTYPE_RECORD, 1, 0, acName6005, SDO6005},
|
||||||
|
{0x6006, OTYPE_RECORD, 1, 0, acName6006, SDO6006},
|
||||||
|
{0x7000, OTYPE_VAR, 0, 0, acName7000, SDO7000},
|
||||||
|
{0x7001, OTYPE_VAR, 0, 0, acName7001, SDO7001},
|
||||||
|
{0x7002, OTYPE_RECORD, 2, 0, acName7002, SDO7002},
|
||||||
|
{0x7003, OTYPE_RECORD, 2, 0, acName7003, SDO7003},
|
||||||
|
{0x7004, OTYPE_VAR, 0, 0, acName7004, SDO7004},
|
||||||
|
{0xffff, 0xff, 0xff, 0xff, NULL, NULL}
|
||||||
|
};
|
||||||
50
Firmware/lib/soes/utypes.h
Executable file
@@ -0,0 +1,50 @@
|
|||||||
|
#ifndef __UTYPES_H__
|
||||||
|
#define __UTYPES_H__
|
||||||
|
|
||||||
|
#include "cc.h"
|
||||||
|
|
||||||
|
/* Object dictionary storage */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* Identity */
|
||||||
|
|
||||||
|
uint32_t serial;
|
||||||
|
|
||||||
|
/* Inputs */
|
||||||
|
|
||||||
|
double EncPos;
|
||||||
|
double EncFrequency;
|
||||||
|
uint32_t DiffT;
|
||||||
|
uint32_t IndexByte;
|
||||||
|
uint32_t IndexStatus;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
double ActualPosition;
|
||||||
|
} StepGenOut1;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
double ActualPosition;
|
||||||
|
} StepGenOut2;
|
||||||
|
|
||||||
|
/* Outputs */
|
||||||
|
|
||||||
|
int32_t EncPosScale;
|
||||||
|
uint32_t IndexLatchEnable;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
double CommandedPosition;
|
||||||
|
int16_t StepsPerMM;
|
||||||
|
} StepGenIn1;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
double CommandedPosition;
|
||||||
|
int16_t StepsPerMM;
|
||||||
|
} StepGenIn2;
|
||||||
|
uint8_t Enable1;
|
||||||
|
|
||||||
|
} _Objects;
|
||||||
|
|
||||||
|
extern _Objects Obj;
|
||||||
|
|
||||||
|
#endif /* __UTYPES_H__ */
|
||||||
@@ -14,9 +14,10 @@ platform = ststm32
|
|||||||
board = genericSTM32F407VGT6
|
board = genericSTM32F407VGT6
|
||||||
upload_protocol = stlink
|
upload_protocol = stlink
|
||||||
debug_tool = stlink
|
debug_tool = stlink
|
||||||
debug_build_flags = -O0 -g -ggdb
|
debug_build_flags = -O0 -g -ggdb
|
||||||
monitor_port = COM7
|
monitor_port = COM7
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
build_flags = -Wl,--no-warn-rwx-segment
|
build_flags = -Wl,--no-warn-rwx-segment
|
||||||
lib_deps =
|
lib_deps =
|
||||||
SPI
|
SPI
|
||||||
|
rlogiacco/CircularBuffer@^1.3.3
|
||||||
94
Firmware/src/MyEncoder.cpp
Executable file
@@ -0,0 +1,94 @@
|
|||||||
|
#include "MyENcoder.h"
|
||||||
|
|
||||||
|
MyEncoder::MyEncoder(TIM_TypeDef *_tim_base, uint8_t _indexPin, void irq(void))
|
||||||
|
{
|
||||||
|
tim_base = _tim_base;
|
||||||
|
indexPin = _indexPin;
|
||||||
|
attachInterrupt(digitalPinToInterrupt(indexPin), irq, RISING); // When Index triggered
|
||||||
|
EncoderInit.SetCount(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ONE_PERIOD 65536
|
||||||
|
#define HALF_PERIOD 32768
|
||||||
|
|
||||||
|
int64_t MyEncoder::unwrapEncoder(uint16_t in)
|
||||||
|
{
|
||||||
|
int32_t c32 = (int32_t)in - HALF_PERIOD; // remove half period to determine (+/-) sign of the wrap
|
||||||
|
int32_t dif = (c32 - previousEncoderCounterValue); // core concept: prev + (current - prev) = current
|
||||||
|
|
||||||
|
// wrap difference from -HALF_PERIOD to HALF_PERIOD. modulo prevents differences after the wrap from having an incorrect result
|
||||||
|
int32_t mod_dif = ((dif + HALF_PERIOD) % ONE_PERIOD) - HALF_PERIOD;
|
||||||
|
if (dif < -HALF_PERIOD)
|
||||||
|
mod_dif += ONE_PERIOD; // account for mod of negative number behavior in C
|
||||||
|
|
||||||
|
int64_t unwrapped = previousEncoderCounterValue + mod_dif;
|
||||||
|
previousEncoderCounterValue = unwrapped; // load previous value
|
||||||
|
|
||||||
|
return unwrapped + HALF_PERIOD; // remove the shift we applied at the beginning, and return
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyEncoder::indexPulse(void)
|
||||||
|
{
|
||||||
|
if (pleaseZeroTheCounter)
|
||||||
|
{
|
||||||
|
tim_base->CNT = 0;
|
||||||
|
indexPulseFired = 1;
|
||||||
|
Pos.clear();
|
||||||
|
TDelta.clear();
|
||||||
|
pleaseZeroTheCounter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t MyEncoder::indexHappened()
|
||||||
|
{
|
||||||
|
if (indexPulseFired)
|
||||||
|
{
|
||||||
|
indexPulseFired = 0;
|
||||||
|
previousEncoderCounterValue = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
double MyEncoder::currentPos()
|
||||||
|
{
|
||||||
|
curPos = unwrapEncoder(tim_base->CNT) * PosScaleRes;
|
||||||
|
return curPos;
|
||||||
|
}
|
||||||
|
|
||||||
|
double MyEncoder::frequency(uint64_t time)
|
||||||
|
{
|
||||||
|
|
||||||
|
double diffT = 0;
|
||||||
|
double diffPos = 0;
|
||||||
|
TDelta.push(time); // Running average over the length of the circular buffer
|
||||||
|
Pos.push(curPos);
|
||||||
|
if (Pos.size() >= 2)
|
||||||
|
{
|
||||||
|
diffT = 1.0e-9 * (TDelta.last() - TDelta.first()); // Time is in nanoseconds
|
||||||
|
diffPos = fabs(Pos.last() - Pos.first());
|
||||||
|
}
|
||||||
|
return diffT != 0 ? diffPos / diffT : 0.0; // Revolutions per second
|
||||||
|
}
|
||||||
|
uint8_t MyEncoder::getIndexState()
|
||||||
|
{
|
||||||
|
return digitalRead(indexPin);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyEncoder::setScale(double scale)
|
||||||
|
{
|
||||||
|
if (CurPosScale != scale && scale != 0)
|
||||||
|
{
|
||||||
|
CurPosScale = scale;
|
||||||
|
PosScaleRes = 1.0 / double(scale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyEncoder::setLatch(uint8_t latchEnable)
|
||||||
|
{
|
||||||
|
if (latchEnable && !oldLatchCEnable) // Should only happen first time IndexCEnable is set
|
||||||
|
{
|
||||||
|
pleaseZeroTheCounter = 1;
|
||||||
|
}
|
||||||
|
oldLatchCEnable = latchEnable;
|
||||||
|
}
|
||||||
148
Firmware/src/StepGen.cpp
Executable file
@@ -0,0 +1,148 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "StepGen.h"
|
||||||
|
|
||||||
|
StepGen::StepGen(TIM_TypeDef *Timer, uint32_t _timerChannel, PinName _stepPin, uint8_t _dirPin, void irq(void))
|
||||||
|
{
|
||||||
|
timerIsRunning = 0;
|
||||||
|
timerStepPosition = 0;
|
||||||
|
timerStepDirection = 0;
|
||||||
|
timerStepPositionAtEnd = 0;
|
||||||
|
timerNewEndStepPosition = 0;
|
||||||
|
actualPosition = 0;
|
||||||
|
requestedPosition = 0;
|
||||||
|
stepsPerMM = 0;
|
||||||
|
enabled = 0;
|
||||||
|
|
||||||
|
dirPin = _dirPin;
|
||||||
|
stepPin = _stepPin;
|
||||||
|
timerChan = _timerChannel;
|
||||||
|
MyTim = new HardwareTimer(Timer);
|
||||||
|
MyTim->attachInterrupt(irq);
|
||||||
|
pinMode(dirPin, OUTPUT);
|
||||||
|
}
|
||||||
|
void StepGen::reqPos(double_t pos)
|
||||||
|
{
|
||||||
|
requestedPosition = pos;
|
||||||
|
}
|
||||||
|
double StepGen::reqPos()
|
||||||
|
{
|
||||||
|
return requestedPosition;
|
||||||
|
}
|
||||||
|
void StepGen::actPos(double pos)
|
||||||
|
{
|
||||||
|
actualPosition = pos;
|
||||||
|
}
|
||||||
|
double StepGen::actPos()
|
||||||
|
{
|
||||||
|
return actualPosition;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StepGen::enable(uint8_t yes)
|
||||||
|
{
|
||||||
|
enabled = yes;
|
||||||
|
}
|
||||||
|
|
||||||
|
void StepGen::handleStepper(void)
|
||||||
|
{
|
||||||
|
if (!enabled)
|
||||||
|
return;
|
||||||
|
pwmCycleTime = StepGen::sync0CycleTime;
|
||||||
|
|
||||||
|
actPos(timerStepPosition / double(stepsPerMM));
|
||||||
|
double diffPosition = reqPos() - actPos();
|
||||||
|
#if 1
|
||||||
|
// Wild "tone" kludge. map() function
|
||||||
|
#define SPEED_MIN 0.00005
|
||||||
|
#define SPEED_MAX 0.0005
|
||||||
|
#define FACT_LOW 1.0
|
||||||
|
#define FACT_HIGH 20.0
|
||||||
|
if (abs(diffPosition) < SPEED_MIN) // 60 mm/min = 0.001 mm/ms
|
||||||
|
{
|
||||||
|
pwmCycleTime = FACT_LOW * StepGen::sync0CycleTime;
|
||||||
|
}
|
||||||
|
else if (abs(diffPosition) > SPEED_MAX) // 60 mm/min = 0.001 mm/ms
|
||||||
|
{
|
||||||
|
pwmCycleTime = FACT_HIGH * StepGen::sync0CycleTime;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pwmCycleTime = (FACT_LOW + (FACT_HIGH - FACT_LOW) * (abs(diffPosition) - SPEED_MIN) / (SPEED_MAX - SPEED_MIN)) * StepGen::sync0CycleTime;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
uint64_t fre = (abs(diffPosition) * stepsPerMM * 1000000) / pwmCycleTime; // Frequency needed
|
||||||
|
if (fre > maxFreq) // Only do maxFre
|
||||||
|
{
|
||||||
|
double maxDist = (maxFreq * pwmCycleTime) / (stepsPerMM * 1000000.0) * (diffPosition > 0 ? 1 : -1);
|
||||||
|
reqPos(actPos() + maxDist);
|
||||||
|
}
|
||||||
|
int32_t pulsesAtEndOfCycle = stepsPerMM * reqPos();
|
||||||
|
|
||||||
|
// Will be picked up by the timer_CB and the timer is reloaded, if it runs.
|
||||||
|
timerNewEndStepPosition = pulsesAtEndOfCycle;
|
||||||
|
|
||||||
|
if (!timerIsRunning) // Timer isn't running. Start it here
|
||||||
|
{
|
||||||
|
int32_t steps = pulsesAtEndOfCycle - timerStepPosition; // Pulses to go + or -
|
||||||
|
if (steps != 0)
|
||||||
|
{
|
||||||
|
if (steps > 0)
|
||||||
|
{
|
||||||
|
digitalWrite(dirPin, HIGH);
|
||||||
|
timerStepDirection = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
digitalWrite(dirPin, LOW);
|
||||||
|
timerStepDirection = -1;
|
||||||
|
}
|
||||||
|
timerStepPositionAtEnd = pulsesAtEndOfCycle; // Current Position
|
||||||
|
float_t freqf = abs(steps) / (pwmCycleTime*1.0e-6);
|
||||||
|
uint32_t freq = uint32_t(freqf);
|
||||||
|
MyTim->setMode(timerChan, TIMER_OUTPUT_COMPARE_PWM2, stepPin);
|
||||||
|
MyTim->setOverflow(freq, HERTZ_FORMAT);
|
||||||
|
MyTim->setCaptureCompare(timerChan, 50, PERCENT_COMPARE_FORMAT); // 50 %
|
||||||
|
timerIsRunning = 1;
|
||||||
|
MyTim->resume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void StepGen::timerCB()
|
||||||
|
{
|
||||||
|
timerStepPosition += timerStepDirection; // The step that was just completed
|
||||||
|
if (timerNewEndStepPosition != 0) // Are we going to reload?
|
||||||
|
{
|
||||||
|
// Input for reload is timerNewEndStepPosition
|
||||||
|
// The timer has current position and from this
|
||||||
|
// can set new frequency and new endtarget for steps
|
||||||
|
MyTim->pause(); // We are not at stop, let's stop it. Note stepPin is floating
|
||||||
|
int32_t steps = timerNewEndStepPosition - timerStepPosition;
|
||||||
|
if (steps != 0)
|
||||||
|
{
|
||||||
|
uint8_t sgn = steps > 0 ? HIGH : LOW;
|
||||||
|
digitalWrite(dirPin, sgn);
|
||||||
|
float_t freqf = abs(steps) / float(pwmCycleTime*1.0e-6);
|
||||||
|
uint32_t freq = uint32_t(freqf);
|
||||||
|
timerStepDirection = steps > 0 ? 1 : -1;
|
||||||
|
timerStepPositionAtEnd = timerNewEndStepPosition;
|
||||||
|
timerNewEndStepPosition = 0; // Set to zero to not reload next time
|
||||||
|
MyTim->setMode(timerChan, TIMER_OUTPUT_COMPARE_PWM2, stepPin);
|
||||||
|
MyTim->setOverflow(freq, HERTZ_FORMAT);
|
||||||
|
MyTim->setCaptureCompare(timerChan, 50, PERCENT_COMPARE_FORMAT); // 50 %
|
||||||
|
MyTim->resume();
|
||||||
|
timerIsRunning = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (timerStepPosition == timerStepPositionAtEnd) // Are we finished?
|
||||||
|
{
|
||||||
|
timerIsRunning = 0;
|
||||||
|
MyTim->pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void StepGen::setScale(int16_t spm)
|
||||||
|
{
|
||||||
|
stepsPerMM = spm;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t StepGen::sync0CycleTime = 0;
|
||||||
@@ -5,45 +5,21 @@
|
|||||||
Created on: Nov 20, 2020
|
Created on: Nov 20, 2020
|
||||||
Author: GoktugH.
|
Author: GoktugH.
|
||||||
*/
|
*/
|
||||||
|
// TIM2, TIM3, TIM4, TIM8
|
||||||
Encoder::Encoder()
|
Encoder::Encoder()
|
||||||
{
|
{
|
||||||
int unit;
|
int unit;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Encoder::eattach(int enco)
|
// void Encoder::SetCount(enum EncTimer enc, int64_t Counter)
|
||||||
|
void Encoder::SetCount(int64_t Counter)
|
||||||
{
|
{
|
||||||
|
tim_base->CNT = Counter;
|
||||||
}
|
}
|
||||||
|
// uint16_t Encoder::GetCount(enum EncTimer enc)
|
||||||
void Encoder::attachh(int encoNumber)
|
uint16_t Encoder::GetCount()
|
||||||
{
|
{
|
||||||
eattach(encoNumber);
|
return tim_base->CNT;
|
||||||
}
|
|
||||||
|
|
||||||
void Encoder::SetCount(enum EncTimer enc, int64_t Counter)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (enc == Tim2)
|
|
||||||
TIM2->CNT = Counter;
|
|
||||||
else if (enc == Tim3)
|
|
||||||
TIM3->CNT = Counter;
|
|
||||||
else if (enc == Tim4)
|
|
||||||
TIM4->CNT = Counter;
|
|
||||||
else if (enc == Tim8)
|
|
||||||
TIM8->CNT = Counter;
|
|
||||||
}
|
|
||||||
uint16_t Encoder::GetCount(enum EncTimer enc)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (enc == Tim2)
|
|
||||||
c = (TIM2->CNT);
|
|
||||||
else if (enc == Tim3)
|
|
||||||
c = (TIM3->CNT);
|
|
||||||
else if (enc == Tim4)
|
|
||||||
c = (TIM4->CNT);
|
|
||||||
else if (enc == Tim8)
|
|
||||||
c = (TIM8->CNT);
|
|
||||||
return c;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GpioConfigPortA(GPIO_TypeDef *GPIOx)
|
void GpioConfigPortA(GPIO_TypeDef *GPIOx)
|
||||||
@@ -295,27 +271,27 @@ void rcc_config()
|
|||||||
RCC->AHB1ENR |= 0x10; // GPIOE
|
RCC->AHB1ENR |= 0x10; // GPIOE
|
||||||
|
|
||||||
RCC->APB1ENR |= 0x20000000; // ENABLE DAC
|
RCC->APB1ENR |= 0x20000000; // ENABLE DAC
|
||||||
RCC->APB2ENR |= 0x00000002; // APB2 TIM8
|
// RCC->APB2ENR |= 0x00000002; // APB2 TIM8
|
||||||
RCC->APB1ENR |= 0x00000004; // APB1 TIM4
|
RCC->APB1ENR |= 0x00000004; // APB1 TIM4
|
||||||
RCC->APB1ENR |= 0x00000001; // APB1 TIM2
|
RCC->APB1ENR |= 0x00000001; // APB1 TIM2
|
||||||
RCC->APB1ENR |= 0x00000002; // APB1 TIM3
|
// RCC->APB1ENR |= 0x00000002; // APB1 TIM3
|
||||||
|
|
||||||
GpioConfigPortA(GPIOA);
|
GpioConfigPortA(GPIOA);
|
||||||
GpioConfigPortC(GPIOC);
|
// GpioConfigPortC(GPIOC);
|
||||||
GpioConfigPortD(GPIOD);
|
GpioConfigPortD(GPIOD);
|
||||||
|
#if 0 // Skipping since TIM8 is step generator and TIM3, chan4 is smae as TIM8, chan4
|
||||||
GPIO_PinAF(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);
|
GPIO_PinAF(GPIOA, GPIO_PinSource6, GPIO_AF_TIM3);
|
||||||
GPIO_PinAF(GPIOA, GPIO_PinSource7, GPIO_AF_TIM3);
|
GPIO_PinAF(GPIOA, GPIO_PinSource7, GPIO_AF_TIM3);
|
||||||
|
|
||||||
GPIO_PinAF(GPIOC, GPIO_PinSource6, GPIO_AF_TIM8);
|
GPIO_PinAF(GPIOC, GPIO_PinSource6, GPIO_AF_TIM8);
|
||||||
GPIO_PinAF(GPIOC, GPIO_PinSource7, GPIO_AF_TIM8);
|
GPIO_PinAF(GPIOC, GPIO_PinSource7, GPIO_AF_TIM8);
|
||||||
|
#endif
|
||||||
GPIO_PinAF(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
|
GPIO_PinAF(GPIOD, GPIO_PinSource12, GPIO_AF_TIM4);
|
||||||
GPIO_PinAF(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4);
|
GPIO_PinAF(GPIOD, GPIO_PinSource13, GPIO_AF_TIM4);
|
||||||
|
|
||||||
GPIO_PinAF(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2);
|
GPIO_PinAF(GPIOA, GPIO_PinSource0, GPIO_AF_TIM2);
|
||||||
GPIO_PinAF(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
|
GPIO_PinAF(GPIOA, GPIO_PinSource1, GPIO_AF_TIM2);
|
||||||
|
#if 0 // Skipping since I use TIM8 as stepper generator
|
||||||
TIM_EncoderInterConfig(TIM8, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
TIM_EncoderInterConfig(TIM8, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
||||||
TIMER_InitStructure.TIM_Period = 65535;
|
TIMER_InitStructure.TIM_Period = 65535;
|
||||||
TIMER_InitStructure.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
TIMER_InitStructure.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
||||||
@@ -323,7 +299,7 @@ void rcc_config()
|
|||||||
TIM_TimeBaseStructInit(&TIMER_InitStructure);
|
TIM_TimeBaseStructInit(&TIMER_InitStructure);
|
||||||
TIM_Cmd(TIM8, ENABLE);
|
TIM_Cmd(TIM8, ENABLE);
|
||||||
TIM8->CNT = 0;
|
TIM8->CNT = 0;
|
||||||
|
#endif
|
||||||
TIM_EncoderInterConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
TIM_EncoderInterConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
||||||
TIMER_InitStructureE.TIM_Period = 65535;
|
TIMER_InitStructureE.TIM_Period = 65535;
|
||||||
TIMER_InitStructureE.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
TIMER_InitStructureE.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
||||||
@@ -340,7 +316,7 @@ void rcc_config()
|
|||||||
TIM_Cmd(TIM2, ENABLE);
|
TIM_Cmd(TIM2, ENABLE);
|
||||||
|
|
||||||
TIM2->CNT = 0;
|
TIM2->CNT = 0;
|
||||||
|
#if 0
|
||||||
TIM_EncoderInterConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
TIM_EncoderInterConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Falling);
|
||||||
TIMER_InitStructureEEG.TIM_Period = 65535;
|
TIMER_InitStructureEEG.TIM_Period = 65535;
|
||||||
TIMER_InitStructureEEG.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
TIMER_InitStructureEEG.TIM_CounterMode = TIM_CounterMode_Up | TIM_CounterMode_Down;
|
||||||
@@ -349,4 +325,5 @@ void rcc_config()
|
|||||||
TIM_Cmd(TIM3, ENABLE);
|
TIM_Cmd(TIM3, ENABLE);
|
||||||
|
|
||||||
TIM3->CNT = 0;
|
TIM3->CNT = 0;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
184
Firmware/src/main.cpp
Executable file
@@ -0,0 +1,184 @@
|
|||||||
|
#include <Arduino.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#include "ecat_slv.h"
|
||||||
|
#include "utypes.h"
|
||||||
|
};
|
||||||
|
_Objects Obj;
|
||||||
|
|
||||||
|
HardwareSerial Serial1(PA10, PA9);
|
||||||
|
|
||||||
|
#define DEBUG_TIM8 1
|
||||||
|
#include "MyEncoder.h"
|
||||||
|
void indexPulseEncoderCB1(void);
|
||||||
|
MyEncoder Encoder1(TIM2, PA2, indexPulseEncoderCB1);
|
||||||
|
void indexPulseEncoderCB1(void)
|
||||||
|
{
|
||||||
|
Encoder1.indexPulse();
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "StepGen.h"
|
||||||
|
|
||||||
|
void timerCallbackStep1(void);
|
||||||
|
StepGen Step1(TIM1, 4, PA_11, PA12, timerCallbackStep1);
|
||||||
|
void timerCallbackStep1(void)
|
||||||
|
{
|
||||||
|
Step1.timerCB();
|
||||||
|
}
|
||||||
|
|
||||||
|
void timerCallbackStep2(void);
|
||||||
|
StepGen Step2(TIM3, 4, PC_9, PC10, timerCallbackStep2);
|
||||||
|
void timerCallbackStep2(void)
|
||||||
|
{
|
||||||
|
Step2.timerCB();
|
||||||
|
}
|
||||||
|
|
||||||
|
CircularBuffer<uint32_t, 200> Tim;
|
||||||
|
volatile uint64_t nowTime = 0, thenTime = 0;
|
||||||
|
|
||||||
|
void cb_set_outputs(void) // Master outputs gets here, slave inputs, first operation
|
||||||
|
{
|
||||||
|
Encoder1.setLatch(Obj.IndexLatchEnable);
|
||||||
|
Encoder1.setScale(Obj.EncPosScale);
|
||||||
|
|
||||||
|
Step1.reqPos(Obj.StepGenIn1.CommandedPosition);
|
||||||
|
Step1.setScale(Obj.StepGenIn1.StepsPerMM);
|
||||||
|
Step1.enable(Obj.Enable1);
|
||||||
|
Step2.reqPos(Obj.StepGenIn2.CommandedPosition);
|
||||||
|
Step2.setScale(Obj.StepGenIn2.StepsPerMM);
|
||||||
|
Step2.enable(Obj.Enable1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleStepper(void)
|
||||||
|
{
|
||||||
|
Step1.handleStepper();
|
||||||
|
Step2.handleStepper();
|
||||||
|
}
|
||||||
|
|
||||||
|
void cb_get_inputs(void) // Set Master inputs, slave outputs, last operation
|
||||||
|
{
|
||||||
|
Obj.IndexStatus = Encoder1.indexHappened();
|
||||||
|
Obj.EncPos = Encoder1.currentPos();
|
||||||
|
Obj.EncFrequency = Encoder1.frequency(ESCvar.Time);
|
||||||
|
Obj.IndexByte = Encoder1.getIndexState();
|
||||||
|
|
||||||
|
Obj.StepGenOut1.ActualPosition = Step1.actPos();
|
||||||
|
Obj.StepGenOut2.ActualPosition = Step2.actPos();
|
||||||
|
|
||||||
|
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++)
|
||||||
|
{
|
||||||
|
uint32_t aTim = Tim[i];
|
||||||
|
if (aTim > max_Tim)
|
||||||
|
max_Tim = aTim;
|
||||||
|
if (aTim < min_Tim)
|
||||||
|
min_Tim = aTim;
|
||||||
|
}
|
||||||
|
thenTime = nowTime;
|
||||||
|
Obj.DiffT = max_Tim - min_Tim; // Debug
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESC_interrupt_enable(uint32_t mask);
|
||||||
|
void ESC_interrupt_disable(uint32_t mask);
|
||||||
|
uint16_t dc_checker(void);
|
||||||
|
void sync0Handler(void);
|
||||||
|
|
||||||
|
static esc_cfg_t config =
|
||||||
|
{
|
||||||
|
.user_arg = NULL,
|
||||||
|
.use_interrupt = 1,
|
||||||
|
.watchdog_cnt = 150,
|
||||||
|
.set_defaults_hook = NULL,
|
||||||
|
.pre_state_change_hook = NULL,
|
||||||
|
.post_state_change_hook = NULL,
|
||||||
|
.application_hook = handleStepper,
|
||||||
|
.safeoutput_override = NULL,
|
||||||
|
.pre_object_download_hook = NULL,
|
||||||
|
.post_object_download_hook = NULL,
|
||||||
|
.rxpdo_override = NULL,
|
||||||
|
.txpdo_override = NULL,
|
||||||
|
.esc_hw_interrupt_enable = ESC_interrupt_enable,
|
||||||
|
.esc_hw_interrupt_disable = ESC_interrupt_disable,
|
||||||
|
.esc_hw_eep_handler = NULL,
|
||||||
|
.esc_check_dc_handler = dc_checker,
|
||||||
|
};
|
||||||
|
|
||||||
|
volatile byte serveIRQ = 0;
|
||||||
|
|
||||||
|
void setup(void)
|
||||||
|
{
|
||||||
|
Serial1.begin(115200);
|
||||||
|
rcc_config(); // probably breaks some timers.
|
||||||
|
ecat_slv_init(&config);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop(void)
|
||||||
|
{
|
||||||
|
if (serveIRQ)
|
||||||
|
{
|
||||||
|
nowTime = micros();
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
uint32_t dTime = micros() - nowTime;
|
||||||
|
if ((dTime > 200 && dTime < 500) || dTime > 1500) // Don't run ecat_slv_poll when expecting to serve interrupt
|
||||||
|
ecat_slv_poll();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sync0Handler(void)
|
||||||
|
{
|
||||||
|
serveIRQ = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESC_interrupt_enable(uint32_t mask)
|
||||||
|
{
|
||||||
|
// Enable interrupt for SYNC0 or SM2 or SM3
|
||||||
|
// uint32_t user_int_mask = ESCREG_ALEVENT_DC_SYNC0 | ESCREG_ALEVENT_SM2 | ESCREG_ALEVENT_SM3;
|
||||||
|
uint32_t user_int_mask = ESCREG_ALEVENT_SM2; // Only SM2
|
||||||
|
if (mask & user_int_mask)
|
||||||
|
{
|
||||||
|
ESC_ALeventmaskwrite(ESC_ALeventmaskread() | (mask & user_int_mask));
|
||||||
|
attachInterrupt(digitalPinToInterrupt(PC3), sync0Handler, RISING);
|
||||||
|
|
||||||
|
// Set LAN9252 interrupt pin driver as push-pull active high
|
||||||
|
uint32_t bits = 0x00000111;
|
||||||
|
ESC_write(0x54, &bits, 4);
|
||||||
|
|
||||||
|
// Enable LAN9252 interrupt
|
||||||
|
bits = 0x00000001;
|
||||||
|
ESC_write(0x5c, &bits, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ESC_interrupt_disable(uint32_t mask)
|
||||||
|
{
|
||||||
|
// Enable interrupt for SYNC0 or SM2 or SM3
|
||||||
|
// uint32_t user_int_mask = ESCREG_ALEVENT_DC_SYNC0 | ESCREG_ALEVENT_SM2 | ESCREG_ALEVENT_SM3;
|
||||||
|
uint32_t user_int_mask = ESCREG_ALEVENT_SM2;
|
||||||
|
|
||||||
|
if (mask & user_int_mask)
|
||||||
|
{
|
||||||
|
// Disable interrupt from SYNC0
|
||||||
|
ESC_ALeventmaskwrite(ESC_ALeventmaskread() & ~(mask & user_int_mask));
|
||||||
|
detachInterrupt(digitalPinToInterrupt(PC3));
|
||||||
|
// Disable LAN9252 interrupt
|
||||||
|
uint32_t bits = 0x00000000;
|
||||||
|
ESC_write(0x5c, &bits, 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" uint32_t ESC_SYNC0cycletime(void);
|
||||||
|
|
||||||
|
// Setup of DC
|
||||||
|
uint16_t dc_checker(void)
|
||||||
|
{
|
||||||
|
// Indicate we run DC
|
||||||
|
ESCvar.dcsync = 1;
|
||||||
|
StepGen::sync0CycleTime = ESC_SYNC0cycletime() / 1000; // usecs
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
14
Kicad/Ax58100-stm32-ethercat/.gitignore
vendored
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
AX58100-stm32-ethercat-backups
|
||||||
|
.~lock*
|
||||||
|
fp-info-cache
|
||||||
|
\#auto_saved_file*
|
||||||
|
gerbers/
|
||||||
|
Ax58100-stm32-ethercat-backups/
|
||||||
|
freerouting.*
|
||||||
|
*.dsn
|
||||||
|
*.frb
|
||||||
|
*.rules
|
||||||
|
*.ses
|
||||||
|
|
||||||
|
Ax58100-stm32-ethercat.csv
|
||||||
|
Ax58100-stm32-ethercat.ods
|
||||||
3983
Kicad/Ax58100-stm32-ethercat/AX48100.kicad_sch
Executable file
4792
Kicad/Ax58100-stm32-ethercat/AX58100_phy_etc.kicad_sch
Executable file
39288
Kicad/Ax58100-stm32-ethercat/Ax58100-stm32-ethercat.kicad_pcb
Executable file
78
Kicad/Ax58100-stm32-ethercat/Ax58100-stm32-ethercat.kicad_prl
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
{
|
||||||
|
"board": {
|
||||||
|
"active_layer": 36,
|
||||||
|
"active_layer_preset": "",
|
||||||
|
"auto_track_width": true,
|
||||||
|
"hidden_netclasses": [],
|
||||||
|
"hidden_nets": [],
|
||||||
|
"high_contrast_mode": 0,
|
||||||
|
"net_color_mode": 1,
|
||||||
|
"opacity": {
|
||||||
|
"images": 0.6,
|
||||||
|
"pads": 1.0,
|
||||||
|
"tracks": 1.0,
|
||||||
|
"vias": 1.0,
|
||||||
|
"zones": 0.6
|
||||||
|
},
|
||||||
|
"ratsnest_display_mode": 0,
|
||||||
|
"selection_filter": {
|
||||||
|
"dimensions": true,
|
||||||
|
"footprints": true,
|
||||||
|
"graphics": true,
|
||||||
|
"keepouts": true,
|
||||||
|
"lockedItems": false,
|
||||||
|
"otherItems": true,
|
||||||
|
"pads": true,
|
||||||
|
"text": true,
|
||||||
|
"tracks": true,
|
||||||
|
"vias": true,
|
||||||
|
"zones": true
|
||||||
|
},
|
||||||
|
"visible_items": [
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
3,
|
||||||
|
4,
|
||||||
|
5,
|
||||||
|
8,
|
||||||
|
9,
|
||||||
|
10,
|
||||||
|
11,
|
||||||
|
12,
|
||||||
|
13,
|
||||||
|
15,
|
||||||
|
16,
|
||||||
|
17,
|
||||||
|
18,
|
||||||
|
19,
|
||||||
|
20,
|
||||||
|
21,
|
||||||
|
22,
|
||||||
|
23,
|
||||||
|
24,
|
||||||
|
25,
|
||||||
|
26,
|
||||||
|
27,
|
||||||
|
28,
|
||||||
|
29,
|
||||||
|
30,
|
||||||
|
32,
|
||||||
|
33,
|
||||||
|
34,
|
||||||
|
35,
|
||||||
|
36,
|
||||||
|
39,
|
||||||
|
40
|
||||||
|
],
|
||||||
|
"visible_layers": "ffc0000_ffffffff",
|
||||||
|
"zone_display_mode": 0
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
"filename": "Ax58100-stm32-ethercat.kicad_prl",
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"project": {
|
||||||
|
"files": []
|
||||||
|
}
|
||||||
|
}
|
||||||
514
Kicad/Ax58100-stm32-ethercat/Ax58100-stm32-ethercat.kicad_pro
Executable file
@@ -0,0 +1,514 @@
|
|||||||
|
{
|
||||||
|
"board": {
|
||||||
|
"3dviewports": [],
|
||||||
|
"design_settings": {
|
||||||
|
"defaults": {
|
||||||
|
"board_outline_line_width": 0.09999999999999999,
|
||||||
|
"copper_line_width": 0.19999999999999998,
|
||||||
|
"copper_text_italic": false,
|
||||||
|
"copper_text_size_h": 1.5,
|
||||||
|
"copper_text_size_v": 1.5,
|
||||||
|
"copper_text_thickness": 0.3,
|
||||||
|
"copper_text_upright": false,
|
||||||
|
"courtyard_line_width": 0.049999999999999996,
|
||||||
|
"dimension_precision": 4,
|
||||||
|
"dimension_units": 3,
|
||||||
|
"dimensions": {
|
||||||
|
"arrow_length": 1270000,
|
||||||
|
"extension_offset": 500000,
|
||||||
|
"keep_text_aligned": true,
|
||||||
|
"suppress_zeroes": false,
|
||||||
|
"text_position": 0,
|
||||||
|
"units_format": 1
|
||||||
|
},
|
||||||
|
"fab_line_width": 0.09999999999999999,
|
||||||
|
"fab_text_italic": false,
|
||||||
|
"fab_text_size_h": 0.6,
|
||||||
|
"fab_text_size_v": 1.0,
|
||||||
|
"fab_text_thickness": 0.15,
|
||||||
|
"fab_text_upright": false,
|
||||||
|
"other_line_width": 0.15,
|
||||||
|
"other_text_italic": false,
|
||||||
|
"other_text_size_h": 0.6,
|
||||||
|
"other_text_size_v": 1.0,
|
||||||
|
"other_text_thickness": 0.15,
|
||||||
|
"other_text_upright": false,
|
||||||
|
"pads": {
|
||||||
|
"drill": 0.762,
|
||||||
|
"height": 1.524,
|
||||||
|
"width": 1.524
|
||||||
|
},
|
||||||
|
"silk_line_width": 0.15,
|
||||||
|
"silk_text_italic": false,
|
||||||
|
"silk_text_size_h": 0.6,
|
||||||
|
"silk_text_size_v": 1.0,
|
||||||
|
"silk_text_thickness": 0.15,
|
||||||
|
"silk_text_upright": false,
|
||||||
|
"zones": {
|
||||||
|
"45_degree_only": false,
|
||||||
|
"min_clearance": 0.0
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"diff_pair_dimensions": [
|
||||||
|
{
|
||||||
|
"gap": 0.0,
|
||||||
|
"via_gap": 0.0,
|
||||||
|
"width": 0.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"drc_exclusions": [],
|
||||||
|
"meta": {
|
||||||
|
"version": 2
|
||||||
|
},
|
||||||
|
"rule_severities": {
|
||||||
|
"annular_width": "error",
|
||||||
|
"clearance": "error",
|
||||||
|
"connection_width": "warning",
|
||||||
|
"copper_edge_clearance": "error",
|
||||||
|
"copper_sliver": "warning",
|
||||||
|
"courtyards_overlap": "error",
|
||||||
|
"diff_pair_gap_out_of_range": "error",
|
||||||
|
"diff_pair_uncoupled_length_too_long": "error",
|
||||||
|
"drill_out_of_range": "error",
|
||||||
|
"duplicate_footprints": "warning",
|
||||||
|
"extra_footprint": "warning",
|
||||||
|
"footprint": "error",
|
||||||
|
"footprint_type_mismatch": "warning",
|
||||||
|
"hole_clearance": "error",
|
||||||
|
"hole_near_hole": "error",
|
||||||
|
"invalid_outline": "error",
|
||||||
|
"isolated_copper": "warning",
|
||||||
|
"item_on_disabled_layer": "error",
|
||||||
|
"items_not_allowed": "error",
|
||||||
|
"length_out_of_range": "error",
|
||||||
|
"lib_footprint_issues": "warning",
|
||||||
|
"lib_footprint_mismatch": "warning",
|
||||||
|
"malformed_courtyard": "error",
|
||||||
|
"microvia_drill_out_of_range": "error",
|
||||||
|
"missing_courtyard": "error",
|
||||||
|
"missing_footprint": "warning",
|
||||||
|
"net_conflict": "warning",
|
||||||
|
"npth_inside_courtyard": "warning",
|
||||||
|
"padstack": "warning",
|
||||||
|
"pth_inside_courtyard": "warning",
|
||||||
|
"shorting_items": "error",
|
||||||
|
"silk_edge_clearance": "warning",
|
||||||
|
"silk_over_copper": "warning",
|
||||||
|
"silk_overlap": "warning",
|
||||||
|
"skew_out_of_range": "error",
|
||||||
|
"solder_mask_bridge": "error",
|
||||||
|
"starved_thermal": "error",
|
||||||
|
"text_height": "warning",
|
||||||
|
"text_thickness": "warning",
|
||||||
|
"through_hole_pad_without_hole": "error",
|
||||||
|
"too_many_vias": "error",
|
||||||
|
"track_dangling": "warning",
|
||||||
|
"track_width": "error",
|
||||||
|
"tracks_crossing": "error",
|
||||||
|
"unconnected_items": "error",
|
||||||
|
"unresolved_variable": "error",
|
||||||
|
"via_dangling": "warning",
|
||||||
|
"zones_intersect": "error"
|
||||||
|
},
|
||||||
|
"rules": {
|
||||||
|
"allow_blind_buried_vias": false,
|
||||||
|
"allow_microvias": false,
|
||||||
|
"max_error": 0.005,
|
||||||
|
"min_clearance": 0.0,
|
||||||
|
"min_connection": 0.0,
|
||||||
|
"min_copper_edge_clearance": 0.0,
|
||||||
|
"min_hole_clearance": 0.25,
|
||||||
|
"min_hole_to_hole": 0.25,
|
||||||
|
"min_microvia_diameter": 0.19999999999999998,
|
||||||
|
"min_microvia_drill": 0.09999999999999999,
|
||||||
|
"min_resolved_spokes": 2,
|
||||||
|
"min_silk_clearance": 0.0,
|
||||||
|
"min_text_height": 0.6,
|
||||||
|
"min_text_thickness": 0.08,
|
||||||
|
"min_through_hole_diameter": 0.3,
|
||||||
|
"min_track_width": 0.19999999999999998,
|
||||||
|
"min_via_annular_width": 0.09999999999999999,
|
||||||
|
"min_via_diameter": 0.5,
|
||||||
|
"solder_mask_clearance": 0.0,
|
||||||
|
"solder_mask_min_width": 0.0,
|
||||||
|
"solder_mask_to_copper_clearance": 0.0,
|
||||||
|
"use_height_for_length_calcs": true
|
||||||
|
},
|
||||||
|
"teardrop_options": [
|
||||||
|
{
|
||||||
|
"td_allow_use_two_tracks": true,
|
||||||
|
"td_curve_segcount": 5,
|
||||||
|
"td_on_pad_in_zone": false,
|
||||||
|
"td_onpadsmd": true,
|
||||||
|
"td_onroundshapesonly": false,
|
||||||
|
"td_ontrackend": false,
|
||||||
|
"td_onviapad": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"teardrop_parameters": [
|
||||||
|
{
|
||||||
|
"td_curve_segcount": 0,
|
||||||
|
"td_height_ratio": 1.0,
|
||||||
|
"td_length_ratio": 0.5,
|
||||||
|
"td_maxheight": 2.0,
|
||||||
|
"td_maxlen": 1.0,
|
||||||
|
"td_target_name": "td_round_shape",
|
||||||
|
"td_width_to_size_filter_ratio": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"td_curve_segcount": 0,
|
||||||
|
"td_height_ratio": 1.0,
|
||||||
|
"td_length_ratio": 0.5,
|
||||||
|
"td_maxheight": 2.0,
|
||||||
|
"td_maxlen": 1.0,
|
||||||
|
"td_target_name": "td_rect_shape",
|
||||||
|
"td_width_to_size_filter_ratio": 0.9
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"td_curve_segcount": 0,
|
||||||
|
"td_height_ratio": 1.0,
|
||||||
|
"td_length_ratio": 0.5,
|
||||||
|
"td_maxheight": 2.0,
|
||||||
|
"td_maxlen": 1.0,
|
||||||
|
"td_target_name": "td_track_end",
|
||||||
|
"td_width_to_size_filter_ratio": 0.9
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"track_widths": [
|
||||||
|
0.0
|
||||||
|
],
|
||||||
|
"via_dimensions": [
|
||||||
|
{
|
||||||
|
"diameter": 0.0,
|
||||||
|
"drill": 0.0
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"zones_allow_external_fillets": false,
|
||||||
|
"zones_use_no_outline": true
|
||||||
|
},
|
||||||
|
"layer_presets": [],
|
||||||
|
"viewports": []
|
||||||
|
},
|
||||||
|
"boards": [],
|
||||||
|
"cvpcb": {
|
||||||
|
"equivalence_files": []
|
||||||
|
},
|
||||||
|
"erc": {
|
||||||
|
"erc_exclusions": [],
|
||||||
|
"meta": {
|
||||||
|
"version": 0
|
||||||
|
},
|
||||||
|
"pin_map": [
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
1,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
0,
|
||||||
|
2,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
2
|
||||||
|
],
|
||||||
|
[
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"rule_severities": {
|
||||||
|
"bus_definition_conflict": "error",
|
||||||
|
"bus_entry_needed": "error",
|
||||||
|
"bus_to_bus_conflict": "error",
|
||||||
|
"bus_to_net_conflict": "error",
|
||||||
|
"conflicting_netclasses": "error",
|
||||||
|
"different_unit_footprint": "error",
|
||||||
|
"different_unit_net": "error",
|
||||||
|
"duplicate_reference": "error",
|
||||||
|
"duplicate_sheet_names": "error",
|
||||||
|
"endpoint_off_grid": "warning",
|
||||||
|
"extra_units": "error",
|
||||||
|
"global_label_dangling": "warning",
|
||||||
|
"hier_label_mismatch": "error",
|
||||||
|
"label_dangling": "error",
|
||||||
|
"lib_symbol_issues": "warning",
|
||||||
|
"missing_bidi_pin": "warning",
|
||||||
|
"missing_input_pin": "warning",
|
||||||
|
"missing_power_pin": "error",
|
||||||
|
"missing_unit": "warning",
|
||||||
|
"multiple_net_names": "warning",
|
||||||
|
"net_not_bus_member": "warning",
|
||||||
|
"no_connect_connected": "warning",
|
||||||
|
"no_connect_dangling": "warning",
|
||||||
|
"pin_not_connected": "error",
|
||||||
|
"pin_not_driven": "error",
|
||||||
|
"pin_to_pin": "error",
|
||||||
|
"power_pin_not_driven": "error",
|
||||||
|
"similar_labels": "warning",
|
||||||
|
"simulation_model_issue": "ignore",
|
||||||
|
"unannotated": "error",
|
||||||
|
"unit_value_mismatch": "error",
|
||||||
|
"unresolved_variable": "error",
|
||||||
|
"wire_dangling": "error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"pinned_footprint_libs": [],
|
||||||
|
"pinned_symbol_libs": []
|
||||||
|
},
|
||||||
|
"meta": {
|
||||||
|
"filename": "Ax58100-stm32-ethercat.kicad_pro",
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"net_settings": {
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"bus_width": 12,
|
||||||
|
"clearance": 0.15,
|
||||||
|
"diff_pair_gap": 0.25,
|
||||||
|
"diff_pair_via_gap": 0.25,
|
||||||
|
"diff_pair_width": 0.2,
|
||||||
|
"line_style": 0,
|
||||||
|
"microvia_diameter": 0.3,
|
||||||
|
"microvia_drill": 0.1,
|
||||||
|
"name": "Default",
|
||||||
|
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||||
|
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||||
|
"track_width": 0.2,
|
||||||
|
"via_diameter": 0.8,
|
||||||
|
"via_drill": 0.4,
|
||||||
|
"wire_width": 6
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"version": 3
|
||||||
|
},
|
||||||
|
"net_colors": null,
|
||||||
|
"netclass_assignments": null,
|
||||||
|
"netclass_patterns": []
|
||||||
|
},
|
||||||
|
"pcbnew": {
|
||||||
|
"last_paths": {
|
||||||
|
"gencad": "",
|
||||||
|
"idf": "",
|
||||||
|
"netlist": "C:/Program Files/KiCad/7.0/",
|
||||||
|
"specctra_dsn": "Ax58100-stm32-ethercat.dsn",
|
||||||
|
"step": "",
|
||||||
|
"vrml": ""
|
||||||
|
},
|
||||||
|
"page_layout_descr_file": ""
|
||||||
|
},
|
||||||
|
"schematic": {
|
||||||
|
"annotate_start_num": 0,
|
||||||
|
"drawing": {
|
||||||
|
"dashed_lines_dash_length_ratio": 12.0,
|
||||||
|
"dashed_lines_gap_length_ratio": 3.0,
|
||||||
|
"default_line_thickness": 6.0,
|
||||||
|
"default_text_size": 50.0,
|
||||||
|
"field_names": [],
|
||||||
|
"intersheets_ref_own_page": false,
|
||||||
|
"intersheets_ref_prefix": "",
|
||||||
|
"intersheets_ref_short": false,
|
||||||
|
"intersheets_ref_show": false,
|
||||||
|
"intersheets_ref_suffix": "",
|
||||||
|
"junction_size_choice": 3,
|
||||||
|
"label_size_ratio": 0.375,
|
||||||
|
"pin_symbol_size": 25.0,
|
||||||
|
"text_offset_ratio": 0.15
|
||||||
|
},
|
||||||
|
"legacy_lib_dir": "",
|
||||||
|
"legacy_lib_list": [],
|
||||||
|
"meta": {
|
||||||
|
"version": 1
|
||||||
|
},
|
||||||
|
"net_format_name": "",
|
||||||
|
"page_layout_descr_file": "",
|
||||||
|
"plot_directory": "",
|
||||||
|
"spice_current_sheet_as_root": false,
|
||||||
|
"spice_external_command": "spice \"%I\"",
|
||||||
|
"spice_model_current_sheet_as_root": true,
|
||||||
|
"spice_save_all_currents": false,
|
||||||
|
"spice_save_all_voltages": false,
|
||||||
|
"subpart_first_id": 65,
|
||||||
|
"subpart_id_separator": 0
|
||||||
|
},
|
||||||
|
"sheets": [
|
||||||
|
[
|
||||||
|
"5597aedc-b607-407f-bbfd-31b3b298ecb1",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"9f485422-734f-43d3-94ea-443cbc453d2e",
|
||||||
|
"AX58100"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"5bf93325-f5d9-4344-9bf3-f5fc91bc1622",
|
||||||
|
"AX58100 phys etc"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"d564400f-40ba-4aca-9c2a-14ec52a8353b",
|
||||||
|
"STM32F4"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"0a376a6c-0f15-42f8-81f6-3a55619be267",
|
||||||
|
"Input-Output"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"cd91a270-7393-4003-91a3-e42304da540b",
|
||||||
|
"Stepper+encoder"
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"text_variables": {}
|
||||||
|
}
|
||||||
103
Kicad/Ax58100-stm32-ethercat/Ax58100-stm32-ethercat.kicad_sch
Executable file
@@ -0,0 +1,103 @@
|
|||||||
|
(kicad_sch (version 20230121) (generator eeschema)
|
||||||
|
|
||||||
|
(uuid 5597aedc-b607-407f-bbfd-31b3b298ecb1)
|
||||||
|
|
||||||
|
(paper "A4")
|
||||||
|
|
||||||
|
(title_block
|
||||||
|
(title "MetalMusings EaserCAT 3000")
|
||||||
|
)
|
||||||
|
|
||||||
|
(lib_symbols
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
(sheet (at 57.15 156.21) (size 93.98 39.37) (fields_autoplaced)
|
||||||
|
(stroke (width 0.1524) (type solid))
|
||||||
|
(fill (color 0 0 0 0.0000))
|
||||||
|
(uuid 0a376a6c-0f15-42f8-81f6-3a55619be267)
|
||||||
|
(property "Sheetname" "Input-Output" (at 57.15 155.4984 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||||
|
)
|
||||||
|
(property "Sheetfile" "peripherals.kicad_sch" (at 57.15 196.1646 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left top))
|
||||||
|
)
|
||||||
|
(instances
|
||||||
|
(project "Ax58100-stm32-ethercat"
|
||||||
|
(path "/5597aedc-b607-407f-bbfd-31b3b298ecb1" (page "5"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(sheet (at 170.18 31.75) (size 101.6 58.42) (fields_autoplaced)
|
||||||
|
(stroke (width 0.1524) (type solid))
|
||||||
|
(fill (color 0 0 0 0.0000))
|
||||||
|
(uuid 5bf93325-f5d9-4344-9bf3-f5fc91bc1622)
|
||||||
|
(property "Sheetname" "AX58100 phys etc" (at 170.18 31.0384 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||||
|
)
|
||||||
|
(property "Sheetfile" "AX58100_phy_etc.kicad_sch" (at 170.18 90.7546 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left top))
|
||||||
|
)
|
||||||
|
(instances
|
||||||
|
(project "Ax58100-stm32-ethercat"
|
||||||
|
(path "/5597aedc-b607-407f-bbfd-31b3b298ecb1" (page "3"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(sheet (at 57.15 31.75) (size 93.98 60.96) (fields_autoplaced)
|
||||||
|
(stroke (width 0.1524) (type solid))
|
||||||
|
(fill (color 0 0 0 0.0000))
|
||||||
|
(uuid 9f485422-734f-43d3-94ea-443cbc453d2e)
|
||||||
|
(property "Sheetname" "AX58100" (at 57.15 31.0384 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||||
|
)
|
||||||
|
(property "Sheetfile" "AX48100.kicad_sch" (at 57.15 93.2946 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left top))
|
||||||
|
)
|
||||||
|
(instances
|
||||||
|
(project "Ax58100-stm32-ethercat"
|
||||||
|
(path "/5597aedc-b607-407f-bbfd-31b3b298ecb1" (page "2"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(sheet (at 171.45 156.21) (size 105.41 39.37) (fields_autoplaced)
|
||||||
|
(stroke (width 0.1524) (type solid))
|
||||||
|
(fill (color 0 0 0 0.0000))
|
||||||
|
(uuid cd91a270-7393-4003-91a3-e42304da540b)
|
||||||
|
(property "Sheetname" "Stepper+encoder" (at 171.45 155.4984 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||||
|
)
|
||||||
|
(property "Sheetfile" "Steppers.kicad_sch" (at 171.45 196.1646 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left top))
|
||||||
|
)
|
||||||
|
(instances
|
||||||
|
(project "Ax58100-stm32-ethercat"
|
||||||
|
(path "/5597aedc-b607-407f-bbfd-31b3b298ecb1" (page "6"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(sheet (at 57.15 106.68) (size 93.98 35.56) (fields_autoplaced)
|
||||||
|
(stroke (width 0.1524) (type solid))
|
||||||
|
(fill (color 0 0 0 0.0000))
|
||||||
|
(uuid d564400f-40ba-4aca-9c2a-14ec52a8353b)
|
||||||
|
(property "Sheetname" "STM32F4" (at 57.15 105.9684 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left bottom))
|
||||||
|
)
|
||||||
|
(property "Sheetfile" "STM32F4.kicad_sch" (at 57.15 142.8246 0)
|
||||||
|
(effects (font (size 1.27 1.27)) (justify left top))
|
||||||
|
)
|
||||||
|
(instances
|
||||||
|
(project "Ax58100-stm32-ethercat"
|
||||||
|
(path "/5597aedc-b607-407f-bbfd-31b3b298ecb1" (page "4"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(sheet_instances
|
||||||
|
(path "/" (page "1"))
|
||||||
|
)
|
||||||
|
)
|
||||||
2888
Kicad/Ax58100-stm32-ethercat/Ax58100-stm32-ethercat.xml
Executable file
4103
Kicad/Ax58100-stm32-ethercat/STM32F4.kicad_sch
Executable file
2437
Kicad/Ax58100-stm32-ethercat/Steppers.kicad_sch
Executable file
4302
Kicad/Ax58100-stm32-ethercat/peripherals.kicad_sch
Executable file
3
Kicad/Ethercat-stm32/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fp-info-cache
|
||||||
|
Ethercat-stm32-backup*
|
||||||
|
*.lck
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
39,
|
39,
|
||||||
40
|
40
|
||||||
],
|
],
|
||||||
"visible_layers": "002ffe8_00000001",
|
"visible_layers": "002202b_80000005",
|
||||||
"zone_display_mode": 0
|
"zone_display_mode": 0
|
||||||
},
|
},
|
||||||
"meta": {
|
"meta": {
|
||||||