EasyControl ethercat总线 精简主从站方案
EasyControl ETHERCAT总线 精简主从站方案测试视频:http://v.youku.com/v_show/id_XMzgyMzQ0NDY1Ng==.html?spm=a2h3j.8428770.3416059.1
按下按钮,电机正转(脉冲输出让灯亮); 再按一下,电机停下; 再按一下,电机反转; 再按一下,电机停下。
stm32h743做ethercat主站,有1个(xmc4300+ep4ce6e22)ethercat 402从站。
stm32h743是ST的cortex-m7的400M时钟,1M的RAM的32位MCU。
NUCLEO-H743ZI是ST官方的基于stm32h743的开发板。
处理周期1ms,ethercat总线用是的csp模式周期位置同步。
EtherCat主站代码是SOEM。
EtherCat主站主要参考https://github.com/sittner/linuxcnc-ethercat。
stm32h743开发IDE:KEIL5.25。
MCU的开发IDE:https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases
FPGA的开发IDE:https://www.altera.com.cn/downloads/download-center.html
处理过程:
1)写一个主站配置的xml文件。
2)PC上的一个软件对xml文件处理自动生成ethercat_conf.c与ethercat_var.h文件。
3)ethercat_conf.c与ethercat_var.h文件放到stm32h743的项目中。
ethercat_var.h是通信变量定义。
主站main部分代码:
int main(void)
{
/* USER CODE BEGIN 1 */
uint64_t cnt = 0;
int process_state = -10;
int key_cnt = 0;
double delta=0;
/* USER CODE END 1 */
/* MPU Configuration----------------------------------------------------------*/
MPU_Config();
/* Enable I-Cache-------------------------------------------------------------*/
SCB_EnableICache();
/* Enable D-Cache-------------------------------------------------------------*/
SCB_EnableDCache();
/* MCU Configuration----------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART3_UART_Init();
MX_TIM2_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim2);
HAL_GPIO_TogglePin(GPIOB, LD2_Pin);
cnt = get_clock();
while(get_clock()<cnt+5000000000);
ethernet_init();
memset(0x24000000, 0, 512 * 1024);
HAL_GPIO_TogglePin(GPIOB, LD3_Pin);
cnt = get_clock();
while(get_clock()<cnt+1000000000);
rtapi_app_main_ethercat();
HAL_GPIO_WritePin(GPIOB,LD2_Pin,0);
HAL_GPIO_WritePin(GPIOB,LD3_Pin,0);
*ethercat_0_1_0_cmd_SwitchOn = 1;
*ethercat_0_1_0_cmd_EnableVoltage = 1;
*ethercat_0_1_0_cmd__QuickStop = 1;
*ethercat_0_1_0_cmd_EnableOperation = 1;
*ethercat_0_1_0_cmd_FaultReset = 0;
*ethercat_0_1_STEP_LEN = 4;
*ethercat_0_1_STEP_DIR = 10;
*ethercat_0_1_IO_OUT_POLARITY = 0x14000;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while(1){
rtapi_wait();
lcec_write_all(0,1000000);
lcec_read_all(0,1000000);
if(process_state<0) process_state++;
if(process_state==-1){
*ethercat_0_1_0_target = *ethercat_0_1_0_position;
}
HAL_GPIO_WritePin(GPIOB,LD2_Pin,process_state&1);
HAL_GPIO_WritePin(GPIOB,LD3_Pin,(process_state>>1)&1);
if(HAL_GPIO_ReadPin(USER_Btn_GPIO_Port,USER_Btn_Pin)){
if(key_cnt<=100)
key_cnt++;
if(key_cnt==100){
process_state++;
process_state = process_state&3;
}
}else
key_cnt = 0;
delta = 0;
if(process_state==1) delta = 0.001;
if(process_state==3) delta = -0.001;
*ethercat_0_1_0_target += delta;
}
/* USER CODE END 3 */
}
ethercat_0_1_0_*变量在ethercat_var.h中自动定义。
XML文件:
<masters>
<master idx="0" appTimePeriod="500000" refClockSyncCycles="5">
<slave idx="1" type="generic" vid="00000002" pid="1a5f3052" configPdos="false">
<sdoConfig idx="f030" subIdx="complete">
<sdoDataRaw data="06 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00 00 98 21 00"/>
</sdoConfig>
<sdoConfig idx="6060" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="6860" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="7060" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="7860" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="8060" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="8860" subIdx="0">
<sdoDataRaw data="08"/>
</sdoConfig>
<sdoConfig idx="6040" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="6840" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="7040" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="7840" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="8040" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="8840" subIdx="0">
<sdoDataRaw data="80 00"/>
</sdoConfig>
<sdoConfig idx="6510" subIdx="1">
<sdoDataRaw data="00 00 00 00"/>
</sdoConfig>
<sdoConfig idx="6080" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="60c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<sdoConfig idx="6880" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="68c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<sdoConfig idx="7080" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="70c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<sdoConfig idx="7880" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="78c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<sdoConfig idx="8080" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="80c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<sdoConfig idx="8880" subIdx="0">
<sdoDataRaw data="00 26 02 00"/>
</sdoConfig>
<sdoConfig idx="88c5" subIdx="0">
<sdoDataRaw data="00 7c 15 00"/>
</sdoConfig>
<dcConf assignActivate="300" sync0Cycle="*1" sync0Shift="000"/>
<syncManager idx="0" dir="out"/>
<syncManager idx="1" dir="in"/>
<syncManager idx="2" dir="out">
<pdo idx="1601">
<pdoEntry idx="6040" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="0-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="0-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="607a" subIdx="00" bitLen="32" halPin="0-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="60FE" subIdx="01" bitLen="32" halType="complex">
<complexEntry bitLen="1" halPin="O00" halType="bit"/>
<complexEntry bitLen="1" halPin="O01" halType="bit"/>
<complexEntry bitLen="1" halPin="O02" halType="bit"/>
<complexEntry bitLen="1" halPin="O03" halType="bit"/>
<complexEntry bitLen="1" halPin="O04" halType="bit"/>
<complexEntry bitLen="1" halPin="O05" halType="bit"/>
<complexEntry bitLen="1" halPin="O06" halType="bit"/>
<complexEntry bitLen="1" halPin="O07" halType="bit"/>
<complexEntry bitLen="1" halPin="O08" halType="bit"/>
<complexEntry bitLen="1" halPin="O09" halType="bit"/>
<complexEntry bitLen="1" halPin="O10" halType="bit"/>
<complexEntry bitLen="1" halPin="O11" halType="bit"/>
<complexEntry bitLen="1" halPin="O12" halType="bit"/>
<complexEntry bitLen="1" halPin="O13" halType="bit"/>
<complexEntry bitLen="1" halPin="O14" halType="bit"/>
<complexEntry bitLen="1" halPin="O15" halType="bit"/>
<complexEntry bitLen="1" halPin="O16" halType="bit"/>
<complexEntry bitLen="1" halPin="O17" halType="bit"/>
<complexEntry bitLen="1" halPin="O18" halType="bit"/>
<complexEntry bitLen="1" halPin="O19" halType="bit"/>
<complexEntry bitLen="1" halPin="O20" halType="bit"/>
<complexEntry bitLen="1" halPin="O21" halType="bit"/>
<complexEntry bitLen="1" halPin="O22" halType="bit"/>
<complexEntry bitLen="1" halPin="O23" halType="bit"/>
<complexEntry bitLen="1" halPin="O24" halType="bit"/>
</pdoEntry>
</pdo>
<pdo idx="1611">
<pdoEntry idx="6840" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="1-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="1-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="687a" subIdx="00" bitLen="32" halPin="1-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="68FE" subIdx="01" bitLen="32" halPin="IO_OUT_POLARITY" halType="u32"/>
</pdo>
<pdo idx="1621">
<pdoEntry idx="7040" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="2-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="2-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="707a" subIdx="00" bitLen="32" halPin="2-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="70FE" subIdx="01" bitLen="32" halType="complex">
<complexEntry bitLen="16" halPin="PWM_CYCLE" halType="u32"/>
<complexEntry bitLen="16" halPin="PWM_DUTY" halType="u32"/>
</pdoEntry>
</pdo>
<pdo idx="1631">
<pdoEntry idx="7840" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="3-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="3-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="787a" subIdx="00" bitLen="32" halPin="3-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="78FE" subIdx="01" bitLen="32" halPin="IO_IN_POLARITY0" halType="u32"/>
</pdo>
<pdo idx="1641">
<pdoEntry idx="8040" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="4-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="4-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="807a" subIdx="00" bitLen="32" halPin="4-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="80FE" subIdx="01" bitLen="32" halPin="IO_IN_POLARITY1" halType="u32"/>
</pdo>
<pdo idx="1651">
<pdoEntry idx="8840" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="5-cmd-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-EnableVoltage" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-/QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-EnableOperation" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-NewSetpoint" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-ChangeSetImmediatly" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-RelativPos" halType="bit"/>
<complexEntry bitLen="1" halPin="5-cmd-FaultReset" halType="bit"/>
</pdoEntry>
<pdoEntry idx="887a" subIdx="00" bitLen="32" halPin="5-target" halType="float" scale="2560.0" offset="0"/>
<pdoEntry idx="88FE" subIdx="01" bitLen="32" halType="complex">
<complexEntry bitLen="16" halPin="STEP_LEN" halType="u32"/>
<complexEntry bitLen="16" halPin="STEP_DIR" halType="u32"/>
</pdoEntry>
</pdo>
</syncManager>
<syncManager idx="3" dir="in">
<pdo idx="1a01">
<pdoEntry idx="6041" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="0-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="0-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="6064" subIdx="00" bitLen="32" halPin="0-position" halType="float" scale="0.000390625" offset="0"/>
<pdoEntry idx="60FD" subIdx="00" bitLen="32" halType="complex">
<complexEntry bitLen="1" halPin="I00" halType="bit"/>
<complexEntry bitLen="1" halPin="I01" halType="bit"/>
<complexEntry bitLen="1" halPin="I02" halType="bit"/>
<complexEntry bitLen="1" halPin="I03" halType="bit"/>
<complexEntry bitLen="1" halPin="I04" halType="bit"/>
<complexEntry bitLen="1" halPin="I05" halType="bit"/>
<complexEntry bitLen="1" halPin="I06" halType="bit"/>
<complexEntry bitLen="1" halPin="I07" halType="bit"/>
<complexEntry bitLen="1" halPin="I08" halType="bit"/>
<complexEntry bitLen="1" halPin="I09" halType="bit"/>
<complexEntry bitLen="1" halPin="I10" halType="bit"/>
<complexEntry bitLen="1" halPin="I11" halType="bit"/>
<complexEntry bitLen="1" halPin="I12" halType="bit"/>
<complexEntry bitLen="1" halPin="I13" halType="bit"/>
<complexEntry bitLen="1" halPin="I14" halType="bit"/>
<complexEntry bitLen="1" halPin="I15" halType="bit"/>
<complexEntry bitLen="1" halPin="I16" halType="bit"/>
<complexEntry bitLen="1" halPin="I17" halType="bit"/>
<complexEntry bitLen="1" halPin="I18" halType="bit"/>
<complexEntry bitLen="1" halPin="I19" halType="bit"/>
<complexEntry bitLen="1" halPin="I20" halType="bit"/>
<complexEntry bitLen="1" halPin="I21" halType="bit"/>
<complexEntry bitLen="1" halPin="I22" halType="bit"/>
<complexEntry bitLen="1" halPin="I23" halType="bit"/>
<complexEntry bitLen="1" halPin="I24" halType="bit"/>
<complexEntry bitLen="1" halPin="I25" halType="bit"/>
<complexEntry bitLen="1" halPin="I26" halType="bit"/>
<complexEntry bitLen="1" halPin="I27" halType="bit"/>
<complexEntry bitLen="1" halPin="I28" halType="bit"/>
<complexEntry bitLen="1" halPin="I29" halType="bit"/>
<complexEntry bitLen="1" halPin="I30" halType="bit"/>
<complexEntry bitLen="1" halPin="I31" halType="bit"/>
</pdoEntry>
</pdo>
<pdo idx="1a11">
<pdoEntry idx="6841" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="1-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="1-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="6864" subIdx="00" bitLen="32" halPin="1-position" halType="float" scale="0.000390625" offset="0"/>
<pdoEntry idx="68FD" subIdx="00" bitLen="32" halType="complex">
<complexEntry bitLen="1" halPin="I32" halType="bit"/>
<complexEntry bitLen="1" halPin="I33" halType="bit"/>
<complexEntry bitLen="1" halPin="I34" halType="bit"/>
<complexEntry bitLen="1" halPin="I35" halType="bit"/>
<complexEntry bitLen="1" halPin="I36" halType="bit"/>
<complexEntry bitLen="1" halPin="I37" halType="bit"/>
<complexEntry bitLen="1" halPin="I38" halType="bit"/>
</pdoEntry>
</pdo>
<pdo idx="1a21">
<pdoEntry idx="7041" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="2-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="2-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="7064" subIdx="00" bitLen="32" halPin="2-position" halType="float" scale="0.000390625" offset="0"/>
<pdoEntry idx="70FD" subIdx="00" bitLen="32" halPin="QUAD_CNT_A" halType="S32"/>
</pdo>
<pdo idx="1a31">
<pdoEntry idx="7841" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="3-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="3-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="7864" subIdx="00" bitLen="32" halPin="3-position" halType="float" scale="0.000390625" offset="0"/>
<pdoEntry idx="78FD" subIdx="00" bitLen="32" halPin="QUAD_CNT_B" halType="S32"/>
</pdo>
<pdo idx="1a41">
<pdoEntry idx="8041" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="4-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="4-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="8064" subIdx="00" bitLen="32" halPin="4-position" halType="float" scale="0.000390625" offset="0"/>
<pdoEntry idx="80FD" subIdx="00" bitLen="32" halPin="COMM_ERR_CNT" halType="u32"/>
</pdo>
<pdo idx="1a51">
<pdoEntry idx="8841" subIdx="00" bitLen="16" halType="complex">
<complexEntry bitLen="1" halPin="5-stat-ReadyToSwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-SwitchOn" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-OperationEnable" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-Fault" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-VoltageEnabled" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-QuickStop" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-SwitchOnDisable" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-Warning" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-HaltRequestActive" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-Remote" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-TargetIsReached" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-bit11" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-SetpointAck" halType="bit"/>
<complexEntry bitLen="1" halPin="5-stat-x_err" halType="bit"/>
</pdoEntry>
<pdoEntry idx="8864" subIdx="00" bitLen="32" halPin="5-position" halType="float" scale="0.000390625" offset="0"/>
</pdo>
</syncManager>
<watchdog divider="2498" intervals="2000"/>
</slave>
</master>
</masters> 啥玩意,伺服电机?
最近这技术贴回的人少了 用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms 这些东西很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc把一些常用的手动 通过按键 完成卖个几百块钱还能小赚点,给客户定制个界面啥的最好能跑个十轴8轴 有没有新出低成本从站方案? 关注下{:lol:}{:lol:}{:lol:} Slave 协议直接用FPGA实现? 同问低成本的!!!! 从站很多是用ET1100实现的吧 TigerFish 发表于 2018-10-30 17:06
啥玩意,伺服电机?
最近这技术贴回的人少了
ethercat总线是当前最流行的基于以太网的实时工业总线。 落叶知秋 发表于 2018-10-30 17:53
用过SOEM主站移植到M4里面去,接4个伺服测试跑起来也没啥问题,控制周期也是1ms ...
高手啊!
高高手啊!
我是费了很大力气才会用ethercat的。请多指教! 数控铣 发表于 2018-10-30 18:17
这些东西很难推广, 楼主有能力还是搞个 简易开发板 ,跑 linuxcnc把一些常用的手动 通过按键 完成卖 ...
好的。ethercat总线令人着迷。在总线的基础上有更多的发挥的。要找到一个点不容易的。 zhaogq 发表于 2018-10-30 18:25
有没有新出低成本从站方案?
网上有很多从站方案的。 picobox 发表于 2018-10-30 22:16
Slave 协议直接用FPGA实现?
fpga是大部分搞不定的。大多是chip带的。can大多也是mcu带的。IC上ethercat比can复杂10倍以上,mcu 带的总线接口好用。 阿豪博士 发表于 2018-10-30 22:29
同问低成本的!!!!
can总线成本会好很多了。 yamqqqq 发表于 2018-10-30 22:57
从站很多是用ET1100实现的吧
开始只有et1100,现在大都有集成到mcu中的。 论坛上ethercat的帖子不多,不过用的不少吧。 EasyControl 发表于 2018-10-31 11:46
高手啊!
高高手啊!
不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友好 ethercat总线令人着迷,可无耐入门难啊,有对象字典等。 看到过很多 XML 文件 这些有专门的编辑器吗? 看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。 EasyControl 发表于 2018-10-31 11:54
fpga是大部分搞不定的。大多是chip带的。can大多也是mcu带的。IC上ethercat比can复杂10倍以上,mcu 带的 ...
看到了,英飞凌那个MCU自带EtherCAT Slave
Master端移植简单吗? 落叶知秋 发表于 2018-10-31 12:03
不敢当。SOEM比较适合裸机开发的,简单。
不过不支持XML文件解析,配置要在代码里面固定好,这点就不太友 ...
是的,找canopen主站好用些的代码,都不好找。软件与canopen差不多。 bsz84 发表于 2018-10-31 13:01
ethercat总线令人着迷,可无耐入门难啊,有对象字典等。
做总线就是费力,费时间,上手了,就比较平坦些。学是要找资料,看资料,找板子练手。 阿豪博士 发表于 2018-10-31 16:51
看到过很多 XML 文件 这些有专门的编辑器吗?
有的,不过我没用。 zhang0352505 发表于 2018-10-31 16:54
看楼主搞的火热,但是我们这些人相当于隔岸观火啊。。。感受不到。。
我向大家学习。 picobox 发表于 2018-10-31 23:44
看到了,英飞凌那个MCU自带EtherCAT Slave
Master端移植简单吗?
主站从站都搞清楚了,再找一些代码参考下可以了。
就是要对很多资料要学,要做板子做练习,花时间就对了。
有时间,ethercat总线是可以用心学学的了。 EasyControl 发表于 2018-11-1 11:51
是的,找canopen主站好用些的代码,都不好找。软件与canopen差不多。
canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使用的就是CanOpen里面设备行规(Device Profile),基本一样的概念,只不过传输方式变了;
使用EtherCAT协议来控制电机,一般都是用COE协议,从站的电机驱动器一般都是支持COE,支持SOE(Sercos over EtherCAT)的比较少,所以熟悉CanOpen会上手更快些。 落叶知秋 发表于 2018-11-1 17:13
canopen协议比较出名的又开源的,也就CanFestival了;
EtherCAT的COE(Canopen Over EtherCAT)应用协议使 ...
高手,数控领域的高手 关注中。。。 我也想来应用学习这个总线 请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的数据都不对,位置也不能实时更新)
控制台达伺服,也是同样的问题,可以使能,但是不能转,(可以收发数据正常)
可能的问题是出在什么地方? asj1989 发表于 2019-1-19 15:40
请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的 ...
倍福的那个软件可以直接操作汇川伺服动作的,可以抓下包对照一下,多半是一些初始化的流程漏了东西,或者周期收发里少了东西 继续关注,希望楼主多讲讲如何移植Ethercat主站到MCU上 关注中。。。 落叶知秋 发表于 2019-1-19 17:34
倍福的那个软件可以直接操作汇川伺服动作的,可以抓下包对照一下,多半是一些初始化的流程漏了东西,或者 ...
是的,倍福twincat可以转起来,抓包也抓到了,比较了一下sync和fmmu的配置,基本一样。一抓包就是几万行数据,无从下手啊 asj1989 发表于 2019-1-19 21:56
是的,倍福twincat可以转起来,抓包也抓到了,比较了一下sync和fmmu的配置,基本一样。一抓包就是几万行 ...
那看看DC同步的那部分吧,以前调的时候记得DC时钟也要同步的 要做主站,也要做从站吧。
找一从站的板子,看代码跑一跑了。 ethcat主站成本大约多少钱,从站呢?谢谢!!
我安装twincat 兼容网卡的驱动后,win10就无法正常关机,如果禁用这个网卡,就没有问题,有人遇到过没 muok@sohu.com 发表于 2019-1-25 11:45
ethcat主站成本大约多少钱,从站呢?谢谢!!
主站一般STM32H743可以用一用了。stm32f407可能也可以。
从站要加100多RMB的成本。 nibia 发表于 2019-1-25 11:53
我安装twincat 兼容网卡的驱动后,win10就无法正常关机,如果禁用这个网卡,就没有问题,有人遇到过没 ...
我现在不怎么用windows了,twincat用的很少吧。 这个总线有一个最大的特点,就是贵,其实他的物理层和以太网是一样的,但如果硬件干扰不处理好,挺难搞,从站芯片都是必须要买的 asj1989 发表于 2019-1-19 15:40
请教一下lz,为什么我用soem控制汇川伺服,可以使能,电机却不能转是怎么回事?(可以发出去数据,但是收的 ...
后来问题有解决吗?我也遇到同样的问题:能使能但不能转。控制io模块是正常的 LCH201328 发表于 2019-11-15 07:54
后来问题有解决吗?我也遇到同样的问题:能使能但不能转。控制io模块是正常的 ...
解决了,汇川的伺服底层有问题。
后来我们换成松下伺服,一次性成功。
不使用汇川了。 asj1989 发表于 2019-11-15 10:56
解决了,汇川的伺服底层有问题。
后来我们换成松下伺服,一次性成功。
你是在裸机下测试的还是在liunx环境下测试的?我是在liunx环境下测试的,伺服电机是台达的。你们用这个soem主站运行起来稳定吗?有用在实际的项目上吗? LCH201328 发表于 2019-11-15 21:55
你是在裸机下测试的还是在liunx环境下测试的?我是在liunx环境下测试的,伺服电机是台达的。你们用这个so ...
我在stm32下面测试的,还算稳定,目前没出现幺蛾子。 stm32 soem 裸奔系统? asj1989 发表于 2019-11-15 22:48
我在stm32下面测试的,还算稳定,目前没出现幺蛾子。
带几个伺服电机啊?插补周期几毫秒?台达的电机用同样的条件还是转不起来? 不明觉厉,先MARK再说 LCH201328 发表于 2019-11-16 07:43
带几个伺服电机啊?插补周期几毫秒?台达的电机用同样的条件还是转不起来? ...
带4个,插补1ms,爽的一比,台达我试了一下不行就不搞了,汇川浪费了我2个月的时间,我要是一开始就用松下的,早就成功了。我建议你买个松下的a6伺服测试。 whatcanitbe 发表于 2019-11-15 23:57
stm32 soem 裸奔系统?
裸奔 ethercat还是高端货,这么多年没有下沉下来 楼主能出个开发板吗?没有太看明白 kaomantou 发表于 2020-3-3 00:13
ethercat还是高端货,这么多年没有下沉下来
有些好点的控制器厂新出的控制器只有带总线的,比如新代的。 cdust 发表于 2020-3-4 21:38
楼主能出个开发板吗?没有太看明白
网上有很多ethercat的开发板了。 EasyControl 发表于 2020-3-7 09:50
网上有很多ethercat的开发板了。
有推荐的吗? cdust 发表于 2020-3-7 10:50
有推荐的吗?
上X宝上找下 ethercat 就不少了的。 wang1216 发表于 2019-3-13 12:46
这个总线有一个最大的特点,就是贵,其实他的物理层和以太网是一样的,但如果硬件干扰不处理好,挺难搞,从 ...
干扰是指哪些方面的?能详细谈谈吗?从站MCU?ESC从站芯片?还是ethercat总线? 支持网络断线重连吗? asj1989 发表于 2019-11-16 11:18
带4个,插补1ms,爽的一比,台达我试了一下不行就不搞了,汇川浪费了我2个月的时间,我要是一开始就用松 ...
请问用这个主站控制伺服电机,电机速度大时会抖动吗?我现在控制电机,低速时感觉不到异常,高速时偶尔感觉电机会抖动。现在不知道是同步时钟的问题还是丢贞导致的。
页:
[1]