本帖最后由 flyword 于 2019-2-6 12:34 编辑
[原创] 【 XMC4800 Relax EtherCAT Kit测评】+上手DAVE,EtherCAT从站模块应用扩展! (本次评测的结贴,后续陆续分享学习成果)
继续接上一篇帖子,关于EtherCAT模块的使用,这里其实上个帖子已经说得很清楚了,主要在process_app()中添加自己的应用并与相应的输入输出变量对应上就可以啦,哈哈,非常简单。
英飞凌官方提供的从站例程中其实已经涉及到了开关量的输入和输出(分别对应按钮操作和LED灯的设置),以及整型量的输出(代码中对应的PWM的设置),这里我添加了ADC模块的简单应用,使用的是PIN14.0,具体可以参考之前帖子关于ADC模块的设置。
相关的代码如下,我分别为3个整型量赋值了,第三个直接读取ADC的转换值。在后面TwinCAT应用中会使用该数值来控制LED灯。
具体代码:
- void process_app(TOBJ7000 *OUT_GENERIC, TOBJ6000 *IN_GENERIC)
- {
- /* OUTPUT PROCESSING */
- /* Check bitfield set by master OUT_GEN_Bit1..8 and set LEDs accordingly */
- XMC_GPIO_SetOutputLevel(P_LED1, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit1)); //OUT_GEN_BIT COMES FROM THE MASTER
- XMC_GPIO_SetOutputLevel(P_LED2, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit2));
- XMC_GPIO_SetOutputLevel(P_LED3, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit3));
- XMC_GPIO_SetOutputLevel(P_LED4, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit4));
- XMC_GPIO_SetOutputLevel(P_LED5, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit5));
- XMC_GPIO_SetOutputLevel(P_LED6, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit6));
- XMC_GPIO_SetOutputLevel(P_LED7, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit7));
- XMC_GPIO_SetOutputLevel(P_LED8, MAP2LEVEL(OUT_GENERIC->OUT_GEN_Bit8));
- /* Check integer set by Master OUT_GEN_INT1 and set duty cycle of PWM driving LED 2 accordingly */
- PWM_CCU8_SetDutyCycleSymmetric(&PWM_CCU8_0, XMC_CCU8_SLICE_COMPARE_CHANNEL_1,
- 6000+((uint32_t)4000*(uint32_t)OUT_GENERIC->OUT_GEN_INT1)/65535);
- /* INPUT PROCESSING */
- /*Check Button 1 and set IN_GEN_Bit1 which is sent to master accordingly*/
- if (XMC_GPIO_GetInput(P15_13))
- IN_GENERIC->IN_GEN_Bit1 = 1;
- else
- IN_GENERIC->IN_GEN_Bit1 = 0;
- /*Check Button 2 and set IN_GEN_Bit2 which is sent to master accordingly*/
- if (XMC_GPIO_GetInput(P15_12))
- IN_GENERIC->IN_GEN_Bit2 = 1;
- else
- IN_GENERIC->IN_GEN_Bit2 = 0;
- [color=#000000] IN_GENERIC->IN_GEN_INT1=1234;//define the value test for the twincat3
- IN_GENERIC->IN_GEN_INT2=56789;
- //start the ADC ,get the value input for EtherCat master
- IN_GENERIC->IN_GEN_INT3 = ADC_MEASUREMENT_GetResult(&ADC_MEASUREMENT_Channel_A);[/color]
- }
复制代码
至此,从站的应用扩展就结束了,是不是很简单啊,哈哈!对于这个从站模块而言,它就是接收和发送相关的数据信息而已,当然也可以实现一定的功能,但是要是与其他模块通讯,涉及到分布式控制的话,就要靠主站来协调资源啦,即由主站控制和配置从站啦!。
那么重点来了,我们需要主站来与从站配合完成相关的功能啊,这就要TwinCAT登场啦,如果是win7以上的电脑,建议使用TwinCAT3,可以免费使用7天,重复注册就行,为什么不推荐TwinCAT2,主要是界面太丑了,我之前做了一个应用使用的就是TwinCAT2,优势是PLC编程支持梯形图,TW3似乎不支持梯形图。TW3的安装这里也不说了,遇到相关的问题百度,我这两天安装这个软件耗时太久了,软件使用要求很高,感觉兼容性一般。
使用相关的TwinCAT软件扫描XMC4800从站的方法,就不再说了,有问题的话,看看软件安装或者xml描述文件是否添加到TW3的目录中呢。
一、 成功扫描到从站开发板后,设置TW3的工作模式,使从站开发板工作在free run模式下,然后就可以看到相关的通讯已经成功了。点击BOX1后,会看到相关的变量定义,这些变量都是在excel表里定义的,我添加了一个INT型输入量和一个INT输出量。
二、 这里是重点看看ADC模块的数据是否传递到主站上。如下图,我们读取的ADC测试数据已经在窗口中显示了。到这一步说明数据已经传递到TW3主站了。
三、 编写主站程序,这里添加一个PLC程序,主要完成一个“起—保—停”电路控制程序和一个整型量判断处理函数,分别用于开关2个led灯。
四、 PLC程序编写完毕后,记得需要编译一下,这样才能产生程序instance,这个是用来与IO模块的变量进行链接用的。
五、 PLC程序相关的变量链接如下:
PLC程序的输入变量链接情况:注意其中一个连接到IN_GEN_INT3,这个是ADC转换值。
PLC程序的输出变量链接情况:分别链接到2个LED灯啦。
六、 相应的设置好好,就可以开始运行程序啦,两步骤:设置TW3在run模式,Login进去PLC程序,并运行PLC程序。
七、 之后就可以看到程序运行的实时状态了,如下图,可以看到ADC的值已经传递到主站了,并且参与到程序控制中了。相关实际演示视频我会后续会上传,因为在外地出差,网络受限,不能上传视频,敬请谅解!
最后总结:目前XMC4800相关的市场应用还很少,但是丝毫不能掩盖这枚芯片的强大功能以及其背后的DAVE软件绽放的巨大魅力,这次评测我从最简单的外设入手,分别对IO口模块、定时器模块、PWM模块、ADC模块、DAC模块、LWIP应用模块、USB模块、CAN模块进行了基本应用,基本上掌握了DAVE APP软件的应用流程和方法,最后对XMC4800的最大特色EtherCAT从站模块进行了简单分析和应用,并公布了相关的评测使用分享。其中关于LWIP、USB、CAN的相关评测,因为网友已经评测,因此并未公布相关心得体会,后续会根据学习情况继续发帖,感谢EE论坛提供的这一块强大的电路板。
最后,祝大家猪事顺利!!!!
此内容由EEWORLD论坛网友flyword原创,如需转载或用于商业用途需征得作者同意并注明出处