PPM — различия между версиями

Материал из virt2real wiki
Перейти к: навигация, поиск
(Драйвер ppmsum)
Строка 73: Строка 73:
 
== Драйвер ppmsum ==
 
== Драйвер ppmsum ==
  
В данный момент драйвер работает с ядром из ветки [https://github.com/virt2real/linux-davinci/tree/rto RTO].
+
Для удобной работы с PPM мы разрабатываем драйвер [[Ppmsum]].
 
+
Загрузка драйвера может осуществляться с необязательными параметрами:
+
 
+
insmod ppmsum_mod.ko channels=6 ns=1
+
 
+
* channels - означает количество каналов ppmsum, выдаваемых драйвером (по умолчанию 8)
+
* ns - если значение не равно нулю, то значения каждого канала передаются в наносекундах, иначе в тиках таймера, который работает на частоте 24 МГц. По умолчанию значение передаётся в тиках таймера.
+
 
+
Во время загрузки выводятся значения, которые загружены по умолчанию (в тиках таймера):
+
 
+
[ 192.695653] pbuf[0]=120
+
[  192.699454] pbuf[1]=9880
+
[  192.703432] pbuf[2]=120
+
[  192.707224] pbuf[3]=19880
+
[  192.711649] pbuf[4]=120
+
[  192.715532] pbuf[5]=29880
+
[  192.719485] pbuf[6]=120
+
[  192.723423] pbuf[7]=39880
+
[  192.727422] pbuf[8]=120
+
[  192.731167] pbuf[9]=49880
+
[  192.735133] pbuf[10]=120
+
[  192.739005] pbuf[11]=59880
+
[  192.743080] pbuf[12]=120
+
[  192.746941] pbuf[13]=69880
+
[  192.750981] pbuf[14]=120
+
[  192.754852] pbuf[15]=79880
+
[  192.758947] pbuf[16]=120
+
[  192.762869] pbuf[17]=119880
+
 
+
После загрузки драйвера, запуск ppmsum осуществляется записью команды ''start'' в файл /dev/ppmsum
+
 
+
echo "start" > /dev/ppmsum
+
 
+
Смена интервала по каналу осуществляется записью в файл /dev/ppmsum значения соответствующего канала
+
в тиках таймера (если ns=0), или в наносекундах (если ns!=0). Например:
+
 
+
echo "ch0=1000 ch1=1000 ch2=1000 ch3=1000 ch4=1000 ch5=1000 ch6=1000 ch7=1000 " > /dev/ppmsum
+
 
+
Порядок ввода каналов произвольный. Так же ввод может заканчиватся командой start
+
 
+
Существует ещё команда stop, но лучше её пока не запускать. Также не реализована выгрузка драйвера.  
+
  
 
[[Категория:Инструкции]]
 
[[Категория:Инструкции]]

Версия 17:31, 10 октября 2014

Содержание

Общий принцип PPM кодирования

В радиоуправляемых девайсах самым распространённой модуляцией управляющих сигналов является PPM - Pulse-position modulation. Это частный случай широтно-импульской модуляции (ШИМ/PWM).

Каждый канал задается импульсом, длительностью от 700 до 2200 мкс, но у различных производителей границы могут быть немного другими, надо подбирать экспериментально или читать документацию. Среднее положение обычно соответствует длительности 1500 мкс. После сигнала следует пауза. Общая длительность сигнала вместе с паузой - 20000 мкс.

Принцип PPM


иллюстрация позаимствована с отличного сайта easyelectronics.ru. Привет DiHalt'у :-)


PPM сигналы используются для управления сервомоторами и регуляторами бесколлекторных моторов (ESC).

Формированием PPM сигналов, как и в случае с PWM, занимается драйвер v2r_pins. Необходимо лишь рассчитать длительность сигнала (duty) и общую длительность команды (period).

duty рассчитывается по следующему принципу:

1. Частота генератора импульсов - 24МГц. Значит один импульс (тик) занимает tic = 1000000 / 24000000 = 0,042 мкс.

2. Сигнал максимального положения сервы примем за 2200 мкс. Следовательно, duty высчитываем duty = 2200 / tic = 52380

3. Сигнал минимального положения сервы примем за 700 мкс. Следовательно, duty высчитываем duty = 700 / tic = 16666

4. Центральное положение 1500 / tic = 35714

5. Общая длительность сигнала 20000 мкс, или period = 20000 / tic = 20000 / 0,042 = 476190

Подключение сервомотора

Стабилизатор питания виртурилки может выдавать максимум 2А, их которых около 400мА уходит на саму виртурилку и модуль Wi-Fi. Так что напрямую к виртурилке можно подключить только слабенькие сервомоторы. А обычные сервомоторы надо подключать отдельно, напрямую от блока питания на 5 или 6 Вольт (в зависимости от сервомтора) или через преобразователь напряжения (BEC). В RC-технике обычно используются именно BEC.

Сервомотор обычно имеет три провода - красный, чёрный и белый (или жёлтый, или оранжевый). Красный провод всегда +Vcc, чёрный всегда земля (минус), а белый провод - сигнальный. Красный и чёрный провод сервомотора надо подключить к источнику питания соответствующей мощности, а сигнальный провод - к нужному пину виртурилки.

На борту виртурилки имеется четыре канала PWM, вот к пинам, соответствующим этим каналам, и надо подключить сигнальный провод (см. схему ).


Управление обычным сервомотором

Например, мы хотим управлять сервомотором. Подключаем его, допустим, к каналу PWM1 (CON44).

Чуть ранее мы уже посчитали нужные параметры импульса, теперь осталось лишь отдать команду драйверу

 echo "set con 44 pwm1" > /dev/v2r_pins #эту команду надо выполнить лишь один раз, в самом начале работы с этим каналом PWM
 echo "set pwm 1 52380 476190" > /dev/v2r_pins 

Где 52380 это duty, 476190 это period.

Теперь повернём в крайнее минимальное положение

 echo "set pwm 1 16666 476190" > /dev/v2r_pins

Ну и в центральное

 echo "set pwm 1 35714 476190" > /dev/v2r_pins

Для промежуточных положений значения сигналов высчитываются аналогично.

Управление сервомотором постоянного вращения

Всё то же самое, нюанс лишь в том что центральное положение - мотор неподвижен.

Максимальное значение - мотор с максимальной скоростью движется в одном направлении.

Минимальное значение - мотор максимально быстро крутится в обратном направлении.

Видеоприложение


Драйвер ppmsum

Для удобной работы с PPM мы разрабатываем драйвер Ppmsum.