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

Звичайно, до входу в цикл слід задати значення цих імпульсів

Тепер, можна перевірити в програмі, скажімо, ISIS, що ми отримаємо меандр, який в точності (крім амплітуди напруги) повторить попередню схему

Використовуючи затримки, слід памятати про правильне завданні слова конфігурації і виборі правильної тактової частоти, інакше симуляція дасть невірні результати

Ріс336 Створення схеми утворення меандра в програмі

Щоб стежити за струмом, який змінюється при зміні навантаження, будемо стежити за напругою на двигуні Можна стежити за середньою напругою, але я хочу використовувати вимірювання напруги при завданні високого рівня на виході RA0 Для програмного вимірювання створимо макрос control_car

Вибір часу затримки в 10 мс випадковий, я поки не готовий вибирати конкретні параметри Але для моделювання цей вибір не гірше будь-якого іншого

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

Я використовую мікроконтролер PIC16F628A, отже, всі отримані мною результати будуть ставитися до нього Якщо ви використовуєте інший контролер, то перевірте отримані результати, вони можуть відрізнятися від тих, про які піде мова нижче

Рис 337 Програма з доповненням виклику макросу

Стежити за напругою на двигуні допоможе вбудований в мікроконтролер компаратор

Для роботи компаратора слід провести настройку регістрів Ці настройки виконуються у вставці на мові Сі до входу в цикл

cmcon = 0xC6

trisa = 0x77 trisb = 0xFF

Рис 338 Підпрограма і основна програма

В основній програмі формується імпульсна напруга, яка подається на двигун При кожному позитивному імпульсі здійснюється виконання підпрограми У підпрограмі перевіряється стан входу RB0, до якого підключений вихід компаратора На один із входів компаратора подано опорна напруга, на інший вхід подається вимірювана напруга За результатами перевірки тривалість імпульсів збільшується або зменшується Для цього ми змінюємо величину змінних high_level і low_level, Що утворюють час знаходження виходу у високому і низькому стані

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

Перевірити програму на цій стадії (логіку роботи програми) можна за допомогою програми ISIS

Рис 339 Перевірка програми при одній величині вимірюваної напруги

Рис 3310 Перевірка програми при іншій величині вимірюваної напруги

Перш, ніж продовжити розробку програми, слід провести вимірювання з реальним колекторним двигуном Чим я і має намір зайнятися У мене багато років лежить куплена на радіоринку мікро дриль – двигун 12DMG-103-02 з цангові зажимом для свердла Дуже зручно свердлити отвори в платі

Підключивши двигун послідовно з резистором 10 Ом до джерела постійної напруги 5В, я проводжу кілька вимірів, які заношу в таблицю

Опір (Ом)

Напруга (В)

Струм (мА)

Двигун вимкнений

8

0

0

Холостий хід

4

84

Під навантаженням

3

140

Крім цих вимірів, виконаних за допомогою мультиметра, мене цікавить, як «виглядає» напруга на двигуні Чому мене це цікавить Подивіться самі

Рис 3311 Осцилограма напруги на двигуні на холостому ходу

На двигуні явно видно коливання напруги, викликані особливостями роботи самого двигуна Оскільки доведеться спостерігати (вимірювати напругу на двигуні) за двигуном в процесі його роботи, ці коливання напруги слід брати до уваги Так при виборі опорного напруги 4В, ми можемо отримати постійні спрацьовування компаратора і безперервне зміна режиму роботи двигуна, тільки за рахунок того, що напруга постійно коливається в межах ± 100 мВ У цьому випадку можна вибрати напруга стабілітрона (або джерела внутрішнього опорного напруги), скажімо, 39В

Але осциллограмма вище знята при роботі на холостому ходу Струм при збільшенні навантаження на вал двигуна, як це видно з таблиці, збільшується І збільшується струм значно Чи не буде і коливання напруги істотно зростати при збільшенні навантаження

Можливо, це не буде настільки істотно, якщо напруга на двигуні під навантаженням зменшується до 3В Але ми при цьому мають намір підняти напругу до 4В І тоді коливання напруги стануть важливі для визначення правильних налаштувань схеми

