Подключение датчиков по I2C

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

Так как своих модулей инерционных датчиков у нас пока нет, процесс подключения опишу на примере датчиков, входящих в комплект платы сенсоров многороторных платформ RU-IMU-9+1 v1.0

Содержание

Описание тестовой платы датчиков

RU-IMU-9+1 v1.0

На плате установлены:

Гироскоп 3х осевой ITG-3200 или ITG-3205

Акселерометр 3х осевой BMA-180

Компас 3х осевой HMC-5883

Барометр BMP-085


Все датчики подключаются по шине I2C. Питание - 3.3 - 5В (в зависимости от модификации платы). На практике, версия 5В прекрасно работает и от 3.3В


Подключение датчиков к контроллеру Virt2real

RU-IMU-9+1 v1.0

Для функционирования всех датчиков необходимо подать питание на плату датчиков, для этого надо подключить контакт Vcc к контакту 3.3В (или 5В) на плате Virt2real, а контакт GND - на контакт GND платы Virt2real.

Для подключения к шине I2C надо соединить одноимённые контакты SDA и SCL платы датчиков и платы Virt2real.

На этом процесс подключения закончен. После подачи питания на Virt2real на плате датчиков должен загореться красный светодиод.


Включение драйверов для датчиков

Для того чтобы устройство, подключенное по шине I2C, было доступно из Linux, необходимо собрать ядро с поддержкой этой шины. По-умолчанию, в Virt2real SDK это уже сделано, нужные опции включены.

Device Drivers --->
    --- I2C support
         [*]   Enable compatibility bits for old user-space
         <*>   I2C device interface
         < >   I2C bus multiplexing support
         [*]   Autoselect pertinent helper modules
               I2C Hardware Bus support  --->
                       *** I2C system bus drivers (mostly embedded / system-on-chip)
                       < > CBUS I2C driver
                       <*> DaVinci I2C driver

Для каждого датчика (в идеале) существует драйвер. Для включения драйверов требуется установить соответствующие опции в настройках ядра. По-умолчанию, в Virt2real SDK уже собраны все драйверы в виде модулей ядра, пересборка ядра не требуется.

Device Drivers --->
    --- Virt2real device drivers --->
         [*]   Virt2real IMU board --->
               <M>   BMA180 driver
               <M>   BMP085 driver
               <M>   HMC5843 driver
               <M>   ITG3200 driver

Программный доступ к датчикам

Общий принцип доступа к датчикам такой:

  • загружаем модуль с драйвером
  • даём команду в консоли
echo <название_драйвера> <адрес_устройства> > /sys/class/i2c-adapter/i2c-1/new_device

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

  • переходим в /sys/bus/i2c/devices/1-00<идентификатор устройства> и смотрим листинг файлов. Управление и считывание показаний датчиков производится через специальные файлы, размещённые в этом каталоге


После подключения платы датчиков к плате Virt2real можно подключать питание. После окончания процесса загрузки можно посмотреть список устройств на шине I2C.

[root@virt2real ~]# i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- 77

Теперь необходимо загрузить нужные модули.

[root@virt2real ~]# modprobe bma180.ko
[root@virt2real ~]# modprobe bmp085.ko
[root@virt2real ~]# modprobe hmc5843.ko
init!
i2c-core: driver [hmc5843] using legacy suspend method
i2c-core: driver [hmc5843] using legacy resume method
[root@virt2real ~]# modprobe itg3200.ko
i2c-core: driver [itg3200] using legacy suspend method
i2c-core: driver [itg3200] using legacy resume method

Запускаем инициализацию датчиков

[root@virt2real ~]# echo bma180 0x40 > /sys/class/i2c-adapter/i2c-1/new_device
bma180 1-0040: probe succeeded!
i2c i2c-1: new_device: Instantiated device bma180 at 0x40
[root@virt2real ~]# echo bmp085 0x77 > /sys/class/i2c-adapter/i2c-1/new_device
bmp085 1-0077: BMP085 ver. 1.0 found.
bmp085 1-0077: Succesfully initialized bmp085!
i2c i2c-1: new_device: Instantiated device bmp085 at 0x77

