在以正弦函数方式使MCP4725生成正弦波的时候,要注意一点,就是转换值。对于12位的DAC,器最大处理值为2^12=4096,对正弦函数,其值得范围对应0~360度为0 →1→0→-1→0,而DAC转换不存在负数问题。因此需要把正弦波的值抬高到0以上,这样对正弦函数的输出值0 →1→0→-1→0,转换为1 →2→1→0→1。那么就不能使用4096这个值作为幅度处理,而只能使用2048。
程序代码如下:
/**************************************************************************/
/*!
ESP8266 -------- MCP4725
===========================
D1(SCL) SCL
D2(SDA) SDA
*/
/**************************************************************************/
#include <Wire.h>
#include <Adafruit_MCP4725.h>
Adafruit_MCP4725 dac;
void setup(void) {
Serial.begin(115200);
Serial.println("Hello!");
dac.begin(0x60);
Serial.println("Generating a sine wave");
}
void loop(void) {
int16_t i;
for (i = 0; i < 360; i++) {
//Serial.println(sin(2*3.1415926/360*i));
dac.setVoltage((int16_t)(2048 * (sin(2*3.1415926/360*i)+1)), false);
}
}输出波形:

效果也很好。在上记代码中,采样点是以1度执行的,可根据自己的需要调整,非常方便,不比预先准备采样点数据。可见使用正弦函数,极大地简化了代码。
我要赚赏金
