AD7766 на Tang Primer 25K: отладочная прошивка, структура после рефакторинга

This commit is contained in:
nikit3s
2026-08-11 12:16:18 +03:00
commit 6b78fcc34f
20 changed files with 2741 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
# AD7766 — принятые решения
Ссылки на страницы — по AD7766 Data Sheet Rev. D.
## Тактирование и частота дискретизации
| Параметр | Значение | Обоснование |
|:--|:--|:--|
| Системный клок | 50 МГц (E2) | генератор Tang Primer 25K |
| MCLK | 1.000 МГц = 50/50 | t2 min 100 нс, t3 max 900 нс, f max 1.024 МГц (Table 3, стр. 6-7) |
| ODR АЦП | 125 000 Гц | ODR = MCLK/8 для AD7766 (Table 6, стр. 15) |
| Дециматор | sinc^1 (среднее по 10) | понижение обязательно: 125 kSPS x 3 байта = 375 кБ/с не влезает в UART |
| Выходная ЧД | 12 500 Гц | совпадает с FS в F:\PyPrj\Signal_analayzer |
| SCLK | 6.25 МГц = 50/8 | 24 бита за 3.84 мкс при окне чтения 7.7 мкс |
Окно чтения: DRDY низкий в течение tDRDY - t5 = 8000 - 294 = 7706 нс (Table 3).
MCLK взят 1.000 МГц вместо максимальных 1.024 МГц ради целого деления от 50 МГц
(без PLL) и ради ровной выходной ЧД 12 500 Гц.
## Интерфейс АЦП
Регистров конфигурации у AD7766 нет — интерфейс только на чтение (стр. 17).
- Сброс/синхронизация — низкий импульс на SYNC/PD (пин 7), цепь `RESET` на гребёнке.
События защёлкиваются по нарастающим фронтам MCLK (стр. 17).
- После снятия SYNC/PD выждать tSETTLING = 590 x tMCLK = 590 мкс (Table 7).
- Чтение: по спаду DRDY опустить CS, MSB появляется на SDO по спаду CS,
остальные 23 бита выдвигаются спадами SCLK (стр. 17, Figure 3).
Мастер защёлкивает биты по нарастающим фронтам SCLK.
- SDI (пин 15) — вход daisy-chain, для одиночного АЦП постоянный '0' (стр. 18).
## Шкала
VREF+ = 5 В -> синфазный уровень 2.5 В, каждый вход 0...5 В, дифференциально +-5 В
(стр. 16, 20). Полная шкала кода 0x7FFFFF = +5 В, 0x800000 = -5 В.
В Signal_analayzer нужно `'V_REF': 5`.
## Формат кадра UART
Бод 921600, 8N1. 50 отсчётов в кадре -> 157 байт, 250 кадров/с, 39.25 кБ/с (43% канала).
| Поле | Байт | Описание |
|:--|--:|:--|
| SYNC | 2 | `A5 5A` |
| FRAME_CNT | 2 | uint16 BE, инкремент на кадр |
| STATUS | 1 | бит0 — переполнение FIFO, бит1 — сорван счёт DRDY |
| DATA | 150 | 50 отсчётов x 24 бита, MSB first |
| CRC16 | 2 | CCITT, poly 0x1021, init 0xFFFF, по FRAME_CNT..DATA |
## Приём на ПК
Пишутся два файла:
- `*.raw` — байт в байт всё, что пришло из порта, до разбора. Отладочный.
- `*.bin` — только отсчёты, 3 байта BE на отсчёт, без служебных полей.
Читается функцией `read_24bit_bin()` из Signal_analayzer без переделок.
Кадр с несошедшейся CRC отбрасывается, а пропуск по FRAME_CNT добивается нулями,
чтобы не сдвинулась ось времени. Места вставок пишутся в лог.