Донецкий техникум промышленной автоматики

Лабораторний блок живлення. Версія 4.

ATMega32, BascomAvr

вступ

Дана стаття є продовженням цієї , Тому я не буду детально описувати конструктивні вузли, вони досить докладно описані в попередній статті, зупинюся лише на моментах, які викликали утруднення у мене.

Так само, інформація для тих, кому потрібен супер-прецизійний блок, аналоги яких стоять от 3000 $: цей блок не відноситься до апаратів такого класу.

ТТД.

Вихідна напруга 0 - 50 В Вихідний струм 0 - 10 А Регулювання напруги і струму Цифрове з клавіатури, шляхом прямого набору Оперативне зміна Функціональні кнопки клавіатури Захист Релейная або обмеження Включення виходу За допомогою кнопки Звукове підтвердження натискання Є, відключається Тепловий режим Програмне включення вентилятора, від датчиків Корекція показань Програмне Зв'язок з комп'ютером USB з опторазвязкой

У цій версії блоку живлення первинне джерело і регулятор розміщені на одній платі, в основному, для зручності монтажу. Плати контролера і клавіатура на окремих платах.

Програма, написана для даного блоку живлення, кардинально відрізняється від 2-ї версії: введено управління від кнопкової клавіатури, вона заточена під імпульсний блок живлення. Основні проблеми при написанні програми були в незнанні алгоритму введення параметрів з клавіатури з десяткової коми і введення числових даних в регістри ШІМ. Я тупо бився об стіну, поки не прийшла думка складати байти в послідовність, тобто в стрінговую змінну, а вже стрінговую змінну перетворити в число, що я і зробив. Можливо, існують і інші, більш досконалі алгоритми, але додумувати вже було лінь, і, як відомо, краще - ворог хорошого.

Друга проблема, що виникла переді мною, - це зв'язок з компом. Потрібна була стабілізація частоти для впевненої зв'язку з комп'ютером, і стало не вистачати пам'яті і ніжок мікроконтролера, але це не проблема - запхав все це в мегу16 (32), заодно додав оперативну зміну напруги і струму з клавіатури, не вводячи цифрові значення. Додав звукове підтвердження натискання кнопки, ця функція відключається з клавіатури без заходу в меню

Нюанс: при використанні блоку живлення з керуванням 3м ШІМ є можливість регулювати різницю в напрузі між входом і виходом регулятора. Правда, поки не бачу в цьому потреби. 3-й ШІМ був введений для того, щоб напруга на вході стабілізатора не знижувався нижче 8 вольт, при інших режимах різниця напруг становить 3 - 4 вольт.

Програма управління блоком живлення з комп'ютера чи не писалася, хоча в блоці для цього все є, навіть примітивний протокол обміну даними.

опис

Схема блоку живлення не зазнала сильних змін.

Малюнок 1. Схема блоку живлення.

На схемі блоку харчування червоними прямокутниками показані різні вузли, щоб не було сильно страшно від великої кількості деталей.

Інвертор на ис DA 301 виконаний ШІМ регулятор.

Іс DA 302 драйвер транзисторів інвертора з бустрепним харчуванням D 8C 308 верхнього плеча.

Зверніть увагу на необхідності частина інвертора - снаббери С309, С310 R319, С312 R318 і діоди паралельно транзисторів, випрямляч так само оснащений снабберамі, це досить відчутно знижує нагрів транзисторів і діодів, а так само істотно знижує рівень перешкод.

Регулятор виходу з ланцюгами управління реле включення виходу і ланцюгом управління вентилятора.

Вузол захисту класичний - при перевищенні струму включається тиристор і залишається в замкнутому стані.

Регулятор вихідного напруги інвертора на ис DA 304 працює від ШІМ3 контролера.

Допоміжний блок живлення виконаний на ис VIPER 12 або 20 з різними варіантами формування 5 вольт.

Мережевий випрямляч виконаний окремо з обмежувачем струму заряду конденсаторів фільтра.

Рекомендації по збірці

Силова частина блоку живлення і власне регулятор зроблені на одній платі розміром 190х100 мм, випрямляч і згладжує фільтр мережевої напруги зроблені окремо. Харчування мікроконтролера і схеми регулювання зроблені на мікросхемі Viper 12, вихідні напруги з цього блоку 10 і -3 вольта. Збірку блоку рекомендую почати саме з цього вузла: зібрати, підключити через лампу 25 Вт до напруги 300 вольт, перевірити вихідні напруги, харчування самої мікросхеми 15-18 вольт, вихідні в «холодній» частини + 10..12в і - 3 ... -4 вольт. Якщо нічого не димить, будемо вважати, що ця частина справна. Далі збираємо ШІМ регулятор на TL 494 і перевіряємо наявність імпульсів на 9 і 10 ніжках, якщо є - йдемо далі, припаюємо драйвер IR2113 і перевіряємо наявність імпульсів на виводі 1. Верхнє плече перевірити проблематично без транзисторів, тому віримо на слово цій мікросхемі. Далі збираємо силову частину. Тут проблем ніяких, потрібно тільки регулювання спрацьовування захисту, для цього навантажити блок на навантаження приблизно 650 - 700 ват і підлаштування резистором підвести до моменту спрацьовування, хоча блок витримує навантаження в 1 квт. Далі просто збираємо інше, тому як все повинно працювати.

З напруги 10 вольт через DC -DC конвертер надходить на живлення мікроконтролера і дисплея. DC -DC конвертер зібраний на мікросхемі MIC 4680, можна, звичайно, було зібрати і на будь-який інший, але цих просто було багато. Використаний дросель фірми murata 68 uH на струм до 0,5 ампера. Використовувати лінійний регулятор теж можна, але підсвічування споживає майже 300 ма, а ресурси допоміжного блоку живлення не безмежні.

Трансформатор TR 501, муздрамтеатр вітчизняний М2000НМ, Ш6х6, зазор 0,4 мм (прокладка по 0,2 мм на центральний і на бічні), обмотка 2-1 220 витків Ф 0,15 мм, 3-4 26 витків Ф 0,15 мм, обмотка 8-6 19 витків Ф 0,5 мм (косичка з 12 проводів Ф 0,15 мм), обмотка 6-5 (мотається в зворотну сторону, так як для -3 вольт) 6 витків Ф 0,15 мм. На штатному каркасі.

Трансформатор TR 2 мотається на кільці К45х28х12, первинна обмотка 38 витків, проводом 5х0,5 мм, вторинна 18 витків, проводом 10х0,5 мм, первинна від вторинної обмотки має бути добре ізольована.

Трансформатор струму мотається на кільці діаметром 12 - 20 мм і містить 100 витків дроту Ф 0,2 - 0,5 мм, або МГТФ 0,07

Мікроконтролер і клавіатура проектувалися на окремих платах, але з можливістю їх не розпилювати. На платі МК розміщується сам контролер, контролер шини USB з опторазвязкой, пищалка і роз'єми для підключення, контролер оснащений світлодіодом, який моргає при правильній роботі пристрою.

На платі клавіатури розташовані 16 кнопок і 4 світлодіода. 10 цифрових, виконують також інші функції, коли не використовуються цифри, кнопки вкл виходу, вкл триггерного режиму, режими регулювання і десяткова точка, світлодіоди відображають режим роботи, вкл / викл критичний режим, вкл / викл вихід, аварійний режим, перевищення струму. Клавіатура використаний a аналогова, тобто кожної кнопці відповідає певне напруження, яке програма інтерпретує як натискання певної кнопки. Якщо кнопки не натиснуті на виході 5 вольт, це означає, що жодна кнопка не було натиснуто. На схемі намальований також DC -DC конвертер, але на платі його немає.

Опис роботи блоку

При включенні блоку з'являється заставка з номером версії, після закінчення двох секунд, на дисплеї з'явиться поточне значення струму і напруги, стан виходу «відключений», температура, стан вентилятора, встановлене значення струму, режим пікалкі,

Для включення виходу потрібно натиснути кнопку "OUT", цієї ж кнопкою вихід відключається, відображається відповідним світлодіодом і дублюється написом на дисплеї. Щоб змінити режим струмового захисту використовується кнопка "TRIG", цією кнопкою вибирається режим захисту - обмеження струму, або критичний режим, який відключає вихід при досягненні струму обмеження. Цей режим підтверджується світлодіодом.

Для установки потрібного значення напруги або струму натискається відповідна кнопка "U" або "I", і на який з'явився екрані цифровими кнопками з коми вводиться потрібне значення. Якщо це значення перевищує встановлене в сервісі максимальне значення, програма попросить ввести знову. Запам'ятовуються введені значення кнопкою "M", якщо не відключений режим звукового підтвердження, прозвучить потрійний звуковий сигнал; при натисканні на будь-яку «діючу» кнопку звучить одинарний сигнал. Змінити поточні значення можна, також просто натискаючи на відповідні кнопки «стрілки», які нанесені на цифрові кнопки, для струму і напруги. Така зміна годі й зберігати або зберегти кнопкою "M". Відключити або включити звук можна, утримуючи кнопку «0» дві секунди.

Для переходу в сервісний режим потрібно при включенні натиснути і утримувати кнопку "OUT", і через три секунди блок перейде в режим калібрування.

керуюча програма

Після скидання, програма робить початкову ініціалізацію портів, регістрів, здійснює пошук датчиків температури, виводить заставку на дисплей, зчитує дані про коефіцієнти і дані про запам'ятали параметрах напруги і струму, перевіряє натиснення на кнопку «OUT» для переходу в сервісний режим, і переходить в основний цикл. Після чого починає моргати світлодіод, що сигналізує про нормальну роботу пристрою, включення і виключення світлодіода організовано підрахунком числа викликів підпрограми.

Тут опис підпрограми набору значень з окремих цифр і коми: вона також перевіряє, щоб кома була одна; якщо спробувати ввести кому ще раз, кома проігнорується:

Sub Convert If Knopka = Trig1 Then 'модуль одічного натискання триггерного типу Goto Perehod11' якщо натискання триває то йдемо End If

Це зроблено для того щоб натискання кнопки бачилося в програмі тільки один раз, а то буде ціла рядок з однієї цифри. Просто перевіряє, та ж цифра натиснута чи ні, якщо та ж - йде, в кінці підпрограми перепрісваівается значення перевіряється змінної. Тобто, якщо значення кнопки не змінювалося (залишалася такою, що натискує), при другому проході, дія підпрограми не проводиться, просто виходить з підпрограми

If Knopka = "W" Then 'перевірка на непотрібні символи Goto Perehod11' End If Call Bibip () 'Бібікнуть If Knopka = "." Then 'перевірка на натискання коми If A = 1 Then 'заборона на натискання коми вдруге Goto Zpt2 End If

далі до набраному значення додається кома

Msgi = Msgi + "." 'висновок на екран, утримуючи кома Zpt2: A = 1' установка прапора коми End If If U1 <353 Then 'селекція символів цифр Goto Perehod11 "а то й цифра ігноруємо End If

далі збираємо значення з натиснутих кнопок; додавання коми в будь-якому місці змінної проводиться вище.

Msgi = Msgi + Knopka 'побудова набирається значення Po = Val (msgi)' перетворення стринга в чисельне значення Po = Po * Cifir Cifir2 = Round (po) 'округляем Conv = Len (msgi) If Conv = 6 Then' перевірка кількості символів A = 0 'скидання прапора коми Conv = 0 Msgi = ""' End If Perehod11: 'модуль одиночного натискання триггерного типу Trig1 = Knopka End Sub

Підпрограма також перевіряє кількість введених цифр: якщо воно перевищує задану кількість, то дисплей очищується, і введення потрібно зробити за новою. Введення значень, що перевищують максимально допустимий, також блокується і виводиться повідомлення «введіть знову»

Підпрограма включення вентилятора перевіряє значення температури з двох датчиків, визначає максимальну температуру, і якщо вона перевищує поріг, встановлений в сервісі, то вмикає вентилятор:

Sub Vse1 Incr Cou1wir If Cou1wir <22 Then: Goto Couend: End If 'лічильник проходів затримки 1wverify Dsid1 (1): Call Temperature (): Meas2 = Meas' 1 ds18b20 1wverify Dsid2 (1): Call Temperature () '2 ds18b20 If Meas> Meas2 Then: Goto Tteerrmm: Else: Meas = Meas2: End If 'вибір більшої температури Tteerrmm: If Meas> Porog3 Then: Set Vent: Vnt = 1: End If If Meas <35 Then: Reset Vent: Vnt = 0: End If 'вимикання вентил якщо менше 35 град 1wreset:: 1wwrite & HCC: Waitms 1: 1wwrite & H44' завдання на перетворення для всіх оптом Cou1wir = 0 Couend: End Sub

