Русский
Русский
English
Статистика
Реклама

Блог компании миландр

Семилетними шагами миграция с JSP Angular JS на Angular 2

26.03.2021 10:08:08 | Автор: admin

Что нужно для перехода от серверного рендеринга к пользовательскому? Чем хорош Angular 2+ и как на него перейти? В этой статье попытаемся разобраться в данных вопросах и описать процесс миграции от серверных технологий рендеринга, таких, как JSP, к клиентским технологиям рендеринга представлений с использованием Angular.

Используемые технологии

Прежде чем приступить к коду, опишем весь стек используемых технологий:

  • Spring Framework - фреймворк для Java-платформы.

  • JSP - технология, позволяющая создавать содержимое, которое имеет как статические, так и динамические компоненты. Страница JSP содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматов (например, HTML) и JSP-элементы. Эти элементы конструируют динамическое содержимое, позволяя внедрять Java-код в статичное содержимое страницы.

  • AngularJS и Angular - JavaScript-фреймворки от компании Google для создания клиентских приложений. AngularJS был одним из первых JavaScript-фреймворков, разработанным для создания одностраничных приложений (SPA). Он был выпущен в 2009 году как фреймворк с открытым исходным кодом. В 2016 году был выпущен Angular 2. Он был переписан с нуля на TypeScript и не является обратно совместимым с AngularJS.

Изначально у нас есть приложение, написанное на Spring+JSP с использованием AngularJS.Наша цель - перейти к SPA с использованием современной версии Angular.

Какие перспективы?

Angular является современным и популярным фреймворком и обладает рядом преимуществ по сравнению с JSP и AngularJS.

Основное концептуальное различие между JSP и Angular заключается в том, динамически ли генерируется страница в браузере (на стороне клиента) или на сервере. При использовании Angular не приходится извлекать всю страницу с сервера после ее загрузки в первый раз. Вы просто обновляете части страницы, которые изменились на клиенте (хотя это часто происходит в ответ на данные, полученные с сервера). Рендеринг на стороне клиента позволяет избежать ненужных запросов на полную страницу, когда изменилась только ее часть.

Внедряем технологию

Перейдем непосредственно к описанию процесса перехода и рассмотрим вопросы, возникающие при смене технологий.

Инициализация нового Angular приложения

Вместо JSP-страниц нам теперь понадобится Angular приложение. Для его создания удобно использовать Angular CLI. Angular CLI - официальный инструмент для инициализации и работы с Angular-проектами. Он упрощает создание приложения, его компиляцию.

Angular CLI можно установить, выполнив следующую команду:

npm install @angular/cli

После создадим новый Angular проект с помощью команды:

ng new <название проекта>

Команда ng new генерирует скелет будущего приложения. Angular CLI создает одноименную директорию и помещает в нее исходные файлы "скелета" приложения.

Создание служебных сервисов

На JSP-страницах использовалась информация, содержащая Java-выражения, а также специфичные теги: http://www.springframework.org/tags, в частности, для локализации и http://java.sun.com/jsp/jstl/core. Также в некоторых ситуациях может существовать необходимость в кастомизируемом ролевом доступе, информацией о котором, помимо сервера, должен владеть и клиент. Для получения этой информации создадим дополнительные контроллеры с методами, возвращающими нужную информацию. Запросы, возвращающие сообщения для локализации, должны быть доступны без аутентификации. Это связано с тем, что эти сообщения отображаются на всех страницах, включая доступные неавторизованным пользователям. Поправим конфигурацию Spring Security, чтобы она игнорировала запросы по шаблону "/messages/*":

@Overridepublic void configure(WebSecurity web) {    web.ignoring().antMatchers("/messages/*");}

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

Проксирование

В случае, когда клиент хостится на отдельном сервере, возникает потребность в проксировании запросов. Тот факт, что фронтенд и бэкенд прослушивают отдельные порты, не позволяет Angular делать внутренние запросы. Это связано с тем, что веб-браузеры разрешают только внутренние запросы к тому же источнику, из которого было загружено веб-приложение. К счастью, мы можем позволить Angular CLI выступать в качестве прокси-сервера для нашего бэкенда Spring. Приложение Angular будет отправлять бэкенд-запросы на сервер разработки, который будет пересылать их на бэкенд.

Для этого добавим в корневую папку проекта файл proxy.conf.json с конфигурацией прокси-сервера:

{  "/api": {    "target": "http://localhost:8099",    "secure": false,    "cookieDomainRewrite": "localhost",    "changeOrigin": true  }}

Также поправим package.json, чтобы данная конфигурация применялась, указав в стартовом скрипте "start": "ng serve --proxy-config proxy.conf.json".

Перенос JSP страниц в компоненты Angular

Angular приложение состоит из компонентов, у каждого из которых своя независимая логика. Компонент - полноценная сущность, у которой есть своя логика TypeScript, разметка HTML и свой стиль CSS. Соответственно каждая JSP-страница будет разбиваться на отдельные компоненты, в которых в отдельные файлы выносится html, typescript и css. Для отправки запросов к бэкенду создадим отдельные сервисы. Заменим конструкции AngularJS на аналогичные в Angular.

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

При открытии JSP-страницы выполняется проверка на наличие привилегий. В случае отсутствия привилегий пользователь перенаправляется на страницу входа.

<%   if (!SecurityUtils.hasRole(SecurityConstants.VIEW_USER)) {       response.sendRedirect("login.jsp");   }%>

В Angular есть механизм ограничения перехода, называемый Guards. Guards позволяют ограничить доступ к маршрутам на основе определенного условия.

Все guard-ы должны возвращать либо true, либо false. И происходить это может как в синхронном режиме (тип Boolean), так и в асинхронном режиме (Observable<boolean> или Promise<boolean>). Данный пример разрешает переход при наличии у пользователя привилегии VIEW_SETTINGS. Метод hasPrivilege отправляет запрос на сервис и возвращает Observable<boolean>.

@Injectable({ providedIn: 'root'})export class SettingsGuard { readonly  SECURITY_CONSTANTS = SecurityConstants; constructor(private router: Router,             private securityConstantService: SecurityConstantService) { } canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot):   Observable<boolean|UrlTree> | Promise<boolean|UrlTree> | boolean|UrlTree {   return this.securityConstantService.hasPrivilege(this.SECURITY_CONSTANTS.VIEW_SETTINGS); }}

Обработка ошибок

Следующий шаг - обработка ошибок, возвращаемых сервером. Добавим HttpInterceptor, который обеспечивает перехват http-запросов и ответов для преобразования или обработки их перед передачей. При получении ошибок 401 или 403 будем перенаправлять пользователя на страницу входа:

public handleError(err: HttpErrorResponse): Observable<any> {  if (err.url != null && (err.status === 401 || err.status === 403)) {    this.router.navigate(['/login']);  }  return throwError(err.error);}

Подобным образом можно обрабатывать другие ошибки, подробнее можно почитать, например, здесь.

Кэширование

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

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

cache = new Map<string, RequestCacheEntry>();get(req: HttpRequest<any>): HttpResponse<any> | undefined {   const url = req.url + req.body.key;   const cached = this.cache.get(url);   if (!cached) {     return undefined;   }   const isExpired = cached.lastRead < (Date.now() - maxAge);   return isExpired ? undefined : cached.response; }put(req: HttpRequest<any>, response: HttpResponse<any>): void {   const url = req.url + req.body.key;   const newEntry = { url, response, lastRead: Date.now() };   this.cache.set(url, newEntry);   const expired = Date.now() - maxAge;   this.cache.forEach(entry => {     if (entry.lastRead < expired) {       this.cache.delete(entry.url);     }   }); }

CachingInterceptor реализует интерфейс HttpInterceptor, перехватывает запросы и решает, нужно их кэшировать или нет. Любой класс, реализующий интерфейс HttpInterceptor, должен иметь метод intercept.

В этом методе мы сначала проверим, нужно ли кэшировать данные из запроса (метод isCacheable), и, если нужно, попробуем извлечь данные из нашего кэша. Если у нас есть кэшированные данные для конкретного запроса, то мы вернем Observable с этими данными. Иначе мы отправим запрос на сервер для извлечения данных, в нашем случае, используя метод sendRequest. Этот метод также кэширует запрос для дальнейшего использования.

intercept(req: HttpRequest<any>, next: HttpHandler) { if (!isCacheable(req)) { return next.handle(req); } const cachedResponse = this.cache.get(req); if (req.headers.get('x-refresh')) {   const results$ = sendRequest(req, next, this.cache);   return cachedResponse ?     results$.pipe( startWith(cachedResponse) ) :     results$; } return cachedResponse ?   of(cachedResponse) : sendRequest(req, next, this.cache);}

Заключение

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

Подробнее..

МЭМСы. Как устроены современные датчики?

12.12.2020 16:04:40 | Автор: admin
Микроэлектромеханические системы (МЭМС) устройства, объединяющие в себе микроэлектронные и микромеханические компоненты. Сейчас довольно трудно встретить системы в которых не используются датчики, выполненные по данной технологии. Но как устроены современные датчики и какие преобразователи используются для работы с ними? Постараемся детально разобраться в этом вопросе, основываясь на работе современных МЭМС-акселерометров.


Простейший акселерометр, как он работает?


Акселерометр прибор, измеряющий проекцию кажущегося ускорения (разности между истинным ускорением объекта и гравитационным ускорением). Принцип работы можно объяснить с помощью простой модели.


Модель устройства механического акселерометра (оригинал)

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

$a=\frac{k\cdot\delta x}{m}$, где k -коэффициент упругости пружины, $\delta x$ ее растяжение и m масса груза.

Используя три перпендикулярно расположенных датчика, можно узнать ускорение предмета по 3-м осям, и зная начальные условия определить положение тела в пространстве.

Эта незамысловатая модель представляет собой основу работы большинства акселерометров, которые можно поделить на 3 основные подгруппы:

  • механические
  • электронные
  • пьезоэлектрические

Есть еще термальные и оптические, однако их рассматривать не будем. Если с механическими все понятно (по сути, их работу отражает модель сверху), то с электронными и пьезоэлектронными немного поинтереснее.

Пьезоэлектронный акселерометр


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


Анимация пьезоэффекта (оригинал)

При увеличении ускорения, инертная масса увеличивает/уменьшает давление на пьезоэлемент. Благодаря пьезоэффекту происходит генерация сигнала, который зависит от внешнего ускорения.


Устройство пьезоэлектрического акселерометра (оригинал)

Датчики такого типа требуют дополнительного усилителя, который увеличивает амплитуду сигнала, и создает низкоимпедансный выход для работы с внешними устройствами. Для калибровки нулевого значения ускорения используется Preload Bolt, масса которого рассчитана так, чтобы соответствовать нулевой точки ускорения в системе.

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

Электронные акселерометры


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


Устройство 2-х осевого электро-механического акселерометра

При изменении ускорения, масса изменяет расстояние между обкладками конденсатора. Из простейшей формулы емкости конденасатора $C=\frac{\varepsilon\varepsilon_0S}{d} $ следует, что при изменении d расстояния между обкладками емкость конденсатора будет также изменяться. Широкое применение данный метод получил, благодаря развитию МЭМС (MEMS) микроэлектромеханических систем.

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


Устройство 2-х осевого электро-механического акселерометра (оригинал из книги Introductory MEMS. Дальнейшие иллюстрации тоже взяты из этой книги)

У читателя наверняка возник вопрос: как именно детектировать изменение емкости конденсатора? Постараюсь дать на этот вопрос исчерпывающий ответ.

Устройство МЭМС акселерометра. Как превратить изменение емкости в сигнал?


Емкостной полумост


Итак прежде, чем описывать работу самого датчика, обратимся к довольно популярной схеме в схемотехнике емкостному полумосту (Capacitive half-bridge).

Емкостной полумост основа МЭМС-датчиков

Напряжения $e_1$ и $e_2$ являются входными, а $e_3$ выходной сигнал для последующего преобразования. Емкости обоих конденсаторов зависят от внешнего ускорения, и изменяются на величину x(t). При x = 0, заряды на емкостях являются идентичными, и при этом $C_1=C_2=C_0$. При условии, что x <<d найдем как зависит изменение емкости конденсаторов от изменения положения обкладки.

Вывод формулы для изменения емкости
Запишем изменение каждой емкости при сдвиге обкладки на x:
$\Delta C_1=C_1-C_0$; $\Delta C_2=-C_2+C_0$(1.1)

Запишем через формулу емкости:
$\Delta C_1=\frac{\varepsilon S}{d-x}-\frac{\varepsilon S}{d}$; $\Delta C_2=-\frac{\varepsilon S}{d+x}+\frac{\varepsilon S}{d}$

Упростив данные формулы, получаем следующее:

$\Delta C_1=\frac{\varepsilon Sx}{d^2-xd} $$\Delta C_2=\frac{\varepsilon Sx}{d^2+xd}$

Учитывая условие, что x <<d, а xd несущественно по сравнению с d^2 можем записать формулу изменения емкости конденсатора, в зависимости от смещения обкладки:

$\Delta C\left(x\right)=\frac{\varepsilon S}{d^2}x $(1.2)
Итак часть пути пройдена, мы получили как зависит значение изменения емкости от изменения положения обкладки (то есть внешнего ускорения). Пора это изменение детектировать: вводим дополнительные токи $i_1, i_2, i_3$. Теперь остается вычислить как выходной ток будет зависеть от изменения положения обкладки.

Вывод формулы зависимости выходного тока от изменения емкости
По правилу Кирхгофа для токов получаем следующее уравнение:
$i_1+i_2=i_3$

Учитывая тот факт, что ток является производной заряда dq/dt, а заряд q=CU, преобразуем данное уравнение в следующий вид:
$i_3=\frac{d}{dt}\left[C_1\left(e_1-e_3\right)\right]+\frac{d}{dt}\left[C_2\left(e_2-e_3\right)\right]$(1.3)

Пусть потенциалы $e_1= e_2= e_s$, тогда исходя из формулы (1.1):
$i_3=\frac{d}{dt}\left[\left(C_0+\Delta C\right)\left(e_s-e_3\right)\right]+\frac{d}{dt}\left[\left(C_0-\Delta C\right)\left(e_s-e_3\right)\right]$


Итак если использовать одинаковые потенциалы входных напряжений $e_1= e_2= e_s$ получаем зависимость тока:

$i_3=\frac{d}{dt}\left[2C_0\left(e_s-e_3\right)\right]$



Результат получился довольно странный: выходной ток никак не зависит от изменения емкости. Для того, чтобы детектировать изменение емкости, необходимо задавать на обкладках напряжения разной полярности, то есть: $e_1=e_s$, а $e_2=-e_s$. Тогда переделаем уравнение с учетом данной модификации.

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

$i_3=\frac{d}{dt}\left[\left(C_0+\Delta C\right)\left(e_s-e_3\right)\right]+\frac{d}{dt}\left[\left(C_0-\Delta C\right)\left(-e_s-e_3\right)\right]$


Упрощаем:

$i_3=2\frac{d}{dt}\left(\Delta C e_s-C_0e_3\right)$


Берем производную:

$i_3=2\left(e_s\frac{d}{dt}\left(\Delta C\right)+\Delta C\frac{d}{dt}\left(e_s\right)-C_0\frac{d}{dt}\left(e_3\right)\right)$


Учитывая уравнение 1.2 для изменения емкости, получаем:

$i_3=2\left(e_s\frac{\varepsilon S}{d^2}\dot{x}+x\frac{\varepsilon S}{d^2}\dot{e_s}-C_0\dot{e_3}\right)$(1.4)

Из этого уравнения видны следующие факты:

  • если положение пластин не меняется во времени, то $\dot{x}=0$
  • аналогично если источник сигнала es постоянный (DC), то $\dot{e_s}=0$

Для эффективной работы емкостного полумоста необходимо использовать переменные входные сигналы e1 и e2, смещение фаз между которыми будет равно 180 градусов (для того, чтобы потенциалы имели разный знак). Поэтому получаем следующий вид сигналов:

$e_1=+e_s=+Bsin\left(\omega t\right)$

$e_2=-e_s=-Bsin\left(\omega t\right)$

, где $\omega$ частота переменного сигнала (определяется на этапе разработки, в зависимости от полосы пропускания системы и нормальной работы механических емкостей).

Итак, мы получили уравнение (1.4), которое показывает, как изменение емкости конденсатора влияет на выходной сигнал системы. Однако такой сигнал будет довольно малый по амплитуде, к тому же если подключим к нему нагрузку для общения с внешним миром вся система рухнет. Тут нужен усилитель

Просто добавь усилитель


Добавим в нашу систему усилитель (будем считать, что коэффициент усиления $\infty$ сл-но работает принцип виртуальной земли).


Емкостной полумост + интегратор

