首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单个数字输入读取脉宽频率和占空比

从单个数字输入读取脉宽频率和占空比
EN

Stack Overflow用户
提问于 2014-01-23 22:04:41
回答 2查看 7.2K关注 0票数 0

我对Arduino和编码很陌生,但是我已经完成了所有的教程,并且认为我已经掌握了它是如何工作的。

我有一个现实世界的问题,我很想用arduino来解决。

我有一个来自汽油发动机喷油器的PWM信号,我需要从arduino内部导出两个独立的逻辑函数。

确定每个上升边之间的延迟(以求出发动机RPM),范围在6ms -120‘s之间,上升边与读取脉宽占空比(确定喷油器的占空比)脉宽范围从0.02ms到10’s以上的脉冲长度。

这些需要在逻辑中独立地表示为"RPM“和”脉冲宽度“。

我读过关于“Arduino PWM的秘密”的博客,发现它提供了关于如何编写不同频率和占空比的脉宽输出的信息,但我正在尝试读取不同频率和占空比的脉冲宽度,以创建一个可变字节或int来供每个人使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-24 05:41:42

正确的是,没有太多的定时脉冲输入或类似。在此,Arduino的ATmega可以通过以下方法捕获占空比的每一方的时间。这将取决于代码将他们放在一起,并考虑他们的PWM,以满足您的需要。

有几种方法给出了例子。

  1. 时间事件的紧循环轮询。例如使用PulseIn
  2. 一个更好的方法是创建一个timer1溢出中断,并在此期间拔下引脚。这是Ken的红外线库工作的最初方法--50 as拉出雪利夫红外图书馆,其分辨率只有溢出时的分辨率。
  3. 使用Pin Change中断ISR来获得时间。在那里它会有轻微的潜伏。其中,Ken的IR库的微热离子叉将溢出转换为PinChangeInt。在图书馆里,MicroTherion的代码谨慎地做了这件事。在这里,PinChangeInt库使它更简单。
  4. 使用计时器输入捕获。简而言之,当相应的输入引脚改变时,系统时钟被捕获并发出中断。因此ISR可以很好地得到它发生的确切时间。InputCapture.ino
票数 1
EN

Stack Overflow用户

发布于 2015-03-22 01:16:15

我只是用一个例子写了一个库,它就是这样做的。在我的"read_PWM_pulses_on_ANY_pin_via_pin_change_interrupt“库中,我已经编写了一个示例,名为”read_PWM_pulses_on_ANY_pin_via_pin_change_interrupt“,它读取脉冲,然后输出脉冲宽度,分辨率为0.5us,以及脉冲之间的周期和脉冲的频率。

下载库并查看示例。为了测试该示例,您可以从PWM引脚连接电线,将PWM信号输出到输入引脚。在这里可以找到带有示例的库:http://www.electricrcaircraftguy.com/2014/02/Timer2Counter-more-precise-Arduino-micros-function.html

PS。此示例代码使用引脚更改中断,并且可以在任何Arduino引脚上执行,包括模拟引脚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21320299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档