Пример создания измерителя индуктивности на 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; }}
Собрал,показывает, но вообще непонятно что, регулировал в прошивке с1 емкость чтобы подогнать параметры, но правильно показывает только от 100 до 1000 микрогенри всё что ниже и выше неправильно. ёщё заметил начинает набирать правильно но потом параметры уходят в 2 раза ниже. Вообщем не разобрался.