Итак теперь найдем зависимость выходного напряжения усилителя от изменения емкости.

Выходное напряжение усилителя
Запишем уравнение Кирхгофа для этой системы:
$i_4+i_5=i_3$
Ток через конденсатор $C_f$ можно записать через изменение заряда dq/dt, поэтому исходя из полученного уравнения (1.4) получаем:
$2\left(e_s\frac{\varepsilon S}{d^2}\dot{x}+x\frac{\varepsilon S}{d^2}\dot{e_s}-C_0\dot{e_3}\right)=\frac{d}{dt}\left[C_f\left(e_4-e_3\right)\right]+\frac{e_4-e_3}{R_f}$(1.5)
Данное уравнение показывает, что выходной сигнал зависит не только от положения обкладки x, но и от ее скорости движения (что не желательно). Для того чтобы компонента, вносимая скоростью, была незначительной, необходимо использовать высокочастотный входной сигнал (обычно такую частоту выбирают в районе 1 ГГц). Запишем компоненты уравнения как гармонические сигналы:

$e_s\dot{x}+x\dot{e_s}=\dot{x}Bsin{\omega t}+x\omega Bcos{\omega t}$


Выбираем частоту достаточно высокую, чтобы $ x\omega\gg\dot{x}$:

$2\frac{\varepsilon S}{d^2}x\dot{e_s}=C_f\dot{e_4}$


Учитывая, что сигналы es и e4 имеют одинаковую частоту переходим к отношению их амплитуд:

$\mid\frac{e_4}{e_s}\mid=\frac{2\varepsilon S}{C_fd^2}x$


В итоге мы получили зависимость выходного сигнала усилителя от изменения положения обкладки конденсатора. Внимательный читатель должен сразу обратить внимание это же амплитудная модуляция! Действительно, в данной системе мы имеем сигнал x(t), который перемножается с сигналом $e_s(t)$ и усиливается на величину $\frac{2\varepsilon S}{C_fd^2}$. Следующий шаг убрать несущую частоту $e_s(t)$, и мы получим усиленный сигнал x(t) который пропорционален ускорению. Долгий путь вычислений привел нас к пониманию архитектуры МЭМС-акселерометра.

Архитектура МЭМС акселерометра


Рассмотрим сначала функциональную схему датчика:


Функциональная схема МЭМС-акселерометра

Изначально у нас есть сигнал x(t) который отражает изменение ускорения. Далее мы перемножаем его с несущим сигналом $e_s(t)$ и усиливаем с помощью операционного усилителя (в режиме интегратора). Далее происходит демодуляция простейшая схема диод и RC фильтр (в реальности используют усложненную схему, синхронизируя процесс модуляции и демодуляции одной несущей частотой $e_s(t)$). После чего остатки шума фильтруются с помощью фильтра низких частот.

В качестве примера приведу один из первых МЭМС акселерометров компании Analog Devices ADXL50:


Структурная схема ADXL50

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

  • Блок, который называется MEMS sensor является емкостным полумостом.
  • Блок oscillator генерирует сигнал на частоте 1ГГц.
  • Сигнал осциллятора также используется для синхронной демодуляции.
  • Выходной усилитель и дополнительные резисторы создают нулевую точку, относительно которой можно смотреть знак изменения ускорения (обычно это VDD/2- половина питания, для биполярных датчиков земля).
  • Внешняя емкость $C_1$ определяет полосу измерения системы.
  • Внутреннего фильтра низких частот в данной схеме нет, но в современных схемах они имеются.

Какой преобразователь выбрать для работы с датчиками?


Выбор преобразователя для работы с датчиками зависит от точности, которую вы хотите получить. Для работы с датчиками подойдут АЦП с архитектурой SAR или Delta-Sigma с высокой разрядностью. Однако современные датчики обладают встроенными преобразователями. Лидерами этого направления являются STMicroelectronics, Analog Devices и NXP. В качестве примера, можно привести новую микросхему с 3-х осевым акселерометром и встроенным АЦП ADXL362.


Структурная схема ADXL362

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

Где достать такие технологии?


Сейчас для fabless компаний доступно множество фабрик, которые предлагают технологии МЭМС. Однако для создания современных микросхем требуется интегрировать емкости с подвижными пластинами в стандартный маршрут проектирования, ведь помимо такой емкости необходимо спроектировать дополнительные блоки (генератор, демодулятор, ОУ и тд) на одном чипе. В качестве примера можно привести фабрики TSMC и XFab, которые предлагают технологию для реализации МЭМС датчика вместе со всей обвязкой. На картинке представлены емкости, которые позволяют создать трехосевой акселерометр:


Трехосевой емкостной полумост от TSMC

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


МЭМС-акселерометр разработки Совтест

Какие наработки есть у нашей компании в этом направлении?


У нас есть несколько преобразователей, которые предназначены для работы с датчиками. Из новых продуктов это:

  • 5101НВ035 16-канальный преобразователь на основе 8-ми Дельта-Сигма АЦП, предназначена для работы с токовыми датчиками
  • 1316НХ035 4-х канальный интегрирующий преобразователь напряжение-частота (ПНЧ), предназначенный для работы с 3-х осевыми акселерометрами и гироскопами.

Как я писал в предыдущей статье, период ожидания пластин с фабрики может занять довольно долгий промежуток времени. После первого тестового запуска АЦП 400МГц, время прихода пластин и дальнейших измерений заняло более полугода. За это время наша команда успела сделать ПНЧ 1316НХ035 (развитие предыдущей схемы 1316ПП1У), о котором могу немного рассказать.

Преобразователь напряжение-частота


Для преобразования данных с датчика обычно используются SAR или delta-sigma АЦП, однако существует еще один тип преобразователей интегрирующие ПНЧ, которые имеют существенные преимущества:

  1. Занимают меньшую площадь и имеет меньшее потребление при том же показателе линейности и шума.
  2. Простая архитектура.
  3. Высокая устойчивость к входному шуму и сигналам помех.
  4. Устойчивость к шуму и помехам выходного сигнала.
  5. Возможность передачи данных без обработки на радиочастотный канал связи.

Микросхема 1316НХ035 представляет собой четырехканальный преобразователь напряжения в частоту и цифровой код, к трем основным высокоточным каналам подключаются выходы трехосевого акселерометра. 4-ый канал имеет входной 4-канальный мультиплексор, к которому можно подключать дополнительные датчики системы: температуры, влажности и др. Под микроскопом схема выглядит так:


ПНЧ под микроскопом

Каждый из трех основных каналов преобразует входное напряжение в диапазоне 4В в частоту до 1250кГц на 3-х выходах, соответствующих положительному и отрицательному входным напряжениям. Также микросхема имеет в каждом канале 16 битный реверсивный счетчик, для подсчета частотных импульсов. SPI интерфейс служит для управления режимами преобразования и выборки содержимого счетчиков импульсов каналов. Основными требованиями к параметрам ПНЧ являлись:

  1. высокая термо и временная стабильность выходной частоты при нулевом входном сигнале (заземленных входах)
  2. динамический диапазон преобразования не менее 22 бит
  3. непрерывность преобразования входного сигнала и недопустимость потери ни одного частотного импульса.

Для обеспечения требований 1 и 2 используется аналоговая автокалибровка, которая выполняется автоматически при включении схемы, а также может запускаться в любой момент по команде через SPI интерфейс. Требование 3 обеспечено и гарантируется схемотехническими решениями. Удалось достичь довольно приличных параметров точности: типовая нелинейность преобразования составила 30 ppm, а смещение нуля менее 0.1 Hz при коэффициенте преобразования 200 kHz/V. Динамический диапазон преобразования: fmax/fmin = 2*1.25МГц / 0.3Гц 8.33млн., что соответствует более 23 битам.

Есть только одно но биполярное питание. Для обеспечения хорошей стабильности нуля (напряжение, которое соответствует ускорению 0g) необходимо использовать биполярное питание. Такое решение довольно эффективное ведь когда 0g соответсвует земля, система априори будет стабильной. Также это улучшает проектирование системы. В современных датчиках в качестве нуля используют половину питания Vdd/2, однако если значение напряжения на преобразователе будет отличаться от напряжения на датчике мы автоматически получаем смещение, которое нужно дополнительно калибровать.

Наверное, для многих потребителей биполярное напряжение немного отпугивает, и мы как разработчики это понимаем. Возможно, в дальнейшем сделаем коммерческий вариант для МЭМСов (или интегрируем датчик в ПНЧ). Пока, конечно, это всего лишь планы, но уверен они увидят свет.

P.S. Нашел бонусные фотографии с процесса исследования образцов. Вообще это, как по мне, самое интересное в процессе разработки. Тебе дают в руки твое детище с пылу жару с завода, ты подаешь на него питание и скрестив пальцы ждешь работает или нет?.


P.P.S. Кому понравилась тема датчиков, в будущем коллега из центра проектирования аппаратуры хотел бы рассказать про создаваемую инерциальную систему на основе МЭМС датчиков БИНС.
Подробнее..

RS485 стандарт промышленных сетей. Какими особенностями обладает микросхема приемопередатчика?

12.02.2021 10:14:08 | Автор: admin

При построении сети для общения между большим количеством устройств, можно задуматься: а какой интерфейс выбрать? У каждого интерфейса есть свои плюсы и минусы, которые определяют их применение: CAN автомобилестроение, RS485/RS232 промышленность, Ethernet потребительская электроника/сервера. Какие фичи микросхемы приёмопередатчика помогают обезопаситься от множества проблем при монтаже и эксплуатации? Как происходит процесс измерений и исследования микросхем приемопередатчиков? Новая микросхема RS485 готова к выходу на рынок!

RS485 что ты такое?


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



В RS-485 для передачи и приёма данных используется витая пара. Передача данных осуществляется с помощью дифференциальных сигналов, а это в свою очередь обеспечивает высокую устойчивость к синфазной помехе. Разница напряжений одной полярности означает логическую единицу, разница другой полярности означает логический ноль.


Устойчивость к синфазной помехе

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

На практике для реализации топологии RS485 нужны микросхемы приемо-передатчиков. При этом, разумеется, характеристики микросхемы должны полностью соответствовать требованиям стандарта.

По интерфейсу RS485 при организации сети микросхема, которая передает информацию называется Master, а которая принимает информацию Slave. Максимальное количество устройство в линии может быть 256.


Типовая схема применения микросхем приемо-передатчиков RS485

Для того, чтобы создать сеть на основе RS485 для микроконтроллеров, необходимо использовать дополнительную микросхему приемопередатчика. Микроконтроллер подключается к ней по протоколу UART после чего приемопередатчик начинает вещание.


Мы уже выпускаем серийно микросхему К5559ИН10БSI, но ввиду того как быстро увеличиваются объемы данных, которые передают контроллеры скорости 2.5Мбит уже не достаточно. Итак далее будем рассматривать нашу новую микросхему К5559ИН86SI теперь 30 Мбит. Возникает вопрос: зачем вообще тратить деньги на разработку данной схемы?

Новое поколение RS485 К5559ИН86SI



И правда, зачем выпускать микросхему, аналогов которой на рынке большое множество? Тут, наверное, можно выделить несколько причин:
  • Электросчетчики. Мы долгое время занимаемся разработкой счетчиков, и постепенно переходим на свою элементную базу (контроллер для счетчика). В большинстве счетчиков применяется микросхема RS485 предыдущего поколения К5559ИН10БSI, однако с каждым годом растут объемы передаваемых данных, поэтому необходимо повышать скорость приемопередатчиков.
  • Поддержка напряжения 3В. Постепенно 5-вольтовый стандарт теряет свою актуальность, и новые продукты уже разрабатываются с 3-вольтовыми приемопередатчиками. Этот переход дает существенные преимущества в потребляемой мощности и скорости передачи данных.
  • Pin to pin совместимость. Для выхода на коммерческий рынок мы разработали 2 основные стратегии: поиск маржинальных продуктов (подход детально описан в статье про АЦП) и совместимых по функционалу, выводам и характеристикам микросхем (pin to pin). Для того, чтобы не завязываться на одном потребителе, разработчики аппаратуры часто выбирают несколько совместимых микросхем. Такой подход дает несколько плюсов: независимость от поставщика и шанс удешевить свой продукт, выбрав микросхему по меньшей стоимости. Для микросхемы RS485 30Мбит есть множество аналогов (MAX14783EEUA, ST3485EB, ADM3490E, THVD14xx, и другие). Данный подход можно представить в виде мема:



Микросхема нового поколения приемопередачика RS485 выполнена в простом и дешевом 8-ми выводном пластиковом корпусе SO-8. Такое решение продиктовано потребностью выпуска микросхемы большими партиями с минимальной ценой.


Кристалл получился довольно маленький (1.3мм * 1.3мм), что позволит нам конкурировать в цене с сильными мира сего:


Более подробно о характеристиках микросхемы можно прочитать в спецификации. Сравним основные параметры К5559ИН86SI с зарубежными аналогами.

Сравнение параметров
Параметр К5559ИН86АSI MAX14783EEUA ST3485EB ADM3490E THVD14xx
Напряжение питания 3,05,5 В 3,05,5 В 33,6 В 33,6 В 3,05,5 В
Скорость передачи данных (макс.) 30 Мбит/с 30 Мбит/с 15 Мбит/с 12 Мбит/с 50 Мбит/с
Ток потребления в рабочем режиме 1,4 (макс. 2) мА 1,9 (макс. 4) мА 1,3 (макс. 2,2) мА 1,1 (макс. 2,2) мА 2,4 (макс. 3) мА
Ток потребления в режиме выкл. <2 мкА <10 мкА <1 мкА <10 мкА <1 мкА
Ток утечки по выводам AY, BZ 100...125 мкА 800...1000 мкА 800...1000 мкА 800...1000 мкА -100...125 мкА
Входное сопротивление приемника 96 кОм 12 кОм 24 кОм 12 кОм 96 кОм
Дифференциальное выходное напряжение >1,5 В >1,5 В >1,5 В >1,5 В >1,5 В
Расположение порога переключения приемника, В 0,2100,030 В 0,2000,010 В 0,2000,010 В 0,2000,010 В -0,25-0,05 В
Задержка распространения сигнала передатчика 25 нс 20 нс 30 нс 35 нс 20 нс
Время включения передатчика (приемник включен) 60 нс 30 нс 50 нс 90 нс 50 нс
Время включения передатчика (приемник выключен) 10 мкс 6 мкс 0,05 мкс 0,9 мкс 6 мкс


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

Защита от короткого замыкания


При организации сетей на базе RS485 возможна ситуация, когда передатчик вещает в линию, в которой устойчиво присутствует другой потенциал. Чаще всего такая ситуация встречается при одновременном вещании двух или более передатчиков. Что же будет с микросхемами передатчиков в таком включении? В принципе ничего хорошего. Рассмотрим на простом примере. Подключим напрямую два передатчика (берем только одно соединение для витой пары, для другой все будет тоже самое, но с инверсией): на выходе передатчика 1 будет потенциал +5В (питание), на выходе передатчика 2 будет 0 (Земля).



Транзисторы P1 и N2 будут открыты, и без наличия дополнительной защиты через них будет идти ток короткого замыкания, который будет ограничен только незначительными сопротивлениями самих транзисторов и проводника. Чаще всего в такой ситуации исход один тепловой пробой транзисторов или любимое всеми на хабре слово выгорание.


Угловой фрагмент фотографии кристалла (чипа) микросхемы RS485 неудачной ревизии

По стандарту RS485 напряжение в линии может быть от -7 Вольт до +12 В (это связано с тем, что земли микросхем могут находиться на довольно приличном друг от друга расстоянии более одного километра и разбежаться друг относительно друга). Худшая ситуация, то есть максимальные токи короткого замыкания, могут быть в том случае, когда передатчик вещает логическую единицу, а в линии устойчиво потенциал -7 В и вторая ситуация, когда передатчик вещает логический ноль, а в линии устойчиво потенциал 12 В.

Простейший способ обезопасить схему от КЗ добавить ограничивающие резисторы для каждого транзистора выходного буфера. Суть заключается в следующем: добавляем резисторы в систему, когда ток через них становится довольно приличным по закону Ома $\delta U\ =\ I\cdot R$ напряжение на резисторе начинает расти. Когда $\delta U$ становится равным порогу срабатывания транзистора (на картинке ниже Pfb и Nfb), включается обратная связь, и ток КЗ уходит в насыщение. В одной ревизии мы так и сделали, но это оказался еще тот фейл



Из-за того, что в цепи напряжение может быть выше питания, появляется обратный ток. Если бы система питалась от внешнего источника, он мог бы подавить это напряжение, но он питался от внутреннего LDO (линейный регулятор напряжения). Обратный ток повышал напряжение LDO, и схема сгорала. Решение, которое было придумано, выглядит следующим образом:



Источники опорного тока задают ток через транзисторы N3 и P3. Схема токового зеркала определяет максимальный ток, который может проходить через транзисторы N2 и P2, тем самым ограничивает как прямой ток КЗ, так и обратный. Решение получилось рабочим по моделированию, теперь осталось протестировать в железе.

Переходим к измерениям. Нам понадобится источник питания, точный источник-измеритель Keithley2602А и ПО, позволяющее управлять источником-измерителем и снимать ВАХ. Для автоматизации измерений нашими application инженерами был разработан матричный коммутатор, который позволяет автоматически переключать источник-измеритель к различным выводам микросхемы. Для общения с приборами используем LabView.



На коммутаторе остановимся отдельно, естественно, есть зарубежные аналоги, но конкретно данный экземпляр коммутатора 64х8 собственная разработка нашей команды измерителей, с упором на их каждодневные задачи, позволяет коммутировать 64 вывода микросхемы на 8 каналов (к которым можно подключить какое-либо оборудование), избавляя от действий руками перед каждым измерением.

Ну и конечно же сам измерительный прибор:



Итого, получаем следующие ВАХ (Вольт-Амперные-Характеристики) для выхода передатчика:



Из ВАХ мы видим следующее: в худших случаях при устойчивых потенциалах в линии -7 В или 12 В, ток микросхемы ограничен примерно на уровне 90 мА.

Транзисторы микросхемы при коротком замыкании (при потенциале в линии) не разрушаются! Защита от короткого замыкания работает проверено.

Однако если подержать в режиме КЗ какое-то время (около 2-х минут), то сработает следующая фича термозащита и схема выключится.

Встроенная термозащита


Защита от перегрева встроена почти во все зарубежные микросхемы приемопередатчиков RS485 и является неотъемлемой функциональной частью схемы. При повышенной температуре параметры транзисторов начинают деградировать, а при токе короткого замыкания разогрев неизбежен и важно вовремя перевести микросхему в выключенное состояние.

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

Гарантированный диапазон температур, в котором должна функционировать микросхема: 40+85 С.

В К5559ИН86АSI порог срабатывания термодатчика расположен в районе температуры 165 С при достижении этого значения произойдет выключение микросхемы. Но это речь о температуре кристалла, а не корпуса, цифра 165 С также не случайна: при такой температуре кристалл стопроцентно не получит повреждений и продолжит функционировать после остывания. Рабочий же диапазон температур в документации приводится относительно температуры среды, да и, справедливости ради, ее проще контролировать.

Проверка работы микросхемы в температуре происходила при помощи испытательной камеры тепла и холода SU-262. Камера позволяет задать температуру от 60 С до 150 С.


Испытательная камера тепла и холода вид снаружи


Испытательная камера тепла и холода вид внутри

В процессе измерений нужно проверить следующее: какой запас по температуре есть у кристалла в рабочем режиме?

Подключаем генератор ко входу микросхемы, и смотрим сигнал выхода. При данном тесте температура внешней среды меняется в диапазоне 60 С до 125 С. Итого на выходе передатчика видим следующую осциллограмму:


Осциллограмма: DI информационный входной сигнал передачика, AY, BY выходные сигналы передатчика, RO выходной сигнал приёмника.

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

Практически во всех микросхемах существует ESD защита (защита от электростатических разрядов). В простейшем случае представляет из себя 2 диода, используемых в обратном включении (один на землю, другой на питание). Воспользуемся тем свойством, что физика полупроводников такова, что напряжение падения на диоде (pn-переходе) зависит от температуры. Используем следующую схему включения:


Используем ту же камеру тепла и холода. Задача стоит следующая: построить зависимость напряжения на диоде от температуры, что поможет вычислить температурный коэффициент. Режим измерения производился с выключенной схемой, которая исключает саморазогрев, то есть позволяет нам откалибровать шкалу:
  • Питание на микросхему не подается (VDD = 0)
  • К цифровому выводу DI подключаем источник тока 10мкА

Итого получаем следующую зависимость:


Получено следующее значение температурного коэффициента напряжения: 1,78мВ/С.
Откалибровав шкалу, можно перейти к оценке разогрева микросхемы внутри пластиково корпуса в рабочем режиме при штатных нагрузках и в случае короткого замыкания выходных каскадов. Режим измерения, следующий:
  • напряжения питания 5,5 В (VDD = 5,5 В)
  • вывод nRE низкий уровень, вывод DE высокий уровень;
  • тестируемый вывод DI;
  • установленный на источнике ток диода 10 мкА (Idiode=10 мкА);
  • нагрузка 54 Ома.

Наверное, знающие люди скажут: зачем такие извращения и почему нельзя заложить было в схему специальный тестовый режим для измерения температуры, однако именно такой подход позволил нам сравнить нашу микросхему с аналогом MAX1478 (ведь для нас это черный ящик):

Температура окружающей среды, С Температура на кристалле, С
К5559ИН86АSI MAX1478
35 52,21 53,82
85 100,16 108,1
100 126,04 124,24

Вывод-1: кристалл нагревается в рабочем режиме на 26 С при температуре внешней среды 100 градусов. Порог срабатывания термозащиты (165 С) еще далеко.
Вывод-2: в режиме короткого замыкания термозащита срабатывает, по имеющимся измерениям уже при 55 С внешней среды, но микросхема не выходит из строя и через некоторое время после того, как она охлаждается может снова функционировать.

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

Заключение


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

P.S. Образцы микросхемы можно получить бесплатно, оставив заявку на сайте. Да-да только ленивый нас еще не пнул за то, как все туго с заказами для обычных пользователей. Мы все читаем, и понимаем на сколько это важно. В будущем будет улучшаться наш сайт, для упрощения заказа коммерческих микросхем и отладочных плат.
Подробнее..

Как реверс-инжиниринг чужой инерциальной навигационной системы перерос в свою собственную разработку

19.03.2021 10:13:30 | Автор: admin

Сегодня, благодаря MEMS-датчикам, инженеры начинают использовать инерциальные навигационные системы везде, где есть движение. В зависимости от требуемой точности как по углу, так и по координатам, применяют МЕМS-датчики разного уровня цены и интегрированности: от "все датчики в одной микросхеме" до "один датчик - одна микросхема". А сама инерциальная навигация, как часть инженерных систем, впервые появилась в торпедах, кораблях, ракетах и самолетах.

Вступление

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

- Прежде всего, снижение стоимости микропроцессоров и микроконтроллеров, а также рост их вычислительной мощности;

- Появление и распространение аккумуляторов с удельной энергоемкостью 150250 Вт*ч/кг, литий-ионных и литий-полимерных;

- Широкое распространение вентильных (бесколлекторных) электродвигателей, скоростью вращения которых можно управлять в широком диапазоне от нуля до нескольких тысяч оборотов в минуту без применения механических редукторов;

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

- Широкое распространение инерциальных систем, построенных на микроэлектромеханических (МЭМС) сенсорах: датчиках угловой скорости (ДУС), акселерометрах, магнитометрах и датчиках давления. Про инерциальные навигационные системы мы и поговорим.

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

Механическая конструкция с кардановым подвесом была известна еще в Византии и в Китае. А использование ее для навигации было предложено французским ученым Фуко, он же придумал название гироскоп.

Главное свойство карданова подвеса состоит в том, что если в него закрепить вращающееся тело, то оно будет сохранять направление оси вращения независимо от ориентации самого подвеса. Таким образом, передвигающийся объект, на котором закреплен гироскоп, может постоянно наблюдать свое первоначальное угловое положение в пространстве.

Прототип карданова подвесаПрототип карданова подвеса

Первые серийные навигационные приборы, основанные на гироскопах, появились в самом конце 19-го века на морских судах, подлодках и торпедах. На судах это были гирокомпасы, позволяющие определять направление на север вне зависимости от текущей широты, в отличие от магнитных компасов, которые в высоких широтах (близких к полюсам Земли) не работают из-за больших возмущений магнитного поля Земли.

В авиации навигация - еще более насущный вопрос, поэтому приборы на основе гироскопов стали применять и там. Например, на русском самолете Илья Муромец (1917 год) использовался гироскопический указатель поворотов, что позволяло сохранять направление при пилотировании вслепую в облаках. Первый известный автопилот с более масштабным использованием гироскопов стоял на ракете Фау-2, где применены гировертикаль (ракета с вертикальным стартом с земли), гирогоризонт и измеритель скоростей. С увеличением времени и дальности полета ракет и самолетов совершенствовались и системы навигации с непременным использованием гироскопов.

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

Любая ИНС имеет в своём составе датчики линейного кажущегося ускорения (акселерометры) и гироскопы (или ДУС). С помощью интегрирования их данных определяется отклонение связанной с корпусом объекта системы координат относительно системы координат, связанной с Землёй, выражаемое в углах ориентации: курсе, тангаже и крене, также определяются отклонения координат (широта, долгота и высота) относительно референц-эллипсоида Земли при условии задания исходных координат перед началом счисления. Получается, что алгоритмически ИНС состоит из курсовертикали и системы определения координат, но тем не менее эти подсистемы не независимы.

Изначально инерциальные навигационные системы были только платформенными (далее ПИНС). Что такое гиростабилизированная платформа? Для стабилизации датчиков в пространстве используется такая гироплатформа, которая физически реализует опорную систему координат на движущемся объекте. Гироплатформа имеет минимум 3 вращательные степени свободы относительно объекта, которые обеспечивают сохранение платформе неизменного углового положения в пространстве при угловых эволюциях. Гироплатформы бывают 2 типов:

- с тремя гироскопами, которые имеют 2 степени свободы каждый;

- с двумя гироскопами, которые имеют 3 степени свободы каждый.

Гироплатформа с тремя гироскопами: на платформе установлены два гироскопа с вертикальными осями прецессии и один с горизонтальной осью, здесь же установлены 3 акселерометраГироплатформа с тремя гироскопами: на платформе установлены два гироскопа с вертикальными осями прецессии и один с горизонтальной осью, здесь же установлены 3 акселерометра

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

В ПИНС геометрического типа координаты местоположения объекта определяются углами, которые образует физически реализованная ось местной вертикали с материализованными гироплатформой, осями и плоскостями навигационной системы координат. Эти углы измеряются соответствующими датчиками. Т.е. в наличии две платформы одна материализует навигационную систему, другая горизонтированную систему координат.

В ПИНС аналитического типа гироплатформа материализует (при околоземной навигации) навигационную систему координат с обеспечением учета вращения Земли, местная вертикаль определяется аналитически. Координаты объекта получаются в вычислителе, в котором обрабатываются сигналы, снимаемые с акселерометров и устройств, определяющих поворот самого объекта относительно гироскопов и акселерометров.

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

А вот в бесплатформенной ИНС акселерометры и гироскопы (или ДУС) жестко связаны с корпусом прибора. Гироплатформа отсутствует, что сразу снижает массу и объем такой ИНС. Все системы координат существуют только в вычислителе, без механической материализации.

Если раньше любая инерциальная навигационная система (ИНС) занимала не менее 10 литров и имела соответствующую массу, то сейчас набор датчиков для такой ИНС может заключаться в одной-единственной микросхеме (3 гироскопа, 3 акселерометра и может быть также встроен трехосевой магнитометр) размером с человеческий ноготь.

Пример старого свободного гироскопа с индукционным датчиком углаПример старого свободного гироскопа с индукционным датчиком угла

Такие инерциальные MEMS-модули очень привлекательны для применения в разных устройствах (не только в коптерах): цена не превышает 1000 руб. в рознице, интерфейс взаимодействия I2C или SPI, в микросхему встроен датчик температуры, можно на ходу менять максимальный измеряемый размах угловой скорости и кажущегося ускорения. Для более серьезных применений набор MEMS-датчиков с вычислителем заключены в модуль объемом 0,1..0,3 литра, где каждый гироскоп и акселерометр выполнен в отдельной микросхеме.

Однако по точности измерения угловой скорости инерциальные модули общего применения на основе MEMS-датчиков сильно проигрывают подавляющему большинству тех старых инерциальных систем. Наиболее важный показатель, влияющий на погрешность определения координат в БИНС (ошибка по координате, обусловленная им, растет быстрее, чем в третьей степени от времени) это исходное смещение ноля и зависимость этого смещения от температуры для датчика угловых скоростей (ДУС).

В таблице приведены интересующие нас параметры для характерных современных устройств.

MPU-9250, BMI0556, ICM-20689 и другие подобные микросхемы фирм Bosch, Invensense или STMicroelectronics используются в современных полетных контроллерах для любительских беспилотных коптеров и самолетов. Это, например, контроллеры PixHawk, Naza и другие, чуть более высокого или низкого класса по функциональным и ценовым характеристикам. Все они применяются на беспилотниках класса для хобби или околопрофессионального полетов для наблюдений с помощью камеры на небольшие расстояния и время. Работа полетных контроллеров с подобными ИНС без постоянного комплексирования с данными от приемника GPS\ГЛОНАСС в таких режимах как зависание на точке, возврат на точку старта или автоматический полет по координатным точкам немыслима. Кроме этого, у них есть и другие особенности, которые иногда могут затруднять их использование, а иногда и приводить к авариям: ухудшение стабильности на температурах ниже 510 C, влияние вибраций от работы винтов на отработку углов горизонта, нестабильность определения истинного курса, возникновение toilet bowling (унитазинг, самопроизвольные круговые движения коптера по возрастающему радиусу).

Однако все это недопустимо при применении в коммерческих целях, при массе БПЛА до 30 кг, и более. Кстати, 30 кг это, по измененным законам РФ, максимальная масса беспилотного воздушного судна, которое можно эксплуатировать без согласования с диспетчерскими службами использования воздушного пространства, с некоторыми дополнительными ограничениями.

В общем, если говорить о промышленных или сельскохозяйственных дронах, таких как DJI Agras T20 или DJI серии Matrice c временем полета до 40-50 минут и стоимостью в районе одного миллиона рублей, то здесь требуются более надежные и точные ИНС. Тем более, что при таких массах остро стоит вопрос безаварийности не только в смысле сохранения дрона, но и, что куда важнее, в смысле безопасности окружающих людей. Да и потом, не следует забывать про развитие и распространение всяких приборов и устройств, подавляющих радиосигналы, используемые дроном для управления и навигации. А эти приборы впоследствии могут использовать не только госслужбы.

На снимке захват подразделением силовиков дрона DJI Mavic 2 Pro в Москве на митинге 10 августа 2019 году с помощью электромагнитной пушкиНа снимке захват подразделением силовиков дрона DJI Mavic 2 Pro в Москве на митинге 10 августа 2019 году с помощью электромагнитной пушки

Когда в Миландре появилась необходимость использовать инерциальную навигационную систему в собственной разработке, то выбор такой системы проходил по принципу максимальной точности при достаточной миниатюрности. По сути, выбирался инерциальный модуль на основе MEMS c наилучшими характеристиками. Вопрос цены не стоял остро, так как предполагалось первичное применение в прототипе устройства. Выбор пал на модуль ADIS16480 от Аnalog Devices, на тот момент это был лучший вариант среди имеющихся в свободной продаже. Данный модуль является курсовертикалью, в состав которой входят: ДУСы, акселерометры, трехосевой магнитометр и датчик давления (бародатчик). Выходные данные угловые скорости, кажущиеся ускорения, углы Эйлера относительно горизонта и истинный курс (магнитный курс с учетом заданного склонения), а также соответствующий этим углам кватернион (или, взамен углов и кватерниона матрица ориентации). Для коррекции углов используется калмановская фильтрация с применением данных от акселерометров и магнитометра. Также в модуле присутствует возможность подвергать цифровой фильтрации сырые данные угловых скоростей и кажущихся ускорений.

Однако, начиная с некоторого момента, из-за введенных санкций правительства США данный модуль перестал быть доступным в продаже в России. И было принято решение разработать собственный аналог.

Реверс-инжиниринг ADIS16480

По результатам вскрытия

ADIS16480 со снятой крышкойADIS16480 со снятой крышкой

выявлен состав данного модуля и некоторые его схемотехнические особенности. Модуль выполнен в виде гибко-жесткой платы, на основе процессора Blackfin ADSP-BF512, также в нем есть 4 АЦП AD7689BCPZ, датчик давления MS560702BA03-00, магнитометр HMC1043, 6 двухосевых акселерометров AD22037Z и по несколько ДУС в каждой из 3 осей.

Наше устройство по набору датчиков похоже на устройство Analog Devices и выполнено на собственном цифровом сигнальном процессоре К1986ВН04BG. Однако функционально мы его расширили.

Бесплатформенная инерциальная навигационная система МиландрБесплатформенная инерциальная навигационная система Миландр

