【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



參考資料:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章