旋转编码器测速c语言程序,官方例程中编码器测速程序高低速怎么区分
如下是官方编码器测速的程序:
//**** 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语言程序,官方例程中编码器测速程序高低速怎么区分相关推荐
- Matlab生成dsp程序——官方例程学习
Matlab生成dsp程序--官方例程学习 写在下面的话 ADC-PWM例子学习 一.基本功能 二.生成代码分析 三.总结 写在下面的话 还是很建议大家多去学习官方例程的,真的能够收获到很多很多 ...
- 隐藏添加删除程序中的程序在控制面板中的“添加/删除程序”项
隐藏添加删除程序中的程序在控制面板中的"添加/删除程序"项是我们要卸载程序一个程序最彻底的地方.但很多时候为了防止自己安装的程序不被别人卸载,我们希望能够在"添加/删除程 ...
- c 语言如何处理表格文件中的数据库,C#程序从Excel表格中读取数据并进行处理
今天做了一个Excel表格数据处理的事情,因为数据量表较大(接近7000条)所以处理起来有点麻烦,于是写了一个程序, 先将程序记下以便将来查找. using System; using System. ...
- 《C语言深度解剖》中的.c/.h 程序模板及函数注释风格
编程规范和变量命令规范对于代码的可阅读性.可维护性有着很大的影响.编程规范有很多,大公司也会制定自己公司的编程规范,如<华为技术有限公司c语言编程规范>等.对于个人编程来说没必要将自己编写 ...
- docker 在线运行c语言程序,在docker中运行mpi应用程序
我正在玩docker,我希望能够在其中启动mpi应用程序. 我正在使用ubuntu:latest作为基本图像,我已经安装了所需的工具来编译我的程序并将其与mpi链接. 当我使用mpirun启动程序时, ...
- java在程序运行过程中_Java内存管理-程序运行过程(一)
做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 勿在浮沙筑高台,出来混迟早要还的. 相信在做Java开发的伙伴一定知道 JVM(Java Virtual Machine( ...
- [N9H30]在例程中使用printf导致程序无法运行
开发板:N9H30 例程 emWin_SimpleDemo 在例程中改了些东西,顺手使用了printf,发现程序无法运行. 编译无报错,只有warning,当时没注意.. 解决方法:用sysprint ...
- 【01Vue3 安装】Vue3 安装引入 Vue.js创建Vue实例编写Vue应用程序在HTML中使用Vue应用程序
Vue3 安装 在开始使用 Vue.js 3之前,需进行一些简单的设置和安装步骤.本教程将指导完成Vue3的安装过程. 步骤 1:引入 Vue.js 首先,在HTML文件中引入Vue.js库.可通过以 ...
- c语言在测绘工程中的作用,测绘程序C语言测绘工程专业.doc
测量平差程序设计 角度(度分秒)到弧度AngleToRadian #define PI 3double AngleToRadian(double angle) { int D,M: double S, ...
最新文章
- updatechecker.java_解决ehcache的UpdateChecker问题
- ASP.NET Core 中文文档 第三章 原理(2)中间件
- log4j2自动删除_登录样式:log4j 2,上下文,自动清除…全部不附带任何字符串!...
- 如何选择数据可视化工具?
- c语言实验数据类型体会,实验1-C语言开发环境使用和数据类型、运算符、表达式-实验总结与体会...
- 【推荐】DBA必须了解的11g中的一些变化
- HDU 4273 Rescue(三维凸包重心)
- cad插件物料自动排版_IMEX NO.63:园林景观专业CAD图库
- Linux下Hadoop运行mongodb对应的 jar 报错java.lang.NoClassDefFoundError:ClassNotFoundException
- MyBatis配置文件
- Vue3 Fragment(碎片化节点)
- (1366, Incorrect string value: '\\xE6\\xB7\\xB1\\xE5\\x85\\xA5...' for column '
- 2019计算机就业形势图表分析,2019毕业生就业形势分析
- 一份超详细的Spring4常用知识清单!
- chrome常用扩展程序汇总(程序员版)
- 很牛的求职历程和经验(二)
- 词嵌入向量WordEmbedding的原理和生成方法
- 汉字转拼音(完全模式)
- SAS:数据合并简介
- 【Android】精通Android UI设计
热门文章
- 童夫尧:进入物联网时代 中国如何弯道超车
- “世上唯一的后悔药”:冻卵?
- Spring改变版本号命名规则:此举对非英语国家很友好
- 微影院线-今日头条广告总结
- 服务器的d盘的文件可移动,我的电脑的D盘为什么现在里头的文件不能移动,不能删...
- 绝对 “牛X“ 的代码注释,喜欢就拿去用!
- 【云原生】阿里云ACK部署MySQL 数据持久化存储
- FCPX/PR/AE: 视频稳定防抖插件 Lock and Load X Mac
- 通过注册表来设置修改默认浏览器的方法
- 字节流与字符流对文件复制的效率