swd что это такое

Русские Блоги

Кратко опишите различия между различными интерфейсами отладки (SWD, JTAG, JLink, ULink, STLink)

Эта статья перепечатывается в блогеleon1741, Щелкните здесь, чтобы перейти к блогу оригинального автора

Я полжизни занимался разработкой встраиваемых систем и ARM. Программа отладкиНеизбежноиз. Я имел дело со многими спецификациями отладки, инструментами отладки и методами отладки, но взаимосвязь между ними не особенно ясна. Давайте взглянем сегодня:

Протокол JTAG

Когда был определен протокол JTAG, поскольку компьютеры (ПК) в то время обычно имели параллельные порты, используемый параллельный порт был определен при подключении к компьютеру. Сегодня компьютеры, не говоря уже о ноутбуках, сейчас на настольных компьютерах очень мало параллельных портов.Замени этоПортов USB становится все больше. Поэтому его редко можно увидеть на рынке.

SWD интерфейс

Последовательную отладку (Serial Wire Debug) следует рассматривать как режим отладки, отличный от JTAG, и используемый протокол отладки также должен отличаться, поэтому он наиболее непосредственно отражается в интерфейсе отладки. По сравнению с 20 выводами JTAG, SWD требует только 4 (или 5) контактов, и структура проста, но сфера применения не такая широкая, как JTAG.Основной отладчик также является режимом отладки SWD, добавленным позже.

Отличие SWD от традиционных методов отладки:

RDI интерфейс

Эмулятор JLink

Эмулятор ULink

Эмулятор ST-Link

ST-LINK специально дляSTMicroelectronicsЭмулятор для микросхем серий STM8 и STM32. Основные функции стандартного интерфейса SWIM и стандартного интерфейса JTAG / SWD, указанного в ST-LINK / V2:

Источник

Swd что это такое

Технология JTAG широко применяется для тестирования электронных устройств, чаще всего основанные на микроконтроллерах, CPU, CPLD и/или FPGA. JTAG также позволяет аппаратную отладку, чтение/запись памяти, управление ножками I/O, анализ на производительность работающего кода (здесь приведен перевод статьи [1]).

Технология SWD (расшифровывается как Serial Wire Debug) это более современная версия JTAG, требующая для работы только 2 сигнальных выводов вместо как минимум 4 у стандартного JTAG (иногда добавляется еще один сигнал, что доводит количество сигнальных проводников до 5). SWJ это комбинация SWD и традиционного JTAG. Однако на высшем уровне оба этих интерфейса предоставляют аналогичные функции с разными вариациями, зависящими от управляющего ПО и от аппаратного обеспечения.

С одной стороны эта функциональность должна поддерживаться в целевом устройстве (target device). Порт отладки (Debug Port) часто называют JTAG-DP для JTAG и SW-DP для SWD. Устройство с поддержкой SWJ часто комбинирует в себе оба этих стандарта, при этом SWD-сигналы SWDIO и SWCLK повторно используются как JTAG-сигналы JTMS и JTCK (таким образом, SWJ обеспечивает обратную совместимость с традиционным JTAG). Большинство 32-битых микроконтроллеров и чипов SoC имеют на борту один из таких интерфейсов (или оба).

С другой стороны Вам нужен SWJ-адаптер, который может обмениваться данными с устройством по протоколу JTAG и/или SWD. SWJ могут стоить недорого ( 1000$), в зависимости от качества аппаратуры и ПО (и от бренда производителя). Ниже перечислены несколько описаний SWJ-адаптеров.

[ST-Link v2]

ST-LINK/V2 это адаптер от STMicroelectronics, очень удобный для прошивки микроконтроллеров STM8 и STM32 этой компании, таких как серия STM32 F1. Адаптер поддерживает интерфейсы JTAG, SWD и SWIM (последний применяется для STM8).

Эти SWJ-адаптеры основаны на микроконтроллерах STM32F1xx ARM Cortex M3. Любопытно, что адаптер на основе микроконтроллера STM32F1xx применяется для программирования и отладки таких же микроконтроллеров STM32F1xx.

Использование ST-LINK/V2 на Linux. Для нормального использования сначала добавьте правила для обычного пользователя, чтобы можно было получить доступ к этому устройству (правило udev, основанное на идентификаторах VID и PID адаптера, показываемых lsusb). Это делается только один раз перед тем, как адаптер подключается для непосредственного использования:

Для подключения к микроконтроллерам STM32F1xx ARM Cortex M3 используется OpenOCD [9]:

[Клон ST-LINK/V2]

Это полностью содранный с оригинала ST-LINK/V2. Он поставляется в таком же корпусе, с такими же кабелями, выглядит так же, сохранено даже название печатной платы (MB936). Но сама плата не такая же, список деталей (BOM) не совпадает с оригинальным.

Оригинальный адаптер снабжен дополнительной защитой от статического электричества, защитными резисторами и трансивером, позволяющим работать с уровнями сигнала от 1.65V до 5.5V. В клоне это полностью отсутствует, поскольку сигналы интерфейса напрямую подключены к микроконтроллеру. Таким образом, поддерживаются только уровни сигналов 3.3V на отлаживаемой/программируемой системе, и иногда 5V, потому что выводы микроконтроллера допускают по входу уровни 5V (5V tolerant).

[ST-LINK V2 aluminium]

Существует несколько версий плат этого варианта адаптера, и может также отличаться цоколевка.

2014-06-22 ST-LINK V2. Ниже показана схема и внешний вид этих адаптеров.

В адаптере используется интересный трюк для подключения двух светодиодов (LED) на одной ножке порта (PA9):

• Когда ножка выхода порта установлена в лог. 1, зажигается один светодиод
• Когда эта же ножка переводится в лог. 0, зажигается другой светодиод
• Когда ножка переводится в состояние висящего входа, оба светодиода выключается
• Когда выход работает в режиме ШИМ (PWM), Вы можете смешивать эти 2 цвета светодиодов (красный и синий). Это происходит потому, что глаз не замечает быстрых мерцаний, светодиоды находятся рядом и светят в маленькую дырку по центру.

Тот же самый адаптер, но с другой цоколевкой. Выглядит очень похоже на вышеописанный адаптер, но цоколевка сигналов разъема сильно отличается (кроме питания), и используется только один светодиод. На плате нет никакой маркировки сигналов.

2016-01-18 MX-LINK V2. У этого адаптера логотип «M» вместо логотипа ST, что возможно соответствует маркировке «MX-LINK V2» на плате.

[Baite]

Это аналог ST-Link V2 с поддержкой JTAG, SWD и SWIM (для STM8) [2].

Автор статьи [1] сделал для этого адаптера стикер с цоколевкой сигналов.

Автор также перерисовал по плате схему. Все выводы коннектора защищены резисторами 220 ом.

Baite-V2A. Более новая версия промаркирована «V2A» (под кварцем), но схема почти такая же, со следующими изменениями:

• Присутствуют все ножки микроконтроллера (есть даже маска пайки между ними).
• Добавлен порт SWD.
• STM32F103C8 заменен на STM32F101CB, но используется как STM32F103 (так же, как в других дешевых адаптерах).
• Используются пассивные элементы меньшего размера.
• Некачественная разводка платы.

[Black Magic Probe]

Адаптер Black Magic Probe [3] (известный как BMP) очень интересный SWJ-адаптер, потому что в него встроен сервер GDB. Таким образом, не нужно запускать сервер OpenOCD, чтобы управлять адаптером SWJ. Вы можете напрямую подключить GDB к этому адаптеру (через драйвер USB CDC ACM).

Читайте также:  архитектурный бетон что это такое

В этом адаптере также есть порт UART (через второй канал USB CDC ACM). Это очень полезно для отладки в реальном времени, без точек останова (для обмена сообщениями printf).

Поставляемая аппаратура имеет следующие недостатки:

