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

Усовершенствованный НЧ-генератор синусоидальных сигналов на базе DDS AD9833, микроконтроллера EFM8SB10 и 0,91″ дисплея OLED-1306 с батарейным питанием

В статье описан генератор синусоидальных сигналов на основе малопотребляющих микросхем: прямого цифрового синтеза (DDS) AD9833B, микроконтроллера (МК) EFM8SB10, инструментального усилителя (ИУ) AD8231 и ОУ OPA333, с «нулевым» смещением (zero drift) каждый, стабилизаторов TPS78230 (3 В), STLQ15M15R (1,5 В) и 0,91″ дисплея OLED-1306 с разрешением 128×32 пиксела. Источником питания служит аккумулятор 18650-HG2 ёмкостью 3 А⋅ч, обеспечивающий непрерывную работу прибора до 180 часов без подзарядки. Диапазон частот генератора от 1 Гц до 100 кГц с амплитудой до 0,3 В и до 50 кГц с амплитудой до 1,4 В с дискретностью выбора частоты 1 Гц. Приведены принципиальные схемы, разводка платы и конструкция прибора, его программные средства, порядок работы с ним и результаты его работы.

1054 0

Введение

Подобный генератор, описанный автором в статье [1], показал хорошую работу, однако основным его недостатком является использование достаточно старого LCD Nokia-5110, требующего довольно интенсивного освещения, поскольку он работает на отражённом свете. При слабом же освещении разобрать символы на нём весьма проблематично. Применение дисплея OLED-1306, в котором каждый пиксел представляет собой органический светодиод и сам светится, полностью снимает эту проблему, поскольку освещения для этого дисплея вообще не требуется, и он может работать даже в полной темноте. Помимо этого, более высокое разрешение этого дисплея (128×32 против 84×48 в Nokia-5110) позволяет считывать информацию с него более комфортно. 

Кроме того, в настоящей разработке сделаны несколько усовершенствований, которые позволили существенно уменьшить размер корпуса прибора с 75×75×30 мм в [1] до 70×45×30 мм, или, другими словами, он стал почти в 1,5 раза компактнее, или миниатюрнее.

Эти усовершенствования заключаются в следующем.

Во-первых, использование кварцевого резонатора в корпусе HC49S3 размером в 3,7 раза меньше корпуса HC49U, применённого в [1], DDS AD9833B в корпусе MSOP10 вместо корпуса LFCSP10 у AD9837, у которого снизу расположена «земляная» пластина, позволили существенно упростить разводку платы, в результате чего она стала более компактной (20×36 мм против 22×40 мм в [1]). Во-вторых, использование миниатюрных тактовых кнопок TC-021, которые в несколько раз меньше кнопок DS-612, применённых в [1], позволило существенно снизить размер корпуса прибора. В-третьих, более миниатюрный корпус дисплея OLED-1306 по сравнению с корпусом LCD Nokia-5110, применённого в [1], также способствовал снижению размера корпуса прибора. 

Применение дисплея OLED-1306 немного увеличило ток потребления устройства, вместе с тем использование кварцевого резонатора частотой 8 388 608 Гц (против 16 777 216 Гц в [1]), т.е. в 2 раза ниже, уменьшило ток потребления МК и ИУ (см. далее), в результате чего время работы прибора без подзарядки уменьшилось до 180 часов против 200 часов в [1], однако этот факт не является определяющим, поскольку на дисплей выводится состояние зарядки аккумулятора, и его всегда можно подзарядить от зарядного устройства. Кстати, в статье приведено описание более компактного зарядного устройства. 

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

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

Принципиальные схемы

Основой схемы платы генератора (рис. 1) является сверхнизкопотребляющий МК EFM8SB10-QFN20 (DD1) в корпусе для поверхностного монтажа QFN20 размером 3×3 мм. Конденсатор C8 блокировочный и положен по штату работы МК. Сопряжение МК с DDS и дисплеем OLED-1306 организовано по однонаправленному интерфейсу SPI, или, другими словами, в эти устройства только передаётся (но не принимается от них) информация с помощью сигналов SCK и MOSI, а также сигналов выбора кристалла (CS). Для DDS AD9833B (DD2) используется сигнал CSAD, а для дисплея CSD. Для тактирования DDS используется системный тактовый сигнал МК SYS_CLK частотой 8 388 608 Гц, который также подаётся на разъём X4, предназначенный для подключения к частотомеру и служащий для точной настройки частоты. Конденсаторы C6–C9 положены по типовой обвязке DD2. Помимо сигналов интерфейса SPI, в дисплей передаются сигналы D/C и RES. Все дисплейные сигналы вместе с питанием и «землёй» выведены на разъём X8, к которому кабелем подключается плата дисплея ответным разъёмом X8’ (рис 2г). Кварцевый резонатор Z1 частотой 8 388 608 Гц вместе с резистором R4 и конденсаторами C3–C5 и C3′, C5′, подбираемыми при настройке (см. далее), подключается к выводам XT1 и XT2 МК. 

Для устранения дребезга контактов кнопок используется специализированная микросхема MAX6817 (DD3). Сигналы (с дребезгом) непосредственно от кнопок КН1 и КН2 подключаются к его входам, а очищенные от дребезга выходные сигналы К1 и К2 подключаются к соответствующим выводам МК. Блокировочный конденсатор C13 положен по штату работы DD3. Сами сигналы от кнопок (и «земля») поступают на плату с разъёма X3, к которому ответным разъёмом X3′ (рис. 2б) подключается кабель, второй конец которого соединён непосредственно с миниатюрными тактовыми кнопками TC-0121 – КН1 и КН2. При нажатии и отпускании кнопок слышен характерный щелчок, а пальцем воспринимается существенно заметная тактильная отдача. 

