Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Arduino从单个数字输入读取脉冲宽度频率和占空比_C++_Arduino - Fatal编程技术网

C++ Arduino从单个数字输入读取脉冲宽度频率和占空比

C++ Arduino从单个数字输入读取脉冲宽度频率和占空比,c++,arduino,C++,Arduino,我不熟悉Arduino和编码,但已经完成了所有教程,我想我已经掌握了所有的工作原理 我有一个现实世界的问题,我想用arduino解决 我有一个来自汽油发动机喷油器的PWM信号,我需要从arduino内部导出两个独立的逻辑功能 确定每个上升沿之间的延迟(以得出发动机转速) 上升边缘之间的距离在6ms-120ms之间 和 读取脉冲宽度占空比(以确定喷油器的占空比) 脉冲长度的脉冲宽度范围为0.02ms至10ms以上 这些需要在逻辑中单独表示为“RPM”和“脉冲宽度” 我读过关于“Arduino PW

我不熟悉Arduino和编码,但已经完成了所有教程,我想我已经掌握了所有的工作原理

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

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

确定每个上升沿之间的延迟(以得出发动机转速) 上升边缘之间的距离在6ms-120ms之间 和 读取脉冲宽度占空比(以确定喷油器的占空比) 脉冲长度的脉冲宽度范围为0.02ms至10ms以上

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


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

正确,没有太多关于定时脉冲输入或类似的内容。其中,Arduino的ATmega可以通过以下方法捕获占空比每侧的定时。它将取决于代码把它们放在一起,并把它们看作是你需要的PWM。

有几种方法和例子

  • 定时事件的紧循环轮询。比如

  • 更好的方法是创建计时器1溢出中断并 在此期间,ISR将拔销。这是Ken使用的原始方法 Shirriff的红外库工作-50毫秒拉,其分辨率仅与溢出一样好

  • 使用Pin更改中断ISR获取时间。在那里它会稍微潜伏。Ken的IR库的fork将溢出转换为PinChangeInt。MicroTherion的代码在库中离散地执行此操作。图书馆使之更简单

  • 使用定时器输入捕获。简言之,当相应的 输入引脚发生变化,系统时钟被捕获并中断 发布。因此ISR可以潜在地获得它发生的准确时间


  • 我刚刚写了一个库,其中有一个例子就是这样做的。在我的Timer2_计数器库中,我编写了一个当前标题为“通过_pin_change_中断在任何_pin_上读取_PWM_脉冲”的示例,该示例读取脉冲,然后输出分辨率为0.5us的脉冲宽度,以及脉冲之间的周期和脉冲频率

    下载库并查看示例。要测试该示例,可以将输出PWM信号的PWM引脚的导线连接到输入引脚。示例库位于以下位置:


    注:此示例代码使用管脚更改中断,可以在任何Arduino管脚上执行,包括模拟管脚。

    显示您已经尝试过的代码!“把密码给我”不是吗网站!!(试图通过标记来缩小范围是没有帮助的!)不寻找代码,而是寻找其他人如何探索和解决类似挑战的信息/教程/示例。mpflaga的答案是完美的不寻找代码,但…“好吧,我现在一直在放松;)。。。尽管要求第三方裁判并不适合这样做。您应该遵循SO定义的基本Q/A要求。