Прежде всего, это уже не только курсовертикаль, но целая бесплатформенная инерциальная навигационная система (БИНС). В режиме БИНС дополнительно к информации, выдаваемой в режиме курсовертикали, выдаются следующие данные:

- текущие географические координаты объекта (широта, долгота и высота над референц-эллипсоидом) в системе координат ПЗ-90.02;

- вектор скорости объекта относительно Земли в проекциях на северную, восточную и вертикальную оси.

Для того, чтобы модуль работал в режиме БИНС, необходимо при включении передать в него начальные координаты относительно Земли: широту, долготу и высоту над референц-эллипсоидом. С этого момента начинается интегрирование показаний датчиков и счисление координат, скоростей и углов ориентации. Кроме того, знание текущих координат позволяет включить в алгоритм курсовертикали учёт вращения Земли. Таким образом, в отличие от ADIS16480, наш инерциальный навигационный модуль может работать не только в режиме курсовертикали, но и как полноценная инерциальная навигационная система. Курсовертикаль обеспечивает счисление ориентации, точность которой непосредственно влияет на точность счисления координат так, часто характеристикой точности инерциальных систем для самолётов является погрешность в формате ухода координат миль в час.

Также, в отличие от ADIS16480, в нашу БИНС добавлена возможность записи телеметрической информации на microSD-карту, которая оперативно снимается и устанавливается без вскрытия корпуса. Можно сказать, что в наш модуль введена функция черного ящика.

Разработка алгоритмов и математики, а также математическое моделирование

Алгоритм ориентации основан на использовании кватернионов и матриц ориентации, с предварительным интегрированием сырых данных ДУС и акселерометров. В расчетах используются константы Параметров Земли 1990 года (ПЗ-90.02).

В алгоритмах фильтрации и комплексирования вместо N-мерного фильтра Калмана используется система алгоритмов субоптимальной фильтрации, основанных на линейных моделях ошибок датчиков ДУС, акселерометров, магнитометров и бародатчика: инклинометрический, бароинерциальный и гиромагнитный фильтры. Все фильтры собственной разработки, использующие известные математические модели, основанные на решении линейных дифференциальных уравнений.

Иклинометрические фильтры необходимы для начальной выставки углов в горизонте, определения и коррекции дрейфов и углов тангажа и крена при малой возмущенности объекта движения. Принцип их работы заключается в оценке ошибок величин углов тангажа и крена, счисленных по данным ДУСов, и оценке величин дрейфов самих ДУСов, путем обработки данных от акселерометров.

Бароинерциальный фильтр используется для коррекции текущей высоты и вертикальной скорости БИНС по данным бародатчика. Также основан на линейном дифференциальном уравнении.

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

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

В оригинальном приборе используется адаптивный расширенный фильтр Калмана. Этот фильтр оценивает угловую ориентацию, используя комбинацию информации ДУС, акселерометров и магнитометров. Акселерометры обеспечивают угловые измерения по отношению к гравитации Земли. Магнитометры обеспечивают угловые измерения, основываясь на измерениях магнитного поля Земли. В мануале от Analog Devices есть отдельные рекомендации для настройки точности в статике и отдельно для динамики, эти настройки задаются записью в память ADIS16480 данных по ковариации акселерометров и магнитометра, а также уровня шума и дрейфа ДУС. В общем случае эти настройки требуют дополнительного анализа модели движения объекта, на котором устанавливается курсовертикаль, а также специального испытательного оборудования. При использовании ADIS16480 c заводскими настройками при совместных испытаниях с нашим модулем он показал неудовлетворительные результаты, однако эти настройки позволяли сохранять устойчивость работы фильтра даже при сильных вибрациях.

Прежде чем использовать математику и алгоритмы в железе, все это было проверено при помощи математического моделирования. В математическую модель, кроме математики и алгоритмов навигации, были заведены: достаточно простая модель ошибок датчиков (в том числе ненули, гауссовский шум, размах измерения, разрядность АЦП и др.), параметры объекта движения (масса, коэффициент лобового сопротивления, площадь лобовой проекции). Траекторией для моделирования являлось движение по замкнутой линии типа коробочка, т.е., по сути, по квадрату, где координаты начала движения и его окончания совпадают. Сначала моделирование проводилось на чистом (невозмущенном) движении, а потом и при воздействии вибрации:

- синусоидального сигнала в канале ДУС частотой 10 Гц и амплитудой 5 гр/с.;

- синусоидального сигнала в канале ДУС частотой 50 Гц и амплитудой 4 гр/с.;

- синусоидального сигнала в канале ДУС частотой 500 Гц и амплитудой 3 гр/с.;

- синусоидального сигнала в канале ДУС частотой 1000 Гц и амплитудой 2 гр/с.

Отдельным любопытным экспериментом было моделирование работы наших алгоритмов при подаче на их вход реальных сырых данных датчиков ADIS16480, которые были записаны в телеметрию в ходе полетов БПЛА.

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

Разработка и отладка программно-математического обеспечения в среде CM-Lynx и ОСРВ MACS

Разработка и отладка ПМО велась в проприетарной среде Миландра CM-Lynx. Все ПМО написано на C/C++ с редкими вкраплениями ассемблера.

В алгоритмически сложной, насыщенной взаимодействиями с разнородной аппаратурой программной системе реального времени нельзя, разумеется, обойтись без использования соответствующей операционной системы. В нашем модуле применена ОСРВ MACS. В частности, работа ПО модуля существенно опирается на такие ее функциональные возможности, как:

- Вытесняющий алгоритм планирования на основе приоритетов;

- Стандартные средства синхронизации потоков:

Мьютексы,

Семафоры,

События,

- Средства для организации межпоточного информационного обмена (очереди сообщений).

Нужно признаться, что в данном случае, при применении нашего же ЦСП K1967ВН04BG выбора не было ни в среде, ни в ОСРВ. Не без некоторых трудностей, но проект был завершен, отлажен и стал живым организмом.

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

ЦСП 1967ВН04BG работает с тактовой частотой 200 МГц (при максимально возможной 230). Ядро процессора содержит два вычислительных устройства, называемых вычислительными модулями. Каждый вычислительный модуль содержит регистровый файл и четыре независимых вычислительных блока: ALU, CLU, умножитель и сдвиговое устройство. Вычислительные блоки способны обрабатывать данные в нескольких форматах представления с фиксированной и плавающей точкой. Форматы данных с плавающей точкой: 32-битное обычное слово (float); 64-битное двойное слово (double); 40-битное расширенное слово. Операции с плавающей точкой выполняются с одинарной, двойной и расширенной точностью, и все эти возможности реализованы аппаратно. Кроме того, у процессора развитая периферия: 3 канала интерфейса SPI, 2 канала UART, 2 резервированных канала магистрального интерфейса ГОСТ52070-2003 (МКИО), интерфейс ARINC, содержащий в своем составе восемь приемников и четыре передатчика по ГОСТ 18977-79 и некоторые другие интерфейсы, а также множество каналов DMA.

Испытания

Испытания проводились в основном на квадрокоптере.

Установка 2-х инерциальных систем на квадрокоптере при проведении сравнительных испытанийУстановка 2-х инерциальных систем на квадрокоптере при проведении сравнительных испытаний

В каждом испытании два модуля (наш и ADIS16480) были жестко закреплены друг относительно друга, и их соответствующие измерительные оси были коллинеарны c допуском 34 угловых градуса. Все испытательные включения происходили также одновременно, при этом в качестве эталона использовались данные географических координат и скоростей, получаемые от приемника спутникового навигационного сигнала. Еще одной опорой для анализа являлось то, что начальные и конечные координаты и угловые положения аппарата совпадают с визуальной точностью. На основе данных о географических скоростях от приемника спутникового навигационного сигнала (при достаточно интенсивном движении) мы получали данные об истинном курсе на траектории движения без учета так называемого угла сноса. Была специально выбрана траектория движения коробочка, где направление движения каждого участка этой коробочки максимально совпадало с направлением на одну из сторон света: север, юг, восток или запад, путевая скорость составляла при этом 36 км/ч. Наш модуль производил счисления координат и углов в чисто автономном режиме (без поддержки от приемника сигнала GPS/ГЛОНАСС).

Результаты испытаний одного из лётных дней в декабре 2020-го годаРезультаты испытаний одного из лётных дней в декабре 2020-го года

Здесь первые три верхних графика углы, счисленные ADIS16480, три нижних счисленные нашим БИНС. На участках прямолинейного движения заметно, как накапливается ошибка углов тангажа и крена ADIS16480, либо наоборот, они как бы медленно приближаются к истинному. Т.е. характеристики этих углов ADIS 16480 не в полной мере соответствуют физике полета квадрокоптера. При этом те же углы БИНС адекватно соответствуют этой физике.

Частота обсчета углов и координат - 1000 Гц. Температура воздуха -8 С. Приведенные в таблице максимальные ускорения, полученные по данным нашего модуля, во всех осях достаточно велики, при этом зарегистрированные по данным ADIS16480 максимальные ускорения не превышали 45 м/с2 по оси Y, а по остальным осям составляли менее 25 м/с2. Это объясняется расположением испытуемого нашего модуля БИНС, который имел приличное отстояние от центра масс коптера, когда как расположение ADIS16480 практически совпадало с этим центром масс. То же можно сказать и об угловых скоростях максимальная угловая скорость у ADIS16480 по сути не превышает 100 гр/с.

Заключение

Проект по разработке собственной бесплатформенной инерциальной навигационной системы можно считать удачным. Мы пошли дальше простого повторения курсовертикали на замену ADIS16480. В данный момент изготавливаются несколько таких модулей в вариантах исполнения с диапазонами измерения ДУС: 450 и 250 гр/с.; и с диапазонами измерения по акселерометрам: 2, 5 и 10g. Предполагается испытать их не только на квадрокоптере, но и на других беспилотниках, и на самолете Як-12. Есть версия для автомобиля, с урезанным количеством датчиков и диапазоном их измерения. Также в плане разработка собственного полетного контроллера для БПЛА ответственного применения коптеров и конвертопланов.

Подробнее..

Раскрашиваем таможенную статистику. Или сколько и каких микросхем ввозят в Россию?

06.05.2021 20:17:21 | Автор: admin

Когда в 2008 году мы разрабатывали микроконтроллеры серии К1986ВЕ9х стояло множество вопросов. Сколько должно быть Flash? сколько ОЗУ? сколько ног? какие интерфейсы? и так далее. И хотя в тот момент просто сделать рабочую микросхему уже было бы уже успехом, мы смогли сделать ее так, что данная серия до сих пор востребована и объемы ее продаж растут. Отчасти именно по тому, что тогда задали эти вопросы и ответы на них позволили сделать сбалансированное решение. В 2021 году аналогичные вопросы все так же стоят перед нашей компаний, и даже шире. Например, что лучше сделать в условиях ограниченных ресурсов: малопотребляющий микроконтроллер или миниатюрную Flash или источник питания, и если источник питания, то какой ? Как мы искали ответы на эти вопросы в 2008 году и как мы их ищем сейчас читайте в этой статье.

Начало пути - 2008 год

Как же мы ответили на эти вопросы в 2008? Маркетинговые исследования, высокооплачиваемые консультанты, эксперты, аналитические справки, жизненный опыт? Нет, все это не работает. Точнее не работало в 2008 году, все носило субъективный характер, и аргументировалось только словами. Потому что не было никаких данных. Никто не мог сказать, сколько и какие микросхем ввозят в страну или сколько их вообще потребляют в мире. Многие предприятия даже не имели своей внутренней базы данных по используемой номенклатуре. Продавцы не раскрывали свои продажи. Ничего не было, что бы указывало на штуки. Поэтому было принято решение как всегда опереться на опыт иностранных аналогов. Наверное все же маркетологи STM, NXP и прочих Renesas лучше "чувствуют" рынок, чем мы. И хотя они так же не за что не скажут сколько и каких микросхем продают, но по популярности (а значит и массовости) микросхемы можно судить опираясь на многообразие представленной на рынке номенклатуры. Т.е. чем больше различных вариантов микроконтроллера с одним объемом Flash памяти от нескольких производителей, тем больше емкость рынка и значит микроконтроллер с этим объемом будет более востребован. Если среди всех 32-х битных микроконтроллеров больше всего номиналов с ~100 ногами, то именно 100 выводов - это то число которое наиболее востребовано разработчиками аппаратуры. Для проведения анализа были проанализированы сайты ведущих разработчиков микроконтроллеров - TI, STM, NXP, Renesas, Microchip и уже не существующий сейчас EnergyMicro. Через формы для поиска компонент задавали требуемый нам параметр, например объема Flash (16К, 32К, 64К и так далее) и считали сколько номиналов нам выдавал производитель, собирали и анализировали.

Что же получилось по объему Flash в 2008 году ?

STMSTMNXPNXPEnergyMicroEnergyMicroTI (+Luminary их как раз тогда купили) TI (+Luminary их как раз тогда купили) MicrochipMicrochipRenesasRenesas

Ну и в целом по отрасли

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

Еще раз, это означает не то что микроконтроллеров с 256КБ продавалось больше всего (у нас не было в 2008 году данных об объемах продаж), но это означает что больше всего предлагается разных номиналов микроконтроллеров с 256КБ. И скорее всего раз их больше всего предлагается, то и объем рынка для них самый большой. Конечно же в данном методе множество изъянов (один и тот же номинал может иметь разные градации по температурным диапазонам, и это будет учитываться как разные номиналы) Но что есть, то есть. Аналогично провели исследование по числу выводов корпуса.

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

По объему ОЗУ и другим параметрам.

Объем ОЗУ в микроконтроллерахОбъем ОЗУ в микроконтроллерах

И хотя не все полученные результаты были реализованы, но на их основании были сформулировали требования по характеристикам для серии К1986ВЕ9х. А так же я решил, что второй раз в рукопашную собирать данные я не буду, и у нас есть компьютеры - пусть они и считают.

Наше время. Big Data

Потом было много чего... Вывод на рынок, исправление ошибок, новые проекты, митинги, планы, импортозамещение, совещания в министерствах, пандемия, короновирус, ВКС-ы ну и как вишенка на торте - кризис дефицита микросхем на мировом рынке в 2021 году.

Все это время мы собирали данные. Многие предприятия уже более охотно делились свой базой применяемой ЭКБ импортного производства, кто то реально выполнял программу импотозамещения, кого то заставляла власть. Появилась статистика ФТС по импорту ЭКБ и множество других данных, в которых уже фигурируют реальные объемы потребления микросхем в штуках и деньгах. Политика Минпромторга РФ в части преференций для отечественной продукции подтолкнул многих гражданских разработчиков взглянуть на отечественные микросхемы, а дефицит микросхем, который возник в начале 2021 года заставил уже реально задуматься о переходе на них:

То о чем мы мечтали в 2008 году обернулось кошмарным сном в 2021. Нам стали приходить экселевские выгрузки из сотен и тысяч наименований иностранных микросхем с просьбой подсказать аналоги, а для этого нужно:
- в интернете найти документацию на иностранную микросхему;
- прочитать и понять ее назначение;
- определить основные ее параметры;
- выбрать наше решение максимально приближенное;
- привести как близкий аналог с указанием основных отличий.

И это еще хорошо, если это микроконтроллер или память. А что такое актуатор ? В общем кругозор растет в геометрической прогрессии. Но мы продолжаем это делать, так как именно эти знания дают понимание, что нужно делать и куда развиваться. Но как уже было сказано ранее - эту замечательную работу может работать компьютер, а не человек. Поэтому нами был разработан функционал по автоматическому выделению назначение и основных параметров для микросхем на основе ее наименования. И сразу же возникла мысль, а что если "разобрать" не список закупок какого либо предприятия, а сразу все ввезенные через таможню иностранные микросхемы? И сегодня мы попробуем "расскрасить" таможенную статистику за 2019 год. Скажу сразу, что результат получился не очень полноценный. В абсолютном большинстве ввозимых микросхем не указано наименование. Например один из крупнейших производителей RFID меток ввез около 80 млн микросхем NXP с ценой около 3 рублей за штуку с названием "Микросхема интегральная". Так же множество дискретных компонент (транзисторы, диоды...) попали в код микросхем. Они дают большой прирост в штуках, но практически никакой в стоимости. После всех вычисток и все же небольшого ручного труда (самые большие позиции по стоимости и по штукам которые не нашлись автоматически и были все же пробиты по интернету) мы получили базу данных по ввезенным микросхемам в 2019 год из 18 тыс. номиналов с общим числом микросхем 85 млн и на общую сумму 45 млн $. В общей сложности мы смогли распознать 82% по штукам и 75% по стоимости. Мы получили занимательную статистику, которая дала много пищи для размышления.
Общее распределение по типам микросхем выглядит следующим образом:

Больше всего привезено микросхем используемых в схемах питания (линейные регуляторы, DC-DC, AC-DC, источники опорного напряжения, пред-драйверы, силовые ключи, драйверы светодиодов и т.п.) - около 46 млн штук. Далее идут не распознанные микросхемы - 15 млн.
На третьем месте простые логические схемы (регистры, счетчики, триггеры, вентели и т.п.) - более 11 млн штук. На четвертом месте по количеству интерфейсные схемы (RS-485, RS-232, USB, Ethernet и так далее) - всего более 8 млн. Вслед за ними простые аналоговые схемы (усилители, компараторы, мультиплексоры) - более 1,7 млн штук. От микроконтроллеров и микропроцессоров я ожидал большего, но их всего нашлось 1,3 млн. Скорее всего микроконтроллеры возят по "серым" каналам. Ну и далее АЦП/ЦАП - 391 тыс, тактовые генераторы - 352 тыс, схем памяти - всего 133 тысячи (опять таки "серые" каналы) и схемы программируемой логики FPGA/CPLD - 89 тыс.

Как распределяется таможенная стоимость по этим же классам можно увидеть на следующем рисунке:

На первом месте по стоимости - Прочие (нераспознанные схемы), на втором схемы питания - более 10 млн $ - но это за счет стоимости, на третьем месте - FPGA/CPLD - с более 8 млн $, при том что их ввезли меньше всего в штуках.

Если вычислить удельную стоимость одной микросхемы, то получим следующую картину

Самые маржинальные - FPGA/CPLD, на втором месте идут схемы АЦП/ЦАП, на третьем микроконтроллеры/микропроцессоры и на четвертом месте схемы памяти. "Где вы видели такие цены?" - воскликнут многие читатели. Это не ко мне, это к таможне. Но если вы решились заняться разработкой микросхем, то делать нужно программируемую логику.

Кто популярней Xilinx или Altera ?

Победила Altera, хотя мне более симпатичен Xilinx. А вот по стоимости лидирует Xilinx.

Интересно что остальные производители тоже показали высокую стоимость, но секрет прост - это за счет китайских радиационно стойких FPGA, которые кстати клоны Xilinx.

Если интересно какая логическая емкость наиболее популярная, то будет большим сюрпризом, что более 50% всех программируемых логических матриц составляют CPLD - т.е. схемы малой емкости до 10К логических блоков (примерно до 100К вентилей).

Больше всего используется совсем маленьких схем (EPM240, XC95xx) до 500 логических элементов - ~20 тыс штук. Следующий пик популярности диапазон в 2К-4К логических блоков (примерно 40К вентилей) - 12 тыс. Вот именно по этому мы продолжаем упорно "пилить" свой проект MLDR125.

Думаю начала достаточно. Пишите в комментариях какую еще занимательную статистику выгрузить в следующей части статьи. Например кто делает больше всего АЦП - TI v.s Analog? Или какой объем энергонезависимой памяти в SOIC8 самый популярный ? Кто лидер в России в микроконтроллерах - ST, NXP, Renesas или TI ? Какие драйверы светодиодов самые популярные?

Подробнее..

Раскрашиваем таможенную статистику. Или сколько и каких микросхем ввозят в Россию? (2)

11.05.2021 20:09:12 | Автор: admin

Продолжим анализировать какие иностранные микросхемы используются в России на основании таможенной статистики. Как мы это делаем ? Из данных ФТС выбираем записи в которых указан номинал ввезенной микросхемы, и используя внутреннюю базу данных дополняем эту запись основными параметрами микросхемы, начиная от производителя, разрядностями, диапазонами питания и заканчивая типом корпуса, упаковки и так далее. В данной части посмотрим АЦП/ЦАП и микроконтроллеры.

АЦП/ЦАП

Все типы аналого-цифровых и цифро-аналоговых преобразователей согласно нашей базе разбит на группы:
- АЦП - преобразователи аналогового сигнала в цифру;
- ЦАП - преобразователи цифры в аналоговый сигнал;
- совмещенные АЦП/ЦАП (обычно это разные аудио АЦП/ЦАП, но без кодеков, которые идут другой группой);
- Analog Front End (AFE) - схемы цифро-аналогового и аналого-цифрового преобразования (обычно используются для радиосвязи);
- цифровые потенциометры - схемы совмещающие датчик и АЦП/ЦАП используемые как датчики температуры.

Распределение микросхем по типам.Распределение микросхем по типам.

Больше всего ввозится микросхем AFE - радиоприемопередатчики, но не имеющие в своем составе процесорных ядер - более 182К штук. Самым популярным АЦП является ADS1000A0IDBV. Самым популярным ЦАП - DAC6311IDCK. Самым популярным аудио АЦП/ЦАП - PCM5102APWR. Самый популярный RF приемопередатчик - CC1020RSSR. А самый популярный цифровой датчик - DS18B20+. Практически все от Texas Instruments.

Маржинальность типов микросхемМаржинальность типов микросхем

Самыми маржинальными оказались Аудио АЦП/ЦАП - наверное любители звука готовы переплачивать не только за безкислородный медный кабель. Какие же фирмы лидируют на данном рынке?

Лидеры среди производителей микросхем АЦП/ЦАПЛидеры среди производителей микросхем АЦП/ЦАП

Texas Instruments выпускает самые популярные микросхемы и поставляет больше всего аналого-цифровых микросхем.

АЦП

Самая популярная разрядность чистых АЦП - 12 бит

Распределение разрядности микросхем АЦПРаспределение разрядности микросхем АЦП

16 и более - это в основной сигма-дельта АЦП, которые точные, но обычно не очень быстрые. Какая же самая популярная частота выборки? По частоте преобразования для АЦП распределение выглядит следующим образом

Распределение скорости преобразования микросхем АЦПРаспределение скорости преобразования микросхем АЦП

Самый крутой АЦП, который официально ввезли в Россию - AD9208BBPZ-3000 (14 бит @ 3GSPS).

ЦАП

Распределение ЦАП по разрядности

Распределение разрядности ЦАП Распределение разрядности ЦАП

Распределение скорости преобразования ЦАП

Распределение скорости преобразования ЦАПРаспределение скорости преобразования ЦАП

Микроконтроллеры

Из проанализированных примерно 1 млн микроконтроллеров - самые популярные в России микроконтроллеры от Микрочип (479К), STM(305К) и NXP (126К).

Лидеры среди производителей микроконтроллеровЛидеры среди производителей микроконтроллеров

Самым популярным при этом является микроконтроллер STM8S003F3P6TR. Как это ни странно, но до сих пор 8-ми битные МК самые популярные. Но это скорее всего опять таки из за того, что таможня не видит все ввозимые микроконтроллеры.

Соотношение 8, 16, 32 битных микроконтроллеров (скорее всего неверное)Соотношение 8, 16, 32 битных микроконтроллеров (скорее всего неверное)

Сколько памяти нужно для решения микроконтроллерных задач ?

По тактовым частотам работы микроконтроллеров следующее распределение

Распределение тактовой частоты микроконтроллеровРаспределение тактовой частоты микроконтроллеров

По числу выводов корпуса распределение следующее (к сожалению не для всех номиналов у нас были данные)

Распределение числа выводов микроконтроллеровРаспределение числа выводов микроконтроллеров

Итого

В результате среднестатистические АЦП и ЦАП на нашем рынке имеют разрядность 12 бит. Скорость преобразования АЦП на уровне 1 MSPS, а время преобразования ЦАП на уровне от 1KSPS до 100KSPS. Обе микросхемы будут от Texas Insruments. Среднестатистический микроконтроллер будет 8-ми битным, с 16 выводами и 8 Кбайтами Flash, работать с тактовой частотой до 16-20 МГц и выпущенный Микрочипом.

В третьей части статьи будут рассмотрены микросхемы памяти.

Подробнее..

Раскрашиваем таможенную статистику. Или сколько и каких микросхем ввозят в Россию? (3)

28.05.2021 16:10:14 | Автор: admin

Продолжим анализировать какие иностранные микросхемы используются в России на основании таможенной статистики. Как мы это делаем ? Из данных ФТС выбираем записи в которых указан номинал ввезенной микросхемы, и используя внутреннюю базу данных дополняем эту запись основными параметрами микросхемы, начиная от производителя, разрядностями, диапазонами питания и заканчивая типом корпуса, упаковки и так далее. В данной части посмотрим микросхемы памяти.
Часть 1. Общий анализ
Часть 2. АЦП/ЦАП и Микроконтроллеры

Всего за 2019 год было ввезено чуть более 130К микросхем памяти. При этом нужно понимать, что именно микросхем. Например "планки" динамической памяти для компьютеров или карточки памяти ввозятся уже как модули или комплектующие для компьютеров и к сожалению в статистику микросхем не попадают. Мы же рассматриваем чистые микросхемы, которые ввозят что бы запаять.

Все микросхемы мы можем разделить на энергонезависимые EERPOM, FLASH, FRAM, т.е. сохраняют информацию при отсутствии питания, энергозависимые динамические ОЗУ (DRAM) и статические (SRAM) и остальные, например конфигурационные Flash, используемые для хранения "прошивок" FPGA и NVSRAM - это статическая ОЗУ, но с батарейкой, за счет которой она превращается в энергонезависимую. Это очень древнее решение, но до сих пор кто то их использует, хотя на смену уже пришли FRAM.

Как и ожидалось самыми массовыми являются микросхемы энергонезависимой памяти (суммарно более 116К), вслед за ними идет динамическая память (13К). Остальная память в очень малых объемах. Для начала рассмотрим поподробней динамическую память.

Динамическая память

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

Лидером среди производителей является Micron (к сожалению не наш). Самой популярной микросхемой является MT41K128М - DDR3-1600, Объемом 2 Гбит от Micron, по цене примерно 3$.

Энергонезависимая память

Для энергонезависимой памяти все привыкли к USB флешкам или карточкам памяти с объемом измеряемым десятками Гигабайт.

Но в виде микросхем, как оказалось, наиболее популярными являются совсем небольшие объемы до 1 Мбита.

Безоговорочным лидером в EERPOM является STM.

На рынке Flash памяти представлено гораздо больше производителей, а вот рынок FRAM практически весь принадлежит Fujitsu.

У EEPROM памяти наиболее популярный интерфейс I2C

Но в Flash памяти I2C вообще не встречается, и основным является SPI.

Какой корпус наиболее популярный? Восьми выводные корпуса, SO-8 и его аналоги.

Так что если вы захотите сделать микросхему энергонезависимой памяти, то что бы она была максимально массовой ее объемом должен быть ~1 Мбит, с интерфейсом I2C (ну или SPI, мне он больше нравится) и в 8-ми выводном корпусе. Одна проблема, ее стоимость должна быть около 0,4$ за штуку. Самая популярная микросхема EEPROM - это M24512 от ST с объемом 512 Кбит и ценой 0,3$. И ST обещает выпускать ее еще не менее 10 лет.

Подробнее..

Миграция мобильного приложения на FLUTTER 2

23.04.2021 16:06:54 | Автор: admin

3 марта 2021 года разработчики Google представили Flutter 2. Что появилось в новой версии языка Dart? Как теперь быть с разработкой и поддержкой приложений, созданных с использованием Flutter предыдущих версий? И, самое главное, насколько сложно будет мигрировать на версию 2? В этой статье подробно опишем опыт миграции приложения на новую версию Flutter и проблемы, которые могут возникнуть в процессе миграции.

Кто такой и зачем нужен Flutter?

Для тех, кто набрел на статью случайно и понятия не имеет, что такое Flutter это технология от Google для разработки кроссплатформенных мобильных приложений - да, да приложения будут работать и на Android, и на iOS устройствах. Flutter активно завоевывает сердца разработчиков и очень быстро идет от только мобильной разработки к Web и Desktop. Он достаточно прост в освоении, позволяет отказаться от одновременной разработки двух приложений для Android и iOS, он показывает высокую производительность и значительно ускоряет разработку приложений. Ну не прелесть ли? Первая версия была представлена в начале 2018, а спустя два года мы уже видим Flutter 2 с весьма серьезными доработками и нововведениями.

Что появилось во Flutter 2?

Наиболее громкие изменения:

  • Новая версия языка Dart 2.12 c Sound null safety;

  • Выход Flutter for web;

  • Большой шаг к мультиплатформенности с Flutter for desktop.

Разработчики обещают, что миграция существующих решений на Flutter 2 должна пройти просто и быстро, есть гайды по миграции с примерами простых приложений, но можем ли мы им доверять, имея на руках приложение с множеством экранов, общающееся с сервером по api и использующее внешние библиотеки?

Если изменения по части Web и Desktop не затрагивают существующие приложения, то sound null safety может потребовать доработок. Почему и зачем sound null safety вообще нужна? Sound null safety - это фича, которая появилась в новой версии языка Dart 2.12, вышедшей вместе с Flutter 2.0. На просторах сети уже довольно много сказано о нововведениях и о null safety, поэтому очень подробно на этом останавливаться не будем. Но для целостности картины происходящего немного все же нужно сказать.

До появления Sound null safety все переменные в языке Dart могли принимать значение null. Если разработчик забывал добавить проверку на null перед использованием переменной, то во время работы приложения внезапно можно было получить экран со следующим содержанием:

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

Решить эту проблему призван Sound null safety, основные принципы которого:

  • Безопасность кода по умолчанию - все переменные, которые мы создаем, по умолчанию будут non-nullable, пока мы не разрешим им другого поведения.

  • Простота написания кода - с этим все понятно: не хотелось бы в обмен на безопасность получать сложности в написании и понимании кода.

  • Непротиворечивость кода - если мы определяем какую-то переменную как переменную non-nullable типа, то она абсолютно точно никогда не будет равна null. Как сказал Евгений Сатуров в своем подкасте, это самый главный принцип Sound null safety, и загадочное sound переводится именно как непротиворечивость.

Итак, в языке Dart иерархия типов претерпевает некоторые изменения:

Null больше не является подтипом для всех типов, а существует по соседству с ними. Если у нас есть переменная типа String, то она всегда будет содержать строку. Но на практике, конечно, случаются ситуации, когда нужно использовать null в качестве значения для переменной.

В таком случае можно воспользоваться соседом-компаньоном типа, допускающим значение null. В нашем случае этот тип - String?. Мы как будто заранее заставляем себя и других разработчиков сомневаться в том что в этой переменной будет строка: может, будет, а может, и нет.

Ниже пример использования этого типа в деле приготовления бургеров:

makeBurger(String burger, [String? meat]) {  if (meat != null) {    print('$burger with $meat');  } else {      print('Vegan $burger'); }}

Пользоваться переменными с ? небезопасно, поэтому нужно прибегать к дополнительным проверкам на null или специальным операторам .

Более подробно о новой иерархии типов можно почитать в официальной документации здесь.

В изменениях типов по умолчанию кроются сложности и страхи миграции проекта на Flutter 2. Второй момент, вызывающий опасения, это сторонние пакеты из pub.dev. На момент написания статьи более 85% пакетов из топ-250 на pub.dev уже поддерживают null safety. Никто, конечно, не застрахован от того, что нужный пакет и вовсе больше не поддерживается, поэтому перед использованием стоит проверить нужный пакет на pub.dev.

Подготовка к миграции кода

Начнем переезжать на Flutter 2, подсматривая в официальный гайд с использованием мигратора.

Первым делом, конечно же, обновляем Dart и Flutter до последних версий с помощью команды:

flutter upgrade

Вместе с Flutterом обновляется и Dart до версии 2.12.

Помимо SDK, нужно обновить плагины Flutter и Dart, сделать это можно в среде разработки. В AndroidStudio откроем Settings->Plugins. Там нас уже ждут кнопочки Update. Для применения апдейта обязательно потребуется перезапуск среды.

Далее проверяем, что все пакеты, которые мы используем в своем проекте, обновлены до версии с поддержкой null safety. Сделать это можно с помощью команды:

dart pub outdated --mode=null-safety

Выполнять ее нужно из директории проекта, оттуда, где лежит файл pubspec.yaml, который как раз анализируется на присутствие устаревших пакетов. Если такие пакеты в проекте есть, в консоли будет подсказка с информацией, кому из них требуется обновление, с какой версии пакета начата поддержка null safety, и какая версия наиболее свежая. У нас целых 5 таких пакетов.

Здесь Dart подсказывает нам, что для автоматической смены версий пакетов можно воспользоваться командой:

dart pub upgrade --null-safety

Пробуем, не получается

Кажется, пакет device_id все еще не может в null safety. На pub.dev выясняется, что все еще хуже: обновляли его последний раз в апреле 2019. Но есть и хорошие новости, этот пакет в проекте используется только в одном месте при формировании http запросов к серверу для определения ID устройства. Уходит некоторое время на поиски и тестирование альтернативы, удается найти null safety пакет, в котором есть методы для определения ID устройства, - platform_device_id. Если бы такой альтернативы не нашлось, пришлось бы делать форк и допиливать пакет самостоятельно. Добавляем platform_device_id актуальной версии в pubspec.yaml вместо device_id. Пробуем выполнить апгрейд пакетов еще раз.

Теперь все сработало отлично, пакеты обновлены!

Другой путь обновления пакетов: поправить версии руками в pubspec.yaml, а потом выполнить команды:

dart pub get
dart pub upgrade

Результат будет таким же.

Сразу переходить к миграции кода в нашем случае не получается: в проекте появились ошибки. Методы post() и get() пакета http в новой версии поменяли тип аргумента uri, вместо String теперь нужен Uri. Эта проблема тоже довольно быстро решается с помощью метода Uri.parse().

После обновления SDK, плагинов и пакетов проект все еще собирается и работает, но остается самый главный шаг - миграция кода.

Миграция кода

Ее можно осуществить вручную или воспользоваться мигратором, вызвав команду:

dart migrate

Мигратор проводит анализ нашего проекта и, если все хорошо, отдает ссылку, перейдя по которой можно найти предложения по миграции, в которых мы видим файлы исходного кода нашего проекта с автоматически внесенными изменениями, поддерживающими null safety.

Напротив каждого файла - цифра с количеством изменений, которые мигратор внес в него. Есть нетронутые файлы, но есть и те, в которых достаточно много правок.

Рассмотрим более подробно предлагаемые изменения. Где-то мигратор добавил ? к типу поля или переменной, сделав его nullable.

Появились комментарии /* no valid migration */ как в примере к строчке, где метод возвращает null, а принимающая сторона этого не ждет.

В окошке справа от кода можно найти подробности о причинах внесения тех или иных изменений, например, такие причины для приведения к nullable поля title:

  • поле не является final, значит его значение может измениться после определения в конструкторе;

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

Здесь же можно воспользоваться кнопочками Add, чтобы добавить к типу String /*!*/, сообщив мигратору, что мы уверены, что это поле должно быть non-nullable, перезапустить миграцию и понаблюдать, как меняется код, использующий это поле. Вот, например, при передаче meter.customName в конструктор ButtonItem появился !.

Пробежавшись по коду, можно заметить, что везде, где есть использование nullable, но требуется non-nullable переменная, мигратор добавил оператор !. Он уговаривает метод или выражение, которое ждет только non-nullable, взять из наших рук nullable. Оператор ! относится к null-aware операторам, таким как ?., ??, !. (подробно про их использование можно почитать здесь).

ComboMeal(Drink? drink) {  drink!.addIce(); //приложение упадет}ComboMeal(null);

Мигратор часто использует оператор ! в коде, но, так как это может быть небезопасно, нужно обязательно проверить каждое появление ! и проанализировать, можно ли как-то это избежать.

Вместо ! подойдет простая проверка на null, но не всегда. Можно встретить, например, вот такую ситуацию с полем meters:

Проверка есть, но мигратор все равно добавляет !.

Оказывается, проверка на null перед использованием перетаскивает на светлую non nullable сторону только локальные переменные и не работает с полями класса. На простых примерах это выглядит так:

ComboMeal(Drink drink) {  if (drink.bestTemperature != null) {    keepTemperature(drink.bestTemperature); // ошибка компиляции  }}ComboMeal(Drink drink) {  int? bestTemperature = drink.bestTemperature;  if (bestTemperature!= null) {    keepTemperature(bestTemperature); // null safety  }}

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

Оператор ?. равнозначен проверке на null, но с ним тоже лучше быть осторожнее. В примере ниже метод addIce() просто не вызовется.Приложение не упадет, но что, если для дальнейшей работы приложения выполнение этого метода было критично?

ComboMeal(Drink? drink) {  drink?.addIce(); // addIce не вызывается}...ComboMeal(null);

Еще обойти опасный ! там, где это возможно, хорошо помогает оператор ??, позволяющий заменить возможный null на значение по умолчанию.

ComboMeal(Drink? drink) {  keepTemperature(drink.bestTemperature ?? 70);}

Перед некоторыми полями классов мигратор добавил слово late.

Ключевое слово late позволяет обойти использование nullable типов для полей класса, когда они не инициализируется сразу, но и значение null не является для них необходимым. В примере ниже получим ошибку компиляции, так как поле burgerName не может быть nullable и не инициализируется сразу либо в конструкторе.

class ComboMeal {  String burgerName; // ошибка компиляции    void comboWithCheeseburger() {    burgerName = 'Сheeseburger';  }    void comboWithChickenBurger() {    burgerName = 'Chicken burger';  }    getComboMealName() {    return 'ComboMeal with ' + burgerName;}}

Следующий фрагмент кода будет работать, но для поля burgerName значение null бесполезно и скрывает за собой возможность получить ошибку при неаккуратном обращении.

class ComboMeal {  String? burgerName;    void comboWithCheeseburger() {    burgerName = 'Сheeseburger';  }    void comboWithChickenBurger() {    burgerName = 'Chicken burger';  }    getComboMealName() {    return 'Combo meal with ' + burgerName!;}}

Ключевое слово late позволяет избежать необходимости делать это поле nullable.

class ComboMeal {  late String burgerName; //null safety    void comboWithCheeseburger() {    burgerName = 'Сheeseburger';  }    void comboWithChickenBurger() {    burgerName = 'Chicken burger';  }    getComboMealName() {    return 'Combo Meal with ' + burgerName;  }}ComboMeal comboMeal = ComboMeal();comboMeal.comboWithCheeseburger();print(comboMeal.getComboMealName());

Здесь стоит обратить внимание на то, что такая инициализация все равно не является абсолютно безопасной. Если поменять местами последние две строки кода из примера выше, то ошибки компиляции не будет, но произойдет ошибка LateInitializationError во время работы приложения, так как поле burgerName не было проинициализировано.

Еще одним применением ключевого слова late является ленивая инициализация полей класса.

class ComboMeal {  late String burgerName = _getSurpriseName();}

В нашем случае поле burgerName будет инициализировано не при создании экземпляра класса ComboMeal, а при первом обращении к нему. Такой прием может быть полезен, когда мы уверены в том, что инициализация потребует много ресурсов, но не обязательно будет вызвана.

Автоматическая миграция

Насколько долго придется дорабатывать код после миграции? В нашем проекте около 1200 строк кода. Я потратила на внесение изменений немного времени - около одного рабочего дня. Предлагаю оставить этап несогласия с мигратором и правок за кадром и нажать кнопку Apply Migration, чтобы понять, насколько работоспособен код после автоматической миграции.

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

В первую очередь, видим ошибки там, где были комментарии /* no valid migration */. Это те места, где в методах возвращается или передается null. Правим.

Второй тип ошибок компиляции после миграции связан с удалением конструктора по умолчанию для списка в языке Dart. То есть нельзя больше объявить список таким образом:

List<String> words = List<String>();

Это решение было принято разработчиками из-за того, что конструктор по умолчанию создает список определенного размера, но не инициализирует его элементы, то есть все они имеют значение null. Такой конструктор теперь нельзя применить даже для списка, допускающего содержание nullable элементов. Для разрешения этой проблемы в зависимости от ситуации можно воспользоваться инструментами создания фиксированного или нефиксированного списка List.empty(), List.generate(), List.fill(), []. Правим места с использованием конструктора по умолчанию.

Ошибки компиляции закончились, приложение собирается, запускается. Согласитесь, довольно быстро.

На этом миграцию приложения можно считать успешной, но с небольшими оговорками.

Впечатления от миграции

Автоматическая миграция не отдает 100% рабочего кода. Но, справедливости ради, стоит признать - так получается из-за того, что исходный код не обеспечивает null safety. Возможно, если провести какую-то предварительную подготовку, то таких проблем не будет. С другой стороны, правки после миграции были не сложными, заняли не так уж много времени, и вдобавок список ошибок акцентирует внимание на проблемах, которые можно было и не заметить при подготовке.

Выбор мигратора делать переменную/поле nullable или non-nullable, судя по всему, полностью зависит от их использования в коде. Это хорошо прослеживается в окошке с причинами добавления nullable к типу в предложениях по миграции. Понятно, что нельзя полностью уйти от использования null. Например, при получении данных от сервера и декодировании json-ответов в классы невозможно гарантировать, что все поля будут заполнены, как мы ожидаем. Мигратор, конечно, сам не догадается о контексте и не сделает все поля response-класса nullable. Разработчику придется уделить время на доработку, чтобы получить хороший код.

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

Но все это опять же легко поправилось.

Документация по null-safety языка Dart и вообще вся документация Dart и Flutter отлично написана, в ней можно найти ответы на большинство возникших вопросов, связанных с работой nullable или non-nullable. Ну и конечно, когда при написании нового кода на Dart 2.12 встает вопрос - делать переменную nullable или non-nullable, лучше выбирать non-nullable и работать с этой концепцией пока не станет очевидно, что без nullable не обойтись.

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

P.S. Об Инфосфере

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

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

Подробнее..

Скоростной АЦП с нуля. 16 бит за 10 лет

01.12.2020 12:23:05 | Автор: admin
Чего стоит разработать быстродействующий аналого-цифровой преобразователь, почти не имея опыта? Насколько сильно наше отставание в этой области? Есть ли в этой нише шанс найти коммерческое применение своей продукции и отщипнуть хоть кусочек рынка у гигантов мира сего? Выпуская в свет новый 16-битный 80 МГц АЦП, хотим порассуждать на эти темы и рассказать о самой микросхеме и опыте её создания.
image


Введение


2010 год. Тогда многие этим увлекались. Тема быстрых АЦП вдруг стала популярной. Кто-то раньше, кто-то позже, но сразу несколько российских компаний принялись вести разработки в этой области. Не стали исключением и мы. Словно нужно было дождаться, когда рассеется дым горящих вокруг Москвы торфяников, чтобы увидеть, что ниша отечественных скоростных аналого-цифровых преобразователей совершенно пуста. Отставание было гигантским, в несколько поколений. Из наших тогда можно было достать только старые добрые микросхемы серии 1108ПВ 10-14 разрядные АЦП с быстродействием 0,3-1,3 МГц, разработанные еще в советской Риге. Самым крутым считался вильнюсский биполярный 1107ПВ3, тоже родом из 80-х, который имел разрядность 6 бит и мог работать со скоростями до 100 МГц. В это же время западные микросхемы на таких скоростях достигали уже 16 бит! А при меньшей разрядности могли работать на нескольких сотнях мегагерц.

Столь привлекательным казалось попытаться наверстать отставание и заполнить этот вакуум отечественного сегмента АЦП. Было очевидно: кто первый создаст что-то более-менее современное, у того будет шанс монополизировать в дальнейшем весь сегмент. Ввязавшись в гонку тогда, мы смутно догадывались, что путь предстоит неблизкий, но никто не предполагал, что первый верстовой столб на нём будет стоять на отметке в 10 лет


Смог в Зеленограде 2010 г. Фото с сайта Graker.ru

Что за зверь?


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

Наверное, каждый человек, сам того не подозревая, ежедневно имеет дело с АЦП. Электроника окружает нас повсюду, и, если речь идёт о современном устройстве хоть чуточку сложнее штепсельной вилки, в нём наверняка трудится этот девайс. А уж такая привычная нам техника, как смартфоны, видеокамеры, аудиопроигрыватели, игровые станции, и пр. буквально напичканы ими. Аналого-цифровые преобразователи в их составе выполняют разную работу и имеют присущую этой работе архитектуру: это может быть SAR, Delta-sigma, Pipeline, Folded-interpolated, Flash, Dual-slope и т.д. Такое разнообразие видов обусловлено тем, что не существует оптимальной архитектуры для всех типов приложений. С точки зрения исполнения АЦП могут быть встроены в системы-на-кристалле или реализованы в виде отдельных микросхем.


В системах радиосвязи, радиолокации, телекоммуникации зачастую используются быстродействующие АЦП. Быстродействующими считаются преобразователи с частотой выборки более 10 Мвыб/c. Как правило, они имеют архитектуру Flash, Folded-Interpolated или pipeline, хотя в последнее время стали появляться и быстрые SAR.
У любого АЦП довольно много различных параметров. Для высокоскоростных преобразователей ввиду специфики их применения особенно важны динамические SFDR, SNR, IMD. Подробнее об этих и других параметрах можно прочитать здесь.

Первые шаги


Вернемся обратно в 2010 год. Какими наивными мы были! Сейчас уже невозможно сдержать улыбку, просматривая отчёты и презентации, что мы делали тогда. Только с аспирантской скамьи, мы строили честолюбивые планы, как через пару-тройку лет сделаем преобразователь, не менее быстрый и не менее точный, чем у них Ведь опыт разработки быстродействующих АЦП уже был. В нашем портфолио лежал аж 14-битный 100 МГц преобразователь! (Не миландровский.) Правда работал он так:

Вид кристалла и спектр после первой попытки

На выходе этого преобразователя вместо синусоиды был изрезанный резкими провалами меандр. Представляете, два года работы и такое фиаско! SNR 17 дБ вместо расчётных 68. Тем не менее никто не унывал, потому что такие провалы не редки в микроэлектронике. Такова уж специфика, что за каждой схемой, как бы хорошо она не работала на модели, скрывается вопрос а в железе будет работать? Ответить на этот вопрос, и то не наверняка, можно только с опытом.
Итак, мы перевернули страницу и принялись заново разрабатывать 14-разрядный 100 МГц АЦП. Вскоре параллельно с нами начала работать другая, более опытная команда, перешедшая к нам со своими разработками из другой компании. Мы недоумевали тогда, зачем двум командам решать, пусть и разными способами, но одну и ту же задачу? Зачем эта внутренняя конкуренция? Оказывается этим, сами того не подозревая, мы копировали в миниатюре великих мира сего

А как там у них?


Нам было любопытно, как развивалось направление быстрых АЦП у лидеров сегмента. Для примера мы взяли компанию Analog Devices, которая еще в 2010 году удерживала 48% рынка преобразователей, что больше, чем доля 8 последующих конкурентов вместе взятая. Проанализировав и сопоставив официальные даташиты и научные публикации, мы составили следующий таймлайн:



В таблице приведены примерный год выхода и технология выдающихся для своего времени АЦП, а также подразделение компании, занимавшееся разработкой. (У нас нет инсайда, поэтому эти данные отражают лишь наше виденье.)

Не разбирая всех причин такого успеха компании, отметим лишь две наиболее важные для нас, инженеров. Во-первых, это полувековое эволюционное развитие, позволившее накопить внушительный коллективный опыт. Во-вторых, большие финансовые и ресурсные вложения, свидетельствующие о приоритетности этого направления в компании. Над быстродействующими АЦП одновременно работают два подразделения, в Вилмингтоне и Гринсборо (США), причем в разработке каждой микросхемы может быть задействовано до нескольких десятков инженеров. Основной костяк каждой группы это инженеры, которые много лет занимаются исключительно этой тематикой. Иногда у обеих команд получались близкие по характеристикам преобразователи, хоть и шли они каждый своим путём. Зачастую и в этом случае обе микросхемы выводились на рынок. Супербыстрые преобразователи последнего поколения оказались неподъёмными для какого-то одного подразделения, поэтому обе команды вынуждены были объединить усилия.

Долгая дорога в дебрях


Отметка мы здесь на таймлайне вверху демонстрирует, что в области быстродействующих АЦП наше отставание от передовых разработок на сегодня составляет около 10 лет. И это после десятилетней работы! Наверняка кому-нибудь понадобилось бы меньше времени, но именно столько мы потратили, чтобы пробраться сквозь дебри разработки и получить результат, за который не стыдно.

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

Очень скоро выяснилось, что при таких скоростях на параметры влияет не только качество схемотехники самой микросхемы, но и того, что её окружает корпуса и печатной платы. Нужно было учиться разрабатывать платы для таких приложений: ведь сначала не получалось даже повторить демо-плату ADI так, чтобы параметры их же АЦП соответствовали даташиту. Индуктивности использовавшегося корпуса тоже пагубно отражались на характеристиках, поэтому пришлось разработать новый корпус с так называемым донным контактом (exposed pad), чтобы увеличить количество выводов земли.

Качество измерений при производстве ещё один фактор, ограничивающий достигаемые характеристики. При функциональном контроле используется своя оснастка из печатной платы и контактирующего устройства (коробочка, куда вставляется микросхема и прижимается к плате). Предназначенная для больших промышленных тестеров, эта оснастка громоздкая, а значит привносит дополнительные паразиты и губит параметры. К примеру, даже у последнего АЦП мы вынуждены ограничивать скорость и диапазон напряжения питания из-за того, что просто не можем подтвердить в условиях цеха параметры, достигаемые этой же микросхемой, но распаянной на компактной плате. Нечего и говорить о том, что достичь высоких характеристик невозможно без современного измерительного оборудования в первую очередь дорогих генераторов с низким уровнем шума и джиттера, а также высококачественных полосовых фильтров высокого порядка, чтобы отфильтровывать гармоники этих генераторов.


Таймлайн тестовых образцов в ходе разработки микросхемы

За время, что мы работали над этой микросхемой, было сделано 5 запусков. Будучи fabless компанией, каждый запуск обходился нам в копеечку, которую, к тому же, приходилось доставать из своего кармана (из кармана компании, а не из брюк инженеров), так как этот проект не связан с ОКР-ами и финансируется из собственных средств. Помимо цены есть ещё один минус для мелких fabless компаний. Ожидание кристаллов после запуска иногда затягивается до полугода, чем напрочь выбивает из рабочего ритма.
В 2014 году мы готовы были выводить имеющуюся разработку в свет, руководствуясь принципом на безрыбье и рак рыба. Микросхема была откровенно сырая, плохо калибровалась, поэтому хорошо, что к этому моменту вторая наша команда АЦП-шников сделала более хорошую микросхему её и стали производить под именем 5101HB015. Чтобы попробовать превзойти этот АЦП, нам пришлось перейти на новую архитектуру и даже другую фабрику.

И вот, наконец, новая микросхема увидит свет!

Коммерческий рынок. Почему высокоскоростные АЦП?


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

A. Выход на мировой рынок
Наверняка, многие знают: чтобы сделать коммерчески выгодный продукт в микроэлектронике, необходим крупный рынок сбыта. Это связано с окупаемостью R&D, измерительного оборудования, запуска тестовых кристаллов и т.д. Влияет на цену микросхемы и тот факт, что фабрика даёт скидку на пластины при больших объёмах производства. В суровых реалиях российского приборостроения сложно сделать схему, которая бы обеспечила высокий спрос. Тем более, когда существуют такие гиганты как ST, TI, ADI, ну и китайские аналоги любых микросхем, которые можно купить за 3 копейки.

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

С высокоскоростными преобразователями всё иначе. На рынке существуют 3 основные компании, которые развивают направление высокоскоростных АЦП: TI, ADI и Maxim Integrated (последние две объявили о слиянии). Поэтому данный рынок сильно монополизирован. Цены на преобразователи с частотой дискретизации 80 Мвыб/c находятся в районе 80 долларов, что подразумевает серьезную наценку. На habr есть статья, в которой хорошо освещена проблема монополии в микроэлектронике.

Б. Ограничение поставки в Россию и Китай
С каждым годом вступают все более жесткие ограничения на поставки ЭКБ в Россию и Китай. Высокоскоростные точные преобразователи попадают в категорию ограничений. Даже потребители из европейских стран при заказе таких микросхем должны заполнять документацию, связанную с экспортным контролем продукции двойного назначения. Этот аспект тормозит развитие коммерческих устройств, которые могли бы достичь лучших параметров.
Фото с сайтов Mouser, Arrow

В. Улучшение качества собственных продуктов РЭА
На данный момент у нас разрабатывается система ADAS для помощи водителю. Для обработки данных с радара может использоваться новый АЦП, что позволит существенно поднять точностные параметры системы, а также уменьшить стоимость аппаратуры.


Обобщив все эти пункты, мы решили создать коммерческий вариант микросхемы (называться будет MDRA1A16FI), цена которой будет ниже, чем у зарубежных аналогов. Образцы в металлокерамическом корпусе можем предоставить всем заинтересованным уже сейчас, а в пластиковом корпусе QFN-48 в начале 2021 года. Кому интересно, здесь можно оставить заявку на получение образцов. Пластиковый корпус существенно меньше металлокерамического всего 7x7x0.85 мм против 11x11x2 мм, и, следовательно, легче и дешевле.

Что в итоге получилось




Теперь, наконец, о самой микросхеме что в итоге получилось. Микросхема, получившая название 5101HB045, представляет собой 16-разрядный АЦП с частотой дискретизации 80 Мвыб/c. Её характеристики следующие:

Разрядность, бит $N$ 16
Напряжение питания, В $V_{dd}$ 1.8
Полная шкала, В (п-п) $V_{FS}$ 2
Частота преобразования, МГц $f_{s}$ 80
Соотношение сигнал/шум, dBFS (при $f_{IN}$=10/75МГц) $SNR$ 75.0 / 73.1
Динамический диапазон, свободный от гармоник, dBc
(при $f_{IN}$=10/75МГц)
$SFDR$ 94 / 83
Интермодуляционные искажения 3-го порядка, dBc (при $f_{IN}$~10/75МГц) $IMD3$ -92 / -80
Интермодуляционные искажения 2-го порядка, dBc (при $f_{IN}$~10/75МГц) $IMD2$ -105 / -83
Интегральная нелинейность, LSB $INL$ 2.7
Дифференциальная нелинейность, LSB $DNL$ 0.75
Джиттер, пс $T_{j}$ 0.30
Full Power Bandwidth, МГц $BW$ 688
Рассеиваемая мощность (полная, в КМОП режиме), Вт $P_{sup}$ 0.56


Спектр, интегральная и дифференциальная нелинейность

Структурная схема преобразователя:



Микросхема представляет собой одноканальный АЦП конвейерного типа с разрядностью 16 бит. Процесс преобразования происходит в несколько этапов:
  1. Входной аналоговый дифференциальный сигнал подаётся через выводы VINP/VINN на входное устройство выборки-хранения (УВХ).
  2. Сигнал выборки, сохраненный на емкости УВХ, обрабатывается ядром 16-битного АЦП.
  3. Система цифровой постобработки получает цифровой эквивалент обрабатываемой выборки, осуществляет цифровую коррекцию и кодировку в нужный формат (двоичный код со смещением, дополнительный код, код Грея).
  4. Итоговый результат выдается на параллельную шину по LVDS или CMOS интерфейсу.


Схемотехническая реализация этого алгоритма с требуемой точностью потребовала значительной площади на кристалле. Поэтому, выполненный по стандартной 0,18 мкм КМОП технологии, чип получился не маленький:



Микросхема обладает множеством режимов работы, которые можно конфигурировать с помощью SPI интерфейса. Все подробности в спеке. Кстати, мы наконец-то сделали спецификацию по западному стандарту (правда англоязычную) без всяких запутанных ТУ-шных таблиц.

Стало лучше?


Во многом, да, если сравнивать с тем же 5101НВ015:
  • Здесь нет интерливинга. Это означает, что в выходном спектре данного АЦП не будут присутствовать искажения, характерные для преобразователей с интерливингом, что является существенным плюсом при построении, например, SDR систем.
  • Проще пользоваться. Не нужно тратить время на калибровку при запуске или перенастройке микросхемы. Все калибровочные коэффициенты уже записаны во внутреннюю память при производстве.
  • Расширенный список доступных интерфейсов вывода данных: LVDS/DDR (с двойной скоростью) и параллельный КМОП 1,8 / 2,5 / 3,3 В.
  • Улучшенные динамические показатели SNR [69.5 -> 75] и SFDR [81->94]
  • Хорошая статическая линейность: INL 3 (14 бит) -> 2,5 (16 бит), т.е. более, чем в 4 раза лучше.
  • Можно подключить внешний источник опорного напряжения 1,25 В и поднять SNR до 76,7 дБ.
  • Улучшенный софт для отладочного комплекта.


Что не лучше так это скорость преобразования (80 вместо 125 МГц) и потребление (560 против 115 мВт).

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


Для того, чтобы попробовать этот АЦП в действии, и при этом не заниматься проектированием печатной платы, мы разработали специальный отладочный комплект. В него входят две платы аналоговая (собственно АЦП и обвязка) и цифровая (сбор выходных данных). Обе платы соединяются разъемами и питаются от одного стандартного 5 В блока питания.



Используя этот отладочный комплект, можно легко и быстро проверять свои решения при разработке аппаратуры. Достаточно подключить к разъёму входной сигнал, всё остальное сделает комплект. На плате присутствует источник тактового сигнала и даже источник внешнего опорного напряжения, чтобы проверить, как работает система при опоре 1,25 В. При желании можно подать свой собственный тактовый сигнал через соответствующий разъем.
Самостоятельно собирать и обрабатывать выходные отсчёты с АЦП тоже не нужно. Мы написали новый софт быстрый и автономный. Предыдущая версия требовала, к примеру, предустанавливать matlab-библиотеки, что достаточно неудобно. Программа умеет конфигурировать АЦП, снимать и выгружать с него данные, строить спектр и вычислять по нему характеристики. Данное ПО поставляется в составе отладочного комплекта. Так же, его можно скачать здесь. Кому интересны комплекты, вот ссылка.

Скриншоты отладочного ПО

Работа над ошибками


Да, мы сделали большой рывок, но часть характеристик всё еще не дотягивает до параметров импортных микросхем. Сравним основные характеристики существующих 16 разрядных АЦП с частотой дискретизации 80 Мвыб/c.

Сравнение параметров
5101НВ045 AD9265 ADS5481 ADS5562 MAX19586 AD9266 LTC2163
Производитель МИЛАНДР ADI TI TI Maxim ADI Linear T. (ADI)
Разрядность, бит 16 16 16 16 16 16 16
Скорость, Мвыб/c 80 80 80 80 80 80 80
Интерливинг нет нет нет нет нет нет нет
Входной буфер нет нет да нет да нет нет
Один источник питания да (1.8В) да (1.8В) нет (5; 3В) да (3.3В) нет (1.8; 3.3В) да (1.8В) да (1.8В)
Дизеринг нет да да нет нет нет нет
Делитель тактовой частоты да да нет нет нет да нет
Входной размах 2 В(п-п) 2 В(п-п) 3 В(п-п) 3.56 В(п-п) 2.56 В(п-п) 2 В(п-п) 2 В(п-п)
SFDR @ 10 MHz тип 94 (>88) тип 88 тип 98 тип 85 (>75) тип 96 тип 94 тип 90
SFDR @ 70 MHz тип 83 (>72) (>92) тип 93 н/д тип 84 (>80) тип 93 тип 89 (>82)
SNR @ 10 MHz тип 75 (>74) тип 80 тип 81 тип 83.8 (>79) тип 80 тип 77.6 тип 77.1
SNR @ 70 MHz тип 73.1 (>71) (> 78.7) тип 80.1 н/д тип 79.2 (>77.5) тип 76.6 тип 76.9 (>75.3)
Потребляемая мощность, Вт 0.563 0.308 2.15 0.865 1.11 0.124 0.188
Совместимость одновременно с 1,8/2,5/3,3 В ПЛИС да нет нет нет нет да нет



Недостатком нашей микросхемы является деградация линейности и ухудшение шума при работе в т.н. undersampling режиме (информацию об этом добавили в предыдущую публикацию), т.е. когда полоса входного сигнала находится во второй и выше зоне Найквиста. Это требуется, например, в приложениях с непосредственной дискретизацией ПЧ. Эта деградация происходит из-за относительно высокого собственного джиттера и нелинейности входного УВХ, которая начинает проявляться примерно с 60 МГц.

Зависимость динамических характеристик от частоты входного сигнала

Если, однако, вы обрабатываете сигналы с частотой до 60-70 МГц, то по динамическим параметрам 5101HB045 смотрится в этой таблице, на наш взгляд, вполне достойно.

Что будет дальше?


Поделимся планами по развитию наших высокоскоростных АЦП. Мы полны решимости сделать еще один цикл (надеемся, он пройдёт быстрее, чем за 10 лет) и дотянуть характеристики нашей микросхемы до уровня аналогов. Если конкретно, то:
  1. поднять SNR до 78 дБ, частоту дискретизации до 125 Мвыб/с.
  2. Уменьшить собственный джиттер, увеличить линейность УВХ, и улучшить таким образом SFDR и SNR на высоких частотах входного сигнала.
  3. Добавить дизеринг для работы с маленькими сигналами (более подробно можно узнать об этом в статье на habr).
Приоритетом для себя мы определили высокую линейность и низкий шум.

Вторая наша группа разработчиков приоритетом для себя видит высокую скорость преобразования. В её планах:
  1. В течение 2021 года вывести на рынок АЦП скоростью до 400 Мвыб/с в двух версиях: со встроенным входным буфером и без. Данный АЦП будет также работать в двухканальном режиме с частотой выборки до 200 Мвыб/с каждый.
  2. Этот же АЦП в двухканальном режиме оснастить последовательным выходным интерфейсом Serial LVDS. У схемы с таким интерфейсом существенно меньше выводов. Значит трассировка платы, снятие и обработка данных сильно упрощается. Это заметное преимущество, особенно для многоканальных АЦП.

Уже был запуск тестовых образцов, они показали хорошие параметры, однако потребовали доработки, которая сейчас активно проводится.

Заключение


Итак, за 10 лет мы существенно продвинулись, но впереди ещё много работы. Тяжело догонять столь быстро и давно развивающиеся компании, особенно когда в R&D схем вкладывают большие ресурсы. Как уже упоминалось, направление скоростных АЦП у нас финансируется за счет собственных средств, и они, увы, сильно ограничены. Но все мы видим большое будущее в этом направлении. Будем действовать, руководствуясь нашим негласным девизом: Таких гигантов как ADI в АЦП-строении нам не переплюнуть, но как следует плюнуть в этом направлении уже хорошо.
Подробнее..

Радары диапазонов 77 и 24 ГГц для автотранспорта и дорожной инфраструктуры (часть 1)

13.04.2021 10:07:06 | Автор: admin

Почему именно радары?

Компания АО ПКК Миландр знакома хабровчанам в сфере разработки интегральных микросхем. Сейчас номенклатурный ряд микросхем достаточно широкий, но в данном контексте нам интересны именно DSP (ЦОС) процессоры 1967ВН028 и 1967ВН044, которые имеют систему команд совместимую с процессором ADSP TS201. Принципиальное различие процессоров заключается в том, что 1967ВН028 нацелен на работу в составе многопроцессорного вычислительного кластера, а 1967ВН044 больше подходит на роль микроконтроллера с мощным вычислительным ядром и богатым набором периферии.

Именно процессоры 1967ВН028 стали востребованы в радарной тематике, правда речь идет о радарах специального назначения. В качестве примера могу привести блок обработки радиолокационных данных - ВНБО, рисунок 1).

Рисунок 1. Внешний вид ВНБО.Рисунок 1. Внешний вид ВНБО.

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

  • Тип вычислительного ядра - микросборка МВМ-03 (41967ВН028 + ПЗУ);

  • Количество - 52 микросборки МВМ-03;

  • Вычислительная производительность ~1100 Гфлопс.

Соглашусь, что 1100 Гфлопс сегодня не выглядит как выдающийся результат, но стоит отметить, что речь о специальном назначении (со всеми вытекающими особенностями: работа при температуре в -60, рядом с источником электромагнитных "помех" в 100 кВт) и о том, что ближайший отечественный аналог, разработанный не так давно на других процессорах, имеет вычислительные возможности почти в три раза ниже.

Как это связано с темой статьи?

Как оказалось, напрямую... В 2018 году ФГУП НАМИ пригласило представителей нашей компании для участия в рабочей группе на тему Компоненты отечественной системы ADAS (Advanced driver-assistance systems). Основными участниками этой встречи были ФГУП НАМИ, ПАО КАМАЗ, Группа ГАЗ, УАЗ. Обсуждались такие вопросы, как Разработка отечественных автокомпонентов, предназначенных для решения задачи ADAS (камеры, блоки управления, радары), Подготовка необходимой нормативной базы, Наиболее востребованные функции ADAS по мнению отечественных атомобилепроизводителей, Планы и предварительные сроки введения соответствующих уточнений в новый технологический регламент и многие другие, в общем, серьёзные вопросы, которые могут повлиять на нашу повседневную жизнь. Больше всего это было похоже на начало нового масштабного проекта, каким ранее был ЭРА-ГЛОНАСС (если вспомнить, то в Эру тоже многие не верили и сроки регулярно отодвигались, но сегодня мы все видим насколько она была неотвратима). После этого было много чисто технических рабочих групп на территории ФГУП НАМИ и участие в группах по регулированию нормативной базы в составе Национальной технологической инициативы Автонет. Были споры, дебаты, - острая, но интересная конкурентная борьба заинтересованных лиц.

Результатом функционирования рабочих групп стала разработка целой серии новых стандартов (в плане разработки числились более 180 проектов), регламентирующих различные сферы автомобильной отрасли: от электрифицированного (например, элементы инфраструктуры: зарядные станции, методы подключения, протоколы взаимодействия и т.д.) до автономного транспорта (см. далее). Для примера приведу несколько свежих стандартов по теме ADAS:

  • ГОСТ Р 58835-2020 Автомобильные транспортные средства. Бортовые системы помощи водителю. Радарные подсистемы. Общие технические требования и методы испытаний. (Дата введения 2021-04-30)

  • ГОСТ Р 58834-2020 Автомобильные транспортные средства. Бортовые системы помощи водителю. Общие технические требования к компонентам и методы испытаний. (Дата введения 2021-04-30)

  • ГОСТ Р 58838-2020. Автомобильные транспортные средства. Бортовые системы помощи водителю. Системы непрямого обзора. Общие технические требования и методы испытаний (Дата введения 2021-04-30)

Таким образом, Миландр, с одной стороны, имел опыт разработки военных локаторов вычислительной техники для обработки радиолокационных данных, с другой опыт разработки отечественных DSP процессоров, а также давно сотрудничал с кафедрой Информационных радиосистем Нижегородского Государственного Технического Университета им. Р.Е. Алексеева (одного из основных профильных ВУЗов по радиолокации). Другими словами, многое сложилось удачно. А ещё мне как инженеру кажется важным, что к началу такого сложного проекта в лабораториях Миландра имелось всё необходимое безумно дорогое измерительное оборудование.

Ближе к теме!

Рассмотрим принцип работы FMCW (Frequency Modulated Continuous Wave) радара, обобщенная структура которого показана на рисунке 2. Передатчик радара излучает непрерывный ВЧ сигнал через топологически сфазированную антенную решетку (ФАР), частота которого изменяется в заданном диапазоне по заранее определенному линейному закону, при этом амплитуда частотно-модулированного сигнала остается практически неизменной. Излучаемые радаром электромагнитные сигналы, отражаясь от объектов, находящихся в зоне обнаружения, поступают через приёмную ФАР на модуль приемо-передатчиков, где, смешиваясь с передаваемым сигналом, образуют разностный сигнал на промежуточной частоте. Частота промежуточного сигнала fif зависит от расстояния fR и относительной скорости fD обнаруженного объекта.

Рисунок 2. Обобщенная структурная схема.Рисунок 2. Обобщенная структурная схема.

Рассмотрим идеальный случай, когда цель одна, и движется медленно (рисунок 3). Графики показывают характер изменения частоты передаваемого (красный) и принимаемого (зеленый) СВЧ сигналов во времени и причину формирования промежуточной частоты fif (T период зондирования, разностная частота показана без знака).

Рисунок 3. Принцип работы FMCW радара при частотно-модулированном излучаемом сигнале.Рисунок 3. Принцип работы FMCW радара при частотно-модулированном излучаемом сигнале.

Промежуточная частота fif складывается из двух компонент: доплеровского сдвига частоты, зависящего от скорости объекта

f_{D} = \frac{2V}{\lambda}

и разностной частоты, вызванной временной задержкой на распространение зондирующего сигнала "туда" и "обратно"

f_{R} = \frac{2R}{c} *\frac{f_{\text{BW}}}{T/2}

Промежуточная частота fif , формируется согласно уравнению

f_{\text{if}} = \pm \frac{2V}{\lambda} + \frac{2R}{c} * \frac{f_{\text{BW}}}{T/2}

При использовании нашего модуля приемопередатчика M-LC6 (описание есть на сайте) в условиях безэховой камеры и не быстрого (500 Гц) модулирующего пилообразного сигнала отражение от уголкового отражателя выглядит следующим образом (рисунки 4 и 5):

Рисунок 4. Фотография условий эксперимента.Рисунок 4. Фотография условий эксперимента.Рисунок 5. Модулирующий сигнал (синий), квадратурный (желтый) и синфазный (зеленый) сигналы ПЧ.Рисунок 5. Модулирующий сигнал (синий), квадратурный (желтый) и синфазный (зеленый) сигналы ПЧ.

Результат расчета FFT по квадратурной компоненте после цифрового фильтра верхних частот и удаления паразитной модуляции (вызванной проникновением сигнала передатчика в приемник внутри СВЧ микросхемы) даёт спектр, показанный на рисунке 6.

Рисунок 6. Результат расчета FFT.Рисунок 6. Результат расчета FFT.

Рассчитаем разностную частоту для данного случая (понимая, что fD = 0):

f_{\text{if}} = \frac{f_{\text{BW}}}{T}*\left( \frac{2*R}{c} \right) = \frac{200\ MГц}{\left( \frac{1}{500\ Гц} \right)}*\left( \frac{2*5,4м}{300E6\frac{м}{с}} \right) = 3600\ Гц\ \

Matlab и осциллограф, совмещенный с генератором от Keysight, - это, конечно, хорошо и правильно, но в реальности для коммерческой компании это неинтересно. Необходимо, чтобы всё было в формате законченного изделия, имеющего реальное коммерческое применение.

Нет ничего проще.. часы ругани "мозговых штурмов", недели расчетов, месяцы испытаний и год работы - в трех рисунках 7, 8, 9.

Рисунок 7. Фотография прототипа.Рисунок 7. Фотография прототипа.Рисунок 8. Фотография макета.Рисунок 8. Фотография макета.Рисунок 9. Фотография опытного образца однолучевого радара.Рисунок 9. Фотография опытного образца однолучевого радара.

Однолучевой радар состоит из модулей приемопередатчика и вычислителя с сигнальным процессором. Приёмопередатчик представляет собой компактный модуль, включающий ФАР, реализованную в виде отдельных передающей и приемной частей, выполненных симметрично. Каждая часть состоит из отдельных патч-антенн, сориентированных между собой таким образом, чтобы была сформирована желаемая диаграмма направленности (ДН), и минимизировано взаимное влияние приёмника и передатчика. Модуль цифрового вычислителя разработан на основе 32-разрядного высокопроизводительного процессора цифровой обработки сигналов1967ВН044 (тактовая частота до 230 МГц). Рассмотрим подробнее структурную схему радара (рисунок 10).

Рисунок 10. Структурная схема опытного образца однолучевого радараРисунок 10. Структурная схема опытного образца однолучевого радара

Всё просто, а в гражданских изделиях иначе и нельзя - должно быть дешево и надежно. Центром радара является 1967ВН044 немного переделанный под данную задачу... Загружать ПО процессор умеет по SPI, соответственно, в качестве ПЗУ подходит почти любая флэшка.

ЦАП и АЦП выбираются по частоте, цене и возможности когерентного захвата данных. Сейчас реализована простая схема, почти не загружающая процессорное время, в ОЗУ лежит заранее сформированный фрагмент пилы; цепочка DMA выдвигает данные в SPI0 и в нужный момент перезапускает фрагмент этой пилы, запуская таймер TMR0. TMR0 запускает другую цепочку DMA, которая собирает данные с SPI1, выводы nCS двух АЦП объединены, выводы SDO, CLK заведены на простенький буфер, TMR0 также управляет стробами nOE буфера, а DMA собирает данные последовательно сначала с одного АЦП, а затем с другого, даже не подозревая, что это не один АЦП. Процессор загружается разного рода фильтрацией и расчетом FFT. Физический уровень CAN обеспечивает микросхема 5559ИН14, а логический SPI CAN-контроллер. Ethernet также выполнен на Ethernet-контроллере. Решение по CAN и Ethernet сейчас переносится на наш 1986ВЕ1QI, там уже есть CAN и Ethernet. Микросхема ГЛОНАСС используется не обычная, а Навигационный приемник ГЛОНАСС/GPS/SBAS/GALILEO ПРО-04, ИЛТА.464346.001 НИИ МА ПРОГРЕСС. Работает нормально, подключается по UART, свои задачи явно выполняет. Физический уровень RS-485 обеспечивает микросхема 5559ИН10. Таким образом видно, что сегодня вполне реально создать коммерческий продукт с очень высокой степенью отечественности локализации по ЭКБ.

Удобство такой модульной платформы очевидно. Меняем СВЧ приёмопередатчик (рисунок 11) получаем другое изделие, а FFT крутится на процессоре.

Рисунок 11. Пример характеристик двух СВЧ модулей в одном габарите.Рисунок 11. Пример характеристик двух СВЧ модулей в одном габарите.

Разработкой СВЧ мы тоже занимаемся сами, но тут стоит отметить, что разработка - это не просто расчет ФАР нужной формы. Это долгий процесс от идеи и до серийной сборки, расхлебывая решая все проблемы на своём пути. Например, есть нормы ГКРЧ (РЕШЕНИЕ от 7 мая 2007 года N 07-20-03-001 О выделении полос радиочастот устройствам малого радиуса действия), по которым разрешённым диапазоном в России считается 24,05 24,25 ГГц. Это значит, что использовать мы можем ЛЧМ максимум 200 МГц (а аппаратно можем - до 1500 МГц... Жаль...), и, применяя в качестве основного математического аппарата FFT, у нас будет следующее ограничение:

\frac{1}{T} = \frac{f_{\text{BW}}}{T}*\left( \frac{2*\Delta d}{c} \right)\Delta d = \frac{c}{{2*f}_{\text{BW}}} = \frac{300E6}{2*200E6} = 0.75\ м\ \

Другими словами, если забыть про всё, что реально расширяет нам каждый бин FFT (например, наложение оконной функции), ЛЧМ в 200 МГц обеспечивает нам разрешающую способность по дальности в 75 см. Но 200 МГц должны быть стабильными, иначе будет нарушение ГКРЧ. А так как мы должны использовать максимально дешевые доступные СВЧ микросхемы, ожидаемо, что с термостабилизацией у них не очень. Можно и нужно вносить аналоговую термокомпенсацию (например вводя термисторы в схему управления ГУН). Таких СВЧ приёмопередатчиков мы собрали уже несколько тысяч и можем поделиться обобщенной статистикой (рисунок 12).

Рисунок 12. Пример характеристик частотно-температурных зависимостей (слева зависимость абсолютного значения частоты в МГц от температуры, справа - зависимость полосы ЛЧМ сигнала от температуры), при подаче модулирующего сигнала лабораторным генератором.Рисунок 12. Пример характеристик частотно-температурных зависимостей (слева зависимость абсолютного значения частоты в МГц от температуры, справа - зависимость полосы ЛЧМ сигнала от температуры), при подаче модулирующего сигнала лабораторным генератором.

Видно, что термокомпенсация получилась неплохой, максимальный разброс 15 МГц и в крайних значениях температуры (минус 40 плюс 85 градусов). Если считать грубо, то это 30 МГц на 125 градусов или 0,24 МГц на градус (основные импортные аналоги обеспечивают 1 МГц на градус). Но ГКРЧ нарушается, значит, нужна дополнительная стабилизация. На модуле СВЧ для этой цели предусмотрен сигнал делителя частоты (рисунок 10); сигнал делителя - низкочастотный, порядка 24 кГц заводится на вход таймера TMR1. TMR1 записывает в память текущее значение счетчика тиков процессора, затем TMR1 отсчитывает до 1000 и снова записывает значение счетчика тиков процессора. Сравнивая эти значения, можно достаточно точно получить значение делителя частоты.

Хорошо, частоту СВЧ сигнала мы теперь знаем, нужно её скорректировать с помощью ЦАП, соответственно, точность подстройки частоты зависит от разрядности и качества ЦАП. Мы получили точность подстройки частоты СВЧ сигнала не хуже 240 кГц, что соответствует 110-3% от частоты 24,15 ГГц. Процесс подстройки представлен на рисунке 13.

Рисунок 13. Пример частотно-временной зависимости при включении радара.Рисунок 13. Пример частотно-временной зависимости при включении радара.

Другой вопрос - изменяется ли диаграмма направленности при использовании крышки из радиопрозрачного материала? К сожалению, крышка почти всегда ведет себя как сильная неоднородность, но при правильном подборе параметров (материал, толщина, самое важное расстояние от ФАР), в целом, всё будет терпимо. Наибольшие трудности возникают, когда необходима широкая диаграмма, так как увеличивается число возможных переотражений и даже если всё сделано правильно, крышка выступает в качестве диэлектрической линзы и немного обужает диаграмму.

Приведу пример измерений для немного другого радара с использованием следующих крышек: напечатанной на 3D принтере со 100% заполнением (красный), такой же, но отлитой из "типового" обычного пластика Vg280 (голубой), отлитой из "типового" пластика, но на скорректированном расстоянии от ФАР (зеленый) (рисунок 14).

Рисунок 14. Измерение диаграммы направленности.Рисунок 14. Измерение диаграммы направленности.

В общем, нюансов множество, но со всеми можно справиться, если много страдать читать и работать... Зато и результаты есть! Рассмотрим подробнее приборы, разработанные на основе Однолучевого радара.

Радар Поток-1, ТСКЯ.466369.007, является радиолокационным детектором транспортных средств (ТС) и предназначен для автоматизированного учета интенсивности дорожного движения. Детектор определяет следующие основные параметры: количество обнаруженных ТС, средняя скорость, загруженность, количество полос, классификация обнаруженных ТС; а для каждого из обнаруженных ТС скорость, длину, класс, номер полосы движения.

Наименование параметра, единица величины

Значение

Диапазон напряжений питания постоянного тока, В

От 9 до 32

Потребляемая мощность изделия по цепям питания при напряжении питания 12 В, Вт, не более

3

Диапазон изменения рабочей частоты, ГГц

От 24,05 до 24,25

Максимальная мощность излучаемого сигнала, мВт, не более

100

Угол обзора изделия по горизонтали, не более

16

Угол обзора изделия по вертикали, не менее

60

Диапазон измеряемых скоростей, км/ч

От 5 до 160

Число одновременно анализируемых полос, не более

12

Анализируемая дальность, м

От 2 до 60

Рабочая температура среды, С

От 40 до +75

Габаритные размеры, мм, не более

14012035

Масса, кг, не более

0,3

Возможность оснащения модулем отечественного ГЛОНАСС/GPS приемника

Опционально

Возможность оснащения интерфейсами Ethernet, CAN, RS-485, RS-232

Опционально

Детектор располагается возле контролируемого участка дорожного полотна на высоте 4-6 метров в зависимости от числа полос и необходимой максимальной дальности детектирования. В азимутальной (горизонтальной) плоскости детектор направляется ортогонально дороге, в угломестной плоскости, со смещением в 15-35 градусов (с наклоном в сторону дорожного полотна, рисунок 15).

Рисунок 15. Фотография установки радара Поток-1 на объекте эксплуатации.Рисунок 15. Фотография установки радара Поток-1 на объекте эксплуатации.

Радар Скорость-1, ТСКЯ.466369.006, является радиолокационным измерителем скорости движения и предназначен для обнаружения движущихся ТС, детектирования их скорости и направления движения. Измеритель может определять скорость целей с учетом направления их движения (только встречные, только попутные, оба направления), выделять скорости самой быстрой цели из группы и цели с наибольшей амплитудой принятого сигнала.

Наименование параметра, единица величины

Значение

Диапазон напряжений питания постоянного тока, В

От 9 до 32

Потребляемая мощность изделия по цепям питания при напряжении питания 12 В, Вт, не более

3

Диапазон рабочей частоты, ГГц

От 24,05 до 24,25

Максимальная мощность передающего устройства, мВт, не более

100

Угол обзора изделия по горизонтали, не более

16

Угол обзора изделия по вертикали, не более

26

Диапазон измеряемых скоростей, км/ч

От 10 до 320

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

1

Дискретность выдаваемой измерителем информации, км/ч, не более

0,5

Дальность измерения скорости транспортного средства, м

От 10 до 180

Рабочая температура среды, С

От - 40 до +75

Габаритные размеры, мм, не более

14012035

Масса, кг, не более

0,3

Возможность оснащения модулем отечественного ГЛОНАСС/GPS приемника

Опционально

Возможность оснащения интерфейсами Ethernet, CAN, RS-485, RS-232

Опционально

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

Рисунок 16. Применение радара скорость для информирования о опасном участке дороги.Рисунок 16. Применение радара скорость для информирования о опасном участке дороги.

Радары Поток-1 и Скорость-1 соответствуют требованиям ГОСТ Р 50856-96, ГОСТ 33991 2016, ГОСТ Р 50607-2012 с уточнениями, изложенными в технических условиях, являются конструктивно законченными, самостоятельными, изделиями и имеют класс защиты IP67 по ГОСТ 14254-2015.

Заключение.

Работа над радарами не останавливается думаю в следующей части статьи можно подробнее рассказать про именно автомобильные радары на 24 ГГц и 77 ГГц, сейчас просто покажу их внешний вид, рисунок 17.

Рисунок 17. Внешний вид автомобильных радаров МАРС2А1 (правее, ниже)и Обзор-77-2 (левее, выше).Рисунок 17. Внешний вид автомобильных радаров МАРС2А1 (правее, ниже)и Обзор-77-2 (левее, выше).

Спасибо, что дочитали..

Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru