Buzzer: различия между версиями

Материал из Wiren Board
Строка 3: Строка 3:
<!--T:1-->
<!--T:1-->
''Страница находится в процессе редактирования!!!!!''
''Страница находится в процессе редактирования!!!!!''
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules, python.
 
Все контроллеры Wiren Board имеют на борту звуковой излучатель (далее - Buzzer). Buzzer питается от 5В и управляется ножкой gpio процессора в режиме ШИМ. Управлять Buzzer'ом можно через sysfs-интерфейс ядра и различное ПО поверх него. Сейчас реализовано управление из web-интерфейса, движка правил wb-rules и python.


==О ШИМ и пересчёт параметров==<!--T:2-->
==О ШИМ и пересчёт параметров==<!--T:2-->
Строка 9: Строка 10:
Коэффециент заполнения влияет на громкость звука.
Коэффециент заполнения влияет на громкость звука.


==Управление из sysfs==<!--T:3-->
==Низкоуровневая работа==<!--T:3-->
Экспорт порта в sysfs:
 
<pre>
===Номер pwm-порта для sysfs===<!--T:12-->
echo 2 > /sys/class/pwm/pwmchip0/export
Ножка gpio настраивается, как выход PWM в dts ядра linux. Подробнее можно посмотреть [[https://github.com/wirenboard/linux/blob/ef2d87e222b365848fe7262c022ca887b6449432/arch/arm/boot/dts/imx6ul-wirenboard61.dts#L495|на нашем github]].
</pre>


<!--T:4-->
<!--T:4-->
После этого появляется директория /sys/class/pwm/pwmchip0/pwm2
В зависимости от ревизии контроллера и версии его ПО, узнать номер порта 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:7-->
<pre>
echo 250000 > /sys/class/pwm/pwmchip0/pwm2/period # устанавливаем период в 250 000 нс, т.е. в 250мкс, что соответствует частоте 4кГц
</pre>


<!--T:8-->
<!--T:8-->
Установка duty_cycle (длительности высокого состояния) в наносекундах. Максимальная громкость достигается при duty_cycle = period / 2
Установка duty_cycle (длительности высокого состояния) в наносекундах. Максимальная громкость достигается при duty_cycle = period / 2


<!--T:9-->
<pre>
echo 125000 > /sys/class/pwm/pwmchip0/pwm2/duty_cycle # устанавливаем duty_cycle в 125 000 нс, т.е. в половину периода
</pre>
<!--T:10-->
Включение выхода ШИМ:
<pre>
echo 1 > /sys/class/pwm/pwmchip0/pwm2/enable
</pre>
<!--T:11-->
Выключение:
<pre>
echo 0 > /sys/class/pwm/pwmchip0/pwm2/enable
</pre>
<!--T:12-->
[https://github.com/contactless/wirenboard/tree/master/examples/beeper '''Пример''']


==Управление из 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 нужно:

  1. Экспортировать порт
    echo 0 > /sys/class/pwm/pwmchip0/export
    
    После этого появляется директория /sys/class/pwm/pwmchip0/pwm0
  2. Записать период pwm в наносекундах
    echo 250000 > /sys/class/pwm/pwmchip0/pwm0/period # устанавливаем период в 250 000 нс, т.е. в 250мкс, что соответствует частоте 4кГц
    
  3. Записать громкость (пересчитав из duty-cycle)
    echo 125000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle # устанавливаем duty_cycle в 125 000 нс, т.е. в половину периода
    
  4. Включить выход 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


Управление из web-интерфейса

Управление из движка правил

Управление из python