linux怎么查看本机内存大小
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~