Фильтр по тематике

Цифровой вольтметр с высоким разрешением. Часть 1. Принципиальные схемы устройств

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

10.10.2020 3528 0
Цифровой вольтметр с высоким разрешением. Часть 1. Принципиальные схемы устройств

Введение

Для увеличения разрешающей способности АЦП используется хорошо известный метод передискретизации и осреднения. Применение этого метода к встроенному в микроконтроллер EFM8LB12 (Silicon Laboratories) 14-разрядному SAR-АЦП позволило довести его разрешение до 6 значащих десятичных разрядов (1 знак перед запятой и 5 знаков поле запятой) [1]. При этом производилось 16-кратное осреднение 2048 двухбайтных слов (т.е. 32 768 слов), являющихся результатами аналого-цифрового преобразования, при темпе вывода около 24 показаний в секунду. В схеме тестируемого устройства использовался внутренний источник опорного напряжения (ИОН) микроконтроллера напряжением 2,4 В. Это напряжение подавалось на повторитель напряжения на базе ОУ, а с него – на делитель напряжения на переменном резисторе, с движка которого напряжение подавалось на вход АЦП через ещё один повторитель напряжения. Осреднённые результаты аналого-цифрового преобразования без обработки передавались в компьютер, где осуществлялась окончательная обработка и вывод результатов на монитор. Для связи с компьютером использовался изолированный преобразователь интерфейсов USB-SPI на базе микроконтроллера EFM8UB10 [2, 3]. Таким образом, микроконтроллер EFM8LB12 передаёт данные по интерфейсу SPI, а компьютер получает их по интерфейсу USB.

Высокие показатели АЦП микроконтроллера EFM8LB12 натолкнули автора на идею: а нельзя ли сконструировать автономный цифровой вольтметр на батарейном питании на базе этого микроконтроллера? Вместо передачи результатов АЦП в компьютер такой вольтметр будет отображать их на жидкокристаллическом индикаторе (ЖКИ). Потребление тока EFM8LB12 при частоте внутреннего тактового генератора 72 МГц составляет всего 13 мА, а потребление тока ЖКИ с контроллером не превышает нескольких сотен мкА. В качестве источника питания вполне возможно использовать, например, литиевую батарею ER18505 с напряжением 3,6 В, ёмкостью около 4 А•ч, размером 18´50 мм. Срок службы такой батареи составляет около 10 лет, а время непрерывной работы вольтметра, как нетрудно подсчитать, составит примерно 300 ч. При использовании более ёмкой батареи ER26500 (9 А•ч, 26´50 мм) время работы увеличится более чем в 2 раза.

Актуальность данной разработки на фоне огромного ассортимента недорогих мультиметров заключается в том, что дешёвые цифровые мультиметры при измерении напряжения имеют разрешение не больше 4 десятичных разрядов. Если же требуется цифровой вольтметр с 5 значащими цифрами, то его стоимость возрастает уже до $1000 и выше, а при 6 значащих цифрах – ещё на порядок больше. Стоимость же микроконтроллера EFM8LB12 не превышает $2, ЖКИ с контроллером – не более $2…3, стоимость батареи ER18505 – меньше $3 (ER26500 – не более $5). Стоимость корпуса вольтметра также не превышает $2…3. Таким образом, стоимость всего вольтметра с 6 значащими десятичными цифрами не превысит $10…15.

Для чего может понадобиться такая высокая разрешающая способность? Приведём простой пример. Предположим, сконструирован стабилизатор напряжения (например, на напряжение 30 В с максимальным током 10 А) с малыми пульсациями и малым падением напряжения для использования в УМЗЧ. При подключении к такому стабилизатору нагрузки в 3 Ом его выходное напряжение должно несколько упасть, однако если измерить его обычным цифровым тестером с 4 значащими цифрами, то это напряжение по показаниям такого тестера останется неизменным. Причём при подобных измерениях напряжения интерес представляет не столько абсолютное значение напряжения (которое может варьироваться до нескольких десятых вольта, лишь бы оно оставалось постоянным), сколько его изменение в ответ на изменение тока.

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

Ниже приведено описание двух вариантов цифрового вольтметра с разрешением 6 значащих цифр. Они имеют два диапазона измерения напряжений: 1-й диапазон – 0…6 В (1 цифра до запятой и 5 цифр после), 2-й диапазон – 0…60 В (2 цифры до запятой и 4 цифры после). Первый вариант вольтметра отличается несколько повышенным абсолютным значением измеряемого напряжения, второй – более простой, в связи с чем менее габаритный и более удобный в использовании.

Принципиальные схемы устройств

На рисунке 1 представлена схема платы цифрового вольтметра первого варианта с повышенной точностью абсолютного значения измеряемого напряжения. Как видно из схемы, она не отличается особой сложностью. В схеме использован микроконтроллер EFM8LB12F64-QFN24 (DD1) в корпусе QFN24 с 24 выводами и размером 3´3 мм. Входное измеряемое напряжение (сигнал Вх+) подаётся на разъём XUвх (два цанговых штыря с шагом 2,54 мм). К этому разъёму подключён двухпроводный кабель (см. рис. 2г), на одном из концов которого расположен ответный разъём SIP-02, представляющий собой два цанговых гнезда с шагом 2,54 мм (этим концом кабель подключается к разъёму XUвх на рисунке 1).

Вторые концы проводов соединены с входными клеммами B1 и B2 (BP-301G) соответственно чёрного и красного цветов, расположенными на лицевой панели корпуса; на эти клеммы подаётся измеряемое входное напряжение.

