V2r extpwm

Материал из virt2real wiki
Перейти к: навигация, поиск

Драйвер v2r_extpwm служит для управления каналами PWM на чипе PCA9685, который используется на Моторшилд 2.0

Описание процесса инициализации описано в разделе Работа с моторшилдом 2.0, в этом разделе будут описаны команды для управляющих файлов драйвера.


Datasheet на чип PCA9685


Содержание

Управляющие файлы

Допустим, мы инициализировали драйвер с адресом устройства 0x70.

Тогда после инициализации драйвера в каталоге /sys/bus/i2c/devices/1-0070 появятся файлы

[root@virt2real ~]# cd /sys/bus/i2c/devices/1-0070
[root@virt2real 1-0070]# ls
all  ch1   ch12  ch15  ch4  ch7  cmdmode  init      mode2  subsystem@
any  ch10  ch13  ch2   ch5  ch8  driver@  modalias  name   uevent
ch0  ch11  ch14  ch3   ch6  ch9  freq     mode1     sleep


Управление каналами PWM производится путём записи команд в соотвествующие файлы. Команды могут быть текстовыми, могут быть бинарными (как и в случае с драйвером v2r_gpio, к примеру). Текстовые команды используются для управления из консоли или из скриптовых языков программирования. Лучше всего использовать бинарные команды, так как в этом случае минимизируется время обработки команды. Управление с помощью IOCTL на данный момент не реализовано.

Файл Описание
all Одновременное управление всеми 16-ю каналами PWM
any Управление любым каналом PWM (номер канала задаётся в команде)
ch0-ch15 Управление конкретным каналом PWM
cmdmode Установка режима команд
freq Установка частоты генератора PWM
init Инициализация
mode1 Регистр MODE1
mode2 Регистр MODE2
sleep Спящий режим вкл/выкл



any

Служит для управления любым из 16-ти каналов PWM через один управляющий файл.

Доступен только для записи.


Текстовый формат

Элемент Возможные значения Описание
0 0-15 Номер канала
1 0-4095 Номер импульса для установки уровня HIGH (байт CH_ON)
2 0-4095 Номер импульса для установки уровня LOW (байт CH_OFF)

Например

echo "11 0 2047" > /sys/bus/i2c/devices/1-0070/any

Запустит канал PWM11 в режиме меандра (половина длительности цикла - уровень HIGH, вторая половина - уровень LOW)

а команда

echo "11 0 0" > /sys/bus/i2c/devices/1-0070/any

Выключит PWM11, т.е. на выходе будет только сигнал LOW.

Бинарный формат

Байт Возможные значения Описание
0 1 Признак двоичной команды
1 0-15 Номер канала PWM
2 0-255 младший байт параметра CH_ON
3 0-15 старший байт параметра CH_ON
4 0-255 младший байт параметра CH_OFF
5 0-15 старший байт параметра CH_OFF


Например

echo -e "\x1\xb\x0\x0\xff\x07" > /sys/bus/i2c/devices/1-0070/any

Запустит канал PWM11 в режиме меандра (половина длительности цикла - уровень HIGH, вторая половина - уровень LOW)

а команда

echo -e "\x1\xb\x0\x0\x0\x0" > /sys/bus/i2c/devices/1-0070/any

Выключит PWM11, т.е. на выходе будет только сигнал LOW.



ch0 - ch15

Файлы ch0, ch1 ... ch15 служат для управления каналом PWM с соответствующим номером.

Доступны для записи/чтения.

При записи:

Текстовый формат

Элемент Возможные значения Описание
0 0-4095 Номер импульса для установки уровня HIGH (байт CH_ON)
1 0-4095 Номер импульса для установки уровня LOW (байт CH_OFF)

Например

echo "0 2047" > /sys/bus/i2c/devices/1-0070/ch11

Запустит канал PWM11 в режиме меандра (половина длительности цикла - уровень HIGH, вторая половина - уровень LOW)

а команда

echo "0 0" > /sys/bus/i2c/devices/1-0070/ch11

Выключит PWM11, т.е. на выходе будет только сигнал LOW.

Бинарный формат

Байт Возможные значения Описание
0 1 Признак двоичной команды
1 0-255 младший байт параметра CH_ON
2 0-15 старший байт параметра CH_ON
3 0-255 младший байт параметра CH_OFF
4 0-15 старший байт параметра CH_OFF


Например

echo -e "\x1\x0\x0\xff\x07" > /sys/bus/i2c/devices/1-0070/ch11

Запустит канал PWM11 в режиме меандра (половина длительности цикла - уровень HIGH, вторая половина - уровень LOW)

а команда

echo -e "\x1\x0\x0\x0\x0" > /sys/bus/i2c/devices/1-0070/ch11

Выключит PWM11, т.е. на выходе будет только сигнал LOW.


При чтении:

В текстовом режиме вернёт значения байтов CH_ON и CH_OFF

cat /sys/bus/i2c/devices/1-0070/ch11
0 2047

В бинарном режиме должен вернуть то же самое, но в виде байтов (т.е. байты 0x00, 0x00, 0xff, 0x07. Но данный режим пока не работает.



all

Служит для синхронного управления сразу всеми 16-ю каналами PWM

Формат команд аналогичен командам для файлов каналов (ch0-ch15).

Доступен для записи/чтения


cmdmode

Устанавливает режим вывода (тестовый или бинарный).

Доступен для записи/чтения.

Так как бинарный формат выдачи пока не работает, запись команд в данный файл не требуется.



freq

Служит для изменения делителя частоты. Доступен для чтения/записи.

Для изменения частоты необходимо записать в этот файл значение divider_value.

Частота формирования импульсов PWM высчитывается по формуле

frequency = parseInt(25000000 / (divider_value + 1) / 4096);


Значение divider_value можно высчитать по формуле

divider_value = Math.round(25000000 / (4096 * freq)) -1;


Необходимо помнить что в этот файл надо писать именно значение делителя, т.к. оно без изменений будет записано в регистр PCA9685_PRESCALE чипа PWM.

Например, установим частоту PWM 50Hz

echo 121 > /sys/bus/i2c/devices/1-0070/freq

При чтении файла вернёт текущее значение

cat /sys/bus/i2c/devices/1-0070/freq
121



init

Инициализирует чип PWM

echo 1 > /sys/bus/i2c/devices/1-0070/init



sleep

Включает/отключает режим спячки чипа PWM


Включить спящий режим

echo 1 > /sys/bus/i2c/devices/1-0070/sleep


Выключить спящий режим

echo 0 > /sys/bus/i2c/devices/1-0070/sleep


При чтении файла - вернёт текущее состояние

cat /sys/bus/i2c/devices/1-0070/sleep
0



mode1 и mode2

Устанавливают или возвращают текущее значение регистров MODE1 и MODE2 чипа PWM (см. даташит).

Доступен для записи/чтения.

При чтении:

 cat /sys/bus/i2c/devices/1-0070/mode1
 32

 cat /sys/bus/i2c/devices/1-0070/mode2
 4