Измеритель индуктивности на LGT8F328

Пример создания измерителя индуктивности на LGT8F328 является продолжением статьи http://rcl-radio.ru/?p=131706 посвященной примерам работы компаратора в микроконтроллере LGT8F328.

Измерение индуктивности происходит достаточно просто, так как индуктивность и емкость представляют собой колебательный контур, то компаратор совместно с колебательным контуром будет генерировать частоту, а частотомер на Arduino произведет пересчет частоты в значения индуктивности по всем известной формуле:

L = 1/ (4π²F²C)

Схема измерителя индуктивности достаточно проста, она содержит несколько резисторов и конденсаторов, а так же плату микроконтроллера и OLED дисплей.

0,91″ I2C 128×32 OLED — это компактный дисплей, который использует технологию OLED (Organic Light Emitting Diode) для отображения изображений. Дисплей имеет интерфейс I2C, который обеспечивает простое подключение к микроконтроллерам и другим устройствам.

Основные характеристики дисплея:

— Разрешение 128×32 пикселей.
— Размер дисплея 0,91 дюйма (около 2,3 см).
— Яркость до 150 кд/м².
— Контрастность 2000:1.
— Угол обзора 160 градусов.
— Поддержка интерфейса I2C с адресом 0x3C.

Дисплей 0,91″ I2C 128×32 OLED обеспечивает четкое и яркое отображение информации, которое может быть использовано в широком спектре приложений. Он легко подключается к различным устройствам, таким как Arduino, Raspberry Pi и другим микроконтроллерам.

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

В целом, дисплей 0,91″ I2C 128×32 OLED является отличным выбором для тех, кто ищет компактный и яркий OLED-дисплей с простым подключением по интерфейсу I2C.

В измерителе используется плата разработчика LGT8F328P-LQFP32 MiniEVB, как использовать плату в среде программирования Arduino IDE рассказано в — http://rcl-radio.ru/?p=129966

LGT8F328P-LQFP32 MiniEVB — это плата разработки, основанная на микроконтроллере LGT8F328P с 32 выводами в корпусе LQFP32. Это мощный микроконтроллер, который обеспечивает высокую производительность и широкие возможности для разработки.

Основные характеристики платы LGT8F328P-LQFP32 MiniEVB:

— Микроконтроллер LGT8F328P с тактовой частотой до 32 МГц и 32 Кбайт памяти Flash.
— Поддержка интерфейсов SPI, I2C, UART, ADC и PWM.
— Встроенный USB-интерфейс для программирования и отладки.
— Низкое энергопотребление и поддержка режима сна.
— Поддержка работы от внешнего источника питания 5 В или от USB-порта.

LGT8F328P-LQFP32 MiniEVB — это отличная плата разработки для начинающих и опытных разработчиков, которые хотят создавать проекты на основе микроконтроллера LGT8F328P. Она обеспечивает легкую разработку и отладку приложений, поддерживает широкий спектр интерфейсов и имеет удобный USB-интерфейс для программирования и отладки.

Кроме того, плата LGT8F328P-LQFP32 MiniEVB имеет компактный размер и низкое энергопотребление, что позволяет использовать ее в различных приложениях, включая портативные устройства и системы автоматизации.

Измеритель индуктивности производит непрерывное измерение и выводит результат измерения на дисплей с  интервалом 1 секунда. При сборке измерителя особое внимание следует уделить точности конденсатора колебательного контура, от него зависит точность измерения индуктивности. В схеме используется конденсатор номиналом 1000 пФ, но Вы можете использовать конденсатор с небольшим отклонением от рекомендуемого номинала. При этом необходимо указать его емкость в скетче.

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

#include <Wire.h> 
#include <U8glib.h>            // https://github.com/olikraus/u8glib/
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);
U8GLIB_SSD1306_128X32 u8g(U8G_I2C_OPT_NONE);  // I2C / TWI 

#define CAL 31249; 
#define CAP    1000.0 // pF

extern uint8_t SmallFont[],BigNumbers[];
unsigned long f_out,tic;

void setup() {
  Serial.begin(9600);
  Wire.begin();
  PORTD |= (1 << PD5); // подтягивающий резистор на PD5 (вход T1)
  // TIMER_1 INPUT T1
  TCCR1A = 0;TCCR1B = 0;TCNT1=0;
  TCCR1B = (1 << CS12) | (1 << CS11) | (1 << CS10);
  TIMSK1 = (1 << TOIE1);
  TCKCSR = (1 << F2XEN) | (1 << TC2XS1);
// TIMER_3 1 SEC
// (32000000/((31249+1)x1024))=1 Hz
  TCCR3A = 0;
  TCCR3B = 0;
  TCNT3=0;
  TCCR3B = (1 << CS32) |(1 << CS30) | (1 << WGM32);
  TIMSK3 = (1 << OCIE3A);
  OCR3A = CAL;
// TIMER_2 OUTPUT 8 MHz
TCCR2A = 0;TCCR2B = 0;TCNT2=0;
  TCCR2A = 1 << COM2A0 |1 << WGM21;
  TCCR2B = 1 << CS20;
  OCR2A = 0;
  C0SR = 0;C0XR=0;
  C0XR |=(1<<C0OE); // C0OE[7] = 1, выход компаратора AC0 для внешнего порта PD2
  // ВЫБОР ИНВЕРСНОГО ВХОДА
  ADCSRB = 0b01000000;// ADMUX
  /*
  CME01[7] CME00[6] Источник входного сигнала AC0
  0        0        ACXN
  0        1        ADMUX
  1        0        DFFO
  */
  ADMUX = 0b00000000; // CHMUX[3:0] = 0000 Источник входного сигнала PC0 (A0)
  // ВЫБОР НЕИНВЕРСНОГО ВХОДА
  C0SR &=~(1<<C0BG);C0XR &=~(1<<C0PS0);
  /*
  C0BG C0PS0 Источник входного сигнала AC0
  0    0     AC0P
  0    1     ACXP
  1    0     DAO
  */
  delay(100);
}

void loop() {
 float l_iz = 1/(4*3.14*3.14*f_out*f_out*CAP*pow(10,-12))*1000000.0;
 if(l_iz>100000||l_iz<0){l_iz=0;}
 Serial.print(l_iz,2);Serial.println(" uH");
 Serial.print(f_out);Serial.println(" Hz");
  u8g.firstPage(); do {
  u8g.setFont(u8g_font_profont29r);u8g.setPrintPos(0,25);
    if(l_iz<1000){u8g.print(l_iz,2);u8g.drawStr(97,25,"uH");}
    if(l_iz>=1000){u8g.print(l_iz/1000,2);u8g.drawStr(97,25,"mH");}
  }while( u8g.nextPage() );
 delay(1000);
}


ISR(TIMER1_OVF_vect) {tic++;}

ISR(TIMER3_vect) {
  if (TIFR3 & (1 << OCF3A)){
      TIFR3 = 1 << OCF3A;
      f_out = tic*0xFFFF + TCNT1;
      tic=0;TCNT1=0;
  }} 

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=628

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

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