Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.01.2014, 01:15   #11
balabol
Member
 
Регистрация: 13.01.2014
Сообщений: 44
Вес репутации: 0
balabol is an unknown quantity at this point
По умолчанию Re: ШИМ & GPIO

Я весь путь "самурая" наверное не повторю, т.к. много, что руками допиливал и собственно все в транке.

Но основная мысль следующая:
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.
balabol вне форума   Ответить с цитированием
Старый 20.01.2014, 13:50   #12
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: ШИМ & GPIO

Спасибо!
Admin вне форума   Ответить с цитированием
Старый 20.01.2014, 15:13   #13
balabol
Member
 
Регистрация: 13.01.2014
Сообщений: 44
Вес репутации: 0
balabol is an unknown quantity at this point
По умолчанию Re: ШИМ & GPIO

Кстати, тут кучка хардовых драйверов. но я их не проверял

http://193.87.95.148/openwrt/raspip/...7/drivers/pwm/
balabol вне форума   Ответить с цитированием
Старый 30.08.2014, 10:10   #14
klukoin
Junior Member
 
Регистрация: 30.08.2014
Сообщений: 1
Вес репутации: 0
klukoin is an unknown quantity at this point
По умолчанию Re: ШИМ & GPIO

Лучше самому собирать ядро.

Это очень просто и можно сразу зафигачить необходимую конфигурацию.

Кстати, про несколько линий 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 Кгц.


Если интересно посмотреть сигнал для сервоприводов - он такой.
Это все без подтягивающего резистора. Как есть.
klukoin вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 22:11. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика