Pull to refresh

Обзор технологии Ultra-Wideband на основе трансивера DW1000 (переходник с SPI на UWB)

Level of difficultyEasy
Reading time12 min
Views7.2K

В этом тексте я написал о своем опыте работы с UWB. Этот текст поможет понять с какой стороны подходить к UWB трансиверам.

Предисловие
Ultra-Wideband UWB это маломощная (<1mW) беспроводная радио технология передачи данных со скоростью до ...6 Mbit/s на расстояния до 200м. Эта технология также позволяет измерять расстояние между трансиверами с точностью до +-10см. UWB работает на частотах 3.1Ghz 10.6Ghz. В технологии UWB очень широкая ширина канала 500MHz...1,3GHz. Это больше чем у LoRa в минимум в 1000 раз.

UWB использует так называемое pulse radio. Трансивер посылаются пульсы (вейвлеты) порядка 1 миллиарда раз в секунду. UWB передает данные в специальные временные интервалы.

Модуляция называется pulse-position или time modulation. В качестве аналогии можно сравнить с летучими мышами.

На самом деле UWB работает именно так, как самый первый искусственный генератор электромагнитных волн, который сконструировал ещё Генрих Герц в 1886 году. По сути UWB - искровой разряд.

Практическая часть

Существует модуль DWM1000 от компании Decawave (Qorvo). Это беспроводной полудуплексный трансивер, работающий на частотах 3.5 GHz to 6.5 GHz, с управляемой мощностью излучения. Он способен передавать данные с битовой скоростью до 6,8Mbit/s

Это блок схема модуля

Попробую разобраться на что способен этот чип.

Что надо из спецификаций?

#

Doc name

pages

что там?

Версия

1

Product Overview

33

Характеристики модуля, блок схема SoC, распиновка

2

PRODUCT INFORMATION: DWM1000

2

Флайер на модуль DWM1000

5

DW1000 USER MANUAL

249

Детализация регистров

11

SOURCES OF ERROR IN DW1000 BASED TWO-WAY RANGING (TWR) SCHEMES

22

APS011 APPLICATION NOTE

1.1

9

DEBUGGING DW1000 BASED PRODUCTS AND SYSTEMS

23

APS022 APPLICATION NOTE

1.3

10

DW1000 DEVICE DRIVER APPLICATION PROGRAMMING INTERFACE (API) GUIDE

101

USING API FUNCTIONS TO CONFIGURE AND PROGRAM THE DW1000 UWB TRANSCEIVER

2.7

7

APS013 APPLICATION NOTE

15

The implementation of two-way ranging with the DW1000

2.3

8

ANTENNA DELAY CALIBRATION OF DW1000-BASED PRODUCTS AND SYSTEMS

15

APS014 APPLICATION NOTE

1.2

3

PRODUCT BRIEF: DW1000

2

Флайер на чип DW1000. Название пинов.

4

Product Overview

53

Распиновка DW1000

6

DW1000 Errata

12

Список 5ти выявленных ошибок в дизайне чипа

в первом приближении внутри DW1000 можно обнаружить PLL, модуль приема, модуль передатчика, цифровую логику, SPI slave и преобразователь питания.

Более подробная схема чипа DW1000 такая. Тут уже заметно OTP, помехоустойчивое кодирование, управление мощностью, выявление прихода пакета, внутренний таймер. Чип весьма и весьма проработанный.


Вот соответствие модуля его пинам.

DWM1000
DWM1000

А это детализация распиновки модуля DWM1000. Шаг между пинами 1,4мм.

Внутри DWM1000 заложен ASIC с названием DW1000. Вот список его пинов.

https://docs.google.com/spreadsheets/d/1ei8rA8kbT_--4zf_2shUHI-hzM8QjJMSJs_8kKTTMak/edit#gid=0


Явного соответствия 48ми пинов чипа DW1000 на 24 пина модуля DWM1000 нет. Как известно из комбинаторики упорядоченно выбрать провода 24 из 48 проводов без повторений можно 2.000797e+37 способами. Визуально тоже не ясно, так как чип скрыт под саркофагом.

