Содержание статьи
Наверняка все видели часы на электронно‑лучевых трубках или экранах осциллографов. После неоновых часов это, наверное, следующая по популярности ламповая заморочка. Обычно, кроме циферблата и нескольких цифр, на него ничего не выводят, и это таки не случайно! Собственно, о причинах данного явления мы и будем дальше много говорить, а также обсудим те особенности трубок и схемотехники, о которых обычно в интернете не пишут.
info
Называть радиолампы трубками, электронными трубками, вакуумными трубками и клапанами безграмотно. Проскакивают такие названия обычно по вине горе‑переводчиков, однако в случае электронно‑лучевых трубок и рентгеновских трубок название плотно укоренилось и теперь общепринято. Такие дела.
Электронно-лучевая трубка
Электронно‑лучевые трубки, пожалуй, самые сложные радиолампы в плане устройства и управления. Предназначены они, как несложно догадаться, для вывода изображения. Здесь и далее мы будем говорить только об осциллографических трубках с электростатической фокусировкой и электростатическим отклонением.
Как все‑таки работает такая лампа? Электроны испускаются катодом, после чего проходят через систему фокусировки, которая в простейшем случае состоит из трех электродов, как на рисунке выше. Первый электрод управляет яркостью, второй фокусировкой, а третий, ускоряющий, отвечает за астигматизм. После этого пучок пролетает через две пары отклоняющих электродов, отвечающих за горизонтальное и вертикальное отклонение.
Затем электроны долетают до слоя люминофора и заставляют его светиться. Если фокусировка настроена, то на экране горит точка, положение которой определяется напряжением на отклоняющих электродах. Изменяя это напряжение, мы можем выводить изображение. Но это все общие слова, теперь перейдем к конкретике, о которой обычно не пишут, разве что на тематических форумах.
Выбор трубки
Для экспериментов я выбрал трубку 6ЛО1И. Мотивировала меня ее низкая стоимость (мне этот девайс обошелся в 400 рублей) и ее компактность.
Однако уже во время сборки и настройки я осознал, насколько это плохой выбор, ведь именно из‑за использования 6ЛО1И я столкнулся с таким количеством трудностей. А дело в том, что у трубки есть такой показатель, как чувствительность отклоняющей системы. Измеряется она в миллиметрах на вольт, и у 6ЛО1И это значение составляет около 0,15 мм/В, для оси X — чуть меньше, для оси Y — чуть больше. Такая чувствительность крайне низкая, и для движения луча по горизонтали от левого края экрана до правого нужно порядка 250 В, а по вертикали около 200 В. Это довольно много и требует от видеоусилителя очень хорошего быстродействия. Собственно, если посмотреть, что именно выпускала промышленность на этих трубках, то становится ясно, что это были «показометры» с шириной полосы не более нескольких десятков килогерц, например ОМШ-3М.
Здесь, правда, можно немного схитрить и понизить анодное напряжение на трубке с паспортного 1200 В до, скажем, 700–1000 В. Яркость при этом снизится, а чувствительность отклоняющей системы заметно возрастет, и в данном случае это разумный компромисс. В общем, советую взять трубку поприличнее — это сильно упростит ковыряния с видеоусилителем.
Но есть у 6ЛО1И и достоинства: устройство ее несложное, поэтому и схема питания у нее простая.
Питание и обвязка трубки
Перед тем как изобретать свой велосипед, неплохо бы ознакомиться с уже изобретенными вариантами. По уму, конечно, стоило бы собрать для анодного напряжения импульсник со стабилизацией. Но поскольку для накала нужно 6,3 В, а в осциллографических трубках большая часть высокого напряжения подается на катод, то есть потенциал катода около –900 В, источник питания накала должен быть надежно изолирован от массы. Проще всего провернуть этот финт, используя накальную обмотку.
А раз уж нужна накальная обмотка, значит, трансформатор будет содержать и анодную обмотку, поэтому высокое напряжение можно получить умножителем. Как говорится, 1000 В — это всего лишь три раза по 330 В. Поэтому, вдохновившись проектом простого осциллографа на 6ЛО1И, я разработал свою схему, в которой от исходной остался только концепт.
warning
Разность потенциалов между положительным и отрицательным плечами источника питания превышает 1000 В! Удар таким напряжением смертельно опасен, а кроме того, это очень больно. Поэтому будь крайне внимателен и осторожен! А если нет опыта в работе с высоким напряжением, возможно, лучше и не связываться с этим блоком питания. Я предупредил.
Основой блока питания служит 30-ваттный тороидальный трансформатор с двумя обмотками, накальной и анодной. Анодная обмотка выдает 235 В, которые поступают на выпрямитель и умножитель. Выпрямитель применен однополупериодный, так как он хорошо сочетается с умножителем, а токи потребления схемы около 0,5 мА. На выходе выпрямителя получаем около +330 В. На выходе умножителя имеем, соответственно, около –660 В, что в сумме дает нам 1000 В — вполне достаточное напряжение для работы трубки.
Обрати внимание на резисторы, шунтирующие конденсаторы выпрямителя и умножителя: они могут существенно продлить твою жизнь, поскольку конденсаторы — штука коварная (см. предупреждение). Вообще говоря, несмотря на паспортное анодное напряжение 1200 В, 6ЛО1И работает и от 1000 В, и даже от 500 В. При этом повышается чувствительность отклоняющей системы и снижается яркость свечения.
При 1000 В яркость вполне приличная. Обвязка самой 6ЛО1И вполне стандартная, как и в упомянутом выше проекте. Стоит также обратить внимание, что к общему проводу подключен не выход выпрямителя, а средняя точка делителя на резисторах R5/R6. Это нужно, чтобы приподнять напряжение на отклоняющих электродах при использовании окончательного варианта видеоусилителя.
Дело в том, что напряжение на втором аноде (астигматизм) должно быть чуть ниже, чем на отклоняющих электродах. Если напряжение на них низковато, то и на втором аноде его придется занижать, в результате падает яркость, использование же делителя позволяет обойти эту проблему. Да, настройки яркости, фокуса и астигматизма влияют друг на друга. Если включить устройство на этом этапе, после прогрева на экране появится точка, которую можно сфокусировать. Сигнал подается на отклоняющие пластины, выводы 10, 11 определяют отклонение по оси Y, выводы 7, 8 — отклонение по оси X. Теперь перейдем к видеоусилителю.
Видеоусилитель
Одно из лучших решений для построения видеоусилителя — дифференциальный каскад. При прочих равных такой каскад позволяет получить в два раза больший размах выходного сигнала, а учитывая, что отклоняющие пластины симметричны, дифференциальный каскад напрашивается сам собой. В большинстве описанных в интернете конструкций, выводящих изображение на осциллографическую трубку, используется простейший дифференциальный каскад на маломощных высоковольтных транзисторах, например как здесь. С него я и начал.
Однако это решение неудобно, так как требует дополнительного смещения на базу первого транзистора, в противном случае каскад работает в нелинейном режиме, что совершенно неприемлемо. Хотя если хочется посмотреть фигуры Лиссажу, а в качестве источника сигнала использовать заводской ГСС, где можно задать смещение в пару вольт относительно земли, то такое решение вполне рабочее. Избавиться от необходимости внешнего смещения можно, используя двуполярное питание, что я и сделал.
Усилитель Y-канала идентичен. Как видишь, здесь появился еще один источник питания — 5 В, это усложняет блок питания, но решает проблему смещения, поэтому на вход можно подавать сигнал непосредственно с ЦАПа. Этот вариант усилителя чрезвычайно прост и подходит для экспериментов с трубкой, однако имеет существенные ограничения. И это в первую очередь быстродействие. Так, полоса пропускания данного усилителя будет около 10 кГц, и выше этой частоты усиление достаточно быстро снижается.
И что с того, спросишь ты? А из этого следует, что количество семплов ЦАПа будет ограничено полосой пропускания, что, в свою очередь, будет ограничивать размер изображения (количество точек), которое можно отрисовать без мерцания. В данном случае количество точек будет порядка 500. А если поднять частоту ЦАП, то изображение будет искажаться.
С другой стороны, несколько сотен точек вполне достаточно для отрисовки циферблата и стрелок, несложной геометрической картинки или тех же фигур Лиссажу. Собственно, в большинстве конструкций подобное изображение и выводят. А что делать, если мы хотим большего, например вывести на экран достаточно сложную картинку в пару десятков тысяч точек? Для этого придется поднимать быстродействие, и самый простой способ это сделать — поднять токи выходного каскада.
Кроме того, стоит иметь в виду, что коллекторные резисторы вместе с емкостью отклоняющей системы и выходной емкостью транзистора образуют RC ФНЧ, частоту среза которого можно примерно прикинуть, взяв емкость, скажем, 15 пФ. На практике получается заметно хуже, чем в теории, ну да это как всегда. Для резисторов 220К получается значение 48,25 кГц, а для резисторов 3К уже 3,54 МГц — то, что надо.
Несколько усложним схему, использовав каскодное включение транзисторов. Такое включение позволяет сделать схему менее критичной к параметрам высоковольтных транзисторов. В целом каскод работает как идеализированный каскад с общим эмиттером. Нас, конечно, это не спасет, поскольку мы все равно упремся в параметры трубки, зато позволит использовать дешевые высоковольтные транзисторы в верхнем плече, например MJE13003, MJE13005. Однако лучше все‑таки 2SC2611 или КТ940А.
Кроме того, добавим источник тока в эмиттерные цепи — так и работает лучше, и настраивать гораздо удобнее. А сверх того на вход поставим истоковые повторители, чтобы не шунтировать ЦАП. В первом варианте схемы их не было, однако оказалось, что усилитель заметно шунтировал ЦАП и сильно просаживал напряжение, потому повторители пришлось добавить.
Данный усилитель обеспечивает полосу около 1,5 МГц при размахе сигнала на выходе каждого плеча 75 В и усилении около 15. При этом замена транзисторов на MJE13005 дает примерно такой же результат, и улучшить его малыми усилиями уже не получится. Настройка усилителя сводится к подстройке источников тока резисторами RV2 и RV5: нужно добиться на коллекторах транзисторов Q2, Q5, Q7, Q10 напряжения чуть выше половины питания (около 120 В), а также к подбору конденсаторов частотной коррекции С3, С6, С9, С12.
Стоит заметить, что раз мы собираем не осциллограф, а монитор, то добиваться ровной АЧХ усилителя — не оптимальное решение. Поэтому подбор конденсаторов удобно вести, смотря на качество изображения, добиваясь минимальных артефактов. Методика подбора конденсаторов довольно простая — начав с заведомо меньшей емкости, например 1 нФ, необходимо последовательно увеличивать емкость в два раза, наблюдая изменения изображения. Когда емкость окажется чрезмерной, начинай ее уменьшать на половину предыдущего шага, таким образом шагов за пять можно подобрать нужное значение. Обрати внимание, что эмиттерные резисторы в каналах X и Y различны и конденсаторы коррекции, соответственно, тоже. Токи транзисторов также можно настраивать, ориентируясь на изображение.
Конструкция получилась достаточно сложной (12 транзисторов), а еще она заметно греется, поэтому нужен хороший радиатор. Мой, конечно, дико избыточен, но он мне попался под руку и подходил по размерам. Резисторы в коллекторной цепи также сильно греются, поэтому надо взять пятиваттные (не проволочные!). Хорошо, усилитель есть, теперь нужен источник сигнала.
ЦАП
C точки зрения соотношения цена/быстродействие лучшее решение — R-2R ЦАП. Первоначально я планировал использовать Blue Pill как источник сигнала, и в этом случае можно задействовать целый порт сразу на 2 ЦАПа (каналы X и Y). Однако, ориентируясь на данный проект, я решил применить сдвиговые регистры 74HC59. В плане быстродействия мы ничего не теряем, так как GPIO в stm32f103 работают с частотой около 2 МГц, и то при прямой записи в регистры, через обертки получается несколько медленнее. А вот шина SPI недурно работает на частоте 32 МГц, и итоге для двух 8-битных каналов получаем 2 мегасемпла в секунду, при этом ЦАП можно использовать независимо с другими источниками сигнала. А кроме того, ЦАП на 74HC595 выдает сигнал до 5 В, что, учитывая низкую чувствительность трубки, нам только на руку.
Сначала, конечно, схемка была попроще, в ней присутствовали только сдвиговые регистры. Микроконтроллер писал в SPI два байта, а потом дергал ножку RCLK, и все было хорошо, все работало. Потом мне захотелось выводить массивы побольше, которые не помещались в память контроллера, и тут было два варианта: приладить к контроллеру флешку или подключить к компу через USB/SPI. Я выбрал второй вариант, а в качестве USB/SPI использовал FT232H.
Это самый быстрый USB/SPI из мне известных, а кроме того, его можно приобрести в виде готового модуля за терпимые деньги (ну, некоторое время назад так и было). Однако у FT232H есть та же проблема, что и у контроллера SPI: порт работает быстро, а GPIO медленно, причем гораздо медленнее, чем в контроллере, поэтому дергать ножку регистра на каждые два байта неразумно. Пришлось малой кровью допилить недоSPI 74HC595 до «почти SPI». Идея достаточно проста: надо считать тактовые импульсы и каждый 16-й дергать RCLK. Для этого собран делитель на 16 на четырех D-триггерах. А чтобы знать, откуда считать импульсы, по сигналу CS происходит установка триггеров, что срабатывает как синхронизация.
Конечно, делитель проще было собрать на 74HC4040, но это как‑нибудь в другой раз. Так или иначе, мы получили ЦАП, способный выдавать до 2 мегасемплов в секунду, причем его скоростью можно управлять, меняя скорость шины SPI. О резисторах можно сказать, что использовать резисторы одного номинала удобно: получаешь правильное соотношение сопротивлений 1/2. В принципе, можно сэкономить и использовать резисторы 5К1 и 10К. Немного пострадает линейность, что на глаз почти незаметно, впрочем, экономия копеечная и того не стоит.
Blue Pill и фигуры Лиссажу
Аналоговая часть собрана, и ЦАП у нас есть. Время проверить, как оно работает. Самый простой тестовый сигнал для создания изображения — это два синуса с разными частотами или фазами. Проще всего такой сигнал взять с ГСС и подать на входы видеоусилителя, однако если ГСС под рукой нет, то сигнал можно сгенерировать в микроконтроллере буквально несколькими десятками строк.
Генерировать синус в микроконтроллере можно тремя способами. Во‑первых, используя библиотеку math.
и функцию sin(
, однако это далеко не лучший вариант по быстродействию и расходованию ресурсов. Работа с плавающей точкой — это не то, для чего предназначены микроконтроллеры, впрочем, данный метод работает. Другой достаточно интересный вариант генерации синуса — на основе разностных схем — упоминается здесь. Уравнения там достаточно простые, и с первого взгляда даже не скажешь, что на выходе получается синус.
V -= X*R
X += V
Здесь R
— это константа. На осознание вывода этих формул меня не хватило, впрочем, даже в момент окончания универа граница моих математических способностей лежала где‑то в районе дивергенции градиента, а с тех пор стало только хуже. Но при реализации в целочисленной математике оно работает, и работает неплохо. Уж точно намного быстрее, чем библиотечный синус.
Третий же метод генерации синуса — табличный, и вот он мне больше всего понравился, особенно прозрачностью установки фаз и частот. Кроме того, он демонстрировал наибольшее быстродействие. Суть метода: берем таблицу с заранее рассчитанными значениями синуса и просто выводим записанные в ней данные через равные промежутки времени с заданным шагом. Меняя шаг, мы меняем частоту, а меняя стартовую точку, меняем фазу. То, что надо!
...uint8_t msin[256]={ 127, 130, 133, 136, 139, 142, 145, 148, 151, 154, 157, 160, 163, 166, 169, 172, 175, 178, 181, 184, 186, 189, 192, 194, 197, 200, 202, 205, 207, 209, 212, 214, 216, 218, 221, 223, 225, 227, 229, 230, 232, 234, 235, 237, 239, 240, 241, 243, 244, 245, 246, 247, 248, 249, 250, 250, 251, 252, 252, 253, 253, 253, 253, 253, 254, 253, 253, 253, 253, 253, 252, 252, 251, 250, 250, 249, 248, 247, 246, 245, 244, 243, 241, 240, 239, 237, 235, 234, 232, 230, 229, 227, 225, 223, 221, 218, 216, 214, 212, 209, 207, 205, 202, 200, 197, 194, 192, 189, 186, 184, 181, 178, 175, 172, 169, 166, 163, 160, 157, 154, 151, 148, 145, 142, 139, 136, 133, 130, 127, 123, 120, 117, 114, 111, 108, 105, 102, 99, 96, 93, 90, 87, 84, 81, 78, 75, 72, 69, 67, 64, 61, 59, 56, 53, 51, 48, 46, 44, 41, 39, 37, 35, 32, 30, 28, 26, 24, 23, 21, 19, 18, 16, 14, 13, 12, 10, 9, 8, 7, 6, 5, 4, 3, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 18, 19, 21, 23, 24, 26, 28, 30, 32, 35, 37, 39, 41, 44, 46, 48, 51, 53, 56, 59, 61, 64, 67, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 102, 105, 108, 111, 114, 117, 120, 123};static void spi1_init(void){ // Включаем порт и интерфейс rcc_periph_clock_enable(RCC_SPI1); rcc_periph_clock_enable(RCC_GPIOA); /* Configure GPIOs: * SCK=PA5 * MOSI=PA7 */ gpio_set_mode(GPIOA, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_ALTFN_PUSHPULL, GPIO5|GPIO7); spi_reset(SPI1); spi_init_master(SPI1, SPI_CR1_BAUDRATE_FPCLK_DIV_2, SPI_CR1_CPOL_CLK_TO_0_WHEN_IDLE, SPI_CR1_CPHA_CLK_TRANSITION_1, SPI_CR1_DFF_8BIT, SPI_CR1_LSBFIRST); //spi_set_full_duplex_mode(SPI1); spi_enable_software_slave_management(SPI1); spi_set_nss_high(SPI1); spi_enable(SPI1); }void gpio_init(){ rcc_periph_clock_enable(RCC_GPIOB); gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO6|GPIO12); /* * GPIO4 - ST_CP * GPIO12 - LED */ gpio_set(GPIOB,GPIO12); gpio_clear(GPIOB,GPIO6); }void send_xy(uint8_t x, uint8_t y){ spi_xfer(SPI1,x); spi_xfer(SPI1,y); // Дергаем RCLK для записи в регистр gpio_set(GPIOB,GPIO6); gpio_clear(GPIOB,GPIO6); }void main(void){ rcc_clock_setup_in_hse_8mhz_out_72mhz(); spi1_init(); gpio_init(); uint32_t n=1; uint8_t a=128, b=128; while(1){ n++; if(!(n%2))b++; for(uint16_t i=0;i<256;i++){ send_xy(msin[a],msin[b]); a+=1; b+=3; } } }...
Вот такой несложный код генерирует достаточно интересную картинку, которая еще и двигаться будет.
На этом мы, пожалуй, оставим Bluepill и перейдем к x86_64.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»