2019年3月30日土曜日

STM32: 内蔵DACを使う(Nucleo-F446RE)

Nucleo-F446REの内蔵DACからSIN波を出力しました。

参考
<STM32Cube>\Repository\STM32Cube_FW_F4_V1.24.0\Projects\STM32446E_EVAL\Examples\DAC\DAC_SimpleConversion

プロジェクト
https://github.com/ryood/STM32Cube_Test/tree/master/SW4STM32/Nucleo-F446_DAC_Test5

実行環境

  • Nucleo-F446RE
  • STM32CubeMX Version 5.1.0
  • System Workbench for STM32 - C/C++ Embedded Development Tools for MCU Version: 2.8.1.201903050911

STM32CubeMXの設定



STM32CubeMXに[Report]という機能があったので出力してみました。

https://github.com/ryood/STM32Cube_Test/blob/master/SW4STM32/Nucleo-F446_DAC_Test5/Nucleo-F446_DAC_Test5.pdf

SW4STM32でコードを追加(一部抜粋)

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <math.h>
/* USER CODE END Includes */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  double phi = 0.0;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    uint16_t sinv = 4095 * ((sin(phi) + 1.0) / 2.0);
    if (HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sinv) != HAL_OK)
    {
      Error_Handler();
    }
    if (HAL_DAC_SetValue(&hdac, DAC_CHANNEL_2, DAC_ALIGN_12B_R, sinv) != HAL_OK)
    {
      Error_Handler();
    }
    phi += 0.01;
  }
  /* USER CODE END 3 */
}

位相角を0.01ずつ増やしてsinの値を求め、12bit値に変換して2chある内蔵DACから出力しています。

出力結果


ch1:DAC1(PA4) ch2:DAC2(PA5)

DAC2はNucleoボード上でLEDに接続されているため、上側がクリップしています。DAC1も上下の最大振幅付近で若干クリップしています。

0 件のコメント:

コメントを投稿