подпрограмка зчитування і обчислення температури, з відсіканням десятих часток і знака

Sub Temperature 1wwrite & HBE:: Byte0 = 1wread ():: Byte1 = 1wread (): Waitms 10 'зчитуємо температуру Meas = Byte1' з 2 х байт робимо слово Shift Meas, Left, 8 'зрушуємо на 8 розрядів вліво Meas = Meas + Byte0 'добавл другий байт Shift Meas, Right, 4' видаляємо десяті End Sub

У підпрограмі очікування готовності перетворення датчиків організовано підрахунком викликів підпрограми, так як час перетворення DS 18 B20 одно 750 mC, занадто довге очікування для роботи програми, а опитування допускається в межах декількох секунд. Вентилятор вимикається, якщо досягнута температура 35 градусів.

Підпрограма роботи з портом

Dim L_time As Word 'змінна часу очікування слова з компорта Dim Get_byte As Byte
Sub Pechat ()
L_time = 0
Cmda = ""
'Обнуляємо команду Get_byte = Ischarwaiting ()' перевіряємо заповнення буфера кому порту If Get_byte = 0 Then 'якщо даних немає то ходимо Goto Endpech
End If
Do Incr L_time 'збільшуємо лічильник вікна очікування Get_byte = Ischarwaiting ()' перевіряємо заповнення буфера кому порту If Get_byte <> 0 Then 'якщо дані готові то зчитуємо Get_byte = Inkey ()
Select Case Get_byte
Case 120:
'X Print U_set; ""; I_set; Po 'запит даних встановлених значень Case 099:' C Print U_real; ""; I_real 'запит даних текущщіх значень Case 115:' S Print P; ""; I; ""; Vnt; ""; Meas; ""; Snd 'запит статусу Case 112:' P I = 1: Call Our () 'включення виходу із зовні Case 111:' O I = 0: Call Our () 'вимикання виходу Case 122:' Z Call Tr () 'включення і вимикання триггерного режиму з поза Case Else 'якщо прийшов символ інший перевіряємо Cmda = Cmda + Chr (get_byte)' збірка команди End Select
End If
Loop Until L_time> 50000 'якщо час скінчився - виконуємо команду Pech = Left (cmda, 1)' витягнемо перший символ, який відповідає за управління M = Len (cmda) 'дізнаємося скільки символів в прийшла команді M = M - 1' зменшуємо на 1 , так як перший символ зберігає тільки управління Znac = Right (cmda, M) 'витягуємо з команди все символи крім першого символу Nado = Val (znac)
Select Case Pech 'перевіримо призначення команди Case "i":' якщо команда установки струму, Cifir2 = Nado * Cifiri 'то встановлюємо струм I_set = Cifir2' і дані на дисплеї Pwm1b = Cifir2
Case "u": 'якщо команда установки напруги Cifir2 = Nado * Cifiru' то встановлюємо напругу Pwm1a = Cifir2
End Select
Endpech:
End Sub

Для комп'ютера програма чи не писалася, протокол обміну символьний,

Для приходять з комп'ютера символів (все в нижньому регістрі, латиницею) блок виконує відповідну команду і передає дані комп'ютера (у мене - термінальній програмі):

X - запит встановлених значень

C - запит поточних значень

S - запит статусу, що включено, виключено, температуру

P - включення виходу

O - виключення виходу

Z - включення / вимикання триггерного режиму

Для управління встановленими значеннями, також в символьному режимі пересилається команда з даними:

I2.22 - установка струму (наприклад 2.22 ампера)

U22.2 - установка напруги (наприклад 22.2 вольт)

На прийом багатобайтові команди установки відводиться час очікування прийому в рядку Loop Until L_time> 50000, приблизно 200 мілісекунд. Якщо за цей час команда не завершиться, то вона ігнорується. Природно цей час можна зменшити або збільшити.

Протокол не претендує на закінченість і законність, тому може бути змінений ким завгодно, хто буде писати програму для компа.

По тексту решті програми взагалі багато чого зрозуміло з коментарів, і тому докладно зупинятися не буду.
використовувані pdf-файли , програма

Обговорення на форумі
Автор: Мамишев Р. (aka RAF65)