今回は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出力できましたか?