Чтобы подключить модуль DWM1000 пришлось изготовить PCB плату-переходник

Схема подключения.

Схема подключения показана тут.

Физически пришлось собрать вот такой прототип


Управление модулем DWM1000 по интерфейсу SPI

Компания разработчик QORVO предоставляет свой драйвер для чипа DW1000. Драйвер можно скачать вот тут https://www.qorvo.com/products/p/DW1000#documents. Достаточно скачать архив dw1000_api_rev2p14.zip распаковать его. В папке dw1000_api_rev2p14_stsw\Src будет лежать С-код драйвера и примеры.

В оригинальном драйвере 101 функция. Их перечень можно посмотреть тут. Есть и документация на драйвер в доке DW1000 DEVICE DRIVER APPLICATION PROGRAMMING INTERFACE (API) GUIDE. Там указана какая функция за что отвечает.

Чип полностью управляется по интерфейсу SPI. Частота тактирования до 20 MHz. Данные передаются старшим битом вперед. DWM1000 выступает ведомым устройством. Параметры SPI соединения задаются выбором напряжения на пинах GPIO5, GPIO6. По умолчанию они подтянуты к земле. Физически SPI это полный дуплекс. Однако с устройством обмен тем не менее полудуплексный. DWM1000 воспринимает данные, когда на проводе CS 0V. Каждый отрицательный фронт котируется как начало нового кадра. Поэтому просто припаять CS на землю нельзя. Так модуль просто не поймет, где начинается пакет. Аппаратный CS тоже не подойдет. Придется делать программный ChipSelect.

При чтении модуль DWM1000 отправляет данные младшим байтом вперед. Поэтому они четко ложатся на структуры в Little endian процессорах. Вот значения регистров DW1000 после корректной инициализации оригинальным драйвером.

+-----+--------------+------+--------+----+----------+
| num |     name     | file | offset |len |   val    |
+-----+--------------+------+--------+----+----------+
|   0 |       DEV_ID | 0x00 | 0x0000 |  4 | 3001CADE | 1101_1110_1100_1010_0000_0001_0011_0000
|   1 |          EUI | 0x01 | 0x0000 |  8 | 00000000FFFFFFFF | ????
|   2 |       PANADR | 0x03 | 0x0000 |  4 | FFFFFFFF | 1111_1111_1111_1111_1111_1111_1111_1111
|   3 |      SYS_CFG | 0x04 | 0x0000 |  4 | 00124000 | 0000_0000_0100_0000_0001_0010_0000_0000
|   4 |     SYS_TIME | 0x06 | 0x0000 |  5 | 00D6C2CE00 | ????
|   5 |     TX_FCTRL | 0x08 | 0x0000 |  5 | 09800A0000 | ????
|   6 |      DX_TIME | 0x0a | 0x0000 |  5 | 0000000000 | ????
|   7 |      RX_FWTO | 0x0c | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|   8 |     SYS_CTRL | 0x0d | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|   9 |     SYS_MASK | 0x0e | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  10 |   SYS_STATUS | 0x0f | 0x0000 |  5 | 0200800000 | ????
|  11 |     RX_FINFO | 0x10 | 0x0000 |  4 | 0980AA10 | 0001_0000_1010_1010_1000_0000_0000_1001
|  12 |     RX_FQUAL | 0x12 | 0x0000 |  8 | 5C001A451031CF2D | ????
|  13 |     RX_TTCKI | 0x13 | 0x0000 |  4 | 0000FC01 | 0000_0001_1111_1100_0000_0000_0000_0000
|  14 |     RX_TTCKO | 0x14 | 0x0000 |  5 | EDFF07391F | ????
|  15 |      RX_TIME | 0x15 | 0x0000 | 14 | 004566DB052CBB3541008066DB05 | ????
|  16 |      TX_TIME | 0x17 | 0x0000 | 10 | 34A6D7B4590066D7B459 | ????
|  17 |      TX_ANTD | 0x18 | 0x0000 |  2 |     3440 | 0100_0000_0011_0100
|  18 |    SYS_STATE | 0x19 | 0x0000 |  4 | 00050540 | 0100_0000_0000_0101_0000_0101_0000_0000
|  19 |   ACK_RESP_T | 0x1a | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  20 |     RX_SNIFF | 0x1d | 0x0000 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  21 |     TX_POWER | 0x1e | 0x0000 |  4 | 2202080E | 0000_1110_0000_1000_0000_0010_0010_0010
|  22 |    CHAN_CTRL | 0x1f | 0x0000 |  4 | 22007A4A | 0100_1010_0111_1010_0000_0000_0010_0010
|  23 |    AGC_CTRL1 | 0x23 | 0x0002 |  2 |     01DE | 1101_1110_0000_0001
|  24 |    AGC_TUNE1 | 0x23 | 0x0004 |  2 |     9B88 | 1000_1000_1001_1011
|  25 |    AGC_TUNE2 | 0x23 | 0x000c |  4 | 07A90225 | 0010_0101_0000_0010_1010_1001_0000_0111
|  26 |    AGC_TUNE3 | 0x23 | 0x0012 |  2 |     3500 | 0000_0000_0011_0101
|  27 |    AGC_STAT1 | 0x23 | 0x001e |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  28 |      EC_CTRL | 0x24 | 0x0000 |  4 | 0400ADDE | 1101_1110_1010_1101_0000_0000_0000_0100
|  29 |      EC_RXTC | 0x24 | 0x0004 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  30 |      EC_GOLP | 0x24 | 0x0008 |  4 | 00DEADDE | 1101_1110_1010_1101_1101_1110_0000_0000
|  31 |    GPIO_MODE | 0x26 | 0x0000 |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  32 |     GPIO_DIR | 0x26 | 0x0008 |  4 | FF01ADDE | 1101_1110_1010_1101_0000_0001_1111_1111
|  33 |    GPIO_DOUT | 0x26 | 0x000c |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  34 |    GPIO_IRQE | 0x26 | 0x0010 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  35 |    GPIO_ISEN | 0x26 | 0x0014 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  36 |   GPIO_IMODE | 0x26 | 0x0018 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  37 |    GPIO_IBES | 0x26 | 0x001c |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  38 |    GPIO_ICLR | 0x26 | 0x0020 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  39 |    GPIO_IDBE | 0x26 | 0x0024 |  4 | 0000ADDE | 1101_1110_1010_1101_0000_0000_0000_0000
|  40 |     GPIO_RAW | 0x26 | 0x0028 |  4 | 000000DE | 1101_1110_0000_0000_0000_0000_0000_0000
|  41 |   DRX_TUNE0b | 0x27 | 0x0002 |  2 |     1600 | 0000_0000_0001_0110
|  42 |   DRX_TUNE1a | 0x27 | 0x0004 |  2 |     8D00 | 0000_0000_1000_1101
|  43 |   DRX_TUNE1b | 0x27 | 0x0006 |  2 |     6400 | 0000_0000_0110_0100
|  44 |    DRX_TUNE2 | 0x27 | 0x0008 |  4 | 5E013B35 | 0011_0101_0011_1011_0000_0001_0101_1110
|  45 |   DRX_SFDTOC | 0x27 | 0x0020 |  2 |     4110 | 0001_0000_0100_0001
|  46 |   DRX_PRETOC | 0x27 | 0x0024 |  2 |     0000 | 0000_0000_0000_0000
|  47 |   DRX_TUNE4H | 0x27 | 0x0026 |  2 |     2800 | 0000_0000_0010_1000
|  48 |  DRX_CAR_INT | 0x27 | 0x0028 |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  49 | RXPACC_NOSAT | 0x27 | 0x002c |  2 |     0000 | 0000_0000_0000_0000
|  50 |      RF_CONF | 0x28 | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  51 |   RF_RXCTRLH | 0x28 | 0x000b |  1 |       D8 | 1101_1000
|  52 |    RF_TXCTRL | 0x28 | 0x000c |  3 |   A05C04 | 0000_0100_0101_1100_1010_0000
|  53 |    RF_STATUS | 0x28 | 0x002c |  4 | 09DEADDE | 1101_1110_1010_1101_1101_1110_0000_1001
|  54 |      LDOTUNE | 0x28 | 0x0030 |  5 | 8888888808 | ????
|  55 |      TC_SARC | 0x2a | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|  56 |      TC_SARL | 0x2a | 0x0003 |  3 |   000000 | 0000_0000_0000_0000_0000_0000
|  57 |      TC_SARW | 0x2a | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  58 |   TC_PG_CTRL | 0x2a | 0x0008 |  1 |       BC | 1011_1100
|  59 | TC_PG_STATUS | 0x2a | 0x0009 |  2 |     F90B | 0000_1011_1111_1001
|  60 |   TC_PGDELAY | 0x2a | 0x000b |  1 |       C5 | 1100_0101
|  61 |    TC_PGTEST | 0x2a | 0x000c |  1 |       00 | 0000_0000
|  62 |    FS_PLLCFG | 0x2b | 0x0007 |  4 | 08054008 | 0000_1000_0100_0000_0000_0101_0000_1000
|  63 |   FS_PLLTUNE | 0x2b | 0x000b |  1 |       26 | 0010_0110
|  64 |     FS_XTALT | 0x2b | 0x000e |  1 |       72 | 0111_0010
|  65 |     AON_WCFG | 0x2c | 0x0000 |  2 |     2000 | 0000_0000_0010_0000
|  66 |     AON_CTRL | 0x2c | 0x0002 |  1 |       00 | 0000_0000
|  67 |     AON_RDAT | 0x2c | 0x0003 |  1 |       00 | 0000_0000
|  68 |     AON_ADDR | 0x2c | 0x0004 |  1 |       00 | 0000_0000
|  69 |     AON_CFG0 | 0x2c | 0x0006 |  4 | EE1FFF50 | 0101_0000_1111_1111_0001_1111_1110_1110
|  70 |     AON_CFG1 | 0x2c | 0x000a |  2 |     0000 | 0000_0000_0000_0000
|  71 |     OTP_WDAT | 0x2d | 0x0000 |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  72 |     OTP_ADDR | 0x2d | 0x0004 |  2 |     1E00 | 0000_0000_0001_1110
|  73 |     OTP_CTRL | 0x2d | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  74 |     OTP_STAT | 0x2d | 0x0008 |  2 |     0000 | 0000_0000_0000_0000
|  75 |     OTP_RDAT | 0x2d | 0x000a |  4 | 12010000 | 0000_0000_0000_0000_0000_0001_0001_0010
|  76 |    OTP_SRDAT | 0x2d | 0x000e |  4 | 00000000 | 0000_0000_0000_0000_0000_0000_0000_0000
|  77 |       OTP_SF | 0x2d | 0x0012 |  1 |       00 | 0000_0000
|  78 |   LDE_THRESH | 0x2e | 0x0000 |  2 |     0000 | 0000_0000_0000_0000
|  79 |     LDE_CFG1 | 0x2e | 0x0806 |  1 |       00 | 0000_0000
|  80 |   LDE_PPINDX | 0x2e | 0x1000 |  2 |     0000 | 0000_0000_0000_0000
|  81 |   LDE_PPAMPL | 0x2e | 0x1002 |  2 |     0000 | 0000_0000_0000_0000
|  82 |   LDE_RXANTD | 0x2e | 0x1804 |  2 |     0000 | 0000_0000_0000_0000
|  83 |     LDE_CFG2 | 0x2e | 0x1806 |  2 |     0000 | 0000_0000_0000_0000
|  84 |     LDE_REPC | 0x2e | 0x2804 |  2 |     0000 | 0000_0000_0000_0000
|  85 |     EVC_CTRL | 0x2f | 0x0000 |  4 | 00DEADDE | 1101_1110_1010_1101_1101_1110_0000_0000
|  86 |      EVC_PHE | 0x2f | 0x0004 |  2 |     0000 | 0000_0000_0000_0000
|  87 |      EVC_RSE | 0x2f | 0x0006 |  2 |     0000 | 0000_0000_0000_0000
|  88 |      EVC_FCG | 0x2f | 0x0008 |  2 |     0000 | 0000_0000_0000_0000
|  89 |      EVC_FCE | 0x2f | 0x000a |  2 |     0000 | 0000_0000_0000_0000
|  90 |      EVC_FFR | 0x2f | 0x000c |  2 |     0000 | 0000_0000_0000_0000
|  91 |      EVC_OVR | 0x2f | 0x000e |  2 |     0000 | 0000_0000_0000_0000
|  92 |      EVC_STO | 0x2f | 0x0010 |  2 |     0000 | 0000_0000_0000_0000
|  93 |      EVC_PTO | 0x2f | 0x0012 |  2 |     0000 | 0000_0000_0000_0000
|  94 |     EVC_FWTO | 0x2f | 0x0014 |  2 |     0000 | 0000_0000_0000_0000
|  95 |     EVC_TXFS | 0x2f | 0x0016 |  2 |     0000 | 0000_0000_0000_0000
|  96 |      EVC_HPW | 0x2f | 0x0018 |  2 |     0000 | 0000_0000_0000_0000
|  97 |      EVC_TPW | 0x2f | 0x001a |  2 |     0000 | 0000_0000_0000_0000
|  98 |     DIAG_TMC | 0x2f | 0x0024 |  2 |     0000 | 0000_0000_0000_0000
|  99 |   PMSC_CTRL0 | 0x36 | 0x0000 |  4 | 000230F0 | 1111_0000_0011_0000_0000_0010_0000_0000
| 100 |   PMSC_CTRL1 | 0x36 | 0x0004 |  4 | 38070281 | 1000_0001_0000_0010_0000_0111_0011_1000
| 101 |   PMSC_SNOZT | 0x36 | 0x000c |  1 |       40 | 0100_0000
| 102 |  PMSC_TXFSEQ | 0x36 | 0x0026 |  2 |     740B | 0000_1011_0111_0100
| 103 |    PMSC_LEDC | 0x36 | 0x0028 |  4 | 200000DE | 1101_1110_0000_0000_0000_0000_0010_0000
+-----+--------------+------+--------+----+----------+

трансивер может быть в следующих соcтояниях

State

Description

1

OFF

чип без питания

10

WAKEUP

Кварц включен. LDO включен.

2

PowerUp

--

8

DEEPSLEEP

SPI передача невозможна

3

INIT

Кварц работает. SPI может работать только на 3MHz

4

IDLE

PLL включен. SPI может работать на полной скорости 20MHz

6

TX

Трансивер передает пакет. После перейдет в IDLE.

7

RX PREAMBLE SNIFF

Трансивер периодически переключается между IDLE и RX

5

RX

Трансивер ищет преамбулу

8

SLEEP

SPI передача невозможна. Потребление меньше 1uA. LDO выключены.

9

SNOOZE

--

Собственные SPI регистры чипа DW1000

Регистровые файлы адресуются 6 битами. Это значит, что можно адресовать 64 регистровых файлов. В сумме у него 110 регистров

https://docs.google.com/spreadsheets/d/1-cDqzBLOIxD7zWVG7oPmD_uq-V_fILkTvu4ADGFD_5E/edit#gid=0

Какие настройки следует назначить в чипе DWM1000?

Параметр

Units

тип параметра

TxPower

dBm

главный

Preamble Length

Symbols

производный

Канал приема

num

производный

preamble code

?

производный

канал

главный

Канал передачи

num

производный

bandwidth

Hz

производный

centre frequency

Hz

производный

BitRate

Bit/s

главный

Transmit Pulse Repetition Frequency

Hz

главный

Номер канала полностью определяет центральную частоту, ширину канала и preamble code. Номер канала передатчика и номер канала приемника всегда должны совпадать в каждом отдельном трансивере.

Вот дерево зависимости параметров

Дерево зависимости конфигурации DWM1000
Дерево зависимости конфигурации DWM1000

Какие параметры влияют на дальность радиосвязи?

Битовая скорость и длина преамбулы влияют на дальность. Более длинная преамбула обеспечивает улучшенную дальность действия. При высокой битовой скорости передачи данных рабочий диапазон короткий. При низкой битовой скорости можно передавать данные на большие расстояния.

Формат радио пакета

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

В модуле DW1000 имеется аппаратный 40-битный таймер. Он может считать от 0 до 2^40=1 099 511 627 776. Этот таймер тактируется частотой 64 GHz. Это значит, что он переполняется каждые 17.17 с. Этот таймер увеличивается на 1 каждые 15.625ps. Свет за это время успевает пройти 0.004м или 4мм.

Между полями SFD и PHR чип вставляет метку времени. Эту метку времени можно прочитать из регистра 0x15.

Передача данных

Прием данных

Так как UWB это технология для мобильной техники, то отлаживаться приходилось подключаясь к смартфону по Serial Over USB при помощи культового Android приложения Serial USB Terminal.

Вот так выглядел комплект для отладки

Калибровка чипа DW1000

Если вычитывать значения TimeStamp(ов) из регистров сразу после инициализации то значения будут не валидные. Вы получите 120...160 метров между трансиверами, когда как расcтония всего полтора метра. Это обусловлено плаванием параметров при изготовлении кремниевых пластин.
Калибровочные параметры записываются в OTP память. Микроконтроллер может вычитывать данные из OTP и прописывать их в регистры DW1000.

Для калибровки задержки антенны надо взять два DW1000, установить их на известное расстояние и измерить дальность. Задержка антенны настраивается до тех пор пока реальная дальность и прочитанная дальность не начнут совпадать. Затем значение задержки антенны следует прописать в OTP память. Есть задержка при отправке и задержка при приеме.

Запаздывание отправки это время между внутренней цифровой отметкой времени и временем реальной отправки в антенну.

Запаздывание приема используется для компенсации времени между приемом сигнала RMARKER в антенне и внутренней временной отметке в цифровой цепи.

Во многих исполнениях PCB запаздывания приема и отправки равны.

Тестирование дальности радио Link(а)

В помещении я разносил два DW1000 трансивера на 24 шага (16,5м) и UWB пакеты стабильно приходили в обе стороны. Дальше мешала геометрия помещения. На улице мне удавалось принимать ping на расстояние 76 метров.

Тестирование измерения дальности по технологии SS-TWR/DS-TWR

Тестирование технологии измерения дальности без калибровки показывают, что при расстоянии между трансиверами всего 0,89м измерения показывают величины порядка 154,6 метров. Причем разброс был 0,9 метров.

При этом UWB радио пакет стабильно проходит сквозь бетонную стену жилого дома.

Подробности про механизм измерения дальности тут https://habr.com/ru/articles/723822/

Идеи проектов на UWB трансиверах

  1. UWB chat. Обмен мгновенными текстовыми сообщениями.

  2. Обновление прошивки по радио

  3. Передача файлов по радио

  4. InDoor навигация

  5. Удаленное управление электронными приборами в помещении

Словарь

Для работы с DWM1000 надо разбираться в следующих акронимах

Акроним

Расшифровка

AON

Always-On

POR

Power On Reset

API

Application Programming Interface

ETSI

European Telecommunications Standards Institute

N.B. (NB)

Nota bene (note well )

PAC

preamble acquisition chunk

SFD

start of frame delimiter

DW

DecaWave

XTI

internal 19.2 MHz clock (is the raw 38.4 MHz XTAL oscillator input ÷ 2)

PRF

pulse repetition frequency

BPM

bi-phase modulation

ISO

International Organization for Standardization

BPSK

binary phase shift keying

MSB

most significant bit

FCS

Frame Checking Sequence

TWR

Two Way Ranging

LO

local oscillator

IEEE

Institute of Electrical and Electronic Engineers

PLL

Phase Locked Loop

CS

chip select.

CMOS

Complementary metal–oxide–semiconductor

QFN

quad-flat no-leads

LSB

Least Significant Bit

LDE

leading edge (or the process to find and adjust the RX message timestamp)

LED

light-emitting diode

PHR

PHY header

PHY

physical layer

SPI

Serial Peripheral Interface

GPIO

General Purpose Input Output

OTP

One-Time Programmable

RTLS

real time location systems

WSNs

wireless sensor networks

RST

Reset

TOF

time of flight

IC

Integrated circuit

FCC

Federal Communications Commission

TDOA

Time Difference of Arrival

MAC

Media Access Control

CRC

cyclic redundancy check

UWB

Ultra Wideband

TWR

two way ranging

TX

transmit

RF

radio frequency

PSD

power spectral density

EIRP

Effective Isotropic Radiated Power

PCB

printed circuit board

FEC

Forward error correction


Вывод

Сам по себе DW1000 очень сырой. Чтобы просто настроить канал надо прописать магические числа в дюжину регистров. При этом часть регистров адресуются 2мя байтами, а часть 3мя байтами. Хотя регистров всего, 110 штучек. Сами регистры рваные, разных размеров. Для записи OTP параметров надо напряжение чуть выше привычных 3,3V на VCC (3.8V). RxTimeStamp надо включать отдельно. Нужна калибровка запаздывания антенн.

Регистров много. Для чипа dw1000 нужен сравнительно сложный драйвер. Нет смысла писать для него свой драйвер. Лучше взять драйвер от вендора. Данные удалось передавать в обе стороны на расстояния до 78 метров. Определять Tx TimeStamp(ы). На первый взгляд дальность определяется с точностью +- 45см. В общем чип dw1000 сложный.

Еще модуль можно задействовать как расширитель GPIO. С SPI на 8 pin(ов).

Как по мне, дак UWB отличный интерфейс, чтобы обновлять прошивку или для дистанционного упрарления, но чтобы измерять дальность надо строить калибровочный стенд метров 10 в габаритах.


Links

MIKROE UWB Click https://www.sparkfun.com/products/18782

https://github.com/MikroElektronika/mikrosdk_click_v2/tree/master/clicks/uwb

https://habr.com/ru/articles/726228/

Документация про модуль

Покупка модуля

Покупка переходника

Документация про чип DW1000:

Контрольные вопросы:

1--Как определить что передатчик в самом деле передает что-то?

2--Нет радио Link(а) (например в UWB). Как выявить в чем дело? Передатчик не передает или приемник не принимает?

3--Если ширина спектра широкая, то что можно сказать про форму сигнала во временной области?

4--Если увеличить длину преамбулы, то как это скажется на дальности радио связи?

Only registered users can participate in poll. Log in, please.
Вы программировали UWB трансиверы?
13.51% да5
86.49% нет32
37 users voted. 3 users abstained.
Only registered users can participate in poll. Log in, please.
Вы работали с модулем DWM1000?
11.11% да4
88.89% нет32
36 users voted. 4 users abstained.
Only registered users can participate in poll. Log in, please.
Вы работали с чипом DW1000?
11.11% да4
88.89% нет32
36 users voted. 2 users abstained.
Only registered users can participate in poll. Log in, please.
Вам удавалось воспроизвести технологию измерения дальности ToF?
15.63% да5
84.38% нет27
32 users voted. 6 users abstained.
Only registered users can participate in poll. Log in, please.
Вы работали с технологией UWB?
22.86% да8
77.14% нет27
35 users voted. 5 users abstained.
Tags:
Hubs:
Total votes 19: ↑19 and ↓0+19
Comments10

Articles