Рис 3312 Осцилограма напруги на двигуні при навантаженні на валу

Без претензій на особливу точність, можна сказати, що коливання напруги залишилися на колишньому рівні

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

Рис 3313 Додавання налаштування регістрів для використання опорного напруги

Величина опорного напруги визначається значенням, записаним в регістр VRCON Зараз напруга буде мінятися при зміні записаного числа від E0 до EF

Рис 3314 Перевірка програми з вбудованим опорною напругою

Опорна напруга можна дещо збільшити, якщо в регістрі VRCON використовувати число від D0 до DF

Рис 3315 Зміна максимального опорного напруги

Застосування мікроконтролера замість операційного підсилювача, особливо, якщо врахувати ті складності, які виникають при цьому, було б нічим не виправдане Якби не той факт, що мікроконтролер дозволяє міняти швидкість обертання двигуна, змінюючи шпаруватість

Додайте до схеми дві кнопки, одна з яких буде збільшувати швидкість обертання, а інша зменшувати при кожному натисканні кнопки Ви отримаєте управління швидкістю руху від пульта Якщо вам потрібно віднести пульт на відстань у сотні метрів, ви можете використовувати вбудований модуль USART для подачі команд

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

Тепер використання мікроконтролера буде не тільки виправдано, але і повною мірою зручно Досить легко реалізувати програму подібного управління А можна і використовувати вбудований модуль PWM (ШИМ) (Якщо частота буде підходящої)

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

Основну програму легко переробити з попередньої версії: досить поміняти рядки у вставці на мові Сі

Рис 3316 Зміни в основній програмі

Назва макросу я залишу, а сам макрос перепишу Колишню змінну я перейменують, щоб переробок було менше Для цього досить увійти в основному меню в розділ Змінні пункту Правка, Де вибрати змінну test і натиснути кнопку Перейменувати Я записую нове імя: more І, щоб не повертатися до цього, створюю за допомогою кнопки Додати нову .. змінну less Перша кнопка буде збільшувати швидкість, другий зменшувати, але, звичайно, обидві кнопки впливають на шпаруватість І обидві кнопки замикаються на землю (встановлюють низький рівень на вході)

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

Рис 3317 Перероблений макрос

Залишилося вирішити одну проблему, яка часто виникає при використанні кнопок – брязкіт контактів Програма при тактовій частоті 4 МГц (я використовую внутрішній тактовий генератор, щоб не додавати кварцовий резонатор) буде так швидко пробігати і основну гілку і макрос, що брязкіт буде сприйнятий нею, як багаторазове натискання на кнопку Отже, швидкість буде змінюватися, практично, некероване Щоб цього уникнути, я додам дві невеликі затримки в макросе car_control

Після затримки можна додати ще одну перевірку стану кнопки і виконати зміна тривалостей тільки тоді, коли кнопка дійсно натиснута

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

Ви, безперечно, розумієте, що прості зміни шпаруватості, які я навів у прикладах, покликані лише продемонструвати, як це робиться У реальних програмах зміни повинні бути

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

Рис 3318 Дляантідребезговой заходи

Залишилося тільки перевірити роботу програми в ISIS

Рис 3319 Перевірка управління двигуна за допомогою кнопок

Залишився ще один момент в наших попередніх міркуваннях: вибрані основні часи сумірні з затримками, використаними як дляантідребезговой заходів Та й натискати кнопки ви будете нехай 100 мс, а, скоріше, більше Що обовязково позначиться на роботі пристрою Що робити

Обраний період 20 мс узятий, відверто кажучи, «зі стелі» Не можна виключити, що період в дві секунди цілком працюватиме у вашому пристрої, позбавляючи від необхідності шукати яке-або інше рішення Але, якщо не буде працювати, то можна використовувати вбудований модуль PWM (ШИМ) Він є не в будь-якому мікроконтролері Але це стане ще одним важливим критерієм вибору моделі мікроконтролера

Вбудований модуль ШІМ буде працювати, поки ви натискаєте кнопки, а перепис його параметрів займе мікросекунди

З використанням PWM в програмі Flowcode в сьогоднішніх версіях є невелика проблема Перевіряючи роботу ШІМ, наприклад, в Proteus, можна виявити відсутність імпульсів на виході PWM Вирішення цієї проблеми можна знайти на форумі http://wwwflowcodeinfo

Рішення полягає в заміні файлу PIC_PWM в папці Components, розташованої там, де розташовані всі програми: тобто, в розділі Program Files, в папці Matrix Multimedia, де знаходиться програма Flowcode 4, – на виправлений файл з тим же імям, який можна знайти на сайті

Програма починається з налаштувань: завдання початкового значення змінної, використовуваної для часу установки високого рівня на виході, завдання параметрів ШІМ і включення модуля

Мінлива, яку ми будемо міняти, pulse_high, Може прийняти на початку програми будь-яке значення, для експерименту вибрано значення 100

Ми припускаємо використання двох кнопок, які будуть зєднувати входи з землею, тому зроблена вставка на мові Сі, що включає підтягує резистори до входів: option_reg = 0x7F

Далі слід настройка модуля PWM

Рис 3320 Початкова ділянка програми, ініціалізація

Задаємо період коливань з урахуванням коефіцієнта попереднього поділу Про те, що це, як це виглядає, навіщо воно потрібно – про все це краще прочитати в довідці по конкретної моделі мікроконтролера Однак період, це ясно, а попереднє поділ тактирования модуля PWM дозволяє зменшити частоту вироблених їм імпульсів

Рис 3321 Завдання періоду коливань на виході PWM

Задавши період, ми задаємо тривалість імпульсу, використовуючи змінну, яку будемо міняти по командам, одержуваних з пульта (від кнопок)

Рис 3322 Завдання тривалості імпульсу

Перший параметр, нагадаю, це номер каналу Залишилося включити модуль:

Рис 3323 Включення модуля

Включення модуля PWM вимагає тільки одного параметра, вказівки номера каналу Якщо модуль PWM вашого мікроконтролера багатоканальний, то у вас є можливість включити тільки ті канали, які вам потрібні

Включенням модуля закінчується настройка і ініціалізація Далі програма працює в нескінченному циклі, очікуючи введення команд: опитуємо входи RB0 і RB1

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

Затримка в 10 мс покликана усунути вплив брязкоту контактів при натиску кнопки Якщо брязкіт виникає і при відпуску кнопки, то таку ж затримку можна вставити після циклу Тривалість цієї затримки визначається конкретними властивостями контактів кнопки

Цикл while more = 0 опитує кнопку, але нічого більш не робить Це і є блокування програми на час, коли кнопка натиснута

Потім слід зміну змінної pulse_high = pulse_high + 100 Це і є команда

І, нарешті, нове значення змінної передається в модуль PWM

Рис 3324 Обслуговування кнопки

Блок програми, обслуговуючий другу кнопку, повторює все написане вище, тільки значення 100 віднімається з змінної

При бажанні можна виділити блоки програми з обслуговування кнопок в підпрограму Залишилося перевірити роботу пристрою в програмі ISIS (Proteus)

Можна застосувати пристрій в тому вигляді, в якому ми його розробили Але, якщо дроти довгі, можна використовувати для передачі команд модуль USART, скажімо, тоді, коли ви керуєте роботою мотора з компютера, віддаленого від мотора на відстань у сотні метрів

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

Рис 3325 Перевірка роботи пристрою в Proteus

Ми познайомилися з роботою аналогового автоматичного регулятора швидкості обертання вала двигуна постійного струму

Ми постаралися створити таке ж цифровий пристрій, що дозволило нам краще побачити все

«Підводні камені», які можуть зустрітися на шляху розробки пристрою Ми придумали, як застосувати отримані знання для інших цілей

І, головне, ми отримали практику в роботі з програмами й «живими» елементами електричних схем

Джерело: Гололобов ВН, – Самовчитель гри на паяльнику (Про електроніці для школярів і не тільки), – Москва 2012