如下是官方编码器测速的程序:

//**** High Speed Calculation using QEP Position counter ****//

// Check unit Time out-event for speed calculation:

// Unit Timer is configured for 100Hz in INIT function

if(EQep1Regs.QFLG.bit.UTO==1) // If unit timeout (one 100Hz period)

{

/** Differentiator **/

// The following lines calculate position = (x2-x1)/4000 (position in 1 revolution)

pos16bval=(unsigned int)EQep1Regs.QPOSLAT; // Latched POSCNT value

tmp = (long)((long)pos16bval*(long)p->mech_scaler); // Q0*Q26 = Q26

tmp &= 0x03FFF000;

tmp = (int)(tmp>>11); // Q26 -> Q15

tmp &= 0x7FFF;

newp=_IQ15toIQ(tmp);

oldp=p->oldpos;

if (p->DirectionQep==0) // POSCNT is counting down

{

if (newp>oldp)

Tmp1 = - (_IQ(1) - newp + oldp); // x2-x1 should be negative

else

Tmp1 = newp -oldp;

}

else if (p->DirectionQep==1) // POSCNT is counting up

{

if (newp

Tmp1 = _IQ(1) + newp - oldp;

else

Tmp1 = newp - oldp; // x2-x1 should be positive

}

if (Tmp1>_IQ(1))

p->Speed_fr = _IQ(1);

else if (Tmp1<_iq>

p->Speed_fr = _IQ(-1);

else

p->Speed_fr = Tmp1;

// Update the electrical angle

p->oldpos = newp;

// Change motor speed from pu value to rpm value (Q15 -> Q0)

// Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q

p->SpeedRpm_fr = _IQmpy(p->BaseRpm,p->Speed_fr);

//=======================================

EQep1Regs.QCLR.bit.UTO=1; // Clear interrupt flag

}

//**** Low-speed computation using QEP capture counter ****//

if(EQep1Regs.QEPSTS.bit.UPEVNT==1) // Unit position event

{

if(EQep1Regs.QEPSTS.bit.COEF==0) // No Capture overflow

temp1=(unsigned long)EQep1Regs.QCPRDLAT; // temp1 = t2-t1

else // Capture overflow, saturate the result

temp1=0xFFFF;

p->Speed_pr = _IQdiv(p->SpeedScaler,temp1); // p->Speed_pr = p->SpeedScaler/temp1

Tmp1=p->Speed_pr;

if (Tmp1>_IQ(1))

p->Speed_pr = _IQ(1);

else

p->Speed_pr = Tmp1;

// Convert p->Speed_pr to RPM

if (p->DirectionQep==0) // Reverse direction = negative

p->SpeedRpm_pr = -_IQmpy(p->BaseRpm,p->Speed_pr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q

else // Forward direction = positive

p->SpeedRpm_pr = _IQmpy(p->BaseRpm,p->Speed_pr); // Q0 = Q0*GLOBAL_Q => _IQXmpy(), X = GLOBAL_Q

EQep1Regs.QEPSTS.all=0x88; // Clear Unit position event flag

// Clear overflow error flag

}

高速是采用M法测量速度  低速采用T法测速

问题是怎么判断是用M法还是T法呢?在程序中没有进行判断啊,仅靠这两个状态标志位够用用吗?不需要人为在程序中添加其他判断条件吗?

如果不是,那么是不是在eQEP初始化的时候做了哪些小技巧?多谢指教!

if(EQep1Regs.QFLG.bit.UTO==1) // If unit timeout (one 100Hz period)

if(EQep1Regs.QEPSTS.bit.UPEVNT==1) // Unit position event

旋转编码器测速c语言程序,官方例程中编码器测速程序高低速怎么区分相关推荐

  1. Matlab生成dsp程序——官方例程学习

    Matlab生成dsp程序--官方例程学习 写在下面的话 ADC-PWM例子学习 一.基本功能 二.生成代码分析 三.总结 写在下面的话    还是很建议大家多去学习官方例程的,真的能够收获到很多很多 ...

  2. 隐藏添加删除程序中的程序在控制面板中的“添加/删除程序”项

    隐藏添加删除程序中的程序在控制面板中的"添加/删除程序"项是我们要卸载程序一个程序最彻底的地方.但很多时候为了防止自己安装的程序不被别人卸载,我们希望能够在"添加/删除程 ...

  3. c 语言如何处理表格文件中的数据库,C#程序从Excel表格中读取数据并进行处理

    今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...

  4. 《C语言深度解剖》中的.c/.h 程序模板及函数注释风格

    编程规范和变量命令规范对于代码的可阅读性.可维护性有着很大的影响.编程规范有很多,大公司也会制定自己公司的编程规范,如<华为技术有限公司c语言编程规范>等.对于个人编程来说没必要将自己编写 ...

  5. docker 在线运行c语言程序,在docker中运行mpi应用程序

    我正在玩docker,我希望能够在其中启动mpi应用程序. 我正在使用ubuntu:latest作为基本图像,我已经安装了所需的工具来编译我的程序并将其与mpi链接. 当我使用mpirun启动程序时, ...

  6. java在程序运行过程中_Java内存管理-程序运行过程(一)

    做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...

  7. [N9H30]在例程中使用printf导致程序无法运行

    开发板:N9H30 例程 emWin_SimpleDemo 在例程中改了些东西,顺手使用了printf,发现程序无法运行. 编译无报错,只有warning,当时没注意.. 解决方法:用sysprint ...

  8. 【01Vue3 安装】Vue3 安装引入 Vue.js创建Vue实例编写Vue应用程序在HTML中使用Vue应用程序

    Vue3 安装 在开始使用 Vue.js 3之前,需进行一些简单的设置和安装步骤.本教程将指导完成Vue3的安装过程. 步骤 1:引入 Vue.js 首先,在HTML文件中引入Vue.js库.可通过以 ...

  9. c语言在测绘工程中的作用,测绘程序C语言测绘工程专业.doc

    测量平差程序设计 角度(度分秒)到弧度AngleToRadian #define PI 3double AngleToRadian(double angle) { int D,M: double S, ...

最新文章

  1. updatechecker.java_解决ehcache的UpdateChecker问题
  2. ASP.NET Core 中文文档 第三章 原理(2)中间件
  3. log4j2自动删除_登录样式:log4j 2,上下文,自动清除…全部不附带任何字符串!...
  4. 如何选择数据可视化工具?
  5. c语言实验数据类型体会,实验1-C语言开发环境使用和数据类型、运算符、表达式-实验总结与体会...
  6. 【推荐】DBA必须了解的11g中的一些变化
  7. HDU 4273 Rescue(三维凸包重心)
  8. cad插件物料自动排版_IMEX NO.63:园林景观专业CAD图库
  9. Linux下Hadoop运行mongodb对应的 jar 报错java.lang.NoClassDefFoundError:ClassNotFoundException
  10. MyBatis配置文件
  11. Vue3 Fragment(碎片化节点)
  12. (1366, Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column '
  13. 2019计算机就业形势图表分析,2019毕业生就业形势分析
  14. 一份超详细的Spring4常用知识清单!
  15. chrome常用扩展程序汇总(程序员版)
  16. 很牛的求职历程和经验(二)
  17. 词嵌入向量WordEmbedding的原理和生成方法
  18. 汉字转拼音(完全模式)
  19. SAS:数据合并简介
  20. 【Android】精通Android UI设计

热门文章

  1. 童夫尧:进入物联网时代 中国如何弯道超车
  2. “世上唯一的后悔药”:冻卵?
  3. Spring改变版本号命名规则:此举对非英语国家很友好
  4. 微影院线-今日头条广告总结
  5. 服务器的d盘的文件可移动,我的电脑的D盘为什么现在里头的文件不能移动,不能删...
  6. 绝对 “牛X“ 的代码注释,喜欢就拿去用!
  7. 【云原生】阿里云ACK部署MySQL 数据持久化存储
  8. FCPX/PR/AE: 视频稳定防抖插件 Lock and Load X Mac
  9. 通过注册表来设置修改默认浏览器的方法
  10. 字节流与字符流对文件复制的效率