利用pwm输出正弦波代码
时间: 2023-11-10 15:05:28 浏览: 133
以下是使用 Arduino 的代码,利用 PWM 输出正弦波:
```c++
const int ledPin = 9; // PWM 输出引脚
const int freq = 50; // 正弦波频率
const int amplitude = 127; // 正弦波幅值
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (float i = 0; i < 360; i += 0.1) {
int val = (sin(i * PI / 180) + 1) * amplitude; // 计算正弦波幅值
analogWrite(ledPin, val); // 输出 PWM 信号
delay(1000 / freq / 360); // 延时
}
}
```
解释一下代码:
1. `ledPin` 定义为 PWM 输出引脚,这里使用的是数字引脚 9。
2. `freq` 定义正弦波的频率,这里设定为 50Hz。
3. `amplitude` 定义正弦波的幅值,这里设定为 127。
4. 在 `setup()` 函数中设置 `ledPin` 为输出引脚。
5. 在 `loop()` 函数中使用 for 循环,计算正弦波的幅值,并输出 PWM 信号。
6. `sin()` 函数用于计算正弦值,`PI` 为圆周率,`/180` 是将角度转换为弧度。
7. 计算出来的幅值需要加上 1,再乘以 `amplitude`,才能达到正弦波的幅值。
8. `analogWrite()` 函数用于输出 PWM 信号,`val` 即为输出的占空比,取值范围为 0~255。
9. `delay()` 函数用于延时,延时时间为周期的 1/360。
以上代码可以输出一个频率为 50Hz、幅值为 127 的正弦波。如果需要改变频率和幅值,可以修改 `freq` 和 `amplitude` 的值。
阅读全文