Из-за того, что firmware этого адаптера открыто (open source), его можно портировать на другую аппаратуру, и народ реально этим пользуется [4]. Проект был портирован [5] на blue pill [6]. Также он был портирован и на клон ST-Link V2 [7], но на нем больше нет дополнительного UART. Автор решил сделать порт на baite [2]. На коннекторе используется меньше выводов питания, но зато получается достаточно функциональных выводов для добавления UART (и SRST).

Сборка firmware (ожидается интегрирование патча):

После получения двоичного кода нужно перепрошить им адаптер Baite. Как Вы можете видеть по схеме, выводы JTAG и SWD микроконтроллера не подключены (на плате нет контактных площадок, куда эти выводы припаяны). Но на обратной стороне платы можно найти контрольные точки, чтобы запрограммировать микроконтроллер через serial bootloader:

Вывод Сигнал
1 (квадратный) RX
2 TX
3 BOOT0
4 +5V
5 GND

Чтобы прошить Black Magic firmware автор использовал stm32flash. Поскольку flash защищена от чтения/записи, сначала нужно очистить эти биты опций.

Поскольку этот адаптер основан на микроконтроллере STM32F103C8 с 64 килобайтами flash, DFU bootloader дает возможность использовать только 56 килобайт памяти flash для основного приложения. Blackmagic firmware превышает этот размер, поэтому его нельзя прошить, если программное обеспечение DFU не игнорирует это ограничение. У микроконтроллера STM32F103C8 часто есть 128 килобайт flash, так что все еще можно прошить blackmagic firmware, используя serial bootloader (по адресу 0x08002000). Проверка во время прошивки (verification) гарантирует, что весь код firmware был успешно записан.

Отключите Baite, и снова подключите его через USB. В нем должно запуститься основное программное обеспечение, и операционная система хоста должна обнаружить два порта USB CDC ACM.

Вы можете перепрошить устройство из основного приложения, используя dfu-util (если Вы сможете перевести dfu-util в состояние игнорирования ограничения по размеру памяти):

Цоколевка нового «BMP Baite»:

Сигнал Вывод Вывод Сигнал
SRTST 1 2 +3.3V
+5V 3 4 JTCK/SWCLK
RX 5 (ключ) 6 JTMS/SWDIO
GND 7 8 JTDO/TRACESWO
TX 9 10 JTDI

Если Вы подключите SRST к сигналу NRST целевой отлаживаемой системы, то можно будет подавать на неё сброс без нажатия кнопки сброса на плате отлаживаемой системы (если конечно такая кнопка есть). Сигнал сброса генерируется следующей командой:

[Altera USB-Blaster]

USB-Blaster это адаптер от компании Altera. Он часто используется для прошивки FPGA, но по сути это обычный адаптер JTAG.

Внимание: вывод VCC подключается к опорному напряжению, используемому для обмена JTAG, обычно предоставляемому печатной платой целевого отлаживаемого устройства (часто это напряжение 3.3V или 1.8V). Иначе сигналы не смогут определиться адаптером JTAG.

Сначала добавьте правила для обычного пользователя, чтобы он мог получить доступ к устройству (правило udev на основе идентификаторов VID и PID, показываемых lsusb). Это делается только один раз, перед тем как устройство подключается для непосредственного использования:

Чтобы можно было использовать этот адаптер, нужно перекомпилировать OpenOCD для USB-Blaster, чтобы использовалась библиотека libftdi (наверное потому что это клон).

Теперь Вы можете использовать адаптер, пример с микроконтроллером STM32F1:

Оригинальный адаптер Altera USB-Blaster использует чипы FTDI FT245 и MAX CPLD. Имеется множество его клонов разного качества и разной поддержкой диапазонов напряжения.

[SiLabs USB-Blaster]

Здесь используется микроконтроллер C8051F321 от Silicon Labs и 4-канальный буфер 74LVC125 (для преобразования уровней сигналов в пределах от 1.65V до 3.6V).

[PIC USB-Blaster]

Этот адаптер использует микроконтроллер PIC18F14 компании Microchip, без каких-либо буферов (поддерживаются только сигналы с уровнями 5V).

