TIM2を使用し50Hz正弦波のPWM変調を作成します。 |
||||||
|
||||||
1周期400サンプリングで50Hz正弦波を作成してみます。 PWMの周期 = 50Hz x 400 = 20KHz となります。 また、分解能を400とすると、TIM2へのクロックは Clock = 20KHz x 400 = 8MHz となります。 よって、 Proscaler = 32 / 8 - 1 = 3 Counter Period = 400 - 1 = 399 となります。 正弦波データは以下の式で求められます。 CCR = (399 x (sin(2・PI / N) + 1)) / 2 (N=0~399) 上記式で作成したテーブルは以下の様になります const uint16_t g_uhSinTable[] = { 200, 203, 206, 209, 212, 215, 218, 221, 225, 228, 231, 234, 237, 240, 243, 246, 249, 252, 255, 258, 261, 264, 267, 270, 273, 276, 279, 282, 284, 287, 290, 293, 296, 298, 301, 304, 306, 309, 312, 314, 317, 319, 322, 324, 327, 329, 331, 334, 336, 338, 341, 343, 345, 347, 349, 351, 353, 355, 357, 359, 361, 363, 365, 366, 368, 370, 371, 373, 374, 376, 377, 379, 380, 381, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 393, 394, 395, 395, 396, 397, 397, 397, 398, 398, 398, 399, 399, 399, 399, 399, 399, 399, 399, 399, 398, 398, 398, 397, 397, 397, 396, 395, 395, 394, 393, 393, 392, 391, 390, 389, 388, 387, 386, 385, 384, 383, 381, 380, 379, 377, 376, 374, 373, 371, 370, 368, 366, 365, 363, 361, 359, 357, 355, 353, 351, 349, 347, 345, 343, 341, 338, 336, 334, 331, 329, 327, 324, 322, 319, 317, 314, 312, 309, 306, 304, 301, 298, 296, 293, 290, 287, 284, 282, 279, 276, 273, 270, 267, 264, 261, 258, 255, 252, 249, 246, 243, 240, 237, 234, 231, 228, 225, 221, 218, 215, 212, 209, 206, 203, 200, 196, 193, 190, 187, 184, 181, 178, 174, 171, 168, 165, 162, 159, 156, 153, 150, 147, 144, 141, 138, 135, 132, 129, 126, 123, 120, 117, 115, 112, 109, 106, 103, 101, 98, 95, 93, 90, 87, 85, 82, 80, 77, 75, 72, 70, 68, 65, 63, 61, 58, 56, 54, 52, 50, 48, 46, 44, 42, 40, 38, 36, 34, 33, 31, 29, 28, 26, 25, 23, 22, 20, 19, 18, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 6, 5, 4, 4, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 4, 4, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 22, 23, 25, 26, 28, 29, 31, 33, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 61, 63, 65, 68, 70, 72, 75, 77, 80, 82, 85, 87, 90, 93, 95, 98, 101, 103, 106, 109, 112, 115, 117, 120, 123, 126, 129, 132, 135, 138, 141, 144, 147, 150, 153, 156, 159, 162, 165, 168, 171, 174, 178, 181, 184, 187, 190, 193, 196 }; |
||||||
|
||||||
2.1. TIM2の設定 Timers内TIM2を選択し、Mode を以下の様に設定します。
|
||||||
2.2. DMAの設定 ModeはCircularに設定します。DirectionはMemory To Peripheralに設定します。 |
||||||
|
||||||
今回は、DMAで g_uhSinTable を繰り返し転送しますので、割込み処理は発生しません。 HAL_TIM_PWM_Start_DMA関数でDMAを開始させるだけです。 データ数はバイト数ではなく要素数を指定します。 /* USER CODE BEGIN 2 */ HAL_TIM_PWM_Start_DMA( &htim2, TIM_CHANNEL_1, (const uint32_t *)g_uhSinTable, sizeof(g_uhSinTable) / sizeof(g_uhSinTable[0])); /* USER CODE END 2 */ |
||||||
|
||||||
実行しLPFを通すと以下の波形が発生します。![]() |
||||||
今回の回路図は以下の通りです。 Wasabi はUSB からの 5V 電源として使用しています。 |