R2R писал(а):как лучше задавать длительность накачки? Если задавать в относительных единицах, то на низких частотах получатся слишком длинные импульсы.
А на каком контроллере будет делаться прерыватель?
Просто на многих, например тех же AVR'ках довольно примитивные таймера и без геммора сделать не получится.
Довольно гибкие например в STM'ках — в том же SI используется F100 серия, так как их там в добавок еще и завались.

Насчет логики, можно использовать один таймер в циклическом режиме с прерыванием — им будет задаваться частота BPS.
А вторым отмерять ширину импульса PW — конкретно он уже будет выдавать сигнал наружу.
Итого, таймер частоты вызывает N'ное количество прерываний в секунду, а в них запускается таймер, который уже выдаст импульс определенной ширины наружу и заглохнет.
Программа должна принимать ширину импульса в микросекундах и частоту в герцах — после конвертить эти числа в конфигурации для таймера.
Для STM'ок это предделитель(0-65536), внутреннее деление частоты с процессора(на 2 или 4), период таймера(0-65536), и еще мелкие настройки.
R2R писал(а):Если задавать в абсолютных единицах, то катушка будет становиться более прожорливой с ростом частоты и может залететь в ЦВ.
Есть такая штука.
В SI для обхода этой проблемы юзается несколько систем, в частности ограничительные настройки(выход отключается если ширина импульса или частота выше установленных параметров), есть система динамического укорачивания ширины импульса с ростом частоты, и появившаяся недавно — ограничивалка ширины заполнения, тоже укорачивает импульсы дабы таковое не превышало выставленный в настройках коэффициент.
Хороший прерыватель на самом деле очень не просто сделать — SI к пример появился аж в далеком 2013-м и развивался из года в год дабы дорасти до нынешнего состояния.
Последний апдейт вышел около 2-х недель назад — т.е. до сих пор в нем еще есть чего делать.
