Category: статьи

Дек 09 2011

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

LCD-индикатор MI0350CT-3 имеет подсветку из соединенных последовательно светодиодов. Для питания такой подсветки необходим преобразователь напряжения с выходным напряжением от 16,8В до 21,6В и током до 20мА. Кроме этого, необходимо иметь возможность программного регулирования яркости подсветки.

На рисунке показана схема повышающего преобразователя, питающего нагрузку стабильным током 20мА. Преобразователь построен на основе микросхемы LM2733XMF.

Рис. 1. Принципиальная схема преобразователя (нажмите для увеличения).

Ток в нагрузке (в режиме стабилизации тока) задается резистором R4, делитель напряжения R2 R3 служит для ограничения выходного напряжения при разомкнутом выходе (режим стабилизации напряжения). Без цепи R2 R3 напряжение на выходе при отсутствии нагрузки будет неограниченно расти до выхода из строя микросхемы преобразователя.

Read more »

Окт 03 2011

Аналого-цифровое преобразование для начинающих

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

Полный текст опубликован на Хабрахабре: http://habrahabr.ru/blogs/easyelectronics/125029/

Июл 17 2011

Прецизионный АЦП с гальванической развязкой

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

Структурная схема АЦП приведена на рис. 1.

Рис. 1. Структурная схема АЦП.

Непосредственно аналого-цифровое преобразование выполняет АЦП AD7792 (16 бит) либо AD7793 (24 бит). Входным буфером, обеспечивающим высокое входное сопротивление, является инструментальный усилитель AD8220. Коэффициент усиления инструментального усилителя задается прецизионным резистором R2 (выделен красным). Фильтрация сигнала осуществляетя фильтром R1C1.

Выход инструментального усилителя сдвигается вверх на величину 2500 mV (1/2 напряжения питания), для того, чтобы вывеси нулевой уровень входного сигнала на половину шкалы АЦП. В качестве источника напряжения сдвига используется внешний источник опорного напряжения REF192. Его выходное напряжение подается на вход сдвига инструментального усилителя и на вход (-) АЦП через буфер-повторитель.

Такой АЦП позволяет измерять постоянные входные напряжения, поступающие с датчиков, обеспечивая точность порядка 0,05% полного диапазона (точность зависит от режима работы АЦП и может быть повышена).

Следует отметить, что при подключении АЦП по схеме, изображенной на рисунке, зависимость кода АЦП от напряжения будет обратной, т.е. при нулевом сигнале код АЦП будет около 32768 (16-битный АЦП, биполярный режим), при максимальном входном напряжении код АЦП будет иметь околонулевое значение.

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

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

Ноя 19 2010

Прерывания в Cortex M3. Часть 3

В предыдущей части (http://32bit.me/?p=842) были рассмотрены основные функции работы с прерываниями микроконтроллера LPC17хх. Однако, рассмотренные функции не работают с особым видом прерываний ядра Cortex M3 — системными исключениями. Ниже будет рассмотрена работа с системными исключениями на примере системного исключения SysTick. Также будет рассмотрено одно исключение из тех правил работы с прерываниями, которые рассматривались в части 2.

Read more »

Ноя 17 2010

Прерывания в Cortex M3. Часть 2

В первой части (http://32bit.me/?p=839) были приведены некоторые сведения о структуре контроллера прерываний Cortex M3. В этой части будут рассматриваться примеры обработки прерываний в этой архитектуре.

Read more »

Ноя 12 2010

Прерывания в Cortex M3. Часть 1

По сравнению с микроконтроллерами ARM7, такими как LPC2368, в архитектуре Cortex M3 наибольшей модернизации подверглась система прерываний. Она стала существенно более сложной и гибкой. Ниже будут рассмотрены некоторые особенности нового контроллера прерываний (Nested Vectored Interrupt Controller, NVIC).

Read more »

Ноя 11 2010

Repetitive Interrupt Timer

Repetitive Interrupt Timer (RIT) является ещё одним таймером, которого не было в ARM7, и который появился в Cortex M3. Как следует из названия, он предназначен для генерации прерываний, повторяющихся через определённые промежутки времени. Его структура намного проще, чем у обычного таймера-счётчика, но несколько сложнее, чем у SysTick, рассмотренного здесь: http://32bit.me/?p=796. В большинстве практических случаев эти таймеры взаимозаменяемы.
Ниже будет рассмотрено применение таймера RIT.

Read more »

Ноя 10 2010

Таймер SysTick

В микроконтроллерах LPC17xx (ядро Cortex M3), наряду с обычными универсальными таймерами-счётчиками в количестве 4-х штук есть два дополнительных таймера: SysTick и Repetitive Interrupt Timer, использование которых позволяет освободить универсальные таймеры-счётчики для других целей.

Read more »

Сен 17 2010

Протокол Modbus в устройствах на базе микроконтроллеров. Часть 2.1. Программная поддержка протокола

Для поддержки протокола Modbus RTU программа должна принимать символы, поступающие в порт и размещать их в буфере приёма. Признаком окончания сообщения служит тайм-аут, т.е. прекращение поступления символов в течение 3,5 — 4.5 длительностей передачи одиночного символа.

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

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

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

В этой статье будет рассмотрен только режим Modbus RTU, как наиболее распространённый в настоящее время.

Read more »

Авг 24 2010

Распределение памяти в IAR

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

Пример:

xdtento.o             452       72
 xfdnorm.o             130
 xfdscale.o            192
 xfexp.o               352
 xgetmemchunk.o         40                 4
 xprintffull.o       3 266        8
 xpurevirtual.o          6
 xreportassert.o       116       48
 xsprout.o              10
 xstod.o               188       16
 xstoflt.o             432       32
 xstopfx.o             246
 xstoul.o              280       80
 xsyslock.o            136                20
 xxmemxfree.o          136
 xxmemxmalloc.o        188                 8

Здесь в первом столбце указаны имена функций, во втором размер кода, размещённого в ПЗУ, в третьем столбце указан размер данных, размещённых в ПЗУ (констант), в последнем столбце указан размер данных, размещённых в ОЗУ (переменных). Из этого фрагмента мы можем узнать, например, что модуль xprintffull (вероятно, содержащий реализации функций printf, sprintf и т.п.) занимает довольно существенный размер, больше 3 Кб.

Вообще изучение данного файла может быть весьма познавательным. Если же ваша программа содержит много массивов данных, размещаемых в ПЗУ, то по этой таблице можно ещё раз убедиться в том, что ни один из них не попал случайно в ОЗУ (если перед объявлением массива пропущен модификатор const).