MicroPython:Библиотеки/pyb/Класс Timer: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...») |
Myagkij (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[]</ref>= | =Класс Timer – управление внутренними таймерами<ref>[http://docs.micropython.org/en/latest/library/pyb.Timer.html docs.micropython.org - class Timer – control internal timers]</ref>= | ||
Таймеры используются для самых разных задач, но в данный момент для них реализован только один простой сценарий: периодический вызов функции. | |||
Каждый таймер состоит из счетчика, ведущего отсчет при помощи заданной частоты. Частота отсчитывания – это тактовая частота таймера (в Гц), поделенная на значение в делителе частоты. Когда значение в счетчике достигает заданного порога (периода), это запускает событие, после чего счетчик сбрасывается до нуля. При помощи метода callback() можно задать Python-функцию, которая будет запускаться при срабатывании таймера. | |||
Пример использования класса Timer для переключения светодиода с фиксированной частотой: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
tim = pyb.Timer(4) # создаем объект Timer при помощи таймера 4 | |||
tim.init(freq=2) # переключаем светодиод с частотой 2 Гц | |||
tim.callback(lambda t:pyb.LED(1).toggle()) | |||
</syntaxhighlight> | |||
Пример использования именованной функции в методе callback(): | |||
<syntaxhighlight lang="python" enclose="div"> | |||
def tick(timer): # создаем функцию tick() | |||
print(timer.counter()) # показываем текущее значение | |||
# счетчика таймера | |||
tim = pyb.Timer(4, freq=1) # создаем объект «tim» | |||
# при помощи таймера 4; | |||
# он будет срабатывать с частотой 1 Гц | |||
tim.callback(tick) # задаем нашу функцию tick() | |||
# как функцию обратного вызова | |||
</syntaxhighlight> | |||
Другие примеры: | |||
<syntaxhighlight lang="python" enclose="div"> | |||
tim = pyb.Timer(4, freq=100) # частота в герцах | |||
tim = pyb.Timer(4, prescaler=0, period=99) | |||
tim.counter() # читаем значение счетчика | |||
# (с помощью этого метода | |||
# его также можно задать) | |||
tim.prescaler(2) # задаем делитель частоты | |||
# (с помощью этого метода | |||
# его также можно прочесть) | |||
tim.period(199) # задаем период | |||
# (с помощью этого метода | |||
# его также можно прочесть) | |||
tim.callback(lambda t: ...) # задаем функцию обратного вызова | |||
# для обновления прерываний | |||
# («t» - это экземпляр «tim») | |||
tim.callback(None) # очищаем функцию обратного вызова | |||
</syntaxhighlight> | |||
'''Примечание:''' Таймеры ''2'' и ''3'' используются, чтобы при помощи [[ШИМ]] задавать яркость [[светодиод]]ов ''3'' и ''4'' соответственно. Но эти таймеры будут использоваться для [[ШИМ]], только если яркость соответствующего [[светодиод]]а задается в диапазоне ''между «1» и «254»''. Если функция яркости [[светодиод]]ов не используется, то эти таймеры можно использовать для любых других целей. Аналогичным образом таймер ''5'' используется для управления [[сервопривод]]ом, а таймер ''6'' – для синхронизированных чтения/записи [[АЦП]]/[[ЦАП]]. Поэтому рекомендуем использовать в своих программах другие таймеры. | |||
'''Примечание:''' Во время работы функции обратного вызова (прерывания) память выделять нельзя, и в результате исключения, вызываемые внутри функций обратного вызова, будут малоинформативны. О том, как обойти это ограничение, читайте в описании функции [http://docs.micropython.org/en/latest/library/micropython.html#micropython.alloc_emergency_exception_buf micropython.alloc_emergency_exception_buf()]. | |||
== Конструкторы == | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/pyb.Timer()|pyb.Timer(id, ...)]] | |||
• Класс pyb.Timer(id, ...) – конструирует новый объект Timer с идентификатором id. Если будут заданы дополнительные аргументы, созданный объект также будет инициализирован. Об аргументах для инициализации читайте в описании метода init(). В аргументе id может быть значение между «1» и «14». | |||
== Методы == | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.init()|Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.deinit()|Timer.deinit()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.callback()|Timer.callback(fun)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Timer.channel()|Timer.channel(channel, mode, ...)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/ | |||
• Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0) – инициализирует таймер. Инициализацию можно выполнить либо с помощью частоты (в Гц), либо с помощью делителя частоты (prescaler) и периода (period): | |||
# задаем, чтобы таймер срабатывал на 100 Гц: | |||
tim.init(freq=100) | |||
# напрямую задаем делитель частоты и период: | |||
tim.init(prescaler=83, period=999) | |||
Именованные аргументы: | |||
o freq – здесь задается периодическая частота таймера. Этот параметр можно также рассматривать как частоту, с которой таймер проходит через один полный цикл. | |||
o prescaler – это значение (в диапазоне 0-0xffff), загружаемое в таймерный регистр делителя (PSC). Исходная частота таймера делится на (prescaler + 1), давая в результате частоту отсчитывания. Исходная частота таймеров 2-7 и 12-14 – это 84 МГц (pyb.freq()[2] * 2)), а таймеров 1 и 8-11 – 168 МГц (pyb.freq()[3] * 2)). | |||
o period – это значение, загружаемое в таймерный регистр автозагрузки (ARR). Для таймеров 1, 3, 4 и 6-15 это значение в диапазоне 0-0xffff, а для таймеров 2 и 5 – в диапазоне между 0-0x3fffffff. Это значение задает период таймера (т.е. порог, после которого счетчик таймера обнуляется). Счетчик будет обнулен после достижения значения (period + 1). | |||
o mode – здесь может быть одно из следующих значений: | |||
Timer.UP – таймер будет считать с «0» до значения в ARR (это режим, используемый по умолчанию). | |||
Timer.DOWN – таймер будет считать со значения в ARR до «0». | |||
Timer.CENTER – таймер будет считать с «0» до значения в ARR, а потом обратно до «0». | |||
o div – здесь может быть «1», «2» или «4». Это значение, на которое делится тактовая частота, чтобы определить частоту семплирования, используемую цифровыми фильтрами. | |||
o callback – здесь задается функция обратного вызова, как в callback(). | |||
o deadtime – здесь задается время задержки между сигналами на комплиментарных каналах (во время этой задержки оба канала будут неактивны). Значение в deadtime может быть целым числом в диапазоне между «0» и «1008», но с некоторыми ограничениями: в диапазоне 0-128 шаг 1, в диапазоне 128-256 – 2, в диапазоне 256-512 – 8, в диапазоне 512-1008 – 16. Единица измерения в deadtime – это частота source_freq, поделенная на div. Задержка deadtime доступна только на таймерах 1 и 8. | |||
Нужно обязательно задать либо freq, либо одновременно prescaler и period. | |||
• Timer.deinit() – деинициализирует таймер. | |||
Отключает функцию обратного вызова (и связанное с ней прерывание). | |||
Отключает все канальные функции обратного вызова (и связанные с ними прерывания). Останавливает таймер и отключает его. | |||
• Timer.callback(fun) – задает функцию, которая будет вызвана при срабатывании таймера. Функции fun передается один аргумент – объект Timer. Если в аргументе fun задано None, функция обратного вызова будет отключена. | |||
• Timer.channel(channel, mode, ...) – если передать этому методу только номер канала (channel), он вернет ранее инициализированный объект TimerChannel (или None, если никакого канала ранее инициализировано не было). | |||
В противном случае будет инициализирован и возвращен объект TimerChannel. | |||
Каждый канал можно настроить на выполнение ШИМ, а также на работу в режимах сравнения (Output Compare) и захвата сигнала (Input Capture). Все каналы пользуются одним и тем же таймером, что также значит, что они используют одну и ту же таймерную частоту. | |||
Именованные аргументы для этого метода: | |||
o mode – это режим работы канала: | |||
Timer.PWM – таймер будет работать в режиме ШИМ (активный высокий уровень). | |||
Timer.PWM_INVERTED – таймер будет работать в режиме ШИМ (активный низкий уровень). | |||
Timer.OC_TIMING – это значит, что контакты никак не управляются. | |||
Timer.OC_ACTIVE – если при сравнении было обнаружено совпадение, контакт станет активным (активный уровень определяется полярностью). | |||
Timer.OC_INACTIVE – если при сравнении было обнаружено совпадение, контакт станет неактивным. | |||
Timer.OC_TOGGLE – если при сравнении было обнаружено совпадение, контакт будет переключен. | |||
Timer.OC_FORCED_ACTIVE – контакт будет принудительно сделан активным (сравнение будет игнорироваться). | |||
Timer.OC_FORCED_INACTIVE – контакт будет принудительно сделан неактивным (сравнение будет игнорироваться). | |||
Timer.IC – таймер будет работать в режиме захвата сигнала. | |||
Timer.ENC_A – таймер будет работать в режиме энкодера. Значение счетчика будет меняться только при изменении CH1. | |||
Timer.ENC_B – таймер будет работать в режиме энкодера. Значение счетчика будет меняться только при изменении CH2. | |||
Timer.ENC_AB – таймер будет работать в режиме энкодера. Значение счетчика будет меняться при изменении CH1 или CH2. | |||
o callback – канальная функция обратного вызова. Ее также можно задать с помощью метода TimerChannel.callback(). | |||
o pin – здесь задается объект Pin (по умолчанию – None). То есть на канале этого контакта будет использоваться альтернативная функция. Если контакт не поддерживает никаких альтернативных функций для этого таймерного канала, это выдаст ошибку. | |||
Именованные аргументы для режимов Timer.PWM: | |||
o pulse_width – задает начальное ШИМ-значение. | |||
o pulse_width_percent – задает начальное ШИМ-значение в процентах. | |||
Именованные аргументы для режимов Timer.OC: | |||
o compare – задает начальное значение регистра сравнения. | |||
o polarity – здесь могут быть следующие значения: | |||
Timer.HIGH – выходной контакт имеет активный высокий уровень. | |||
Timer.LOW – выходной контакт имеет активный низкий уровень. | |||
Именованные аргументы для режимов Timer.IC: | |||
o polarity – здесь могут быть следующие значения: | |||
Timer.RISING – захват сигнала на переднем фронте. | |||
Timer.FALLING – захват сигнала на заднем фронте. | |||
Timer.BOTH – захват сигнала на обоих фронтах. | |||
Примечание: Захват сигнала работает только на главном канале, но не на комплиментарных. | |||
Примечания по режимам Timer.ENC: | |||
o Требуется два контакта, поэтому один или оба этих контакта должны быть настроены на использование соответствующей альтернативной функции при помощи API класса Pin. | |||
o Значение энкодера считывается с помощью метода timer.counter(). | |||
o Работает только на CH1 и CH2 (а не на CH1N и CH2N). | |||
o При включении режима энкодера номер канала игнорируется. | |||
Пример использования ШИМ: | |||
timer = pyb.Timer(2, freq=1000) | |||
ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) | |||
ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) | |||
• Timer.counter([value]) – задает или считывает значение счетчика таймера. | |||
• Timer.freq([value]) – задает или считывает частоту таймера (меняет значения в prescaler и period, если они заданы). | |||
• Timer.period([value]) – задает или считывает период таймера (period). | |||
• Timer.prescaler([value]) – задает или считывает предварительный делитель частоты таймера (prescaler). | |||
• Timer.source_freq() – задает исходную частоту таймера. | |||
== Класс TimerChannel – настройка канала для таймера == | |||
Таймерные каналы используются для генерирования/захвата сигнала при помощи таймера. | |||
Объекты TimerChannel создаются при помощи метода Timer.channel(). | |||
=== Методы === | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.callback()|timerchannel.callback(fun)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.capture()|timerchannel.capture([value])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.compare()|timerchannel.compare([value])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.pulse_width()|timerchannel.pulse_width([value])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Timer/Класс TimerChannel/timerchannel.pulse_width_percent()|timerchannel.pulse_width_percent([value])]] | |||
• timerchannel.callback(fun) – задает функцию обратного вызова, запускаемую при срабатывании канала таймера. Функции fun передается один аргумент – объект Timer. Если в аргументе fun задать None, это отключит функцию обратного вызова. | |||
• timerchannel.capture([value]) – задает или считывает значение захвата, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме захвата (input capture), логичнее использовать псевдоним capture(). | |||
• timerchannel.compare([value]) – задает или считывает значение сравнения, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме сравнения (output compare), логичнее использовать псевдоним compare(). | |||
• timerchannel.pulse_width([value]) – задает или считывает ШИМ-значение, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме ШИМ, логичнее использовать псевдоним pulse_width(). | |||
В режиме выравнивания по границе (edge-aligned) ШИМ-значение в количестве period + 1 будет соответствовать коэффициенту заполнения 100%. В режиме выравнивания по центру (center-aligned) ШИМ-значение в количестве period будет соответствовать коэффициенту заполнения 100%. | |||
• timerchannel.pulse_width_percent([value]) – задает или считывает процентное ШИМ-значение, связанное с каналом. В аргументе value должно быть значение в диапазоне между «0» и «100», и оно задает процент времени, в течение которого импульс находится в активном состоянии (это также называется коэффициентом заполнения). Значением в value может быть целое число или число с плавающей точкой (для большей точности). Например, если задать в value значение «25», это даст коэффициент заполнения 25%. | |||
Версия от 13:07, 16 октября 2020
Класс Timer – управление внутренними таймерами[1]
Таймеры используются для самых разных задач, но в данный момент для них реализован только один простой сценарий: периодический вызов функции.
Каждый таймер состоит из счетчика, ведущего отсчет при помощи заданной частоты. Частота отсчитывания – это тактовая частота таймера (в Гц), поделенная на значение в делителе частоты. Когда значение в счетчике достигает заданного порога (периода), это запускает событие, после чего счетчик сбрасывается до нуля. При помощи метода callback() можно задать Python-функцию, которая будет запускаться при срабатывании таймера.
Пример использования класса Timer для переключения светодиода с фиксированной частотой:
tim = pyb.Timer(4) # создаем объект Timer при помощи таймера 4
tim.init(freq=2) # переключаем светодиод с частотой 2 Гц
tim.callback(lambda t:pyb.LED(1).toggle())
Пример использования именованной функции в методе callback():
def tick(timer): # создаем функцию tick()
print(timer.counter()) # показываем текущее значение
# счетчика таймера
tim = pyb.Timer(4, freq=1) # создаем объект «tim»
# при помощи таймера 4;
# он будет срабатывать с частотой 1 Гц
tim.callback(tick) # задаем нашу функцию tick()
# как функцию обратного вызова
Другие примеры:
tim = pyb.Timer(4, freq=100) # частота в герцах
tim = pyb.Timer(4, prescaler=0, period=99)
tim.counter() # читаем значение счетчика
# (с помощью этого метода
# его также можно задать)
tim.prescaler(2) # задаем делитель частоты
# (с помощью этого метода
# его также можно прочесть)
tim.period(199) # задаем период
# (с помощью этого метода
# его также можно прочесть)
tim.callback(lambda t: ...) # задаем функцию обратного вызова
# для обновления прерываний
# («t» - это экземпляр «tim»)
tim.callback(None) # очищаем функцию обратного вызова
Примечание: Таймеры 2 и 3 используются, чтобы при помощи ШИМ задавать яркость светодиодов 3 и 4 соответственно. Но эти таймеры будут использоваться для ШИМ, только если яркость соответствующего светодиода задается в диапазоне между «1» и «254». Если функция яркости светодиодов не используется, то эти таймеры можно использовать для любых других целей. Аналогичным образом таймер 5 используется для управления сервоприводом, а таймер 6 – для синхронизированных чтения/записи АЦП/ЦАП. Поэтому рекомендуем использовать в своих программах другие таймеры.
Примечание: Во время работы функции обратного вызова (прерывания) память выделять нельзя, и в результате исключения, вызываемые внутри функций обратного вызова, будут малоинформативны. О том, как обойти это ограничение, читайте в описании функции micropython.alloc_emergency_exception_buf().
Конструкторы
• Класс pyb.Timer(id, ...) – конструирует новый объект Timer с идентификатором id. Если будут заданы дополнительные аргументы, созданный объект также будет инициализирован. Об аргументах для инициализации читайте в описании метода init(). В аргументе id может быть значение между «1» и «14».
Методы
- Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0)
- Timer.deinit()
- Timer.callback(fun)
- Timer.channel(channel, mode, ...)
- [[MicroPython:Библиотеки/pyb/Класс Timer/
• Timer.init(*, freq, prescaler, period, mode=Timer.UP, div=1, callback=None, deadtime=0) – инициализирует таймер. Инициализацию можно выполнить либо с помощью частоты (в Гц), либо с помощью делителя частоты (prescaler) и периода (period):
- задаем, чтобы таймер срабатывал на 100 Гц:
tim.init(freq=100)
- напрямую задаем делитель частоты и период:
tim.init(prescaler=83, period=999) Именованные аргументы: o freq – здесь задается периодическая частота таймера. Этот параметр можно также рассматривать как частоту, с которой таймер проходит через один полный цикл. o prescaler – это значение (в диапазоне 0-0xffff), загружаемое в таймерный регистр делителя (PSC). Исходная частота таймера делится на (prescaler + 1), давая в результате частоту отсчитывания. Исходная частота таймеров 2-7 и 12-14 – это 84 МГц (pyb.freq()[2] * 2)), а таймеров 1 и 8-11 – 168 МГц (pyb.freq()[3] * 2)). o period – это значение, загружаемое в таймерный регистр автозагрузки (ARR). Для таймеров 1, 3, 4 и 6-15 это значение в диапазоне 0-0xffff, а для таймеров 2 и 5 – в диапазоне между 0-0x3fffffff. Это значение задает период таймера (т.е. порог, после которого счетчик таймера обнуляется). Счетчик будет обнулен после достижения значения (period + 1). o mode – здесь может быть одно из следующих значений: Timer.UP – таймер будет считать с «0» до значения в ARR (это режим, используемый по умолчанию). Timer.DOWN – таймер будет считать со значения в ARR до «0». Timer.CENTER – таймер будет считать с «0» до значения в ARR, а потом обратно до «0». o div – здесь может быть «1», «2» или «4». Это значение, на которое делится тактовая частота, чтобы определить частоту семплирования, используемую цифровыми фильтрами. o callback – здесь задается функция обратного вызова, как в callback(). o deadtime – здесь задается время задержки между сигналами на комплиментарных каналах (во время этой задержки оба канала будут неактивны). Значение в deadtime может быть целым числом в диапазоне между «0» и «1008», но с некоторыми ограничениями: в диапазоне 0-128 шаг 1, в диапазоне 128-256 – 2, в диапазоне 256-512 – 8, в диапазоне 512-1008 – 16. Единица измерения в deadtime – это частота source_freq, поделенная на div. Задержка deadtime доступна только на таймерах 1 и 8. Нужно обязательно задать либо freq, либо одновременно prescaler и period. • Timer.deinit() – деинициализирует таймер. Отключает функцию обратного вызова (и связанное с ней прерывание). Отключает все канальные функции обратного вызова (и связанные с ними прерывания). Останавливает таймер и отключает его. • Timer.callback(fun) – задает функцию, которая будет вызвана при срабатывании таймера. Функции fun передается один аргумент – объект Timer. Если в аргументе fun задано None, функция обратного вызова будет отключена. • Timer.channel(channel, mode, ...) – если передать этому методу только номер канала (channel), он вернет ранее инициализированный объект TimerChannel (или None, если никакого канала ранее инициализировано не было). В противном случае будет инициализирован и возвращен объект TimerChannel. Каждый канал можно настроить на выполнение ШИМ, а также на работу в режимах сравнения (Output Compare) и захвата сигнала (Input Capture). Все каналы пользуются одним и тем же таймером, что также значит, что они используют одну и ту же таймерную частоту. Именованные аргументы для этого метода: o mode – это режим работы канала: Timer.PWM – таймер будет работать в режиме ШИМ (активный высокий уровень). Timer.PWM_INVERTED – таймер будет работать в режиме ШИМ (активный низкий уровень). Timer.OC_TIMING – это значит, что контакты никак не управляются. Timer.OC_ACTIVE – если при сравнении было обнаружено совпадение, контакт станет активным (активный уровень определяется полярностью). Timer.OC_INACTIVE – если при сравнении было обнаружено совпадение, контакт станет неактивным. Timer.OC_TOGGLE – если при сравнении было обнаружено совпадение, контакт будет переключен. Timer.OC_FORCED_ACTIVE – контакт будет принудительно сделан активным (сравнение будет игнорироваться). Timer.OC_FORCED_INACTIVE – контакт будет принудительно сделан неактивным (сравнение будет игнорироваться). Timer.IC – таймер будет работать в режиме захвата сигнала. Timer.ENC_A – таймер будет работать в режиме энкодера. Значение счетчика будет меняться только при изменении CH1. Timer.ENC_B – таймер будет работать в режиме энкодера. Значение счетчика будет меняться только при изменении CH2. Timer.ENC_AB – таймер будет работать в режиме энкодера. Значение счетчика будет меняться при изменении CH1 или CH2. o callback – канальная функция обратного вызова. Ее также можно задать с помощью метода TimerChannel.callback(). o pin – здесь задается объект Pin (по умолчанию – None). То есть на канале этого контакта будет использоваться альтернативная функция. Если контакт не поддерживает никаких альтернативных функций для этого таймерного канала, это выдаст ошибку. Именованные аргументы для режимов Timer.PWM: o pulse_width – задает начальное ШИМ-значение. o pulse_width_percent – задает начальное ШИМ-значение в процентах. Именованные аргументы для режимов Timer.OC: o compare – задает начальное значение регистра сравнения. o polarity – здесь могут быть следующие значения: Timer.HIGH – выходной контакт имеет активный высокий уровень. Timer.LOW – выходной контакт имеет активный низкий уровень. Именованные аргументы для режимов Timer.IC: o polarity – здесь могут быть следующие значения: Timer.RISING – захват сигнала на переднем фронте. Timer.FALLING – захват сигнала на заднем фронте. Timer.BOTH – захват сигнала на обоих фронтах. Примечание: Захват сигнала работает только на главном канале, но не на комплиментарных. Примечания по режимам Timer.ENC: o Требуется два контакта, поэтому один или оба этих контакта должны быть настроены на использование соответствующей альтернативной функции при помощи API класса Pin. o Значение энкодера считывается с помощью метода timer.counter(). o Работает только на CH1 и CH2 (а не на CH1N и CH2N). o При включении режима энкодера номер канала игнорируется. Пример использования ШИМ: timer = pyb.Timer(2, freq=1000) ch2 = timer.channel(2, pyb.Timer.PWM, pin=pyb.Pin.board.X2, pulse_width=8000) ch3 = timer.channel(3, pyb.Timer.PWM, pin=pyb.Pin.board.X3, pulse_width=16000) • Timer.counter([value]) – задает или считывает значение счетчика таймера. • Timer.freq([value]) – задает или считывает частоту таймера (меняет значения в prescaler и period, если они заданы). • Timer.period([value]) – задает или считывает период таймера (period). • Timer.prescaler([value]) – задает или считывает предварительный делитель частоты таймера (prescaler). • Timer.source_freq() – задает исходную частоту таймера.
Класс TimerChannel – настройка канала для таймера
Таймерные каналы используются для генерирования/захвата сигнала при помощи таймера.
Объекты TimerChannel создаются при помощи метода Timer.channel().
Методы
- timerchannel.callback(fun)
- timerchannel.capture([value])
- timerchannel.compare([value])
- timerchannel.pulse_width([value])
- timerchannel.pulse_width_percent([value])
• timerchannel.callback(fun) – задает функцию обратного вызова, запускаемую при срабатывании канала таймера. Функции fun передается один аргумент – объект Timer. Если в аргументе fun задать None, это отключит функцию обратного вызова.
• timerchannel.capture([value]) – задает или считывает значение захвата, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме захвата (input capture), логичнее использовать псевдоним capture().
• timerchannel.compare([value]) – задает или считывает значение сравнения, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме сравнения (output compare), логичнее использовать псевдоним compare().
• timerchannel.pulse_width([value]) – задает или считывает ШИМ-значение, связанное с каналом. Функции capture(), compare() и pulse_width() – это всё псевдонимы для одной и той же функции. Просто когда канал находится в режиме ШИМ, логичнее использовать псевдоним pulse_width().
В режиме выравнивания по границе (edge-aligned) ШИМ-значение в количестве period + 1 будет соответствовать коэффициенту заполнения 100%. В режиме выравнивания по центру (center-aligned) ШИМ-значение в количестве period будет соответствовать коэффициенту заполнения 100%.
• timerchannel.pulse_width_percent([value]) – задает или считывает процентное ШИМ-значение, связанное с каналом. В аргументе value должно быть значение в диапазоне между «0» и «100», и оно задает процент времени, в течение которого импульс находится в активном состоянии (это также называется коэффициентом заполнения). Значением в value может быть целое число или число с плавающей точкой (для большей точности). Например, если задать в value значение «25», это даст коэффициент заполнения 25%.
<syntaxhighlight lang="python" enclose="div">