[EtherCAT]ESC的RUN_LED和ERR_LED使用GPIO引脚

一、功能说明

承接上文《[EtherCAT]ESC的引脚功能说明》,ESC的RUN_LED和ERR_LED用于指示ESC的状态,推荐使用ESC的ESC.CTR[x]引脚通过IO_CFG配置出LED_RUN和LED_ERR功能去控制LED,但某些情况下引脚分配时无法分配ESC.CTR[x]功能,也可以使用GPIO功能去实现。

二、用GPIO实现ESC的RUN_LED和ERR_LED功能

2.1 SSC Tool中属性设置

根据ESC是否支持硬件控制RUN_LED和ERR_LED, SSC Tool工具用属性UC_SET_ECAT_LEDESC_SUPPORT_ECAT_LED进行描述。

默认设置是ESC_SUPPORT_ECAT_LED为1且UC_SET_ECAT_LED为0,表示ESC支持控制RUN_LED和ERR_LED, 也就是由ESC的对应硬件引脚直接控制LED的状态。

在需要使用MCU的GPIO引脚控制LED时, 需要将属性设置为ESC_SUPPORT_ECAT_LED为0且UC_SET_ECAT_LED为1,此时生成SSC的协议栈代码会调用硬件接口void HW_SetLed(UINT8 RunLed,UINT8 ErrLed)控制LED的状态

2.2 HW_SetLed(UINT8 RunLed,UINT8 ErrLed)接口实现

当由MCU控制LED状态时,SSC协议栈会调用HW_SetLed(UINT8 RunLed,UINT8 ErrLed)接口去实现,
该接口定义在hpm_ecat_hw.cz中, 需要用户根据实际使用引脚使用GPIO外设实现,例如:

#include "hpm_gpio_drv.h"
void HW_SetLed(BOOL RunLed, BOOL ErrLed) {
    bool run_led = (RunLed ?  BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
    bool err_led = (ErrLed ?  BOARD_ECAT_OUT_ON_LEVEL : !BOARD_ECAT_OUT_ON_LEVEL);
    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 3, run_led);
    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 2, err_led);
}

2.3 引脚配置修改

对于使用的GPIO引脚,需要进行初始化配置

HPM_IOC->PAD[IOC_PAD_PE02].FUNC_CTL = IOC_PE02_FUNC_CTL_GPIO_E_02; /* LED_ERROR function */
HPM_IOC->PAD[IOC_PAD_PE03].FUNC_CTL = IOC_PE03_FUNC_CTL_GPIO_E_03; /* LED_RUN function */
gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 2, 0);
gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 3, 0);

另外SDK中原本关于ESC的RUN_LED和ERR_LED的引脚定义和配置应当注释掉。

0
0

订阅

发表回复 0

Your email address will not be published. Required fields are marked *