|
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 電源として使用しています。 |