STM32 HALでDACを動かしてみる

  • 2021.04.09
  • HAL
STM32 HALでDACを動かしてみる

今回はDACを動かしてみました。

投稿時の開発環境を記しておきます。

(注)良く題材に使っている F401RE には DAC が搭載されていないのでボードは L476RG を使ってみました。

PC:Windows10 OS
IDE: STM32CubeIDE Version1.6.0
Configurator: STM32CubeMX Version6.2.0
Board: STM32Nucleo-L476RG

DACとは

DACとは Digital Analog Converter の略でディジタル値をアナログ値に変換する機能です。
このマイコンに搭載されているDACの分解能は12ビットです。

プロジェクトを作成する

IDEを起動し、File- New – STM32 Project を選択し、Target Selection ウィンドウが出たら Board Selector タブを選択し Boards List から NUCLEO-L476RG を選択し Next ボタンを押します。

Project 名に L476Dac と入力し、Finishボタンを押します。
Initialize all peripherals with their default Mode ? と聞いてくるので Yesを押します。
This kind of project is associated with the STM32CubeMx perspective. Do you want to open this perspective now ? と聞いてくるので Yesを押します。

DACの設定を行う

Pinout & Configuration – Categories – Analog から DAC1 を選択し DAC1 Mode and Configuration の OUT1 connected to で only to external pin を選択します。

これで DAC1_OUT1 が PA4 に割り当てられてピンが緑色にかわります。

コーディングしてみる

main.cのwhile(1)ループあたりに以下のコードを書きます。

uint16_t data = 0;
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
  /* USER CODE END WHILE */
  HAL_DAC_SetValue(&hdac1, DAC_CHANNEL_1, DAC_ALIGN_12B_R, data);
  data++;
  if (4095 < data)
  {
    data = 16;
  }
  HAL_Delay(10);
  /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */

ビルドして動かす

ビルドして動かしてみます。

CN7-8 : GND
CN7-32 : PA4 (DAC出力)

です。HAL_Delay(10)程度の時間待ちを入れておくと、ディジタルのテスターで出力電圧を見ても変化が良くわかります。

コード概要

説明するまでもありませんけれど、

HAL_DAC_Start()

第1引数にDAC_HandleTypeDef型構造体のアドレスを渡します。
第2引数には DAC_CHANNEL_1 を指定します。

HAL_DAC_SetValue()

第1引数にDAC_HandleTypeDef型構造体のアドレスを渡します。
第2引数には DAC_CHANNEL_1 を指定します。
第3引数にアライメントを指定します。
第4引数にはアライメントに合わせてDA変換する値を指定します。

アライメント DAC_ALIGN_12B_R は以下の図の12ビット右詰めです。

ですから出力設定する値の範囲は 0~4095 までになります。

いかがでしたか?

皆さんはDAC出力できましたか?

HALカテゴリの最新記事