今回はSTM32でのDMAなしのDA変換について紹介します。
環境はこれまで同様、
・STM32F303K8
+SW4STM32(System Workbench for STM32)
+STM32CubeMX(HAL ライブラリ、F3 ver. 1.60)
です。
マイコン内蔵のDACというと、
キャリブレーションやブザー用などに付いてるオマケ程度で
応答や分解能など性能は全く期待できないという印象でした。
STM32F3のDACは8bit、12bitの分解能が選択でき、
Settlingタイムも3usと高速で外付け汎用DACと変わらない性能が
内臓DACで実現されています。
つまり、DACを外付けしなくとも、
モータ制御等に使えそうです。
STM32CubeMXは下記のように設定してコードを出力しました。
PA4 DAC1OUT1
PA5 DAC1OUT2
printf("DA TEST: %d \n",i);
HAL_Delay(200);
}
割り込み等を使わずに単に出力するだけの場合は非常に簡単です。
サンプル出力例は下記の通りです。
階段状の出力を2ch独立に出してみました。
MX_DAC1_Init();
HAL_DAC_Start(&hdac1, DAC_CHANNEL_1);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
HAL_DAC_Start(&hdac1, DAC_CHANNEL_2);
int i=0;
while (1)
{
if(i>3600)i=0;
else i=i+300;
HAL_DAC_SetValue(&hdac1,
while (1)
{
if(i>3600)i=0;
else i=i+300;
HAL_DAC_SetValue(&hdac1,
DAC_CHANNEL_1,
DAC_ALIGN_12B_R,
i);
HAL_DAC_SetValue(&hdac1,
HAL_DAC_SetValue(&hdac1,
DAC_CHANNEL_2,
DAC_ALIGN_12B_R,
4096-i);
printf("DA TEST: %d \n",i);
HAL_Delay(200);
}
思った以上にシンプルな関数構成でDAC出力することができました。
内臓DACを使用してサーボアンプの制御なども色々出来そうです。
そのうち、試してみたいと思います。