Индикатор уровня на ИЛТ1-15М (Arduino)

Ранее в http://rcl-radio.ru/?p=131261 был описан проект индикатора уровня на ИЛТ4-30М, на этой странице аналогичный проект, но с использованием индикатора ИЛТ1-15М.

ИЛТ1-15М — шкальный вакуумный люминесцентный индикатор, опытный прототип. Информационное поле состоит из 60 светящихся элементов размера 2,5х1 мм, расположенных в 2 ряда (30х2).

По сути индикаторы ИЛТ1-15М и ИЛТ4-30М очень похожы, у них примерно одинаковые параметры, аналогичное кол-во сегментов индикатора шкалы. Есть различие в нумерации выводов анодов и сеток.

К сожалению я не нашел подробного описания индикатора ИЛТ1-15М, но я думаю что они очень близки к параметрам индикатора ИЛТ4-30М.

Нумерация выводов:

  • 1 — K1 — катод, вывод 1 накала
  • 2 — СВ — сетка верхняя
  • 3 — A1 — анод 2 сегмента шкалы индикатора уровня
  • 4 — A2 — анод 3 сегмента шкалы индикатора уровня
  • 5 — СН — сетка нижняя
  • 6 — A3 — анод 4 сегмента шкалы индикатора уровня
  • 7 — A4 — анод 5 сегмента шкалы индикатора уровня
  • 8 — A5 — анод 6 сегмента шкалы индикатора уровня
  • 9 — A6 — анод 7 сегмента шкалы индикатора уровня
  • 10 — A7 — анод 8 сегмента шкалы индикатора уровня
  • 11 — A8 — анод 9 сегмента шкалы индикатора уровня
  • 12 — A9 — анод 10 сегмента шкалы индикатора уровня
  • 13 — A10 — анод 11 сегмента шкалы индикатора уровня
  • 14 — A11 — анод 12 сегмента шкалы индикатора уровня
  • 15 — A12 — анод 13 сегмента шкалы индикатора уровня
  • 16 — A0 — анод 1 сегмента шкалы индикатора уровня, а так же шкалы дБ, букв Л и П
  • 17 — A13 — анод 14 сегмента шкалы индикатора уровня
  • 18 — A14 — анод 15 сегмента шкалы индикатора уровня
  • 19 — А= — анод красная шкала дБ
  • 20 — K2 — катод, вывод 2 накала

Схема индикатора уровня

Индикатор ИЛТ1-15М имеет две сетки, одна для верхней части индикатора, вторая для нижней, они запитываются от транзисторных ключей. Так же следует учитывать, что что элементы «Л», «П», шкала dB и первый сегмент индикатора уровня имеют один общий анод (поэтому горят постоянно и не участвуют в динамической индикации), который так же не имеет управления и напряжение +30 В подается на нее через резистор, аналогично и красный сегмент в шкале дБ так же не имеет управления и напряжение +30 В подается на него через резистор. Все остальные сегменты индикатора имеют управление в виде транзисторных ключей.

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

Для управления ключами используется плата разработчика LGT8F328P-LQFP32 MiniEVB, которая основана на китайском микроконтроллер LGT8F328p и является клоном популярной AVR ATmega328p (Arduino NANO). Микроконтроллер LGT8F328p практически полностью совместим с микроконтроллером ATmega328p и обладает рядом дополнительных функций и возможностей превышающих ATmega328p.

При сборке обратите внимание на номиналы резисторов подключенных к коллекторам транзисторов, в для сеток это 47 кОм, для анода с элементами «Л», «П», шкала dB и первый сегмент индикатора 10 кОм, для анода красного сегмента шкалы дБ, так же используется резистор номиналом 10 кОм, для сегментов зеленого свечения 100 кОм, для красного свечения 10 кОм.

В схеме используются транзисторы с Uкэ_max не менее 100 В, в данном проекте используются транзисторы KSP44 c Uкэ_max = 400 В.

Основное питание схемы 9 В, оно подается на преобразователь напряжения и на вход VIN платы контроллера.

Преобразователь имеет трансформатор выполненный из ферритового сердечника (гантельный сердечник) на который намотано 3 обмотки проводом диаметром 0,2…0,3 мм.

Первая обмотка содержит 20 витков, вторая 10 витков с отводом от середины, третья содержит 120 витков. Транзистор IRF3205 необходимо установить на небольшой радиатор.

При правильной сборке ток потребления схемы должен находится в пределах 0,35 А.

Скетч практически аналогичен скетчу в статье http://rcl-radio.ru/?p=131261, за исключением регистра OCR1A, который имеет немного другое значение.

// LGT8F328

// сетки
#define SETKA_0   2
#define SETKA_1   3
// аноды
#define P1        4
#define P2        5
#define P3        6
#define P4        7
#define P5        8
#define P6        10
#define P7        11
#define P8        12
#define P9        13
#define P10       A0
#define P11       A1
#define P12       A2
#define P13       A3
#define P14       A4  
// входы аудио
#define AN_R      A6
#define AN_L      A7 

#define  LOW_IN    2
#define  HIGH_IN   50

byte h;
int r_in,l_in,r,l;
int ur_l,urr_l,ur_r,urr_r;

void setup(){
  Serial.begin(9600);
  noInterrupts();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1 = 0;
  TCCR1A = (1 << COM1A1)|(1 << WGM11);
  TCCR1B = (1 << WGM13)|(1 << WGM12)|(1 << CS10);
  DDRB =  1 << DDB1; // OUTPUT PWM (OCR1A)
  OCR1A = 12;
  ICR1 = 40;
/////
  TCCR2A = 0;
  TCCR2B = 0;
  TCNT2 = 0; 
  OCR2A = 77;
  TCCR2A |= (1 << WGM21);
  TCCR2B |= (1 << CS22) | (1 << CS21) | (1 << CS20);
  TIMSK2 |= (1 << OCIE2A); 
  interrupts();
  pinMode(2,OUTPUT);pinMode(3,OUTPUT);pinMode(P1,OUTPUT);pinMode(P1,OUTPUT);pinMode(P3,OUTPUT);pinMode(P4,OUTPUT);pinMode(P5,OUTPUT);pinMode(P6,OUTPUT);pinMode(P7,OUTPUT);
  pinMode(P8,OUTPUT);pinMode(P9,OUTPUT);pinMode(P10,OUTPUT);pinMode(P11,OUTPUT);pinMode(P12,OUTPUT);pinMode(P13,OUTPUT);pinMode(P14,OUTPUT);
  pinMode(AN_R,INPUT);
  pinMode(AN_L,INPUT);
  analogReadResolution(8);
  analogReference(INTERNAL1V024);
}

void loop(){
   r_in = map(analogRead(AN_R), LOW_IN,HIGH_IN, 0, 14);
   l_in = map(analogRead(AN_L), LOW_IN,HIGH_IN, 0, 14);
   r = constrain(r_in, 0, 14);
   l = constrain(l_in, 0, 14);
   urr_l = l;
   urr_r = r;
  if(urr_l<ur_l){ur_l=ur_l-1;}else{ur_l = l;}
  if(urr_r<ur_r){ur_r=ur_r-1;}else{ur_r = r;}
  delay(50);
  }

ISR(TIMER2_COMPA_vect){
  switch(h){
    case 0: ch(SETKA_1,1);segm(ur_l);ch(SETKA_0,0);break;
    case 1: ch(SETKA_0,1);segm(ur_r);ch(SETKA_1,0);break;
    }
  h++;if(h>1){h=0;}
  }  

void segm(int a){
  switch(a){
   case 0: ch(P1,1);ch(P2,1);ch(P3,1);ch(P4,1);ch(P5,1);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 1: ch(P1,0);ch(P2,1);ch(P3,1);ch(P4,1);ch(P5,1);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 2: ch(P1,0);ch(P2,0);ch(P3,1);ch(P4,1);ch(P5,1);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 3: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,1);ch(P5,1);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 4: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,1);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 5: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,1);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 6: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,1);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 7: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,1);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 8: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,1);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
   case 9: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,1);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
  case 10: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,0);ch(P11,1);ch(P12,1);ch(P13,1);ch(P14,1);break;
  case 11: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,0);ch(P11,0);ch(P12,1);ch(P13,1);ch(P14,1);break;
  case 12: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,0);ch(P11,0);ch(P12,0);ch(P13,1);ch(P14,1);break;
  case 13: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,0);ch(P11,0);ch(P12,0);ch(P13,0);ch(P14,1);break;
  case 14: ch(P1,0);ch(P2,0);ch(P3,0);ch(P4,0);ch(P5,0);ch(P6,0);ch(P7,0);ch(P8,0);ch(P9,0);ch(P10,0);ch(P11,0);ch(P12,0);ch(P13,0);ch(P14,0);break;
    }
  } 

void ch(int pin, int logic){digitalWrite(pin, logic);}     

Настройка индикатора уровня:

После сборки подайте напряжение 9 В на индикатор уровня, измерьте переменное напряжение подаваемое на накал, оно должно находится в пределах 3,5±0,2 В, при необходимости измените номиналы токоограничивающих резисторов (4,7 Ом).

Напряжение анодов-сегментов должно быть в пределах 30…35 В, для регулировки этого напряжения можно изменить скважность ШИМ путем изменения содержимого регистра OCR1A. При OCR1A = 20 скважность ШИМ равна 50 %, постарайтесь не увеличивать скважность больше 50 %, увеличение скважности больше 50 % заметно увеличит ток потребления индикатора уровня и вызовет сильный нагрев транзистора IRF3205.

OCR1A = 12;

Следующие два параметра устанавливают уровень тишины и ограничивают максимальный уровень сигнала. Если при замкнутом входе уровень индикатора превышает 1 деление шкалы , то увеличьте параметр LOW_IN.

Если при подачи на вход звукового сигнала индикатор постоянно находится в красной зоне, то увеличьте параметр HIGH_IN.

#define  LOW_IN    2

#define  HIGH_IN   50

При загрузке скетча отключайте питание 9 В.

Настройки платы контроллера:

Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=8979#p8979
российская операционная система

Добавить комментарий

Войти с помощью: