英创信息技术EM9280与光电编码器的接口及应用简介

网友投稿 267 2022-10-25

英创信息技术EM9280与光电编码器的接口及应用简介

接口硬件说明

鉴于本应用主要是监测转速信号,因此只需要接入增量式光电旋转编码器的A、B两相脉冲信号即可。典型的A、B相信号的关系如下图所示:

一般说来,光电编码器的A、B相信号需要经过隔离及电平转换电路,方可接入EM9280的相应管脚。隔离整形后的A、B相输出信号必须是3.3V的TTL信号,与EM9280连接如下表所示:

光电编码器 EM9280管脚 简要说明
A相信号 GPIO23 3.3V TTL电平信号
B相信号 GPIO22 3.3V TTL电平信号

由于内部电路对A、B相信号进一步做了去抖动处理,因此要求输入信号频率不能高于5KHz,方能保证后续计数结果的正确。

接口软件说明

在上述数据结构中,dwMaxRotary设置的上限是编码器的最高转速,也可根据实际应用设置为正常工况的最高转速。本驱动程序支持的采样间隔共10档,分别为1ms、2ms、5ms、10ms、20ms、50ms、100ms、200ms、500ms、1000ms。采样周期与编码器参数的关系为:

N =(dwMaxRotary×dwResolution / 60)× dwPeriod / 1000

上式中N表示在一个采样间隔所采集的脉冲数,当N为正时,表示顺时针旋转,N为负数时,表示逆时针旋转。在本驱动程序中,采集输出的数据即为N,数据类型为带符号的16-bit整型量。具体设置并启动测量的API调用为:

ROTARY_ENCODER_INFO Info; //定义结构对象 DWORD dwReturnWritten; //实际写入的字节数 //填写数据结构参数 Info.ucSize = sizeof(ROTARY_ENCODER_INFO); // … … WriteFile(hROT, &Info, sizeof(ROTARY_ENCODER_INFO), &dwReturnWritten, 0);

上面调用中的hROT是CreateFile返回的文件句柄。若dwPeriod设置为自动(= 0),则可通过以下API读取驱动实际使用的采样周期:

若应用程序设置自动采样周期,驱动程序将根据光电编码器的基本参数(转速和分辨率),选取满足一定精度的最小采样周期。

当通过WriteFile设置并启动了转速测量后,还可通过ReadFile随时读取当前转速或截止当前时刻的转速数据序列(即转速曲线),具体调用方式为:

int short DBuf[1024]; // 16-bit 带符号整型量数据buffer DWORD dwBufLen; // buffer长度,必须两字节对齐 DWORD dwReturnRead; // 返回的字节数 DWORD dwNbSamples; dwBufLen = 20 * sizeof(int short); // 采集20个样点 dwReturnRead = 0; // 必须置0 ReadFile(hROT, DBuf, dwBufLen, &dwReturnRead, 0); dwNbSamples = dwReturnRead / sizeof(int short);

注意实际采集的点数有可能小于希望采集的点数。在驱动程序内部缓冲的最大数据点数为32K,即32768个样点。上面调用中特别要注意的是dwBufLen必须为两字节对齐,这是因为16-bit 带符号整型量占用2个字节。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:集群镜像:实现高效的分布式应用交付
下一篇:splash安装
相关文章

 发表评论

暂时没有评论,来抢沙发吧~