![]() |
![]() |
#11 |
Member
Регистрация: 13.01.2014
Сообщений: 44
Вес репутации: 0 ![]() |
![]()
Я весь путь "самурая" наверное не повторю, т.к. много, что руками допиливал и собственно все в транке.
Но основная мысль следующая: 1. Если в настройках вызываемых make kernel_menuconfig "Device Drivers" нет пункта "PWM Support", дела не очень хороши. Это значит, что самого драйвера нет. Его нужно как-то получить в транк. Люди идут разными дорогами кто-то ищет готовый транк, кто-то вообще из сериальников ШИМ делает ![]() Собственно я скачал несколько транков и путем проб и ошибок добавил необходимый комплект сырцов для компиляции драйвера. Кстати выяснилась подробность, что драйвера эти бывают как "железные", т.е. есть аппаратный генератор ШИМ, так и софтовый. Я встроил драйвер софтовый, т.е. работающий на теймере. Не лучшее решение, т.к. ест процессорное время и может подвиснуть. Но лучшего нет для меня пока. 2. Если п.1 удалось преодолеть, остается дело за малым. Найти пакет, который дружит с вашим ядром и называется pwm-gpio-custom. Ставим, компилируем все это. 3. Если и 3 пункт вам удалось пройти заливаем прошивку в роутер и идем в OpenWRT 4. В каталоге /sys/class/pwm должны появиться ШИМы. Но совсем не обязательно ![]() 5. Если ШИМы не появились, видимо у вас GPIO используются другими примочками. У меня это делали LEDы. Идем обратно в make menuconfig и убираем лишнее. 6. Опять билдим и идем в openWRT. Есть? Нет? Ну не страшно... если нет, то значит, что у вас само без инициализации не взлетает. Делаем так: insmod pwm-gpio-custom bus0=0,21 21 это номер GPIO. Не угадаете, фокус не удастся ![]() Далее, если ошибок не было, идем в /sys/class/pwm и смотрим. Если там что-то есть - УРА! Ну а дальше все как у всех: Init @tick_hz at 1000000000UL (hardcoded) : # cat /sys/class/pwm/gpio_pwm.0\:0/request Define 100hz period : # echo 10000000 > /sys/class/pwm/gpio_pwm.0\:0/period_ns Define percent when gpio goes polarity for one tick : Base polarity is 0, so here 10% of tick is 0v, 90% is +3.3v. If you set polarity to 1, gpio goes 10% to 3.3v, and 90% to 0v. # echo 1000000 > /sys/class/pwm/gpio_pwm.0\:0/duty_ns Start pwm : # echo 1 > /sys/class/pwm/gpio_pwm.0\:0/run Stop pwm : # echo 0 > /sys/class/pwm/gpio_pwm.0\:0/run P.S. Кстати 9 каналов я тоже поднял. Последний раз редактировалось balabol; 20.01.2014 в 01:18. |
![]() |
![]() |
![]() |
#12 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9824 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Спасибо!
|
![]() |
![]() |
![]() |
#13 |
Member
Регистрация: 13.01.2014
Сообщений: 44
Вес репутации: 0 ![]() |
![]()
Кстати, тут кучка хардовых драйверов. но я их не проверял
http://193.87.95.148/openwrt/raspip/...7/drivers/pwm/ |
![]() |
![]() |
![]() |
#14 |
Junior Member
Регистрация: 30.08.2014
Сообщений: 1
Вес репутации: 0 ![]() |
![]()
Лучше самому собирать ядро.
Это очень просто и можно сразу зафигачить необходимую конфигурацию. Кстати, про несколько линий PWM. Это выглядит примерно так: insmod pwm-gpio-custom bus0=0,23 bus1=1,20 bus2=2,19 bus3=3,18 Где у нас 23, 20, 19, 18 - номера GPIO. Первая цифра после знака =, соответственно номер устройства. echo 10000000 > /sys/class/pwm/gpio_pwm.0\:0/period_ns echo 10000000 > /sys/class/pwm/gpio_pwm.1\:0/period_ns echo 10000000 > /sys/class/pwm/gpio_pwm.2\:0/period_ns echo 10000000 > /sys/class/pwm/gpio_pwm.3\:0/period_ns И по аналогии. А так, все их после запуска можно посмотреть в /sys/class/pwm/ Что еще важно отметить, я прокачал до 22 Кгц. ![]() Если интересно посмотреть сигнал для сервоприводов - он такой. Это все без подтягивающего резистора. Как есть. ![]() |
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|