Хм, хороший вопрос))
Я так сделал по аналогии с AVR. Да и где-то в интернете такое читал…
Так а как правильно делать то с PWM?
Ну или где почитать (сильно желательно на русском языке)?
Ты в общем то всё правильно сделал. Но всему есть предел. Тактируются на 72 МГц. Количество шагов ШИМ прямо связано с частотой ШИМ. В любом случае количество шагов ограничено размером регистра. Если 16ти разрядный, то шагов 65535 и частота ШИМ 72000000/65535= 1098.65 Гц .
Хочешь больше частоту ШИМ соответственно нужно уменьшать число шагов. Или брать МК у которого есть возможность работать с большей частотой такта таймера. Но тут наши возможности несколько ограничены.
при таких настройках на 48kHz? больше 1500 не пукнешь! по какой причине 3500 взяли и что значит
???
Хотел брать данные оцифровки и подставлять в значение ccr1. Но видимо придется использовать map() (или подобное)…
ну смотри у тебя тактовая 72мГц
выставляя прескалер (PSC) 1500 ты тактируешь таймер уже своими 48кГц
выставляя Counter Period например в 100 ты заставляешь перезагружаться таймер через каждые 100 тиков, то есть период/частота будет уже 480 Гц и регулировать скважность регистром CCRx можно в пределах 0-100 тем самым меняя скважность от 0 до 100%
короче
если тебе надо иметь минимальный шаг скважности (CCRx) единица
на частоте 48кГц, пихай в прескалер (PSC) 1500, Counter period не трогай (65535)
и регистром CCRx управляй скважностью 0-65535.
мне сегодня это так видится, но я талый и все по памяти, не серчай если где в заблуждение ввел.
тода завтра исправлюсь))
Так как ты написал не получается. Без предделителя 48кГц получается счетом Counter Period всего до 1500 (ну 1499, если точнее). А если предделитель еще использовать - так частота кратно уменьшится, а мне этого не нужно.
значит ссорян, пойду спать)
Прочитал последние 11 сообщений, не понял, задача то в чем?
Если про скважность шим, а сколько надо то? Частота сколько?
Там арифметика простая - максимальная частота - половина таковой.
Шим в процентах /долях /частях/количествах импульсов этой максимальной частоты.
ЗЫ. Да, суббота, как смог нетрезвый ответ изобразил
А что нужно?
В цифрах точных желательно.
Нужно менять скважность шим от 0% до 100% используя значения оцифровки (а ацп 12 битный, значит от 0 до 4096). Частота шим - 48кГц.
То есть я хотел «напрямую» брать значения оцифровки и подставлять в ccr1.
Но уже понял, что так не получится … (
Ничего не мешает в ccr кидать на ходу значения для изменения шим, отправка на ws2812 через dma именно так и работает.
Я это понимаю)))
И что не так тогда?
ну я так же делаю, через map(), тольк для посветки экрана мне хватает 120Hz…
ну вообще некоторые таймеры в stm32 могут быть 32 разрядными, но это вроде бы не про stm32f103c8, скорее про f303cct6
Что 12 бит - это 0…4096, а ccr1 максимально может быть 1499… напрямую подставлять значения с ацп в ccr не получается…
еще чутка…
хорошо прескалер не трогая и Counter period выставив в 4095
что там получается при значениях CCR1 от 0 до 4095?
Я конечно щас в даташит не полезу, но насколько я помню, на f103 на 16 разрядных таймерах, ccr разрядность совпадает с cnt регистром. Соответственно шим при максимальной частоте (надо считать) может регулироваться от 0 до 65535. Откуда 1499?
Частота получается низкая, где-то 17.5кГц, а это звуковой диапазон…