nrf52840 gpiote如何配置中断输入_PLC与增量式编码器的使用配置

增量式编码器是进行高精度角度、位置检测的传感器。在自动化工业现场,编码器运用非常广泛,检测精度从单圈几百线到二十多位,种类非常丰富。在将编码器信号接入PLC中进行位置检测的过程中,受制于PLC的输入接口的速度(高速脉冲输入口一般为几百KHz),检测传感器的运行速度,故一般10 000线以下的编码器应用于高速脉冲输入口的情况较多;在需要更高速度的场景,一般使用特殊的编码器信号高速采集模块实现,或者采用总线(如SSI、CAN)的方式,可以实现更高精度的位置采集。这里以增量式编码器与PLC之间的使用配置过程进行分享:

增量式编码器与PLC之间的接线

增量式编码器的信号有A相、B相、Z相三路。其输出接线图如下:

c3ffcbfb04b558614a122e00e1f0f671.png

增量式编码器的接线图

在使用的过程中对于PLC漏型输入。则仅需要将A、B、Z三根信号电缆接入PLC的高速脉冲输入口即可;对于PLC源性型输入,则仅需要将A反、B反、Z反三根信号电缆接入PLC的高速脉冲输入口即可。

c240125edc1ffbda351112c048cf455e.png

增量式编码器信号

增量式编码器接入PLC的配置

增量式编码器接入西门子200Smart系列PLC的相关配置如下:

1、模式设置

17a917f2f9d277a4ed9314ed97f59b95.png

高速脉冲输入口的模式设置参照表

9826f2c8d136be2d09c6991d5317f05f.png

HSC模式0和1

68bb4b76c843cdcdae77da708d22a505.png

HSC模式3和4

afa9af03f6a38c7e5bcd8658581979e2.png

HSC模式6和7

d438d8f32972be28f174c7e80251a994.png

HSC模式9和10

305d308390268d084c02cc34cd89ad02.png

HSC模式9和10

4倍频处理后的高速计数过程如上图所示,对编码器信号进行4倍频处理,可以在不改变原有的接线方式的情况下,提高编码器的检测精度。在大部分场景下,一般都会对编码器信号进行4倍频处理。以提高系统的检测精度。

2、编程配置过程

1)在初始化处理子程序中,加载SMB37(HSC0高速计数器配置字节),并进行配置。如启动计数器、写入当前新值、写入新预设值、设置计数方向、设置复位电平;

2)设置高速计数器输入0或者其他;

3)用所需当前值加载SMB38;

4)用所需预设值加载SMD42;

5)设置捕获当前值的预设值事件(若启用此中断,则应再中断子程序中加入相应的中断程序);

6)设置外部复位,将外部复位中断事件附加于中断,在外部中断中对编码器的计数信号进行复位;

7)启用全局中断;

8)执行HSC指令。

完成以上的配置过程,即就完成了编码器信号接入PLC的相关配置。

这段代码涉及到了与 GPIO(General Purpose Input/Output,通用输入输出)相关的操作。让我逐步解释每个步骤的作用: 1. `if(!nrf_drv_gpiote_is_init())`: 检查 GPIO 驱动是否已经初始化。如果没有初始化,则执行下面的操作。 2. `nrf_drv_gpiote_init()`: 初始化 GPIO 驱动。该函数会初始化与 GPIO 相关的硬件资源。 3. `nrf_drv_gpiote_in_config_t gpiote_in_config = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);`: 创建一个名为 `gpiote_in_config` 的 `nrf_drv_gpiote_in_config_t` 类型的变量,并将其配置为下降沿触发模。具体的配置取决于实际需求,这里的配置为低电平触发模。 4. `nrf_drv_gpiote_in_init(D_GPIOTE_WAKE_UP_PIN, &gpiote_in_config, gpiote_evt_handler);`: 初始化一个 GPIO 输入引脚使用先前配置的 `gpiote_in_config` 变量和名为 `gpiote_evt_handler` 的事件处理函数。这个函数会将 GPIO 引脚与指定的事件处理函数关联起来。 5. `nrf_drv_gpiote_in_event_enable(D_GPIOTE_WAKE_UP_PIN, true);`: 启用指定 GPIO 输入引脚的事件触发功能。第二个参数 `true` 表示启用触发,使得当引脚状态满足触发条件时,会触发相应的事件。 6. `nrf_drv_gpiote_in_init(D_GPIOTE_CALIBRATE_PIN, &gpiote_in_config, gpiote_evt_handler);`: 初始化另一个 GPIO 输入引脚使用相同的配置和事件处理函数。 7. `nrf_drv_gpiote_in_event_enable(D_GPIOTE_CALIBRATE_PIN, true);`: 启用第二个 GPIO 输入引脚的事件触发功能。 8. `return D_OK;`: 返回一个名为 `D_OK` 的状态码,表示函数执行成功。 综上所述,这段代码的作用是初始化 GPIO 驱动(如果尚未初始化),然后通过配置和初始化两个 GPIO 输入引脚,并启用它们的事件触发功能。最后返回执行成功的状态码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值