Дисплей для відображення частоти мережі електроживлення
Ідея проекту
Я давно планував зробити нещо подібне. Ідея полягає в тому, щоб на дисплеї відобразити частоту мережі електропостачання. Значення частоти має бути 50 Гц, однак насправді частота коливається навколо цього значення в результаті зміни живлення та енергоспоживання.
Якщо частота падає, то це відбувається через підвищення енергоспоживання та/або падіння живлення. Тому генератори повинні працювати більше. Це трохи знижує їх швидкість, і системам управління необхідно деякий час, щоб підвищити швидкість назад.
Якщо частота підвищується, то це відбувається через зниження енергоспоживання та/або отримання додаткового живлення. Тому генератори повинні працювати менше. Це трохи підвищує їх швидкість, і системам управління необхідно деякий час, щоб знизити швидкість назад.
У зв'язку з цим частота постійно то збільшується, то зменшується. Ви можете подивитися графік в реальному режимі часу останніх 60 хвилин на веб-сайті державної енергетичної системи, і цю ж інформацію в аналоговому вигляді на веб-сайті динамічного запиту.
Я захотів зробити дисплей, який буде відображати частоту мережі електропостачання до 3-х цифр після коми. Я буду використовувати ті ж семисегментні дисплейні модулі, як і для моїх UNIX годин. Тому все, що мені потрібно зробити, так це розробити схему, яка буде контролювати частоту.
Як контролювати частоту
Існує кілька способів, як це зробити. Я вибрав наступний: необхідно підрахувати фіксовану кількість періодів частоти електропостачання та час, протягом якого виконувався підрахунок.
Ось креслення цієї ідеї: Синусоїдальні коливання відображають сигнал мережі електропостачання. Високочастотний сигнал йде паралельно і використовується в якості лічильника. Підраховане число після фіксованої кількості циклів обернено пропорційно частоті.
Концепція вимірювання змінюваного сигналу низької частоти.
Наприклад, якщо частота мала точне значення 50.000 Гц, я нарахував 200 періодів, на що знадобилося рівно 4 секунди. Якщо значення частоти дорівнювало 50.001 Гц, 200 періодам знадобиться лише 3.99992 секунди.
Але це зовсім незначна різниця! Для точного визначення часу необхідно використовувати високостабільний джерело часових інтервалів. RC-генератор у мікроконтролері не може цього зробити. Я буду використовувати мікроконтролер ATTINY84, який має похибку лише +/- 10%, або +/- 1% після користувацької калібровки. Також я не можу використовувати зовнішній кварцовий резонатор, не заплативши за високостабільний резонатор БАГАТО грошей.
На щастя, є один клас дешевих (дуже дешевих) ІС, які мають високоточні та високостабільні вбудовані генератори, і це генератори імпульсів часу. Годинник реального часу – інтегральна схема DS3231, яку я також використовував в UNIX годинах, має на виході частоту 32.768 кГц з похибкою +/- 2 ppm (мільйонна частина). Підраховуючи імпульси таким способом, я зможу дуже точно визначити час.
Математичні обчислення
Після невеликих математичних обчислень я зміг виконати розрахунок для 100 циклів живлення (2 секунди на 50 Гц) і отримати необхідну точність.
Формула для перетворення кількості циклів в частоту мережі електропостачання має наступний вигляд:
де N підраховане число циклів електропостачання і C підраховане число циклів на частоті 32768 Гц.
Я перетворив формулу, додавши множник 1000x, щоб використовувати лише цілі числа, тому 50.000 Гц буде дійсно зберігатися як 50000. Це значно краще для виконання на мікроконтролері.
Оскільки ми використовуємо цілочисельні обчислення, то нам необхідно виконувати округлення значень. Тому остаточна формула виглядає наступним чином:
Наприклад, підраховане число 65724 буде дорівнювати частоті 49.857 Гц, що зберігається як значення 49857. Підраховане число 65723 буде дорівнювати частоті 49.858 Гц, що зберігається як значення 49858.
Отже, зміна одного числа представляє зміну однієї значущої цифри (перерахованої частоти). Це якраз те, що я і хотів отримати.
Значення частоти передається безпосередньо на дисплей. Відображувана на дисплеї частота оновлюється кожні дві секунди.
На платі управління також встановлено два світлодіоди для відображення зміни частоти: вище/нижче. Частота зберігається в кільцевому буфері один раз на хвилину. Скользяче середнє значення обчислюється за десять хвилин, і різниця між першим і останнім значенням використовується для обчислення тренда. Різниця більш ніж +/- 0.02 Гц вважається суттєвим трендом.
Щоб знайти “найкращий” алгоритм для цього, дані державної електроенергетичної системи, відображені в режимі реального часу, аналізувалися модулем, що використовує бібліотеку Python Beautiful Soup. Я тільки експериментував з різними наближеними оцінками, поки не отримав правильний результат.
Збираємо все разом
Перед розробкою остаточного варіанту схеми я перевірив код на Arduino з оптоізольованим входом мережі електропостачання. Електронний проект позичений з безлічі моїх попередніх робіт. У нього входить:
- Вхідний пристрій частоти мережі з мого проекту Лічильник безпечних днів.
- (Він обрізає AC сигнал напругою 9 В (від невеликого трансформаторного блоку живлення) до 5 В шин живлення)
- З'єднання дисплея та годинника реального часу DS3231 з UNIX годин.
- Стандартний мікроконтролер ATTINY84 від хост-машини інших проектів.
Блок-схема.
Я зміг зменшити розмір плати до розміру семисегментного дисплея. Я замовив плати в компанії Ragworm, і всі запрацювали з першого разу.
Єдиною модифікацією, яку я зробив, так це додав невеликий “радіатор” на стабілізатор живлення 5 В. Вхідне живлення для системи величиною 9 В AC подавалося від невеликого адаптера. Оскільки регулятор управляє всіма 5 дисплейними індикаторами, він розсіює потужність 1 Ватт, хоча сам має досить маленький корпус. Він сильно нагрівається, тому я додав радіатор, який зроблений з великої кількості припою на шматочку плати. Трохи кустарно, але цей радіатор допомагає регулятору охолоджуватися.
Друкована плата, світлодіоди, мікроконтролер, джерело живлення та “радіатор”.
І нарешті, я вирізав лазером корпус (практично це стандартно для кожного мого проекту). Це була адаптація корпусу від UNIX годин. Для світлодіодів контролю тренда частоти я використовував восковий олівець, який розплавив, а потім за допомогою лазера вигравірував дві стрілки. Вийшло зовсім непогано. Думаю, що зможу використовувати цю техніку в своїх майбутніх проектах.
Зібраний дисплей, на якому в даний момент відображається “нисхідний” тренд частоти.