[ARMJISHU USB-Blaster]

Здесь используется STM32F101 от ST (как STM32F103 с поддержкой USB) и 8-канальный буфер 74HC244 (для преобразования уровней от 2.0V до 6.0V).

На схеме видно, что аппаратура может также управлять сигналами (на 3.3V) в случае, когда Vcc_target не подключен, и Вы можете добавить слот карт uSD или память SPI flash. Не известно, поддерживается ли этот функционал в программном обеспечении.

[SEGGER J-Link]

O-Link-ARM V8 [8], клон SEGGER J-Link.

Поддерживает JTAG, SWD, SWO, RTCK и опорное напряжение для регулировки уровней, что делает этот JTAG-адаптер наиболее полным.

[Цепочка сканирования JTAG]

Микросхемы с поддержкой JTAG имеют точки тестирования, которые называются Test Access Points (TAP). Один микроконтроллер может иметь несколько TAP, соединяемых в цепочку (scan chain). Несколько микросхем с TAP-ми также могут быть соединены (сигналами на печатной плате) в цепочку, это позволяет опрашивать все устройства на плате через одно подключение JTAG. Каждый TAP имеет идентификатор (IDCODE) и он может быть выбран индивидуально.

Иногда полезно перечислить все доступные TAP-ы на цепочке, чтобы узнать, какие есть устройства в системе. Это можно просто осуществить с помощью ПО urJTAG [10]. Пример с USB Blaster:

OpenOCD также сканирует цепочку, если нет предоставленных target (какой используется адаптер, все-таки определить нужно):

0x3ba00477 соответствует Cortex-M3 TAP, и 0x16410041 boundary scan TAP, как указано в документации на STM32F1xx.

Хотя ST-Link v2 с микроконтроллерами ST главным образом используется как адаптер SWD, он также поддерживает обычный JTAG. Оба этих протокола реализованы драйвером High Level Adapter (HLA). Но все выглядит так, как будто scan chain не поддерживается драйвером HLA.

Источник

Разработка контроллера резервного питания. Технология отладки и тюнинг

Все статьи по проекту

Отладка

При отладке все средства хороши, но у каждого средства есть свои ограничения. Поэтому средств много. Начнем в хронологическом порядке.

SWD/JTAG адаптер

Через этот адаптер программируется Flash память микроконтроллера, отлаживается низкоуровневая логика программы, выполняется профилирование, логирование.
В данном случае используется SWD интерфейс. Используем адаптер J-Link в среде IAR. Обладатели J-Link J-Link PLUS, ULTRA+, PRO могут использовать бесплатный отладчик Ozone. Но этот отладчик не так удобен, в частности не отображает поток прерываний в реальном времени и длительности ISR. Хотя он все же будет удобнее чем отладочные плагины для Eclipse.
В директории settings проекта находятся файлы используемы отладчиком IAR. В них содержаться все настройки адаптера и SWD интерфейса. В самом отладчике важно правильно указать частоту ядра и частоту семплирования SWO. В таком окне все это указываем:

Читайте также:  какие цветы и кустарники можно сажать осенью

Частоту семплирования выбираем максимальную. Timestamp resolution выбираем тем меньше чем точнее хотим измерять интервалы времени, однако чем меньше это значение тем будет большая вероятность получить переполнение интерфейса.
Частоту CPU не следует выбирать больше 120 МГц, в противном случае панель timeline в отладчике перестает работать.

Что мы можем делать с помощью отладчика J-Link Ultra+ в отладчике IAR:

Программировать любые области памяти, включая помять на внешних чипах

Запускать и останавливать программу в любой момент, проходить программу по шагам и на уровне исходного текста и на уровне ассемблера.

Наблюдать значения переменных и во время останова и во время выполнения программы с некоторой периодичностью обновления.

Наблюдать значения всех регистров процессора и всей периферии.

Ставить точки остановка в коде.

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

Отображать на графике в реальном времени состояния переменных, потока прерываний и длительностей выполнения процедур обслуживания прерываний, событий ITM.

Отображение стека вызовов.

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

Наблюдение за потоком прерываний сообщает очень важную информацию о загруженности процессора и способности системы работать в режиме жесткого реального времени.

Использование событий ITM для профилирования

Подключая к своему проекту файл arm_itm.h мы получаем в свое распоряжение макросы для отсылки вида:

Здесь переменная channel может принимать значения от 1 до 4 (по умолчанию допустимый диапазон в IAR). Это будет номер графика на котором отобразиться событие. А value будет отображено как значение события.
На графике это будет выглядеть так:

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

Осциллограф

Когда основная функциональность микроконтроллера на плате проверена наступает очередь тестирования внешней аппаратной части.

Цифровые выходы микроконтроллера управляют на плате интегральными ключами и реле. От момента получения сигнала до его исполнения проходят некоторые задержки, причем не специфицированные в документации на компоненты. Величины задержек достигают десятки миллисекунд. Для программы микроконтроллера это очень большие интервалы и они как правило должны учитываться в виде дополнительных состояний в программных конечных автоматах. Осциллограф среди прочего необходим для измерения этих задержек.

Здесь приведены некоторые осциллограммы снятые на плате во время отладки

Надежды на использование осциллографов с автономным питанием здесь не оправдаются.
Они покажут точно такой же шум от синфазных помех как и стационарные осциллографы.
Чтобы измерить осциллографом аналоговый сигнал в диапазоне 0-3 В в схеме с работающим DC/DC преобразователем необходим специальный дифференциальный щуп.

Но даже не любой дифференциальный щуп. Например дифференциальный щуп GDP-040D к осциллографу GDS-320, показанному выше, не сможет достаточно подавить синфазные помехи возникающие в плате контроллера. Нужен щуп с подавлением CMRR более 60 дБ на частоте 10 МГц.

Отсюда вытекают ограниченные возможности по применению осциллографа.
Чтобы точно показать состояния аналоговых сигналов в схеме нужно чтобы чтобы сам микроконтроллер выводил эти сигналы в цифровом виде на внешние устройства наблюдения.

Вывод через UART и сервер терминала VT100

В простейшем случае можно выводить через UART некий непрерывный поток значений интересующих нас величин. Но этот способ сразу пропустим. Он весьма ограничен.
В данном проекте был сразу внедрен развитый интерактивный пользовательский интерфейс по протоколу VT100. Спецификация VT100 описывает служебные последовательности байт получая которые эмуляторы терминалов типа PuTTY или TeraTerm выполняют позиционирование строк на экране, стирание символов, строк, экрана, подсвечивание и т.д. Служебные байты передаются вместе с выводимой на экран информацией, но отфильтровываются программами эмуляторов терминала VT100.

В проекте файлы сервера терминала находятся в директории Software/Regulated_power_source/APP/VT100/

— выполняет вывод меню на экран терминал

— выполняет функции редактирования и просмотра энергонезависимых параметров

— выполняет вывод и редактирование значений сигналов и переменных связанных с конечным приложением

— реализует универсальный драйвер последовательного канала передачи. Драйвер позволяет работать через терминал по всем последовательным каналам существующим в системе одновременно. Для этого используется сервисы RTOS.

Отдельно об окне диагностики позволяющем наблюдать и управлять сигналами на плате. Окно показано ниже и конфигурируется в исходном тексте на С-и вот таким массивом. В окне можно увидеть состояния всех бинарных сигналов на плате и переключить состояние тех из них, которые управляются микроконтроллером. Буквы в квадратных скобках обозначают клавиши, по нажатию которых произойдет переключение сигнала. Если сигнал не бинарный, а представлен числом, как например код ЦАП, то при нажатии на клавишу произойдет переход в режим редактирования числа. Помимо сигналов в окне выводятся вычисляемые переменные и измеряемые величины.

Для экономии экранного пространства бинарным сигналам даны названия соответствующие их названиям на плате.

Ведение лога

Когда наблюдение в реальном времени покажется слишком утомительным и не информативным наступает время писать все важные события в программе в лог для последующего анализа.

В каждой записи лога хранится: имя функции откуда была выполнена запись в лог, номер строки в функции где была вызвана запись в лог, атрибут важности записи, сама отформатированная строка лога с переданными аргументами и время записи с точностью до микросекунд.

В любом месте программы пользователь может осуществить запись в лог просто написав оператор вызова функции лога типа такого:

Следует только не превышать максимальную длину строки и помнить, что лог работает после запуска RTOS и использует мьютексы RTOS с таймаутами. Мьютексы нужны для предотвращения конфликтов одновременного доступа. Естественно при этом лог может записывать любая задача в системе.
Лог имеет структуру напоминающую LIFO. Т.е. новые данные всегда записываются, а старые записи если уже не помещаются, то стираются.

Интерактивный движок мониторинга и управления FreeMaster

Здесь опишу как портирован модуль протокола и драйверы FreeMaster в демо-проекте.

Протокол обмена описан в этом документе.

Как работает драйвер описано здесь.

Протокол FreeMaster может конфигурироваться для включения той или иной функциональности. Конфигурация задается в файле freemaster_cfg.h. В частности там разрешено и протестировано:

Читайте также:  какие самые эффективные противовирусные препараты на сегодняшний день

прием и выполнение команд из приложения FreeMaster,

независимые коммуникационные потоки (pipes). Через низ осуществляется вывод лога устройства в приложение FreeMaster

режим осциллографа, когда данные постоянно передаются в приложение на PC

режим рекордера, когда данные по триггеру записываются в буфер внутри устройства с точным интервалом дискретизации и потом переписываются в приложение на PC.

График в реальном времени нагрузки процессора. Нагрузка измеряется тысячными долями. Следовательно на графике показана нагрузка в 74%.

Создание управляемого источника напряжения

Для источника напряжения используется расположенный на плате buck-boost преобразователь на микросхеме U23 LTC3789. На вход X14 подается фиксированное напряжение от внешнего источника питания или аккумулятора 16. 26 В. На выходе X6 получаем регулируемое напряжение от 2 до 32 В, ток до 10 А (долговременная работа определяется теплоотводом). Минимальное входное напряжение определяется цепью защиты входа от пониженного напряжения на резисторах R69 и R73. Отпаяв R73 входное напряжение можно понижать до 3.4 В.

Управляет референсным напряжением buck-boost преобразователя 16-и битный ЦАП U24 DAC80501. Поэтому диапазон значений для регулирования от 0 до 65535.

Программный модуль FreeMaster в микроконтроллере содержит обработчик команды установки кода в ЦАП. Идентификатор команды в файле FreeMaster_task.h определен как:

Такое числовое значение должно быть послано в качестве идентификатора команды совместно с самим кодом ЦАП из приложения FreeMaster в микроконтроллер чтобы обновить код в ЦАП. Для чтения выходного напряжения и тока через преобразователь достаточно выбрать в окне программы соответствующие переменные для отображения в таблице и в виде графика на панели графиков. Интервал через который будут обновляться данные можно регулировать от 10 мс и меньше (зависит от скорости интерфейса и компьютера) и до сотен и больше секунд в режиме осциллографа. В режиме рекордера интервал зависит от того в каком месте в программе микроконтроллера будет вызываться функция FMSTR_Recorder. В данном случае она расположения в обработчике прерывания АЦП и вызывается через каждые 32 мкс. Значит рекордер работает с частотой 31250 Гц.

Ниже показано окно приложения FreeMaster с процессом регулирования выходного напряжения. Вместо аккумулятора на клеммы разъема X6 подключен резистор 33 Ом в качестве нагрузки.

Все окна и конфигурации созданные пользователем в приложении FreeMaster сохраняются в файле проекта. Показанный выше проект находится в файле Project.pmpx.

Как работать с приложение FreeMaster описано здесь pcm_um.pdf

Как создан виджет регулировки напряжения в приложении FreeMaster

Дело в том что приложение FreeMaster не предлагает своей библиотеки готовых виджетов. Вместо этого в окно FreeMaster встраивается HTML страница поддерживающая JScript под стандарт Internet Explorer и HTML виджеты надо искать и вставлять на страницу самому пользователю. Internet Explorer поддерживает и ActiveX компоненты. Кто знаком с программированием под Windows может создать такие компоненты в средах разработки типа MS Visual Studio или RAD Studio.

В результате была создана HTML страница с виджетом BackupCtrl_control_page.htm

Поскольку FreeMaster в среде Windows инсталлирует свой объект автоматизации, то на странице он доступен после того как включить в нее такую строку:

Далее обращения на странице к объекту производятся по имени pcm. Например так:

В фрагменте выше отправляется контроллеру команда с идентификатором SET_DCDC_DAC и данные сопровождающие команду. Сама команда была создана в приложении FreeMsater в окне Application Commands. Текстовое название команды используется в скриптах на HTML странице.

Экспорт и анализ в MATLAB

Скрипт приведенный выше извлекает данные из окна рекордера FreeMaster и помещает их в рабочее пространство MATLAB.

Забегая вперед покажу вид проекта детектора полного заряда аккумулятора в Simulink основанного на данных из рекордера FreeMaster:

Подсистема детектора полного заряда аккумулятора

Анализ и обработка сигналов и данных с платы контроллера резервного питания предмет отдельной большой темы поэтому тут пока развивать ее не будем.

Менеджер параметров

Несколько слов о дополнительных утилитах проекта.

Когда параметров в программе становиться много приходится думать об управлении ими.

В представленном демо-проекте менеджер параметром может показаться излишним поскольку объявлено всего 3-и параметра. Однако впоследствии количество параметров легко увеличится до нескольких сотен с ростом функциональности контроллера. Зарядка аккумуляторов совместно с резервным питанием в автономном режиме требует большое количество настроек, калибровочных и эвристических констант и это не считая специфических настроек связанных с эксплуатацией в определенном промышленном окружении.

Помимо того менеджер одновременно с исходниками на С-и может генерировать: JSON файлы для обмена в технологии IoT, MIB-файлы для управления в составе систем мониторинга на базе SNMP протокола, HTML файлы для встроенного в контроллер WEB сервера. И все это на основе единой базы данных параметров. Хотя и не все из этого может пригодится для разрабатываемого контроллера.

Структуры на С-и сгенерированные менеджером используются в файле Params_editor.c для вывода меню редактора параметров. Чтобы параметры при выводе не образовывали на экране длиннющий список они организуются как иерархическое дерево в виде вложенных подменю. Такая иерархия также конструируется пользователем в менеджере параметров.

Тюнинг, или как выглядят схемотехнические баги.

В результате первых этапов отладки сгорело около 20 транзисторов, 4 стабилитрона и 2 микросхемы и мы пришли к следующим коррекциям схемы и печатной платы:

Баг с номером 8 имел самые катастрофические последствия. К нему привело слепое копирование референсной схемы из даташита производителя. Но оказалось что при резком спаде входного напряжения (например при КЗ на шине 24 В) в затворах ключей напряжение поднимается до 30 В из-за того что на выходе (например на клеммах аккумятора ) остается остаточное напряжение. Затворы пробивало и выводило из строя транзисторы.

Самый интересный баг с номером 9. Как было написано в предыдущей статье о трассировке платы, соединение земель делалось на принципе звезды. Однако на сложной схеме с распределенными по плате сенсорами работающими в аналоговом или цифровом домене и измеряющими параметры в области силового домена увидеть скрытые связи земель и путей токов не так просто. Критерии компактности трассировки и бюджетности вступают в прямое противоречие с электромагнитной совместимостью. Словом замыкание перемычкой земли цифрового и силового домена в обозначенном месте приводит к уменьшению шума измеряемых аналоговых сигналов в два раза хотя и создает ту самую петлю, которую строго запрещают солидные издания по правилам трассировки.

Источник

Информ портал о технике и не только