Быстрый ШИМ на Nucleo-F030R8 с Arduino IDE

сабра
Чт, 3 августа 2017 г. 12:30
Привет,

У меня есть доска развития Nucleo-F030R8, и после использования функции AnalogWrite () в рамках Arduino IDE я обнаружил, что частота моего ШИМ составляла чуть менее 1 кГц. Я хотел бы увеличить частоту до 20 кГц, у кого -нибудь есть какой -либо опыт или предложения о том, как это сделать?

Спасибо

Рик Кимбалл
Чт, 3 августа 2017 г. 13:01
Вы обнаружите, что St Core (https: // github.com/stm32duino/arduino_core_stm32) быть ванильным портом. Он придерживается довольно близко к функциям, доступным из исходного Arduino Core.

Вы можете попробовать изменить вариант.H Файл

https: // github.com/stm32duino/arduino_c ... инициальный.H#162

Определение «pwm_frequency» контролирует частоту аналога ()

fpistm
Чт, 3 августа 2017 г. 13:06
Привет, Сабра,

PWM_FRECTERY установлен на 1000.
Если вы хотите изменить его, вам нужно изменить его в варианте: варианты/ucleo_f030r8/variant.час

Я протестировал и установил 20000 на F030 на D5 (PB4, TIM3). Я получаю 20.8 кГц.

сабра
Чт, 3 августа 2017 г. 13:38
Спасибо за быстрые ответы! Работал безупречно : D

fpistm
Чт, 03 августа 2017 г. 14:22
Добро пожаловать.
Может быть хорошо расширить API Arduino, чтобы позволить изменить частоту.

victor_pv
Пт, 04 августа 2017 г. 3:26 утра
Я надеюсь, что вы не ждете, когда команда Arduino сделает это, иначе вы долго дите ;)

fpistm
Пт, 04 августа 2017 г., 7:59
Нет, планируется расширить API.
Сравните с AVR, STM32 предлагает больше функциональных возможностей/возможностей ;)

Rogerclark
Пт, 04 августа 2017 г. 10:40
Фредерик

КСТАТИ.

Первоначально я спрашивал, будет ли команда Arduino захотеть добавить новые функции для поддержки более нового оборудования, но они не были заинтересованы.
Они, кажется, очень сосредоточены на оборудовании AVR и, кажется, не хотят добавлять дополнительные расширения в API.

Таким образом, мы только что добавили новые функции, хотя они никогда не будут поддерживать ядро ​​Ардуино (E.глин. AVR или SAM и т. Д.).

fpistm
Пт, 04 августа 2017 г., 11:59
Правый Роджер.
Arduino не нравится изменять или добавить Api aven, если они добавляют новую арку (я.E Otto на основе STM32F4), я испытываю стену, которую они подняли : mrgreen:

Таким образом на основе всего пользовательского ввода, мы добавим полезный API.

Rogerclark
Пт, 04 августа 2017 12:47
Прохладный...

Олли
Пт, 04 августа 2017 г. 14:48
Для разработчиков, которые используют как Teensy, так и STM32DUINO, было бы неплохо, если бы две библиотеки были бы совместимыми. В этом случае частота ШИМ уже управляется библиотекой Teensy, и было бы неплохо, если бы поддержка была добавлена ​​с использованием того же синтаксиса и функциональности.

Рик Кимбалл
Пт, 04 августа 2017 г. 15:20
Хорошая идея @ollie

AnalogwriteFrequency (PIN, частота)
...
void setup () {
AnalogwriteFrequency (4, 375000); // Teensy 3.0 PIN 3 также изменяется до 375 кГц
}

fpistm
Пт, 04 августа 2017 г., 19:47
Если у вас уже есть ссылка на API, без проблем без проблем ;)
Я проверю Teensy API.

Rogerclark
Пт, 04 августа 2017 г., 21:27
Иногда еще одно хорошее место для просмотра - это реализация EPS8266.

Рик Кимбалл
Пт, 04 августа 2017 г., 21:54
Похоже, что ESP8266 использует глобальный подход, устанавливая частоту, которая влияет на все выходные сигналы. Это может быть оборудование

http: // esp8266.GitHub.IO/Arduino/Versio ... выход в систему

Rogerclark
Пт, 04 августа 2017 г. 22:37
[Рик Кимбалл - Пт, 04 августа 2017 г. 9:54 вечера] - Похоже, что ESP8266 использует глобальный подход, устанавливая частоту, которая влияет на все выходные сигналы. Это может быть оборудование

http: // esp8266.GitHub.IO/Arduino/Versio ... выход в систему
Я думаю, что у нас, вероятно, есть подобное ограничение, потому что я думаю, что булавки, вероятно, делятся таймерами.

Редактировать

Что ж, у нас есть несколько таймеров, но, вероятно, привлечение к глобальному подходу приведет к меньшему путанице

timer2 / * pa0 * /
timer2 / * pa1 * /
timer2 / * pa2 * /
timer2 / * pa3 * /
timer3 / * pa6 * /
timer3 / * pa7 * /
timer1 / * pa8 * /
timer1 / * pa9 * /
timer1 / * pa10 * /
timer1 / * pa11 * /
timer3 / * pb0 * /
timer3 / * pb1 * /
timer4 / * pb6 * /
timer4 / * pb7 * /
timer4 / * pb8 * /
timer4 / * pb9 * /

Не должно быть слишком сложно кодировать, как у нас уже есть

https: // github.com/rogerclarkmelbourne/ ... #L103-L118

КСТАТИ.

Интересно, действительно ли Teensy может запустить все свои штифты PWM с разными скоростями?

Rogerclark
Сб 05 августа 2017 г., 4:22
Я исследовал, как мы можем добавить это в Libmaple

Этот пример допускает период
#include void setup() { pinMode(PA0,PWM); #define MAX_RELOAD ((1 << 16) - 1) uint32_t pwmFreqHz = 100000; uint32_t period_cyc = F_CPU / pwmFreqHz; uint16_t prescaler = (uint16)(period_cyc / MAX_RELOAD + 1); uint16_t overflow = (uint16)((period_cyc + (prescaler / 2)) / prescaler); timer_set_prescaler(&timer2, (uint16)(prescaler - 1)); timer_set_reload(&timer2, overflow); // analogWriteResolution(8); int duty=128;// 0 - 255 pwmWrite(PA0,(timer_get_reload(&timer2) * duty)/255); //analogWrite(PA0,1); while (1) { Serial.print("prescaler: "); Serial.print(prescaler); Serial.print(" overflow: "); Serial.println(overflow); delay(1000); } }