如何同时更改频率和幅度?

时间:2016-11-14 20:15:58

标签: arduino frequency amplitude

例如,如果我需要设置100赫兹的频率,我使用tone功能使用PWM设置频率。现在我需要使用PWM在0到5伏之间改变幅度。是否可以同时使用toneanalogWrite来固定频率,即100赫兹和analogWrite来改变幅度?

如果还有其他选择,请告诉我,因为我在同一个引脚上尝试了上述命令音和模拟写操作,但它无效。

3 个答案:

答案 0 :(得分:1)

使用tone功能无法做到这一点。查看https://en.wikipedia.org/wiki/Pulse-width_modulation以了解如何使用PWM生成“频率”。此图片可能会有所帮助:

PWM waveform

如果您确实需要不同的电压,则需要在输出引脚上添加外部元件(至少是一个简单的分压器),或者仅使用analogWrite生成信号。请注意,在后一种情况下,可能会出现时序问题,具体取决于代码的复杂程度。

答案 1 :(得分:0)

<强> 修改

您考虑过digital potentiometer了吗?阅读完它的描述后,它几乎可以满足您的需求。

  

[...]控制立体声音量[...]

它的功能与普通电位器非常相似,我觉得它应该对你有用。

原帖

答案是否定的,因为tone将以设定频率输出脉冲,但analogWrite将要求引脚输出其他内容。微控制器可能会“混淆”,可能不会做你想做的事情。

解决这个问题的一种更机械的方法是使用电位计。它几乎是一个可变电阻器,它会根据旋钮的位置改变其电阻。为什么这样做不会涉及脉冲,你唯一要做的就是在不修改信号的情况下降低信号的强度。

答案 2 :(得分:0)

你可以

  1. 使用analogWrite并抛弃音调功能,模仿音调功能的行为;
  2. 使用外部电路。
  3. 适合第一种解决方案的代码是

    {
        id: 1,
        fieldA: “nameA”,
        fieldB: [“textA”, “textB", “textC”, “textD”],
        fieldC: “nameC”
      }
    

    对于第二种解决方案,您可以使用两个引脚,然后使用某些东西来混合输出。例如

    • 一个AND端口(音调转到输入,analogWrite到另一个;和端口应该在过滤器之前);
    • 具有启用输入的缓冲区(音调转到启用,analogWrite转换为行;这可以是在过滤器之前或之后);
    • 如果您正在使用放大器并且它有一个启用引脚,请使用它(当然音调转到启用,analogWrite转到线路);
    • 外部ADC(在这种情况下,您将使用音调作为电压参考,音量应作为ADC的值传递);
    • 如果您已将扬声器直接连接到输出端,您可以将analogWrite输出发送到扬声器,并将NMOS放在扬声器的另一个引脚上,由音调输出驱动。

    如果您需要一些原理图,请询问..