2017年6月11日日曜日

STM32F4のDAC

 DACを使ってみたかったのでとりあえずソフトウェアで出力。
 基本的に初期化はCubeで作成する。ソフトで出力するだけならGPIOでDAC出力を設定するだけで、ペリフェラルの細かい設定は不要だった。FreeRTOSで1msec毎に値を設定し、10Hzの正弦波を出力している。

float span = 100; // 1000msec / freq

HAL_DAC_Start(&hdac, DAC_CHANNEL_1);

/* Infinite loop */
for (;;)
{
    uint32_t tmp32 = (uint32_t)(2048 + 2047 * sinf(fmodf(HAL_GetTick() / span, 1) * (float)M_PI * 2));
    HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, tmp32);

    osDelay(1);
}

 DACも色々と機能があり、外部トリガやDMAトリガ等がある。
 例えばバッファに正弦波1周期分のデータを入れておき、DMAのサーキュラ転送を設定し、TIMで生成したタイミングで出力する、といったことができるらしい。

 数十kHz程度までのデジタル変調とかができるはず。もっともあまり周波数を高くできないので、現代の高速デジタル変調のような速度には遠く及ばない。それでも10kbaudくらいは出るだろうけども。
 とりあえず数kHzの正弦波を出したい。んでADCを試してみたい。

0 件のコメント:

コメントを投稿