[root@virt2real ~]# echo hmc5843 0x1e > /sys/class/i2c-adapter/i2c-1/new_device
HMC5843 initialized
i2c i2c-1: new_device: Instantiated device hmc5843 at 0x1e
[root@virt2real ~]# echo itg3200 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
itg3200 1-0068: probe succeeded!
i2c i2c-1: new_device: Instantiated device itg3200 at 0x68

Проверяем каталог со списков активных устройств

[root@virt2real ~]# cd /sys/bus/i2c/devices
[root@virt2real devices]# ls
1-001e@ 1-0040@ 1-0068@ 1-0077@ i2c-1@

Каталог 1-001e - компас hmc5843

Каталог 1-0040 - акселерометр bma180

Каталог 1-0068 - гироскоп itg3200

Каталог 1-0077 - барометр bmp085



Описание управляющих файлов разных датчиков

Компас hmc5843

hmc5843-datasheet.pdf

[root@virt2real devices]# cd /sys/bus/i2c/devices/1-001e
[root@virt2real 1-001e]# ls
conversion         mode               rate               value
counts_per_mgauss  name               status
driver@            power/             subsystem@
modalias           range              uevent

Первым делом требуется активировать датчик. Для этого надо установить параметр rate (частота обновления)

[root@virt2real 1-001e]#echo 100 > rate

Чтение показаний компаса производится из файла value

[root@virt2real 1-001e]# cat value
-389 -827 -417

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

conversion -

mode -

rate -

value - текущее показание датчика

counts_per_mgauss -

status -

range -

Акселерометр bma180

bma180-datasheet.pdf

[root@virt2real devices]# cd /sys/bus/i2c/devices/1-0040
[root@virt2real 1-0040]# ls
coord      driver@    modalias   name       power/     subsystem@ uevent

Чтение показаний производится из файла coord

[root@virt2real 1-0040]# cat coord
-3,-402,4327


Гироскоп itg3200

itg3200-datasheet.pdf

[root@virt2real devices]# cd /sys/bus/i2c/devices/1-0068
[root@virt2real 1-0068]# ls
clocksource   enable_axis   name          subsystem@    values
disable_axis  low_pass      power/        suspend
driver@       modalias      samplerate    uevent

Перед началом работы с гироскопом надо вывести его в активный режим. Делается это командой

[root@virt2real 1-0068]#echo 0 > suspend

Теперь можно снимать показания из файла values

[root@virt2real 1-0068]# cat values
-14848 -777 95 25

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

clocksource -

enable_axis -

disable_axis -

low_pass -

values - текущее показание датчика

suspend - режим спячки. = 1 - датчик неактивен, = 0 - активен

samplerate - часта обновления показаний

Барометр bmp085

bmp085-datasheet.pdf

[root@virt2real devices]# cd /sys/bus/i2c/devices/1-0077
[root@virt2real 1-0077]# ls
driver@          oversampling     subsystem@
modalias         power/           temp0_input
name             pressure0_input  uevent

Файл temp0_input - температура

[root@virt2real 1-0077]# cat temp0_input
277

Файл pressure0_input - давление

[root@virt2real 1-0077]# cat pressure0_input
98158

Файл oversampling - настройка разрешения (точности показаний). По-умолчанию, режим высокой точности (3)

[root@virt2real 1-0077]# cat oversampling
3



Модуль панели управления

В панели управления Virt2real есть модуль IMU (Периферия -> IMU), где продемонстрирован примерный вариант опроса датчиков.


Скриншот панели управления, раздел IMU




Дополнительные материалы

Virt2Real и плата с компасом, акселерометром, гироскопом и барометром.