RC-цепочка R8, R9, C12 предназначена как для штатной работы МК (она затягивает низкое состояние сигнала RST на время заряда конденсатора C12, требующееся при включении питания и формирующее сброс (RESET) МК – Power On Reset – POR), так и для программирования МК по интерфейсу C2 (резистор R9 позволяет легко управлять сигналом RST от этого интерфейса). Сигналы интерфейса C2 (C2D, RST) и «земля» выведены на разъём X1, к которому ответным разъёмом подключается кабель, второй конец которого соединён с соответствующим разъёмом USB DEBUG адаптера, который, в свою очередь, подключается к одному из разъёмов USB компьютера. Схема подключения подробно описана в [2]. 

Напряжение питания (3,6 В) поступает на плату с разъёма X2. Это напряжение подаётся на вход микромощного стабилизатора TPS78230 (DA3), выходное стабилизированное напряжение которого (3 В) используется для питания всех микросхем платы. Микромощный стабилизатор STLQ15M15R (DA4) из входного напряжения 3 В формирует выходное напряжение 1,5 В, которое используется как опорное (VREF) для ИУ AD8231 (DA2). Блокировочные конденсаторы C14–C17 положены по штату работы стабилизаторов DA3 и DA4. К разъёму X2 ответным разъёмом (X2′, рис. 2а) подключается кабель, второй конец которого через тумблер sMTS102 (П1, рис. 2а) и ножевые клеммы 6,3F (KL1 и KL2) подключается к аккумулятору 18650-HG2 (BAT1), оборудованному двумя приваренными пластинами шириной 6 мм, на которые надеваются клеммы. К этим же клеммам подключается разъём A-543 – аудиогнездо 2,5 моно (Xзар), к которому ответным разъёмом (штекер 2,5 моно) подключается кабель, второй конец которого подключается к плате зарядного устройства на базе специализированной микросхемы TC4056A (см. далее). 

Для определения степени разрядки аккумулятора входное напряжение питания, условно обозначенное как «+3,6», подаётся на делитель напряжения (в 2 раза), построенный на двух прецизионных (0,1%) резисторах R1 и R2 равных номиналов. С точки соединения этих резисторов уменьшенное в 2 раза входное напряжение подаётся на вход повторителя напряжения, построенного на микропотребляющем ОУ OPA333 (DA1), а с его выхода через RC-цепочку R3, C2 – на один из входов АЦП МК (сигнал ADC_IN). МК с помощью встроенного высокоскоростного АЦП измеряет это напряжение, сравнивает его с тремя порогами (3,2 В, 3,5 В и 3,8 В) и в зависимости от этого напряжения выводит на дисплей рисунок аккумулятора с тремя сегментами, о степени зарядки которого можно судить по количеству включённых сегментов (см. далее). Блокировочный конденсатор C1 положен по штату работы ОУ DA1. 

Выходное напряжение DDS DD2 (сигнал VoutAD) с действующим значением ~0,212 В и постоянной составляющей чуть более +0,3 В подаётся на неинвертирующий вход ИУ AD8231 (3-й вывод DA2), к которому подключён конденсатор C10, сглаживающий дискретность представления выходного напряжения ЦАП DDS (как указывалось в [1], эта дискретность составляет 2048 точек по вертикали и 2048–4096 точек по горизонтали), в результате чего синусоидальный сигнал с выхода ИУ становится практически гладкой функцией. 

На инвертирующий вход ИУ (2-й вывод DA2) подаётся напряжение чуть более +0,3 В, полученное с движка подстроечного резистора R6, входящего в состав делителя напряжения R5, R6, R7. Как известно, выходное напряжение ИУ определяется следующей формулой:
VoutИУ = (Vin+ – Vin–) × Ку + Vref ,     (1)
где VoutИУ – выходное напряжение ИУ, Vin+ – напряжение на неинвертирущем входе, Vin– – напряжение на инвертирующем входе, Vref – опорное напряжение, Ку – коэффициент усиления ИУ. Если Ку = 1, формула (1) упрощается и принимает вид:
VoutИУ = Vin+ – Vin– + Vref.     (2)

Пусть постоянная составляющая выходного напряжения DDS равна, например, 0,35 В, тогда напряжение Vin+ = ~0,212 В + 0,35 В. Если выходное напряжение с движка R6 делителя R5, R6, R7 настроить также на 0,35 В, то Vin– = 0,35 В. И, наконец, если Vref = 1,5 В, то формула (5) ещё более упрощается: VoutИУ = ~0,212 В + 0,35 В – 0,35 В + 1,5 В и приобретает вид:
VoutИУ = ~0,212 В + 1,5 В.     (3)

Смысл формулы (6) состоит в том, что теперь выходное напряжение ОУ VoutИУ изменяется относительно +1,5 В как в положительную, так и в отрицательную сторону в диапазоне 0,3 В. Если принять напряжение Vref = +1,5 В за, например, аналогoвую «землю» (перевёрнутая «ёлочка» на рис. 1 рядом с ИУ DA2), то VoutИУ также будет изменяться как в положительную, так и в отрицательную сторону относительно этой аналоговой «земли» с амплитудой 0,3 В. Другими словами, мы получили чистый синусоидальный сигнал без постоянной составляющей с амплитудным значением 0,3 В относительно аналоговой «земли». 

Здесь следует заметить, что если DDS находится в состоянии сброса (такая команда на DDS относительно часто подаётся в программе на МК – см. далее), то его выходное напряжение принимает среднее значение, в связи с чем выходное напряжение VoutИУ относительно аналоговой «земли» будет равно нулю VoutИУ = 0. Это свойство DDS полезно использовать для точной настройки напряжения с движка R6 делителя R5, R6, R7 (см. далее). 

Как видно из рис. 1, сигнал VoutИУ подаётся на 3-й контакт разъёма X5, сигнал с неинвертирующего входа дополнительного ОУ, встроенного в DA2 (6-й вывод DA2), подаётся на его 2-й контакт, а аналоговая «земля» – на его 1-й контакт. К этому разъёму ответным разъёмом X5′ (рис. 2е) подключён трёхпроводный кабель, второй конец которого подключён к переменному резистору RП (3310C). Выход этого дополнительного ОУ (8-й вывод DA2, сигнал Vout) подключён ко 2-му контакту разъёма X6, а его 1-й контакт соединён с аналоговой «землей». Кроме того, сигнал Vout подключён к 3-му контакту разъёма X7, сигнал с инвертирующего входа дополнительного ОУ (7-й вывод DA2, сигнал In-) подключён к 4-му контакту X7, нижний конец резистора R11 подключён ко 2-му контакту X7, a аналоговая «земля» – к 1-му контакту. К разъёму X7 ответным разъёмом (X7’, рис. 2в) подключается кабель, второй конец которого подключается к тумблеру sMTS203 (П2, рис. 2в) с двумя группами контактов. 

