Управление частотой ШИМ в STM32F103 из Arduino IDE
Работая с STM32F103 несложно управлять частотой ШИМ сигнала пользуясь этой таблицей:
STM32F103 | CYCLES_PER_USEC 72 (MHz) | Actual PWM values | ||||
PWM Period, usecs | PWM_Freq, Hz | period_cyc | prescaler | overflow | PWM Freq, Hz | Resolution, usecs |
50000000 | 0.02 | 3600000000 | 54933 | 65534 | 0.0200 | 762.9583 |
20000000 | 0.05 | 1440000000 | 21973 | 65535 | 0.0500 | 305.1806 |
10000000 | 0.1 | 720000000 | 10987 | 65532 | 0.1000 | 152.5972 |
5000000 | 0.2 | 360000000 | 5494 | 65526 | 0.2000 | 76.3056 |
2000000 | 0.5 | 144000000 | 2198 | 65514 | 0.5000 | 30.5278 |
1000000 | 1 | 72000000 | 1099 | 65514 | 1.0000 | 15.2639 |
500000 | 2 | 36000000 | 550 | 65455 | 2.0000 | 7.6389 |
200000 | 5 | 14400000 | 220 | 65455 | 5.0000 | 3.0556 |
100000 | 10 | 7200000 | 110 | 65455 | 9.9999 | 1.5278 |
50000 | 20 | 3600000 | 55 | 65455 | 19.9999 | 0.7639 |
20000 | 50 | 1440000 | 22 | 65455 | 49.9997 | 0.3056 |
10000 | 100 | 720000 | 11 | 65455 | 99.9993 | 0.1528 |
5000 | 200 | 360000 | 6 | 60000 | 200.0000 | 0.0833 |
2000 | 500 | 144000 | 3 | 48000 | 500.0000 | 0.0417 |
1000 | 1000 | 72000 | 2 | 36000 | 1000.0000 | 0.0278 |
500 | 2000 | 36000 | 1 | 36000 | 2000.0000 | 0.0139 |
200 | 5000 | 14400 | 1 | 14400 | 5000.0000 | 0.0139 |
100 | 10000 | 7200 | 1 | 7200 | 10000.0000 | 0.0139 |
50 | 20000 | 3600 | 1 | 3600 | 20000.0000 | 0.0139 |
20 | 50000 | 1440 | 1 | 1440 | 50000.0000 | 0.0139 |
Пример реализации:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// Обозначаем таймер соответствующего ШИМ HardwareTimer pwmtimer(2); void setup() { pinMode(PA1, PWM); pwmtimer.setPeriod(20); //PWM Period, usecs } void loop() { pwmWrite(PA1, 720); //n.b. overflow delay(1000); } |