К разъёму XUвх подключён аттенюатор, представляющий собой делитель напряжения и состоящий из последовательно соединённых резисторов R3...R7. Соотношение номиналов резисторов подобрано таким образом, что отношение суммы сопротивлений R3...R6 к резистору R7 равно 1/19, т.е. (R3+R4+R5+R6)/R7 = 1/19, в связи с чем напряжение на движке резистора R6 (сигнал ´20) в 20 раз меньше входного напряжения. Кроме того, сумма сопротивлений R3 и верхней по схеме части подстроечного резистора R4 равна сумме сопротивлений нижней по схеме части резистора R4 и резисторов R5, R6 и R7, поэтому напряжение на движке резистора R4 (сигнал ´2) равно половине входного напряжения, т.е. составляет 0,5 Uвх. Подстроечные резисторы R4 и R6 отечественные, типа СП5-2ВБ (на 40 оборотов), вместо которых можно применить импортные 3296W (на 25 оборотов), что несколько хуже, т.к. количество оборотов определяет точность настройки.

Оба сигнала ´20 и ´2 подаются на разъём выбора диапазона измерений XD, представляющий собой сдвоенную линейку из 3 цанговых штырей с шагом 2,54 мм, т.е. 6-штыревой цанговый разъём (PDLM-06). К этому разъёму подключается кабель (см. рис. 2б), на одном конце которого расположен разъём PBDM-2´3 (XD1) – сдвоенная линейка из 3 цанговых гнёзд с шагом 2,54 мм (именно этим концом кабель подключается к разъёму XD), а второй его конец припаян к сдвоенному двухпозиционному переключателю ВК1 – ПТ69-2 (см. рис. 2). Этот тумблер расположен на лицевой поверхности корпуса вольтметра и служит для переключения диапазонов измерения напряжения (0…6 В – нижнее положение или 0…60 В – верхнее положение).

При выборе диапазона 0…6 В тумблер ВК1 (см. рис. 2б) замыкает свои контакты 3–2 и 6–5, в связи с чем замыкаются между собой сигналы DIAP (4-й вывод XD1) и GND (2-й вывод XD1), а также сигналы CALV (3-й вывод XD1) и x2 (1  вывод XD1). Поскольку разъём XD1 (см. рис. 2б) подключён к разъёму XD (см. рис. 1), то сигнал DIAP (4-й вывод XD) соединяется с «землёй» (2-й вывод XD), т.е. на нём имеется состояние лог. 0, а сигнал CALV соединяется с сигналом x2 (1-й вывод XD), который соединён с движком резистора R4 и на котором имеется потенциал, равный половине входного напряжения Вх+ (2-й вывод разъёма XUвх). Для «сообщения» микроконтроллеру о том, что выбран тот или иной диапазон, сигнал DIAP подключён к его порту P03 (23-й вывод DD1). В данном случае низкое состояние сигнала DIAP (лог. 0) «сообщает» микроконтроллеру, что выбран именно диапазон 0…6  В, и входное напряжение (в  программе) будет умножено на 2.

Сигнал CALV (3-й вывод разъёма XD) подаётся на неинвертирующий вход операционного усилителя (ОУ) OPA335 (3-й вывод DA2), на котором собран повторитель напряжения: его выход (1-й вывод) соединён с инвертирующим входом (4-й вывод). ОУ питается однополярным напряжением +3,5 В: вывод +V (5-й вывод) подключён к напряжению +3,5 В, а вывод –V (2-й вывод) заземлён. Конденсатор C3 служит для обеспечения штатного режима работы ОУ. ОУ OPA335 обладает двумя особенностями. Во-первых, это ОУ с «нулевым» смещением, во-вторых, он является «rail-to-rail input» и «rail-to-rail output», т.е. способен воспринимать входной сигнал от –V до +V и должен воспроизводить выходной сигнал от –V до +V. Что касается входного сигнала, то ОУ действительно воспринимает входной сигнал от 0 до +3,5 В, а вот его выходной сигнал на несколько милливольт меньше входного при его значении +3,5 В и на несколько милливольт больше входного, если он равен нулю. Но максимальное значение входного сигнала не должно превышать значения выходного напряжения источника опорного напряжения (ИОН), которое составляет +3 В (см.  далее), поэтому точно воспроизвести напряжение +3 В ОУ может. А вот точно воспроизвести нулевой потенциал без дополнительных схемных решений ОУ, к сожалению, не может. А между тем, например, при калибровке «нуля» АЦП микроконтроллера от ОУ может потребоваться точное воспроизведение нулевого потенциала при его входном сигнале, равном нулю. Эта проблема решена производителем ОУ. Для точного воспроизводства нулевого выходного сигнала, при заземлённом входе, к выходу ОУ необходимо подключить резистор в несколько десятков кОм, который своим вторым концом должен быть подключён к источнику отрицательного напряжения. В справочном листке на ОУ OPA335 указано, что если подключить выход ОУ к потенциалу –5 В через резистор 40 кОм, то ОУ может воспроизвести выходной сигнал, не только равный земляному потенциалу, но и значительно ниже, вплоть до –2 мВ. Но создать отрицательный потенциал –5 В весьма проблематично: для этого потребуется две батарейки по 3,6 В и стабилизатор на –5 В. Однако если использовать только одну батарейку на 3,6 В, то необходимо номинал резистора 40 кОм пропорционально уменьшить в 5/3,5 = 1,43 раза, т.е. до 28 кОм. Ближайший к 28 кОм номинал из ряда Е24 составляет 27 кОм. Ему и равен номинал резистора R8, подключённого между выходом ОУ (1-й и 4-й выводы DA2) и потенциалом –3,5 В (см. рис. 1).

При выборе диапазона 0…60 В замыкаются контакты 1–3 и 4–6 тумблера ВК1 (см. рис. 2б). При этом сигнал DIAP микроконтроллера DD1 (см. рис. 1) остаётся в высокоимпедансном состоянии (лог. 1) в связи с тем, что при инициализации микроконтроллера выбрана опция, при которой к его портам, если они инициализированы как входы, подключаются слаботоковые подтяжки, соединённые с напряжением питания (см. далее). При этом микроконтроллеру «сообщается», что входное напряжение необходимо умножить на 20. Кроме того, сигнал CALV (это вход ОУ DA2) подключается к сигналу ´20 (5-й вывод разъёма XD, рис. 1), который соединён с движком резистора R6 и на котором напряжение в 20 раз меньше входного.

Выходной сигнал с повторителя на DA2 через RC-цепочку R9C9 далее поступает на вход АЦП микроконтроллера (сигнал ADC_IN, 24-й вывод DD1). Цепочка R9C9 – это своеобразный НЧ-фильтр, который обязательно должен присутствовать на входе АЦП, т.е. является штатным при использовании любого SAR АЦП.

Конденсаторы C10, C11 и C12 служат для исключения наводок на аттенюаторе, поскольку его входное сопротивление составляет чуть более 1 МОм. Даже если исключить сопротивление резистора R6 (которое определяется в процессе настройки – см. далее), входное сопротивление аттенюатора будет равно сумме сопротивлений R3 (560 кОм), R4 (15 кОм), R5 (510 кОм) и R7 (57,6 кОм), что составляет 1142,6 кОм, т.е. заведомо больше 1 мОм. Большое входное сопротивление приводит к тому, что даже прикосновение к прибору руками отражается на дисплее. При установке конденсаторов C10 и C12, если на вход вольтметра не подано никакого напряжения, на дисплее отражается полный ноль в обоих диапазонах. Конденсатор C11 устанавливается опционально, если в диапазоне 0…60 В при отсутствии напряжения на входе вольтметра на дисплее не отражается полный ноль.

Опорное напряжение +3 В для АЦП микроконтроллера формируется ИОН AD780BR (DA1). Наилучшее напряжение питания этого ИОН, при котором он имеет минимальную погрешность, согласно справочному листку составляет +5 В. Это напряжение формируется стабилизатором LP2950Z5.0 в корпусе TO92 (DA3) из питающего напряжения +7 В. Конденсатор C13 служит для обеспечения штатного режима работы DA3. Потребление тока LP2950Z5.0 составляет около 120 мкА, а его выходное напряжение находится в пределах от 4,9 до 5,1 В. Вместо LP2950Z5.0 можно использовать ИОН ADR293GT9 в таком же корпусе. Его потребление тока на порядок ниже (около 11 мкА), а выходное напряжение самого низкого класса «G» находится в пределах от 4,99 до 5,01 В, что также на порядок точнее, чем у LP2950Z5.0. По стоимости ADR293GT9 всего в 2 раза дороже LP2950Z5.0.

Для получения опорного напряжения +3 В вывод «2.5/3.0» ИОН AD780 необходимо заземлить (8-й вывод DA1). Конденсаторы C4, C6 и C7 служат для штатной работы DA1, а конденсаторы C5 и C8 существенно снижают выходной шум ИОН. Выходное напряжение ИОН (сигнал Vref) подаётся на вход опорного напряжения микроконтроллера P0.0/Vref (2-й вывод DD1). Кроме того, Vref подаётся на разъём XC1 (1-й вывод), предназначенный для калибровки нуля и полной шкалы АЦП микроконтроллера. На 2-й вывод XC1 подаётся сигнал CALV, 3-й вывод XC1 заземлён. Для калибровки также используется разъём XC2 (см. рис. 2е). Оба разъёма – 3 штыревые с шагом 1,27 мм (PLL-03). Сигнал CAL1 (3-й вывод XC2) подаётся на порт P1.6 микроконтроллера (11-й вывод DD1) и служит для «сообщения» микроконтроллеру о том, что необходимо включить подпрограмму калибровки полной шкалы. Сигнал CAL0 (1-й вывод XC2) подаётся на порт P1.5 микроконтроллера (12-й вывод DD1) и предназначен для «сообщения» микроконтроллеру о том, что необходимо произвести калибровку нуля АЦП. Порты P1.5 и P1.6 микроконтроллера назначены (подпрограммой инициализации – см. далее) как цифровые входы, в которых включена опция слаботоковых подтяжек к напряжению питания. При калибровке на разъёмы XC1 и XC2 надеваются двухконтактные перемычки.

Для калибровки полной шкалы необходимо надеть перемычку на контакты 1 и 2 разъёма XC1, а также ещё одну перемычку на контакты 2 и 3 разъёма XC2. При этом будут соединены сигналы CALV и Vref, в связи с чем на вход ОУ DA2 (-й3 вывод) будет подано опорное напряжения Vref, которое с выхода DA2 (1-й вывод) через цепочку R9C9 поступит на вход АЦП DD1, или, другими словами, на этом входе будет присутствовать опорное напряжение Vref (+3 В). Одновременно на входе CAL1 (11-й вывод DD1) будет установлен низкий уровень (лог. 0).

Для калибровки нуля на контакты 2 и 3 разъёма XC1 и контакты 2 и 1 разъёма XC2 надеваются перемычки. При этом на входе АЦП будет нулевое напряжение «земли», а на входе CAL0 – потенциал лог. 0. Процедура калибровки нуля и полной шкалы будет подробно описана далее.

Для сопряжения микроконтроллера с ЖКИ используется интерфейс SPI, работающий в 3-проводном режиме ведущего (master) и только на вывод. Для этого используются сигналы: SCK (тактовый сигнал) и MOSI (Master Output Slave Input). Кроме того, отдельно используются два сигнала выбора кристалла: CSML и CSST. Эти сигналы выведены на порты микроконтроллера, настроенные при его инициализации (см. далее) как цифровые выходы (push-pull). Сигнал SCK выведен на порт P07 (19-й вывод DD1), MOSI – на порт P11 (17-й вывод), CSML – на порт P12 (16-й вывод), CSST – на порт P13 (14-й вывод). Все 4 сигнала подаются на разъём XЖ, представляющий собой линейку из трёх сдвоенных и загнутых под 90° штырей с шагом 2 мм (PLD2-06R). На этот же разъём подаётся «земляной» потенциал (4-й вывод) и напряжение питания +3,5 В (6-й вывод). С ЖКИ этот разъём соединяется 6-проводным кабелем (см. рис. 2а), на одном конце которого расположен ответный разъём XЖК (линейка из 3 сдвоенных гнёзд с шагом 2 мм – PBD2-2´03), который надевается на разъём XЖ (см. рис. 1), а на втором конце кабеля расположен 6-контактный разъём XЖ1К (гнездо IDC6), предназначенный для подключения к ЖКИ (см. далее).

Микроконтроллер может программироваться с помощью двух интерфейсов. Первый интерфейс – C2 – двухпроводный интерфейс с сигналами RST/C2CK (5-й вывод DD1) и C2D (6-й вывод DD1). Этот интерфейс используется USB-DEBUG-адаптером, который сопрягается с компьютером по интерфейсу USB. Сигналы интерфейса C2 выведены на 3-штыревой разъём XB, представляющий собой 3 штыря с шагом 1,27 мм (PLL-03). Сигнал C2D подключён ко 2-му выводу XB, а сигнал RST/C2CK – к 3-му выводу. Кроме того, 1-й вывод разъёма XB заземлён. Для штатной работы микроконтроллера и его программирования сигнал RST/C2CK подключён к резистору R2 цепочки R1R2C1, в которой конденсатор C1 заземлён, а резистор R1 подключён к напряжению питания. Более подробно о принципиальной схеме для программирования микроконтроллера EFM8LB12 с помощью USB-DEBUG-адаптера рассказано в книге автора [3].

Микроконтроллер EFM8LB12 может также программироваться и по интерфейсу RS-232 (через порт COM1 компьютера). Эта новая опция, которая присутствует во всех микроконтроллерах EFM8, позволяет отказаться от дорогостоящего USB-DEBUG-адаптера, но требует изготовления преобразователя уровней интерфейса RS-232 в уровни TTL. Во все микроконтроллеры EFM8 записан так называемый boot_loader (загрузочная программа по интерфейсу RS-232). Для программирования по RS-232 используются сигналы TxDM (22-й вывод DD1) и RxDM (21-й вывод DD1), которые выведены на 4-штырьковый разъём XRS, представляющий собой 4 штыря с шагом 1,27 мм. Сигнал TxDM подключён ко 2-му выводу разъёма XRS, а RxDM – к 3-му. Кроме того, на этот же разъём подано напряжение питания +3,5 В (4-й вывод) и «земля» (1-й вывод). Более подробно о программировании микроконтроллеров EFM8 по интерфейсу RS-232 рассказано в статье [4]. Здесь следует добавить, что для ввода микроконтроллера в режим программирования по интерфейсу RS-232 следует заземлить сигнал C2D в разъёме XB, т.е. надеть на его 1-й и 2-й контакты перемычку. Эта перемычка на рисунке 1 обозначена пунктиром.

Питание вольтметра осуществляется от трёх литиевых батареек напряжением 3,6 В: BAT1, BAT3 – ER1450H/T ёмкостью 1,2 А•ч, размером 14´50 мм и BAT2 – ER26500H/T ёмкостью 9 А•ч, размером 26´50 мм (см. рис. 2д). Эти батарейки выпускаются с приваренными к их полюсам металлическими лепестками шириной 3 мм, толщиной 0,2 мм и длиной около 20 мм (длина лепестка, выходящего за корпус батарейки, составляет около 8 мм). Для подключения батареек к проводам как нельзя лучше подходят ответные части (2.8F) так называемых ножевых клемм (2.8М) шириной 3 мм и толщиной 0,5 мм. Для надёжного контакта лепестка батарейки с клеммой 2.8F её необходимо несколько поджать. К самой клемме припаивается и прижимается провод. Далее на клемму надевается термоусадочная трубка соответствующего размера. На рисунке 2д эти клеммы обозначены как KL1...KL6. Соединив батарейки по схеме, показанной на рисунке 2д, можно получить три напряжения питания: +7 В, +3,5 В и –3,5 В. Эти напряжения по 4-проводному кабелю подаются на 4-контактный выходной разъём PBS2-04 (XP1), представляющий собой линейку из 4 гнёзд с шагом 2 мм. Подача напряжений на разъём XP1 осуществляется двухпозиционным строенным выключателем MTS-203 (ВК2), который устанавливается на лицевую часть корпуса. «Земля» (2-й вывод XP1) соединена с батареями BAT2 и BAT3 постоянно. Сам разъём XP1 надевается на 4-штырьковый разъём питания ХР, расположенный на плате вольтметра. Этот разъём представляет собой штыри с шагом 2 мм, загнутые под углом 90° (PLS2-04R).

Подсчитаем потребление тока вольт­метром:

  • ИОН AD780 при питании 5 В – 850 мкА;
  • стабилизатор LP2950 – 120 мкА;
  • ОУ OPA335 – 300 мкА;
  • 2 контроллера КР1820ВГ1 (COP-472)  – 200 мкА;
  • ЖКИ ИЖЦ13-8-7 – 6 мкА;
  • микроконтроллер EFM8LB12 – 13 мА;
    Итого ≈ 15,5 мА.

Напряжение батареи ER26500 (BAT2 на рисунке 2д), судя по графику зависимости выходного напряжения от времени и тока нагрузки, при токе 15 мА упадёт до 3,45 В, а ёмкость – до 7,5 А•ч, в связи с чем время непрерывной работы составит: 7500 мА•ч/15 мА=500 ч.

Потребителями батареи ER14250 (BAT1 на рисунке 2д) являются: AD780 (850 мкА) и LP2950 (120 мкА). Полное потребление составит около 1 мА. Напряжение батареи ER14250 при токе 1 мА упадёт до 3,5 В, ёмкость составит 1,2 А•ч, а время непрерывной работы будет: 1200 мА•ч/1 мА = 1200 ч.

Единственным потребителем энергии второй батарейки ER14250 (BAT3 на рисунке 2д) является резистор R8 номиналом 27 кОм. В самом худшем случае, если выходное напряжение ОУ DA2 будет равно 3 В, падение напряжения на R8 составит: 3 + 3,5 = 6,5 В, а ток: 6,5 В/27 кОм = 0,24 мА. При таком токе напряжение батарейки составит 3,5 В, а ёмкость упадёт до 1,1 А•ч. Время непрерывной работы составит: 1100 мА•ч/0,24 мА ≈ 4500 ч.

Вышеприведённые расчёты показывают, что время непрерывной работы вольтметра по схеме, представленной на рисунке 1, определяется временем работы батареи BAT2 и составит не более 500 ч. При этом срок службы батарей – не менее 10 лет, а падение их выходного напряжения в течение всего срока службы составит не более 0,1 В.

Схема сопряжения ЖКИ ИЖЦ 13-8-7 с двумя контроллерами КР1820ВГ1 достаточно проста (см. рис. 3) [5, 6].

Несмотря на большое количество проводов, схема легко разводится (см. далее), при этом размер платы примерно в 1,5 раза меньше размера самого ЖКИ. Хотя дисплею ИЖЦ 13-8-7 уже около 30 лет, он обладает рядом хороших особенностей: крупные, хорошо читаемые цифры, широкий угол обзора, высокий контраст, малое энергопотребление и невысокая стоимость [7]. Единственным недостатком данного устройства является необходимость применения платы сопряжения.

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

Первый момент касается принципа вывода цифр на дисплей. Каждая цифра ЖКИ состоит из 7 сегментов, обозначенных буквами А–G, десятичная точка рядом с цифрой – 8-й сегмент, обозначенный буквой H. Кроме того, над каждой цифрой имеется чёрточка – это ещё один, 9-й сегмент.

Предположим, необходимо вывести цифру «5». Для вывода, очевидно, требуется «зажечь» сегменты A, C, D, F и G. Каждый сегмент кодируется своим битом в выводимом байте. Старший бит байта – сегмент A, младший – сегмент H (точка). Таким образом, байт, соответствующий цифре «5», будет равен 10110111B, или B7h.

Каждый из двух контроллеров (D1 и D2) управляет 4 цифрами. D1 – левыми (верхними на рисунке 3), D2 – правыми (нижними на рисунке 3). Для вывода 8 цифр на ЖКИ в каждый контроллер необходимо последовательно записать по 4 байта (плюс по одному служебному байту), и цифры немедленно появятся на дисплее. Значения байт, соответствующие числу, например, «18,5047», показаны в правой части рисунка 3 (это верхние шестнадцатиричные числа, не в скобках). Один из двух контроллеров D1 и D2 является ведущим (master) и называется старшим. Это контроллер D2. Контроллер D1 является ведомым (slave) и называется младшим. При работе контроллеров в режиме «старший – младший» генератор контроллера D2 вырабатывает синхроимпульсы, которыми синхронизируется контроллер D1. При инициализации необходимо в каждый из контроллеров записать в определённой последовательности соответствующие коды [5, 6]. После инициализации устройство готово к приёму информации для вывода на дисплей.

Каждый контроллер имеет вход данных DI (7-й вывод), стробирующий (или тактовый) вход CLK (14-й вывод) и вход выбора кристалла CS (4-й вывод). Питание и «земля» подаются на выводы 5 и 6 соответственно.

Последовательность записи байт формируется следующим образом. Вначале 4 байта данных (цифры) и 5-й байт со служебным кодом и кодом чёрточек записываются в младший контроллер. 5-й байт состоит из двух полубайт (их ещё называют тетрадами или нибблами): в старшем полубайте расположен код чёрточек, а в младшем – служебный код. Перед записью 5 байт в младший контроллер необходимо на его CS (CSML) подать низкий уровень напряжения (лог. 0), а после записи 5 байт – вернуть CSML в высокий (неактивный) уровень. При этом на CSST (D2) должен быть высокий уровень (лог. 1). Запись 5 байт в старший контроллер происходит аналогично. После записи всех 10 байт число немедленно появляется на дисплее.

Если в программе организовать массив байт, соответствующих выводимым цифрам (от 0 до 9), т.е. массив размерностью 10 (например, М[10]), и придать значения элементам массива равными кодам выводимых цифр, соответствующих местоположению элементов массива, то вывод цифр существенно упрощается. Другими словами, если, Другими словами, если индекс массива j = 5, то для вывода, например, цифры «5» необходимо просто вывести М[5], и в этом случае цифра «5» появится на дисплее. Для того чтобы поставить точку после двойки, можно, например, логически сложить M[2] с 1, т.е. вывести M[2] | 1 (знак «|» – оператор побитного логического сложения).

Второй момент касается интерфейса, по которому требуется выводить цифры на дисплей. Для вывода байт в контроллеры КР1820ВГ1 из микроконтроллера имеется как минимум три возможности.

Первая состоит в том, что каждый бит выводимого байта «вручную» (программно) выводится через один из портов микроконтроллера, а стробирующий сигнал также «вручную» – через второй. Для этого порты устанавливаются в определённое состояние (лог. 0 или лог.1) через необходимые промежутки времени в соответствии с временной диаграммой вывода, показанной в [6, 7]. Однако при таком выводе необходимо будет сформировать массу временных задержек, что неизбежно приведёт к усложнению подпрограммы подобного вывода.

Второй способ – вывод байт через асинхронный приёмопередатчик (UART) микроконтроллера (ТТЛ-аналог интерфейса RS-232), работающий в синхронном режиме, когда байт выводится по линии RxD, а стробирующий сигнал – по линии TxD. Однако такой синхронный режим работы UART поддерживают далеко не все микроконтроллеры. Например, если микроконтроллер C8051F060 и поддерживает такой режим работы UART, то ни один из микроконтроллеров EFM8 не поддерживает (у них имеется только асинхронный режим работы UART).

Третий способ – вывод байта по интерфейсу SPI. В этом интерфейсе в качестве данных используется линия MOSI, а в качестве стробирующего импульса – линия SCK. Вывод байта по SPI очень простой. Для вывода байта необходимо записать его в регистр SPI0DAT, дождаться окончания установки бита передачи и сбросить этот бит. Всё остальное сделают аппаратные средства. Что касается совпадения требуемой для КР1820ВГ1 временной диаграммы с временной диаграммой вывода по SPI, то здесь проблем нет. При использовании интерфейса SPI имеются два регистра управления: это регистр полярности (POL), определяющий каким способом – фронтом (POL = 0) или спадом (POL = 1) импульса SCK – будет производиться стробирование бит данных (для КР1820ВГ1 требуется фронт) и регистр фазы (PHA), определяющий первым (PHA = 0) или вторым (PHA = 1) импульсом SCK будет стробироваться первый бит данных (требуется первым). Таким образом, при POL = 0 и PHA = 0 временная диаграмма вывода байт по SPI будет логически совпадать с требуемой. Кстати, эти значения (POL = 0 и PHA = 0) приняты в микроконтроллерах EFM8 по умолчанию. Однако для полного совпадения требуется ещё настроить необходимую скорость передачи (или частоту следования импульсов SCK). Эта скорость передачи определяется значением делителя частоты тактового генератора микроконтроллера, которая равна 72 МГц. В среде Simplicity Studio можно выбрать либо скорость (частоту SCK), тогда автоматически посчитается значение коэффициента делителя, либо значение коэффициента делителя, тогда автоматически посчитается тактовая частота импульсов SCK. Максимальная частота стробирующих импульсов для КР1820ВГ1 равна 500 кГц. Если выбрать коэффициент делителя равным, например, 90, то тактовая частота SCK установится равной 395,604 кГц (см. далее в программных средствах), т.е. около 400 кГц.

На первый взгляд, кажется, что при выводе байт по интерфейсу SPI проблем нет. Практически так оно и есть, за исключением одной трудности. Дело в том, что КР1820ВГ1 требует вывод байта младшим битом вперёд, т.е, например, при выводе цифры это бит десятичной точки (бит H – см. рис. 3), а в интерфейсе SPI принят обратный порядок следования бит: первым выводится старший бит байта. Для решения этой проблемы надо заранее переписать код каждой цифры (в том числе и служебные коды) задом наперёд. Если код пятёрки был 1011011b = B7h, то, переписав биты в обратном порядке, получим: 11101101b = EDh. На рисунке 3 переписанные коды цифр, отражаемых на ЖКИ, показаны в скобках. Если такие переписанные коды вставить в массив цифр от 0 до 9, о котором говорилось выше, то всё будет работать. Служебные полубайты и полубайты чёрточек также необходимо переписать задом наперёд. Это и было сделано в подпрограмме вывода информации на дисплей.

Третий момент касается вопроса вывода на дисплей числа с плавающей точкой, полученного в результате аналого-цифрового преобразования. Причём в зависимости от диапазона измерения десятичная точка может стоять как после первой цифры, так и после второй. Пусть такое число с плавающей запятой, например, равно 18,5047 (см. рис. 3). В памяти микроконтроллера число с плавающей запятой, как известно, занимает 4 байта, и где в этих байтах искать сами цифры и десятичную точку? В языке программирования Си есть функция вывода printf(). Функция производит форматированный вывод символов в стандартный поток вывода. Под стандартным потоком вывода может подразумеваться вывод символов через какой-либо интерфейс (например, UART). Но есть ещё одна функция – sprint(), которая вместо вывода символов в стандартный поток данных заполняет этими символами определённую область оперативной памяти микроконтроллера, а именно – массив, название которого присутствует в параметрах этой функции. Если, например, число с плавающей запятой F = 18,5047, то записав

sprintf(buf3,“%7.4f”,F),

мы получим в массиве buf3 семь символов (байт), из которых 6 будут символами цифр, а один (3-й) будет символом десятичной точки. Вывод символов функцией sprintf() осуществляется в коде ASCII. Символ «0» кодируется как 30h, «1» – как 31h, «2» – как 32h и т.д. Таким образом, «убрав» тройку из каждого старшего полубайта цифры, можно получить искомые цифры (которые уже далее вывести на дисплей). Как убрать эту тройку? Можно от каждого элемента массива buf3 просто отнять 30h, но лучше просто вообще обнулить старший полубайт, логически умножив каждый элемент массива buf3 на число 0fh, записав buf3[i]& = 0x0f, где i – индекс массива buf3 (он изменяется от 0 до 7), а & – оператор побитного логического умножения в Си. Формат “%7.4f” в функции sprintf() означает, что выводится число с плавающей запятой, состоящее из 7 символов, у которого имеется 4 знака после запятой (4 символа), сама запятая (десятичная точка) – 3-й символ и два знака перед запятой (2 символа). Далее, подставив полученные значения buf3 как индекс в вышеописанный массив M[i], получим число «18.5047» уже на дисплее.

Однако функцию sprintf(), производящую форматированный вывод чисел с плавающей запятой, можно применять, если имеется достаточно оперативной памяти, т.е. для неё требуется внешняя оперативная память, которая, в свою очередь, требует применения так называемой large-модели памяти.

В программе EFM8LB1_ADC_Autoscan_Large_Buffer.c, поставляемой компанией Silicon Laboratories как пример работы АЦП, производится осреднение 2048 двухбайтных слов (4096 байт), являющихся результатами работы АЦП. Осреднение, т.е. расчёт среднего значения, производится в целых числах, а результат осреднения также в целых числах выводится в стандартный поток данных по интерфейсу RS-232 в компьютер. Вывод осуществляется функцией printf(), работающей, естественно, также с целыми числами. При этом используется так называемая small-модель, a в качестве оперативной памяти для программы используется только внутренняя оперативная память микроконтроллера (128 байт), тогда как внешняя (XRAM) практически полностью занята – там как раз находятся результаты АЦП (4096 байт). Другими словами, в этой программе не используются расчёты с числами с плавающей запятой, а функция printf(), работающая с целыми числами, в small-модели разрешена.

В предлагаемой автором программе, приведённой в [1], вообще не производится никаких расчётов. Результаты работы АЦП в целых числах (просто суммы) без обработки выводятся по интерфейсу SPI и далее по интерфейсу USB передаются в компьютер. А в компьютере уже производятся все расчёты с плавающей запятой и форматированный вывод этих чисел на монитор. В этой программе (для микроконтроллера) также используется small-модель. При этом, как показано в [1], уже при 16-кратном осреднении 2048 двухбайтных слов 5-й знак после запятой в результатах работы АЦП не меняется, из чего делается вывод, что 32-кратное осреднение избыточно. Но что мешает вместо 16-кратного осреднения 2048 двухбайтных слов (4096 байт) использовать 32-кратное осреднение, но уже 1024 двухбайтных слов (2048 байт)? Ведь как по времени, так и по точности это будет одно и то же. А раз так, то половина оперативной памяти ёмкостью 2048 байт освободится, в связи с чем можно уже применить large-модель и функцию sprintf(), производящую форматированный вывод чисел с плавающей запятой. В программе для вольтметра так и сделано. Мало того, высокая скорость работы АЦП позволила производить не 32-кратное осреднение, а 64-кратное (для большей надёжности). Даже при таком осреднении вывод результатов на дисплей производится приблизительно 5 раз в секунду, т.е. каждые 0,2 с, что для глаза незаметно.

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

На рисунке 4 приведена более простая схема платы вольтметра, которая отличается от предыдущей (см. рис. 1) тем, что в ней применён иной ИОН, а именно – REF3030 (DA1).

Этот ИОН имеет несколько особенностей. Во-первых, у него очень низкое падение напряжения (1 мВ при токе нагрузки 1 мА), что позволяет отказаться от батареи BAT1 (см. рис. 2д) и использовать для питания REF3030 напряжение 3,5 В. Во-вторых, ему не требуется достаточно ёмкий и габаритный конденсатор. Судя по справочному листку, ИОН REF3030 вообще может работать без конденсатора, подключённого к его выходу. В-третьих, REF3030 выпускается в миниатюрном корпусе SOT23, не требующем много места на плате. В-четвёртых, этот ИОН существенно дешевле AD780. Кроме того, точность абсолютного значения выходного напряжения REF3030 не намного хуже точности выходного напряжения AD780. Если посмотреть на рисунок 5, где приводится зависимость выходного напряжения REF3025 от входного, то можно заметить, что при входном напряжении 3,5 В выходное напряжение находится в пределах от 2,499950 до 2,499960 В, т.е. имеет погрешность не более 50 мкВ.

Естественно ожидать и от ИОН REF3030 такую же погрешность. Зависимость же выходного напряжения от тока нагрузки (см.  рис.  6) показывает, что при малом токе нагрузки выходное напряжение очень близко к номинальному.

Здесь следует заметить, что потребление тока по входу Vref (2-й вывод DD1) микроконтроллера, к которому подключён ИОН REF3030, составляет не более 4 мкА, а если выход ИОН подключается ко входу вольтметра (Вх+) разъёма XUвх (это требуется при настройке резисторов R4 и R6 – см. далее), входное сопротивление которого составляет более 1 МОм, то ток на выходе REF3030 составит не более 3 мкА. Таким образом, в самом худшем случае ток, требующийся от ИОН, в сумме составит не более 7 мкА. Это ничтожно мало для REF3030, поэтому его выходное напряжение будет достаточно близко к номиналу. И, наконец, потребление тока самим ИОН составляет не более 50 мкА, что существенно продлевает срок службы батареи.

Фактически схема на рисунке 4 отличается от схемы рисунка 1 тем, что, во-первых, в ней используется ИОН REF3030, во-вторых – другой разъём питания (XP), где используются только два напряжения: +3,5 В (2-й вывод XP) и –3,5 В (3-й вывод), а также «земляной» вывод (1-й). Кроме того, разъём XP – это 3 цанговых штыря с шагом 2,54 мм. В-третьих, в схеме отсутствует 5-вольтовый стабилизатор LP2950Z5.0/ADR293 (DA3 на рисунке 1).

Дополнительные схемы (см. рис.  7) ко второму варианту также имеют некоторые отличия.

Разводка ЖКИ с контроллерами для платы по схеме на рисунке 4 потребовала иного подключения для кабеля ЖКИ (см. рис. 7а) и самого разъёма ЖКИ (см. рис. 7б). Входные клеммы вольтметра, на которые подаётся входное напряжение, также заменены на более удобные для пайки (отечественные клеммы ЗМЗ – B1, B2, см. рис. 7в). Но главное отличие данной конструкции вольтметра от предыдущей заключается в применении галетного переключателя ПГ2-17-3П4Н (ГП1 на рисунке 7г). Этот миниатюрный галетный переключатель на 3 положения и 4 направления позволил управлять режимами работы вольтметра (вплоть до его включения и выключения) всего одной ручкой. Наличие всего двух батарей позволило применить такой галетный переключатель. Батарея ER18505 (BAT1) имеет меньший размер – 18´50 мм, а также меньшую ёмкость – 4 А•ч (против 9 А•ч у батареи ER26500 – BAT2, рис. 2д). Вторая батарея такая же (ER14250), что и в предыдущей конструкции.

Подсчитаем ток, потребляемый платой по схеме на рисунке 4:

  • ИОН REF3030 – 50 мкА;
  • ОУ OPA335 – 300 мкА;
  • 2 контроллера КР1820ВГ1(COP-472) – 200 мкА;
  • ЖКИ ИЖЦ13-8-7 – 6 мкА;
  • микроконтроллер EFM8LB12 – 13 мА;
    Итого ≈ 14 мА.

Напряжение батареи ER18505 при токе 14 мА упадёт до 3,5 В, а ёмкость – до 3,5 А•ч, в связи с чем время непрерывной работы составит: 3500  мА•ч/14 мА = 250 ч. Это примерно в 2 раза меньше, чем в предыдущей конструкции. Однако стоимость батареи ER18505 примерно в 1,5 раза меньше, чем стоимость ER26500.

Здесь следует заметить, что если снизить системную тактовую частоту микроконтроллера (SYSCLK), например, в 4 раза, т.е. до 18 МГц, оставив частоту тактирования АЦП той же самой (18 МГц), то потребление тока микроконтроллером снизится приблизительно в 3 раза, т.е. до 4,3 мА. При таком токе ёмкость батареи ER18505 возрастёт приблизительно до 4 А•ч, а время непрерывной работы увеличится до 930 ч. Если при этом вместо 64-кратного осреднения использовать 32-кратное, то скорость вывода показаний на дисплей несколько снизится. Работа вольтметра хоть и замедлится, но не столь существенно, чтобы это было заметно на глаз.

Меньший размер батареи, применение галетного переключателя, а также более «плоская» разводка платы ЖКИ позволили использовать менее габаритный корпус для вольтметра (следите за публикациями в следующих номерах «Современной электроники»).

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

Литература

  1. Кузьминов А. Повышение разрешающей способности АЦП микроконтроллера EFM8LB12. Современная электроника. 2018. № 8–9.
  2. Кузьминов А. Преобразователь интерфейсов USB-SPI на базе нового 51-совместимого микроконтроллера EFM8UB1. Современная электроника. 2017. № 1–3
  3. Кузьминов А. Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. М.: «Перо». 2018.
  4. Кузьминов А. Программирование микроконтроллеров EFM8 с помощью встроенного загрузчика программ. Радио. 2018. № 12.
  5. Ридико Л. Автомобильные часы-термометр-вольтметр. Схемотехника. 2001. № 3.
  6. Пархомчук А. Схемы управления устройствами отображения информации. Электроника: Наука, Технология, Бизнес. 2007. № 5.
  7. Иванюта Е., Климович Н., Кособрюхов В. Микросхема КР1820ВГ1 для управления мультиплексным ЖК-индикатором. Микропроцессорные средства и системы. 1990. № 3.

Скачать

20208046_Programmy.rar / RAR, 42 КБ

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

10.10.2020 3528 0
Комментарии
Рекомендуем
Анализ зашумлённых сигналов на осциллографах VESNA серии OVS3

Анализ зашумлённых сигналов на осциллографах VESNA серии OVS3

В статье анализируются способы повышения качества результатов измерений сигналов в присутствии аддитивного шума различной природы. В работе выделены типовые источники шума, а также выполнен обобщающий анализ способов, реализация которых позволяет тем или иным образом снизить уровень шума либо повысить уровень полезного сигнала. Для одного из таких способов, основанного на построении автокорреляционных функций, оценена эффективность в части измерения амплитуды и частоты синусоидального сигнала на фоне гауссовского шума. Приведены примеры измерений зашумлённых сигналов, выполненных с использованием осциллографа VESNA OVS3, позволяющие наглядно судить о потенциальных возможностях снижения уровня гауссовского шума при усреднении осциллограмм, ограничении полосы пропускания и при использовании внешнего фильтра.
18.02.2026 СЭ №2/2026 699 0

ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnjdWbKyt
ООО «ИнСАТ»  ИНН 7734682230  erid = 2SDnje2F5cn
  Подписывайтесь на наш канал в Telegram и читайте новости раньше всех! Подписаться