Назначение разъёмов X5 и X7 – регулировка амплитуды выходного сигнала Vout и изменение коэффициента усиления дополнительного ОУ DA2. 

Более подробно этот процесс схематично показан на рис. 3. С движка переменного резистора RП сигнал In+ попадает на неинвертирующий вход ОУ. Резисторы R10 и R11 совместно с группами контактов Гр.1 и Гр.2 тумблера включены так, что в одном положении групп контактов (как на рис. 3) выводы ОУ 7 и 8 замыкаются, а левый по схеме конец резистора R11 оказывается свободным. В этом случае ОУ представляет собой обычный повторитель напряжения, поданного на его неинвертирующий вход с движка резистора RП. В ином положении групп контактов, когда тумблер переключён в противоположную сторону, выводы 7 и 8 ОУ размыкаются, и резистор R10 включается в обратную связь ОУ (между его выходом и инвертирующим входом), а резистор R11 подключается к аналоговой «земле». В этом состоянии ОУ становится неинвертирующим усилителем с коэффициентом усиления Ку = 1 + R10/R11 = 1+ +20К/5,6К = 4,57. 

Теперь, резюмируя вышесказанное, имеем следующее. 

В первом положении тумблера П2 (рис. 2в), когда ОУ является повторителем с Ку = 1, получаем, что выходное напряжение ОУ может регулироваться переменным резистором RП от Vout = 0 В до Vout = ~0,212 В (действующее значение) с амплитудным значением VoutAMP = 0,212 В × ≈0,2998 ≈ 0,3 В.

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

Во втором положении тумблера, когда Ку = 4,57, получаем, что выходное напряжение ОУ может регулироваться резистором RП от Vout = 0 В до Vout = ~0,212 В × 4,57 = ~0,97 В (действующее значение) с амплитудным значением VoutAMP = 0,97 В × ≈ 1,37 В. Этот режим работы генератора обычно используют для настройки различных усилителей мощности звуковой частоты (УМЗЧ), источником сигнала для которых, как правило, является синусоидальный сигнал с максимальной амплитудой около 1 В.

Здесь может возникнуть вопрос: а зачем использован дополнительный ОУ, входящий в состав AD8231, коэффициент усиления которого переключается аппаратным способом – тумблером (рис. 3)? Ведь ИУ AD8231 оборудован встроенным средством переключения коэффициента усиления с помощью логических входов A0, A1 и A2 (рис. 1), позволяющих установить коэффициент усиления от 1 до 128 (в том числе и, например, 4), состояние которых можно менять, например, программным способом, если их подключить к МК. И почему эти входы заземлены, в связи с чем коэффициент усиления ИУ постоянно установлен и равен 1?

На это есть две причины.

Первая заключается в том, что в формуле (1), в которой присутствует этот коэффициент усиления (Ку), скрыто некоторое лукавство. Оно заключается в том, что если Ку больше единицы (например, 2 и больше), то эта формула работает неадекватно. Эта неадекватность проявляется в том, что если Vin+ – Vin–) × Ку (см. формулу (1) больше 0,3 В, или, другими словами, если мгновенное значение синусоидального сигнала опускается ниже –0,3 В (относительно «земли»), а такое возможно, если Ку > 1, то нижняя часть синусоиды обрезается на уровне примерно –0,3 В, и сигнал становится уже несинусоидальным. Но ведь в формуле (1) есть ещё член «+Vref», который равен +1,5 В, и по формуле (1) он должен поднимать выходное напряжение на эти 1,5 В, что намного больше, чем 0,3 В. Хотя чисто математически это и верно, однако на практике, к сожалению, это не работает. Вот в этом и состоит лукавство формулы (1), которая (в данном случае) работает только тогда, когда Ку = 1.

Вторая (и главная) причина состоит в том, что, как видно из формулы (1), член Vin–, регулирующий смещение и подстраиваемый резистором R6 (рис. 1), умножается на Ку (в том числе), и, если Ку > 1, то это смещение также будет умножаться на Ку. В этом случае это смещение придётся также дополнительно регулировать, что неприемлемо. Вот поэтому ИУ должен работать строго при Ку = 1. 

Сигнал Vout и аналоговая «земля» также подаются на разъём X6 (рис. 1), к которому ответным разъёмом X6′ подключён двухпроводный кабель, второй конец которого подключается к разъёму RCA красного цвета – RS-104 (X1, рис. 2д) и через тумблер sMTS102 (П3, рис. 2д) – к разъёму RCA зелёного цвета – RS-104 (X2, рис. 2д). Разъём X1 служит для подключения выходного сигнала генератора к осциллографу для настройки, т.е. для получения сигнала необходимой частоты и амплитуды, после чего тумблером П3 уже подключается к разъёму X2, к которому подключён кабель для тестируемого аудиоустройства.

Как видно из рис. 1, плата генератора не отличается особой сложностью, поэтому легко разводится и имеет размер всего 20×36 мм (см. далее).

Программные средства

Программирование МК проводилось в среде Simplisity Studio V.4.1.

В программе для МК основными являются четыре подпрограммы (п/п):
  • 1 – п/п вывода информации по интерфейсу SPI в дисплей,
  • 2 – п/п вывода информации по интерфейсу SPI в DDS,
  • 3 – п/п измерения напряжения аккумулятора и вывод состояния его заряженности на дисплей,
  • 4 – п/п, определяющая состояние кнопок для получения числового значения частоты.
1. П/п для дисплея. Вывод информации в дисплей достаточно хорошо известен и приводится в его справочном листке (datasheet). Для получения кодов цифр и символов автор использовал известную программу GLCD Font Creator 1.2.0.0. Для цифр использован шрифт Clarendon Extended, жирный, размером 18. Каждая цифра занимает поле 22×16 пикселей. Для символов («Гц», рисунок аккумулятора с тремя сегментами, символ синусоиды и символ квадрата с «галкой», отражающий режим работы генератора) использован шрифт Clarendon Extended, жирный, размер 8. Каждый символ занимает поле 22×8 пикселей. Вывод цифр и символов осуществляется побайтно с использованием стандартной п/п аппаратного вывода байта по SPI со скоростью чуть более 2,5 Мбод.

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

Первый состоит в том, что для вывода числового значения частоты F, которая представляется 32-разрядным словом, используется совмещение (union) этого слова с двумя 16-разрядными словами – старшим и младшим. Числовое значение частоты в DDS представляет собой 28-разрядный код, 14 младших бит которого являются 14-ю младшими битами в младшем слове, а 14 старших бит кода – 14-ю младшими битами старшего слова. А два старших бита каждого слова – это управляющий код. Если, например, этот управляющий код равен 01b (012), то DDS будет воспринимать его следующим образом. Во-первых, будет выводиться синусоида (есть ещё прямоугольный и треугольный меандры), во-вторых, численное значение частоты будет вводиться в нулевой регистр частоты (FREG0), а численное значение фазы (как правило, нулевое значение) – в нулевой регистр фазы (PHASE0). Есть ещё FREG1 и PHASE1, но их использовать не требуется. 

Для получения значения двух 16-разрядных слов, выводимых в FREG0, используется следующая процедура. Вначале соответствующее числовое значение частоты F необходимо умножить на 32 (см. формулу 3 в [1]). Затем сдвинуть полученное значение F влево на 2 бита. В этом случае в старшем слове вышеуказанного совмещения в его 14 младших битах будут находиться 14 старших бит 28-разрядного кода, а в младшем слове – 14 младших бит кода, только сдвинутых влево на 2 бита. Сдвинув вправо младшее слово на 2 бита (т.е. восстановив сдвинутое влево значение), получим, что в его 14 младших битах будет содержаться 14 младших битов кода. Теперь к каждому слову необходимо добавить 2 бита управляющего кода (01b). Для этого каждое из слов нужно логически сложить с числом 0x4000. После этой процедуры необходимо вывести поочерёдно в DDS сначала младшее слово, а затем – старшее.

Второй нюанс заключается в следующем. Со стороны МК вывод информации по SPI в дисплей и DDS осуществляется с использованием трёх параметров. Во-первых, оба устройства являются ведомыми (Slave), а МК – ведущим (Master). Во-вторых, у обоих устройств настройка фазы (Clock Phase) одна и та же, т.е. данные тактируются первым же импульсом SCK (Data sample on first edge).

В-третьих (и это главное), у этих устройств разная так называемая полярность. У дисплея состояние импульса SCK в отсутствие обмена (Clock Polarity) находится в низком уровне (Low in idle state), а у DDS – в высоком. Но поскольку обмен информацией МК с дисплеем происходит на порядок чаще, при инициализации устройств выбираем правильную полярность для дисплея (Low in idle state), а перед началом обмена с DDS уже программным способом необходимо переключить полярность на обратную и после окончания обмена – восстановить прежнюю. Это переключение осуществляется изменением бита полярности в регистре SPI0CFG. Другими словами, при выводе информации в DDS вначале необходимо переключить бит полярности с «дисплейного» (заданного в начальной конфигурации) на «DDS-й», а после окончания вывода восстановить первоначальное его (бита) значение, иначе дисплей работать не будет.

Теперь более конкретно.

Вот совмещение двухбайтного числа U.US и массива с двумя элементами: U.UB[0] – старший байт и U.UB[1] – младший байт, которые, во-первых, перераспределяют одно и то же место в памяти МК, во-вторых, строго определяют друг друга, а именно – число U.US однозначно определяет числа U.UB[0] и U.UB[1] и наоборот:

union {
 uint16_t US; // U.UB[0]- Ст.б.
 uint8_t UB[1]; // U.UB[1]- Мл.б.
} U; // U.US - 2-байтное uint16_t число.

Вот п/п вывода двухбайтного слова в DDS:

void outspi16(uint16_t wor) {
U.US = wor;
SPI0CFG = SPI0CFG | 0x10; //IDLE_HIGN для AD9833 CSAD = 0;//
CSAD=0.
outspi(U.UB[0]); //Ст.б.
outspi(U.UB[1]); //Мл.б.
CSAD = 1; //CSAD=1.
SPI0CFG = SPI0CFG & 0xef; //IDLE_LOW - Для дисплея
}

Вот определение числа частоты F как 32-разрядного: 

uint32_t F; // частота в Гц

Вот совмещение 4-байтного (uint32_t) числа FR.FRL и двух двухбайтных (uint16_t) чисел FR.FRS[0] и FR.FRS[1] двухэлементного массива FRS[1], которые также перераспределяют одно и то же место в памяти МК и являются соответственно старшим и младшим словами числа FR.FRL

union {
uint32_t FRL; // FR.FRS[0]- Ст. uint16_t слово.
uint16_t FRS[1]; // FR.FRS[1]- Мл. uint16_t слово.
} FR; // FR.FRL - 4-байтное uint32_t число.


А вот и сама п/п вывода частоты и фазы в DDS:

//Вывод частоты в DDS
FR.FRL = F * 32;
FR.FRL = FR.FRL << 2; //Сдвиг всего числа uint32_t влево на 2 бита
FR.FRS[0] = (FR.FRS[0]) | 0x4000; //Добавка 2-х ст.бит 01b к ст. слову для FREG0
FR.FRS[1] = ((FR.FRS[1]) >> 2) | 0x4000;//Сдвиг мл. слова вправо на 2 бита (восст.) //и добавка 2-х ст.бит 01b к мл. слову
outspi16(0x2108); // Сброс DDS (стоп)
outspi16(FR.FRS[1]); // вывод мл. слова частоты в FREG0
outspi16(FR.FRS[0]); // вывод ст. слова частоты в FREG0
outspi16(0xC000); // вывод PHASE0
outspi16(0x2008); // Выход из сброса (запуск)


Таким образом, программирование DDS примитивно просто, а приведённая выше п/п занимает ничтожный объём программной памяти МК.

3. П/п для измерения напряжения аккумулятора и вывода на дисплей степени его зарядки также проста. Она десятикратно измеряет напряжение (UАКК), поступающее на вход ADC0.1 (P0.1) МК, усредняет его, сравнивает с порогами (3,2 В, 3,5 В и 3,8 В) и в зависимости от среднего значения напряжения выводит на дисплей рисунок аккумулятора с тем или иным количеством сегментов, а именно: 
  • если UАКК > 3,8 В, то выводится рисунок аккумулятора с тремя сегментами; 
  • если 3,5 В < UАКК ≤ 3,8 В, то выводится рисунок аккумулятора с двумя сегментами;
  • если 3,2 В ≤ UАКК ≤ 3,5 В, то выводится рисунок аккумулятора с одним сегментом;
  • если UАКК < 3,2 В, то выводится рисунок аккумулятора без сегментов (пустой).
Сама п/п позаимствована из одного из примеров программирования АЦП в Simplisity Studio и адаптирована под настоящую задачу.

4. Теперь по поводу того, как работает п/п, определяющая состояние кнопок. 

Как можно увидеть из схемы рис. 1, сигналы от кнопок, очищенные от дребезга их контактов с помощью DD3, поступают на порты P0.4 и P0.5 МК, для чего в основной программе сделаны следующие назначения: 

sbit KN1 = P0 ^ 4; // Правая кнопка
sbit KN2 = P0 ^ 5; // Левая кнопка


Отсутствие дребезга контактов позволяет в п/п, связанной с кнопками, легко определять их состояние всего двумя простыми командами, которые выполняются в бесконечном цикле (while (1)), выход из которого (break) осуществляется при нажатии и отпускании соответствующей кнопки:

while (1) {
if (!KN1) { // Ждём нажатия кнопки КН1
while (!KN1); // Ждём отпускания кнопки КН1
... // Вывод на дисплей цифр и запуск/стоп 
break;
}
if (!KN2) { // Ждём нажатия кнопки КН2
while (!KN2); // Ждём отпускания кнопки КН2
... // Вывод на дисплей режима
break;
}
 }


Вывод на дисплей опущен. Как можно убедиться, п/п очень проста.

После трансляции всей программы МК для генератора в среде Simplisity Studio в специальном окне, отражающие результат трансляции, появляется следующее сообщение: 

Program Size: data=69.0 xdata=0 const=812 code=2093
LX51 RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
Finished building target: EFM8SB10F8G-A-QFN20_11.omf

Из этого сообщения следует, что программа использует чуть более половины (всего 69 байт) внутренней оперативной памяти с прямой адресацией (data=69.0), размер которой 128 байт, внешняя дополнительная оперативная память с косвенной адресацией размером 512 байт не используется вообще (xdata=0), размер кодовой части программы составляет 2093 байт (code=2093) плюс константы 812 байт (const=812) в сумме составляют 2093 + 812 = 2905 байт ≅ 2,8 Кбайт, т.е. чуть более трети максимального размера программной памяти для МК, равного 8 килобайт. Программа использует так называемую Small model, где все данные располагаются в памяти с прямой адресацией (data) и которая работает наиболее быстро.

Программа в уже готовом загрузочном формате EFM8SB10F8G_A_QFN20_11.hex приведена в дополнительных материалах к статье на сайте журнала (QR-код в начале статьи). Её можно записать в память МК с помощью USB DEBUG адаптера (см. выше). 

Разводка и внешний вид платы прибора

Разводка платы устройства сделана автором с помощью программы SprintLayOut v.6. Файл разводки в формате *.lay6 приведён в дополнительных материалах к статье на сайте журнала. Из рисунков разведённой платы и её внешнего вида (рис. 4) можно заключить, что её разводка достаточно проста, а сама плата имеет размер всего 20×36 мм (против 22×40 мм в [1]).

Все отверстия на разводке (кроме отверстий для подстроечного конденсатора и подстроечного резистора) – это переходные отверстия со слоя на слой. Если через них проходят штыри разъёмов и выводы кварцевого резонатора, то их следует пропаять с двух сторон платы. Во все остальные переходные отверстия (отмеченные на рис. 4а чёрными кружками) следует вставить тонкий лужёный медный провод и также пропаять его с двух сторон платы. Эта процедура позволяет не использовать металлизацию отверстий, технология которой в домашних условиях весьма проблематична, а потому неприемлема. 

Конструкция прибора

Прибор расположен в пластиковом корпусе размером 70×45×30 мм (против 75×75×30 мм в [1]) с защёлкивающейся крышкой, являющейся дном (рис. 5). На лицевой стороне корпуса для дисплея прорезано прямоугольное окно. Плата дисплея приклеена к внутренней поверхности лицевой стороны корпуса пористой лентой с двусторонним липким слоем. Аккумулятор приклеен к внутренним поверхностям лицевой и боковой сторон корпуса тонкой лентой с двусторонним липким слоем. Плата прибора установлена между аккумулятором и внутренней поверхностью боковой стороны корпуса и соединена с платой дисплея кабелем и соответствующими разъёмами, распаянными так, чтобы каждый контакт платы (1–7) соединялся с соответствующим контактом платы дисплея (1–7).

Кнопки впаяны в небольшие (7×10 мм) прямоугольные пластины, вырезанные из макетной платы, а к их контактам припаян кабель, соединяющийся с соответствующим разъёмом платы. Для кнопок на лицевой стороне корпуса также прорезаны прямоугольные окна. Пластины приклеены к внутренней поверхности корпуса так, чтобы кнопки входили в окна на его лицевой стороне. Тумблеры и переменный резистор вставлены в отверстия, просверленные на лицевой стороне корпуса, и прикручены к нему соответствующими гайками. Два аудиоразъёма и разъём для зарядки аккумулятора укреплены через отверстия на боковых сторонах корпуса и прикручены к нему соответствующими гайками. Чтобы корпус при работе не скользил, на его дно установлены 4 самоклеящиеся резиновые ножки (рис. 5г).

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

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

Настройка прибора

Настройка прибора состоит из двух действий (см. рис. 1): настройки нуля выходного напряжения генератора в режиме сброса с помощью подстроечного резистора R6 и настройки тактовой частоты 8 388 608 Гц подстроечным конденсатором C4.

Вначале о настройке нуля выходного напряжения.

К выходному разъёму RCA X1 на рис. 2д (разъём красного цвета на рис. 5б) необходимо подключить цифровой вольтметр или цифровой мультиметр. Переключить диапазон измерения постоянного напряжения (DC) в мультиметре на минимальное значение в милливольтах. Резистор, регулирующий амплитуду выходного сигнала генератора (RП, рис. 2е), установить на максимум. Включить прибор, переключить левый нижний тумблер в нижнее положение (единичный коэффициент усиления) и, вращая шлиц подстроечного резистора R6 (на рис. 5а он голубого цвета) отвёрткой, желательно с керамическим наконечником, в ту или иную сторону, добиться нулевого показания мультиметра. Автор использовал мультиметр на милливольтовом диапазоне с одним разрядом после запятой. Показания мультиметра при правильной настройке составили 000,0 мВ. Далее переключить тумблер в верхнее положение (коэффициент усиления 4,57). Подстроить ноль, вращая шлиц подстроечного резистора до показания мультиметра, равного 000,0 мВ. Если после этого переключить тумблер в нижнее положение, и ноль в показаниях мультиметра останется, то настройка нуля считается законченной.

Теперь о настройке тактовой частоты МК, а точнее – о настройке частоты кварцевого резонатора.

Здесь следует сделать некоторое отступление относительно ёмкости конденсаторов C3 и C5 на рис. 1. Как правило, если обозначить эти ёмкости как Cg, нагрузочную ёмкость кварцевого резонатора, указанную в его справочном листке (datasheet), как CL, а паразитную ёмкость как CS (это обычно 4–5 пФ на каждый вывод МК, которых два, поэтому их общая ёмкость 8 – 10 пФ), то для расчёта Cg используется следующая формула, которая взята из справочного листка (datasheet) на EFM8SB10F8: 
Cg = 2 × (CL – CS).     (4)

Если, например, CL= 30 пФ (как в кварцевом резонаторе, применённом автором), CS = 8 пФ, то по формуле (4) Cg = 2 × (30 – 8) = 44 пФ. При CS = 10 пФ Cg = 2 × (30 – 10) = 40 пФ. 

Т.е. Cg = 40 – 44 пФ. В связи с этим автор выбрал (см. рис. 1) ёмкости C3 и C5 – по 39 пФ, а добавочные ёмкости C3′ и C5′ – по 3,6 пФ (и не ошибся – см. далее). Кроме того, ёмкость подстроечного конденсатора C4 варьируется в пределах 0,4–2 пФ.

Возвращаемся к прерванной последовательности изложения.

Подключить частотомер к прибору кабелем, один конец которого подключить ответным разъёмом к разъёму X4 на рис. 1, а второй, с разъёмом BNC, – к частотному входу частотомера. Автор использовал достаточно прецизионный частотомер Ч3-57 (который поверялся в Ростесте несколько раз). Включить прибор и, вращая шлиц подстроечного конденсатора C4 отвёрткой, желательно с керамическим наконечником, добиться показания частоты частотомера, равной 8 388 608 Гц (рис. 6). В частотомере Ч3-57 имеются несколько диапазонов времени Т, при которых измеряется частота. В частности, есть 2 диапазона (Т): Т = 1 с и Т = 10 с. На диапазоне Т = 1 с необходимо добиться показания частотомера «8388,608 кГц» (рис. 6а). В принципе, на этом можно и закончить настройку, однако, потратив ещё немного времени и переключив диапазон на Т = 10 с, можно добиться более точных показаний. В этом случае, в связи с ограниченным количеством цифр числа частоты индикатора в данном частотомере, левая цифра («8») исчезает (она неинтересна, поскольку её значение уже известно), зато появляется 4-я цифра после запятой, и показания частотомера можно настроить до десятой герца, например, до «388,6081» кГц (рис. 6б), хотя, конечно, такая точность совсем не обязательна.

На этом настройка тактовой частоты заканчивается.

Порядок работы

При включении прибора на дисплее появляется изображение, показанное на рис. 7а. Курсор (черта под цифрой) устанавливается под первой цифрой, в данном случае это «0», а справа от цифр появляется квадрат с «галкой» внутри, которая сигнализирует о том, что данный режим работы (набор цифр) является активным. Предположим, требуется набрать частоту 12345 Гц. Нажимаем и отпускаем (в дальнейшем слово «отпускаем» подразумевается, но в тексте отсутствует) левую кнопку, и левая цифра становится равной «1» (рис. 7б). Далее нажимаем правую кнопку, и курсор передвигается на следующую позицию (рис. 7в). Нажимаем левую кнопку 2 раза, и на второй позиции появляется цифра «2» с курсором под ней (рис. 7г). Таким же способом набираем остальные цифры «12345» (рис. 7д). После того как набрана последняя цифра «5», нажимаем правую кнопку. «Галка» в квадрате справа от цифр пропадает (этот режим становится неактивным), курсор под цифрой «5» также пропадает, а справа внизу появляется новый квадрат с «галкой», сигнализирующей, что активным является режим «запуска/стопа». В данном конкретном случае это режим «стопа», о чём сигнализирует длинная черта слева от квадрата с «галкой» (рис. 7e). Нажимаем левую кнопку. В этом случае генератор запускается, о чём свидетельствует значок синусоиды, появляющийся вместо длинной черты (как в мини-осциллографе), а в верхнем правом углу дисплея появляется рисунок аккумулятора с двумя сегментами, сигнализирующими о том, что аккумулятор заряжен не полностью (рис. 7ж). Этот режим работы генератора является наиболее энергопотребляющим, поэтому состояние заряженности аккумулятора проверяется именно в этом режиме. Если ещё раз нажать левую кнопку, то генератор остановится, и на экране опять появится длинная черта (как на рис. 7е). Таким образом, нажимая левую кнопку, можно запускать и останавливать генератор с набранным числовым значением частоты сколько угодно раз. Но если в этом режиме нажать правую кнопку, то генератор, во-первых, – остановится, а во-вторых ,– переключится в режим набора новой частоты (как на рис. 7з). При этом рисунок аккумулятора в правом верхнем углу останется, как и пустой квадрат в правом нижнем углу.

Как видно из вышеописанного, управление генератором достаточно просто. 

Зарядка аккумулятора

Как уже упоминалось выше, для зарядки аккумулятора используется специальная плата на базе микросхемы TC4056A, оборудованная разъёмом MicroUSB для подключения к ней устройства для зарядки телефона с выходным напряжением 5 В. Здесь следует заметить, что на плате с TC4056A по умолчанию установлено максимальное значение зарядного тока в 1 А. Такой ток обеспечивают далеко не все зарядные устройства для телефона. Кроме того, при токе 1 А плата с TC4056A достаточно сильно нагревается и может выйти из строя от перегрева. Поэтому, если использовать зарядку для телефона (или, например, для зарядки аккумуляторов IQOS), обеспечивающую ток 1 А (или более), то плату необходимо установить на радиатор. Для этого автор использовал миниатюрный пластиковый корпус размером 45×30×16 мм, состоящий из двух половин, которые защёлкиваются между собой (рис. 8). В одну часть корпуса в качестве радиатора установлена медная пластина толщиной 2 мм и размером несколько бо́льшим, чем сама плата. Эта пластина прикручена к корпусу 4 винтами М2, для чего в ней просверлены отверстия и нарезана соответствующая резьба. Чтобы пластина не касалась корпуса, между ними в качестве толстых шайб установлены 4 гайки М3. Плата приклеена к пластине гибкой термопрокладкой с двусторонним липким слоем (рис. 8а). 

К выходным контактам платы одним концом припаян двухпроводный кабель, который дополнительно укреплён каплей термоклея, а на другой его конец припаян аудиоразъём – штекер моно 2,5 мм, который подключается к ответному разъёму прибора (рис. 5б, рис. 8). Для разъёма USB в верхней половине корпуса прорезано небольшое окно. Для доступа воздуха внутрь корпуса в обеих его половинах просверлены по 4 отверстия. Кроме того, в целях контроля процесса зарядки на плате расположены два светодиода – красного и синего цвета, а в корпусе просверлены ещё 2 отверстия как раз над этими светодиодами, чтобы их можно было увидеть. Когда идёт процесс зарядки, горит красный светодиод (рис. 8б). По окончании зарядки красный светодиод гаснет и зажигается синий (рис. 8в). Зарядку аккумулятора необходимо производить при выключенном приборе. 

Если же зарядка для телефона обеспечивает ток не более 0,5 А, то радиатор не нужен, так как в этом случае нагрев платы небольшой; правда, время зарядки аккумулятора будет существенно больше.

Основными потребителями тока в генераторе являются: МК (3 мА против 5 мA в [1]), DDS (4,3 мА против 5 мA в [1]), ИУ (4 мА против 5 мА в [1]) и дисплей (5 мА против 0,5 мА в [1]). Все остальные микросхемы (стабилизаторы и ОУ) – микропотребляющии и вместе взятые потребляют не более 0,1 мА, поэтому потребление тока ими можно не учитывать. Таким образом, общее потребление тока прибора составляет не более 16,3 мА. Учитывая, что ёмкость аккумулятора составляет 3 А⋅ч, или 3000 мА⋅ч, время непрерывной работы прибора при полностью заряженном аккумуляторе составит: 3000 мА⋅ч / 16,3 мА ≈ 180 часов. 

Результаты работы 

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

Сравнение числового значения частоты, набранной на приборе (их фотографии, на взгляд автора, приводить нет смысла), и частоты реального выходного сигнала, измеренной частотомером (рис. 9), показывает, что они полностью совпадают. Этот результат – следствие достаточно точной настройки частоты кварцевого резонатора 8 388 608 Гц (рис. 6). Помимо частотомера, сигнал с прибора был подан параллельно на аналоговый осциллограф (рис. 9в). Как можно убедиться из этой фотографии, сигнал – достаточно гладкая функция, лишённая каких-либо «зазубрин», присущих цифровым сигналам. Это является следствием применения конденсатора C10 (рис. 1), являющегося своеобразным НЧ-фильтром, сглаживающим цифровое представление выходного сигнала ЦАП в DDS.

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

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

Во-вторых, синусоидальность сигнала легко проверяется по его спектру. Если в спектре сигнала присутствует единственный пик на соответствующей частоте и отсутствуют какие-либо боковые лепестки, присущие, например, спектру прямоугольного или треугольного меандра, то однозначно можно констатировать, что сигнал синусоидальный. Для оценки спектра сигнал с генератора был подан на цифровой осциллограф (рис. 10) с открытым входом, т.е. пропускающим постоянную составляющую сигнала, что отмечено значком черты и нескольких точек над ней (в левой нижней части экрана слева от буквы «F»). На снимках экрана (рис. 10а – рис. 10д) представлены как сами осциллограммы сигналов (жёлтого цвета), с разрешением по вертикали 0,5 В/деление (надпись «500mV» жёлтого цвета в левой нижней части экрана), так и их спектры, подсчитанные с помощью быстрого преобразования Фурье – БПФ (fast Fourier transform – FFT) – сиреневого цвета. На рис. 10е разрешение по вертикали 0,1 В/деление (надпись «100mV»).

Как видно из рис. 10, спектры сигналов на частотах 20 Гц (рис. 10а), 1 кГц (рис. 10б), 20 кГц (рис. 10в), 50 кГц (рис. 10г) с амплитудой 1 В и на частоте 90 кГц с амплитудой 0,3 В (рис. 10е) имеют единственный пик на соответствующей частоте. Дополнительные лепестки рядом с этим пиком, а также дополнительные пики на других частотах, кроме основных, на спектрах, как можно заметить, отсутствуют. Кроме того, хотя осциллограммы сигнала имеют «зазубрины», что является следствием не самого сигнала, а его представления на экране цифрового осциллографа, форма сигнала визуально близка к синусоидальной. 

А вот спектр сигнала частотой 90 кГц и амплитудой 1 В (рис. 10д) имеет боковые лепестки, что указывает на наличие дополнительных частот в сигнале. Кроме того, даже по осциллограмме можно заметить, что сигнал явно не синусоидален (он скорее напоминает несколько размытый треугольный меандр).

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

Как известно, если функция u(t) = Uamp sin(ωt), где Uamp – амплитудное значение, а ω – частота, то среднеквадратичное значение Urms (rms – root mean square – дословно «квадратный корень из среднего квадрата») – действующее, эффективное значение: Urms = Uamp/√2= Uamp/√2/2 ≈ 0,707×Uamp. Действительно и обратное: если Urms = 0,707×Uamp, то сигнал синусоидален. Этот факт часто используют для определения синусоидальности сигнала.

Как видно из рис. 10а – рис. 10д, в середине нижней части каждого из них имеется надпись жёлтого цвета «Vamp(1)= 2.00V», означающая, что амплитудное значение (Uamp) равно 2 В, хотя, судя по разрешению экрана по вертикали (0,5 В/деление – надпись слева снизу «500mV»), амплитудное значение составляет 1 В. 

На рис. 10е «Vamp(1)=600mV», но по разрешению экрана по вертикали (0,1 В/деление – «100mV») амплитудное значение составляет 0,3 В. Почему за амплитудное значение в осциллографе принято значение двойной амплитуды, непонятно. 

Слева от этой надписи на рис. 10а – рис. 10в имеется другая надпись «Vrms(1)= 707mV», которая означает, что действующее значение Urms = 0,707 В. На основании этого можно констатировать, что Urms = 0,707×Uamp, или, другими словами, сигнал строго синусоидален. На рис. 10г, как можно заметить, «Vrms(1)=716mV», поэтому Urms = =0,716×Uamp, что указывает на небольшую несинусоидальность этого сигнала (погрешность 1,3%). На рис. 10д «Vrms(1)=674mV», и погрешность уже составляет 4,9%, что указывает на достаточно большую несинусоидальность (см. выше). На рис. 10е имеется также небольшая несинусоидальность. Если амплитуда сигнала равна 0,3 В, то действующее значение будет: Urms = 0,3 В/= 0,212 В (а не 0,208 В «Vrms(1)=208mV»), т.е. погрешность, как нетрудно подсчитать, будет 1,9%, хотя визуально осциллограмма достаточно близка к синусоиде.

Итак, резюмируя вышеизложенное, можно констатировать: результаты измерений показывают, что частота, выставленная на приборе, точно соответствует измеренной, а сигнал с амплитудой 1 В практически синусоидален в пределах от 1 Гц до 50 кГц, а с амплитудой 0,3 В – от 1 Гц до 90 кГц. В звуковом же диапазоне (до 20 кГц) сигнал строго синусоидален. 

Заключение

Применение малопотребляющих (с током потребления до единиц мА) DDS AD9833, МК EFM8SB10, дисплея (5 мА), ИУ (4 мА) и микропотребляющих (до 10 мкА) ОУ OPA333, стабилизаторов TPS78230 (3 В), STLQ15M15R (1,5 В) и подавителя дребезга контактов кнопок MAX6817 позволило сконструировать недорогой генератор синусоидальных сигналов звукового диапазона (и даже выше) с питанием от аккумулятора 18650-HG2
с напряжением 3,6 В ёмкостью 3 А⋅ч, обеспечивающим непрерывную работу прибора до 180 часов без подзарядки. Отсутствие сетевого источника питания гарантирует чистоту выходных сигналов генератора, свободных от сетевых или ВЧ помех. Простота установки частоты с помощью всего двух кнопок, высокая яркость 0,91″ дисплея OLED-1306 с разрешением 128×32 пиксела способствуют удобству работы с прибором, а его миниатюрный корпус (70×45×30 мм) и вес дали возможность брать его с собой для работы, как говорят, «в полевых условиях». 

Литература

  1. Кузьминов А. Генератор гармонических колебаний звукового диапазона на базе синтезатора частоты AD9837B, микроконтроллера EFM8SB10 и LCD Nokia-5110 с батарейным питанием // Современная электроника. 2023. № 6.
  2. Кузьминов А.Ю. Связь между компьютером и микроконтроллером. Современные аппаратные и программные средства. М.: Перо, 2018.
© СТА-ПРЕСС, 2024
1054 0
Комментарии
Рекомендуем
Биометрические системы, информационные киоски (БИК), турникеты и шлюзы с АСО. Обзор оборудования, компонентов и особенностей установки электроника

Биометрические системы, информационные киоски (БИК), турникеты и шлюзы с АСО. Обзор оборудования, компонентов и особенностей установки

Повсеместно биометрическую идентификацию рассматривают как перспективный инструмент для быстрых и безопасных операций почти универсального (в самых различных сферах) применения. Несколько лет назад появились биометрические информационные киоски, турникеты и шлюзы. Эти модели постоянно совершенствуются. О новинках, связанных с расширением функционала и защиты современного оборудования, ставших возможными профессиональными усилиями разработчиков РЭА и производителей оборудования, предлагаем ознакомиться в нашем обзоре. Основной акцент в формате импортозамещения современной электроники сделан на серийные модели отечественных производителей.
04.09.2024 СЭ №6/2024 635 0