Buzzer: различия между версиями
Vdromanov (обсуждение | вклад) |
Vdromanov (обсуждение | вклад) |
||
Строка 3: | Строка 3: | ||
<!--T:1--> | <!--T:1--> | ||
''Страница находится в процессе редактирования!!!!!'' | ''Страница находится в процессе редактирования!!!!!'' | ||
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules | |||
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules и python. | |||
==О ШИМ и пересчёт параметров==<!--T:2--> | ==О ШИМ и пересчёт параметров==<!--T:2--> | ||
Строка 9: | Строка 10: | ||
Коэффециент заполнения влияет на громкость звука. | Коэффециент заполнения влияет на громкость звука. | ||
== | ==Низкоуровневая работа==<!--T:3--> | ||
===Номер pwm-порта для sysfs===<!--T:12--> | |||
Ножка gpio настраивается, как выход PWM в dts ядра linux. Подробнее можно посмотреть [[https://github.com/wirenboard/linux/blob/ef2d87e222b365848fe7262c022ca887b6449432/arch/arm/boot/dts/imx6ul-wirenboard61.dts#L495|на нашем github]]. | |||
<!--T:4--> | <!--T:4--> | ||
После этого появляется директория /sys/class/pwm/pwmchip0/ | В зависимости от ревизии контроллера и версии его ПО, узнать номер порта PWM для Buzzer можно разными способами: | ||
*По умолчанию (для всех контроллеров до WB6.X.X), номер порта = 2 | |||
*Для контроллеров WB6.X.X, номер порта = 0 | |||
*Номер порта можно узнать, выполнив команду <syntaxhighlight lang="bash">echo $WB_PWM_BUZZER</syntaxhighlight> | |||
Во всех примерах далее будем считать, что номер pwm-порта = 0. | |||
===Работа из sysfs===<!--T:12--> | |||
Для работы c pwm через sysfs нужно: | |||
#Экспортировать порт <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/export</syntaxhighlight>После этого появляется директория /sys/class/pwm/pwmchip0/pwm0 | |||
#Записать период pwm в наносекундах <syntaxhighlight lang="bash">echo 250000 > /sys/class/pwm/pwmchip0/pwm0/period # устанавливаем период в 250 000 нс, т.е. в 250мкс, что соответствует частоте 4кГц</syntaxhighlight> | |||
#Записать громкость (пересчитав из duty-cycle) <syntaxhighlight lang="bash">echo 125000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle # устанавливаем duty_cycle в 125 000 нс, т.е. в половину периода</syntaxhighlight> | |||
#Включить выход PWM <syntaxhighlight lang="bash">echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | |||
Для того, чтобы выключить Buzzer, нужно записать 0: <syntaxhighlight lang="bash">echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable</syntaxhighlight> | |||
<!--T:12--> | |||
[https://github.com/contactless/wirenboard/tree/master/examples/beeper '''Пример'''] | |||
<!--T:5--> | <!--T:5--> | ||
Строка 26: | Строка 42: | ||
T(ns) = 1 000 000 / f(kHz) | T(ns) = 1 000 000 / f(kHz) | ||
</b> | </b> | ||
<!--T:8--> | <!--T:8--> | ||
Установка duty_cycle (длительности высокого состояния) в наносекундах. Максимальная громкость достигается при duty_cycle = period / 2 | Установка duty_cycle (длительности высокого состояния) в наносекундах. Максимальная громкость достигается при duty_cycle = period / 2 | ||
==Управление из web-интерфейса==<!--T:13--> | ==Управление из web-интерфейса==<!--T:13--> | ||
==Управление из движка правил==<!--T:14--> | ==Управление из движка правил==<!--T:14--> |
Версия 15:18, 19 августа 2020
Страница находится в процессе редактирования!!!!!
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules и python.
О ШИМ и пересчёт параметров
ШИМ - это прямоугольные импульсы, интерфейс ядра позволяет регулировать частоту импульсов и коэффициент заполнения. Коэффециент заполнения влияет на громкость звука.
Низкоуровневая работа
Номер pwm-порта для sysfs
Ножка gpio настраивается, как выход PWM в dts ядра linux. Подробнее можно посмотреть [нашем github].
В зависимости от ревизии контроллера и версии его ПО, узнать номер порта PWM для Buzzer можно разными способами:
- По умолчанию (для всех контроллеров до WB6.X.X), номер порта = 2
- Для контроллеров WB6.X.X, номер порта = 0
- Номер порта можно узнать, выполнив команду
echo $WB_PWM_BUZZER
Во всех примерах далее будем считать, что номер pwm-порта = 0.
Работа из sysfs
Для работы c pwm через sysfs нужно:
- Экспортировать порт После этого появляется директория /sys/class/pwm/pwmchip0/pwm0
echo 0 > /sys/class/pwm/pwmchip0/export
- Записать период pwm в наносекундах
echo 250000 > /sys/class/pwm/pwmchip0/pwm0/period # устанавливаем период в 250 000 нс, т.е. в 250мкс, что соответствует частоте 4кГц
- Записать громкость (пересчитав из duty-cycle)
echo 125000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle # устанавливаем duty_cycle в 125 000 нс, т.е. в половину периода
- Включить выход PWM
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
Для того, чтобы выключить Buzzer, нужно записать 0:
echo 0 > /sys/class/pwm/pwmchip0/pwm0/enable
Установка периода в наносекундах. Пересчёт из частоты (в килогерцах) в период (в наносекундах) производится по формуле: T(ns) = 1 000 000 / f(kHz)
Установка duty_cycle (длительности высокого состояния) в наносекундах. Максимальная громкость достигается при duty_cycle = period / 2