【ESP32_02】【DAC输出正弦波】


ESP32支持两路8bit DAC输出:

  • VDD3P3_RTC为电压参考源(一般为3.3V)
  • 专用管脚GPIO25(channel1)和GPIO26(channel2)



API函数调用:

  • 需包含头文件: driver/include/driver/dac.h
  • 函数调用:
    • dac某通道输出使能:dac_output_enable(DAC_CHANNEL_1)
    • dac选定通道输出设定电压值:dac_output_voltage(DAC_CHANNEL_1, 200)
      对于ESP32,由于其DAC为8bit。设定输出参数为200,则输出电压值为:
      3.3*(200/255) = 2.5882V 。



获取输出正弦波的DAC数据:

  • 通过改变MCU的DAC输出电压,可以得到特定的波形。我们以正弦波为例。首先,需要知道一个正弦波周期内有多少个采样点uPoints(点数越多波形越细腻)
  • ESP32的DAC为八位,则传递给DAC的最大参数值为uMaxValue,(即255,其对应最大输出电压3.3V)
  • 采样点uPoints将一个正弦波360度,分割为许多份,每一份的角度为360/uPoints,转换为弧度为:x = (360/uPoints)*(π/180)
  • 由于ESP32的DAC输出电压范围为[0~3.3V],故设置正弦波的偏置电压为3.3/2
  • 数组 sin_tab[i] 用于存储DAC数据,则计算公式如下sin_tab[i]=(uMaxValue/2)*sin(x)+(uMaxValue/2)

定义 getsin() 函数如下:

void getsin()
{
	float x, uAng;
	uAng=360.000/uPoints;
	for(int i=0;i<uPoints;i++){
		x=uAng*i;
		x=x*(uPi/180); // 弧度=角度*(π/180)
		sin_tab[i]=(uMaxValue/2)*sin(x)+(uMaxValue/2);
		//printf("sin tab[%d]: %f\n", i, sin_tab[i]);
	}
}



正弦波数据通过DAC输出:

for(int i=0; i<uPoints; i++){
	dac_output_voltage(DAC_CHANNEL_1, sin_tab[i]);		
}



测试结果:


50Hz:
Alt



参考资料:

发布了30 篇原创文章 · 获赞 12 · 访问量 8262

猜你喜欢

转载自blog.csdn.net/syjie19900426/article/details/99684000