stm32h750のdacとtimerでsine波を作る

はじめに

いよいよSTM32ファミリーのハイクラスに属する、Cortex-M7コアをもつ、stm32h750(クロック周波数480MHz)を新製品に組み込もうと、早速stm32h750の開発ボードでSine波を作ってみよう。今回はSine波のサンプリングデータを1周期当たり100データに、DACでアナログ波に、トリガをTimer6に、サンプリングデータをDMA転送に指定して、Sine波の周波数は、タイマクロック周波数240MHz / タイマのリロード最大カウンタ数(239+1) / Sine波1周期当たりタイマリロード数100 = 10KHzにしよう。

確認環境

・Windows 10 / STM32CubeIDE
・stm32h750 開発ボード
・ST-LINK V2 プログラマ/デバッガ
・オシロスコープ

STM32H750プログラマSTlLINK_V2を使用
STM32H750プログラマSTlLINK_V2を使用

パタメータ配置

RCC、Clock、DAC、Timer、DMA、Serial wireの順でパラメータ配置を行って、STM32CubeIDEにソースコード生成しよう。

Target MCU

TargetをSTM32H750VBに指定する。

STM32H750VBをターゲットとして指定
STM32H750VBをターゲットとして指定

RCC

RCCを外部HSEクリスタルに指定する。

stm32h750のRCC配置
stm32h750のRCC配置

Clock

HSEを25MHzオンボードに指定して、Timerクロックを240MHzにする。Timerクロックは他の値にしてもありうる。

stm32h750のクロック配置
stm32h750のクロック配置

DAC

DACのOutput2に指定する。

STM32H750のDACをOutput2に指定する
STM32H750のDACをOutput2に指定する

Timer

Timer6に指定する。

STM32H750のTimer6に指定
STM32H750のTimer6に指定

DMA

MCUの負担を軽減して、DMA転送方式に指定する。

STM32H750のDMAに指定
STM32H750のDMAに指定

Serial wire

プログラマ&デバッガをSWD(ST-LINK)に指定する。

STM32H750のデバッガをSerial wireに
STM32H750のデバッガをSerial wireに

ソースコード

Generate codeして、main.cへ以下ソースを追加する。

/* USER CODE BEGIN 0 */
uint16_t data[100];
void sine_wave(void) {
	for (uint16_t i = 0; i < 100; i++) {
		data[i] = (uint16_t)(2000 * sin(i * 2 * 3.14159 / 100) + 2000);
	}
}
/* USER CODE END 0 */

int main() {
...
/* USER CODE BEGIN 2 */
sine_wave();
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t *)data, 100, DAC_ALIGN_12B_R);
/* USER CODE END 2 */
...
}

出力確認

BUILD & RUN、Sine波は予想通り、周期10KHzでPA5から出力されていることを確認済み。

STM32h750の出力Sine波を確認する
STM32h750の出力Sine波を確認する

プロジェクト

https://github.com/soarbear/stm32h750_dac_timer_sine_wave に公開済み。

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア