DACによる電圧出力を使って、ブザーを鳴らしてみます。STM32F446のDACは2chあり、12bit分解能を持ちます。
参考にさせてもらったサイトです。
STM32 HALでDACを動かしてみる
今回はDACを動かしてみました。 投稿時の開発環境を記しておきます。 (注)良く題材に使っている F401RE には DAC が搭載されていないのでボードは L476RG を使ってみました。 PC:Windows10 OS IDE: STM
STM32技術解説 - 32 DACをDMAで動かしてsine/cos波を発生させる (DAC,DMA,TIM2,TIM3,UART,LEDチカチカ)
DACでsine波を発生させるオーソドックスな方法は、メモリに1波分のデータを格納しておき、それをDACに注ぎ込むやりかたでしょう. ここでは、メモリに32点からなるsine波データを格納します. そのデータをDACへ一定間隔で転送してゆく...
回路図
詳細は前回の解説を参照してください。0~3.3Vのアナログ電圧を入力すると1:1でスピーカに電圧が供給されます。
音を出してみたら思っていたより音量が小さいので今更ですが、IC内部はHブリッジになっていてDCDC回路にもみえなくはない構成なので、3.3Vがスピーカ印加電圧の限界ではなく、高い電圧に増幅できる仕様なのでは?と思いました。よくわかってません。のちのち抵抗とコンデンサを変更して増幅率を変えて試してみます。
STM32CubeMX
設定はCategories → DAC → OUT1 Configurationにチェックします。クロックは前回と同じ最高設定。
プログラム
HAL_DAC_Start関数と、HAL_DAC_SetValue関数を使います。
/* USER CODE BEGIN 2 */ uint16_t data = 0; HAL_DAC_Start(&hdac, DAC_CHANNEL_1); /* USER CODE END 2 */
/* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { data = 0; HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, data); HAL_Delay(1); data = 4095; HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, data); HAL_Delay(1); /* USER CODE END WHILE */
実行
動かしてみました。鳴っています。
スペクトルをスマホのアプリで測ってみました。
3234Hzの音が出ているらしい。Delayで出しているだけとはいえ、500Hzくらいになるはずなのですが、なんででしょう?
次回に続きます。