Схема контроллера: Контроллер управления для системы автоматического полива – Электробайк. Контроллер двигателя своими руками / Mail.ru Group corporate blog / Habr

Содержание

Контроллер автоматической системы полива — Автоматика для дома — Умный дом

Владимир Макаров.

Введение.

Наступила весна. Журчат ручьи, распускаются листья на деревьях, поднимается зеленая трава, скворцы уже заселяются в скворечники.
Весна, это долгожданный период времени для огородников.
Полным ходом идет покупка и посадка семян в торфяные горшочки, вот уже появляются первые листочки томатов и огурцов. Природа начинает свое воспроизводство.
Самое время подумать о системе полива растений после их пересадки в теплицу или открытый грунт.

Вниманию читателей сайта vprl.ru — предлагается контроллер автоматической системы полива растений.
Устройство автоматически включает исполнительные устройства на полив растений водой из резервуара (например, из бочки) и докачку воды в резервуар до предельного уровня.
Устройство следит за одновременным наступлением четырех событий, необходимых для включения реле полива:
     1.     После последнего полива прошло установленное число дней.
     2.     Наступило установленное время полива (в часах и минутах).
     3.     Температура воды в резервуаре равна или превышает установленное значение.

     4.     В резервуаре есть вода.
Реле полива коммутирует цепи насоса полива или клапана полива (для случая самотечной системы полива).

Устройство также следит за наполненностью резервуара водой. Если резервуар не наполнен, то включается реле докачки, которое коммутирует насос докачки или клапан докачки (если наполнение резервуара осуществляется из водопровода). При этом докачка резервуара осуществляется только в период отсутствия полива.

Автор выражает глубокую признательность Щелканову Евгению, радиолюбителю из Ухты, за идею, советы и тестирование устройства.

Внешний вид устройства показан на рисунке (Рисунок 1).

Рисунок 1. Внешний вид устройства

 

Демонстрационный ролик



 

Принципиальная схема устройства.

 

Схема электрическая принципиальная устройства показана на рисунке (Рисунок 2).

Рисунок 2. Схема электрическая принципиальная

 

Устройство собрано на микроконтроллере ATmega8.
Реальное время (часы и минуты) обеспечивается микросхемой DS1307N, которая управляется микроконтроллером по шине TWI (аналог шины I2C).
По шине TWI (сигналы SDA и SCL) осуществляется установка текущего времени – часов и минут – в DS1307N, а также считывание в программу текущего времени из DS1307N.
Кроме того, задействован выход SQW/OUT в режиме меандра с периодом 1 секунда, для прерывания МК. По этому прерыванию МК обращается каждую секунду к DS1307N и считывает текущее время.
Точность хода часов обеспечивается использованием кварцевого резонатора Y1 на 32768Гц.
Гальванический элемент GB1 поддерживает непрерывный ход часов во время отсутствия основного питания +5V.
Линии SDA, SCL и SQW/OUT подтянуты к источнику питания через резисторы R10, R11 и R12.

Измерение температуры воды в резервуаре осуществляется датчиком DS18B20, подключенным к МК в однопроводном режиме.
Применен датчик DS18B20 в герметичном исполнении. Линия датчика DO подтянута к источнику питания резистором R5.

Датчики уровня воды, устанавливаемые в нижней и верхней частях резервуара, в герметичном исполнении, на герконах.
Внешний вид датчика показан на рисунке (Рисунок 3).
Поплавок датчика имеет встроенный постоянный магнит. Датчики устанавливаются поплавком вниз.
При поднятии уровня воды до уровня датчика поплавок всплывает, магнит действует на геркон, контакты геркона замыкаются.
Замыкание/размыкание контакта верхнего датчика передается в МК по линии H_BAR, нижнего – по линии L_BAR.
При обнаружении замкнутого контакта верхнего датчика включается светодиод VD2 (1 на линии LED_H_BAR). При обнаружении замкнутого контакта нижнего датчика включается светодиод VD3 (1 на линии LED_L_BAR).

Рисунок 3. Датчик уровня воды

 

Управление реле насоса (клапана) докачки осуществляется сигналом МК по линии PUMP_IN.
Сигнал 1 поступает от МК по линии PUMP_IN на транзисторный ключ VT1 (КТ815А), транзистор открывается и срабатывает реле K1.
Контакты K1.2 замыкают цепь включения насоса (клапана) докачки. Одновременно включается светодиод VD4 («Докачка»).
При поступлении 0 по линии PUMP_IN транзистор VT1 закрывается, реле K1 обесточивается, контакты К1.2 размыкаются, светодиод VD4 выключается.

Управление реле насоса (клапана) полива осуществляется сигналом МК по линии PUMP_OUT.
Сигнал 1 поступает от МК по линии PUMP_OUT на транзисторный ключ VT2 (КТ815А), транзистор открывается и срабатывает реле K2.
Контакты K2.2 замыкают цепь включения насоса (клапана) полива. Одновременно включается светодиод VD5 («Полив»).

При поступлении 0 по линии PUMP_OUT транзистор VT2 закрывается, реле K2 обесточивается, контакты К2.2 размыкаются, светодиод VD5 выключается.

В устройстве применены реле типа TAINBO 05VDC HJR-3FF-S-Z. Внешний вид реле показан на рисунке (Рисунок 4).

Рисунок 4. Внешний вид реле

 

Отображение информации о введенных параметрах устройства, текущих значениях дня, времени, температуры и сообщения о состоянии устройства и резервуара — осуществляется на жидкокристаллическом дисплее LCD1 типа WH-1602.
Дисплей включен в режиме приема данных полубайтами (4 линии LCD_DB4…7). Резистором R2 регулируется контрастность изображения на дисплее.

Одновременно с визуальной индикацией устройство обеспечивает звуковую сигнализацию по линии BEEP.
Сигнал таймера-счетчика № 1 в виде меандра частотой 2000Гц поступает на транзисторный ключ VT3 (BC547B), нагрузкой которого является пьезоизлучатель без встроенного генератора.

Звуковая сигнализация осуществляется при нажатии кнопок настройки, при поливе, накачке или ожидании полива. Устройство постоянно изредка «попискивает» разными последовательностями импульсов в зависимости от состояния устройства.

Управление устройством осуществляется кнопками S1 («Установка»), S2 («Увеличение»), S3 («Уменьшение»).
При нажатии на кнопку «Установка» — курсор на экране LCD перемещается к очередному настраиваемому параметру.
Нажатие кнопок «Увеличение» и «Уменьшение» (на панели обозначены как «+» и «-» соответственно) происходит увеличение или уменьшение значения настраиваемого параметра.

RC-цепь R1C1 обеспечивает сброс (!RESET) МК при включении устройства.

В устройстве предусмотрено внутрисхемное программирование по интерфейсу ISP. Для этого на плате имеется разъем XP1 (ISP программатор).

Светодиод VD1 включается при подаче питания на устройство.

Питается устройство от блока питания 5V/1A.

Фьюзы МК ATmega8: High-0xD9, Low-0xE4.

 

Конструкция.

Печатная плата устройства показана на рисунках (Рисунок 5) и (Рисунок 6). Печатная плата разработана в программе DipTrace. Оригинальные файлы с разметкой печатной платы приведены в приложении к статье.

Рисунок 5. Печатная плата (верхняя сторона)
 

Рисунок 6. Печатная плата (нижняя сторона)

Светодиоды VD2..5 установлены на плате. При желании можно установить их на передней панели устройства.
Внешний вид печатной платы показан на рисунке (Рисунок 7).

Рисунок 7. Внешний вид печатной платы

 

Удобно использовать в качестве корпуса пластиковый распределительный щиток фирмы Viko или другой подобный корпус подходящего размера. Для примера приведен снимок размещения устройства в корпусе отслужившего 3-хфазного счетчика (Рисунок 8).

Рисунок 8. Пример размещения устройства в корпусе 3-хфазного счетчика

Рядом с платой контроллера размещен импульсный блок питания на 5V/1A.

Приложение:

AutoIrrigation2.dch     Схема электрическая в формате DipTrace
AutoIrrigation2.dip      Печатная плата в формате DipTrace
AutoIrrigation2.c         Исходный код программы на Си (Atmel Studio 7)
AutoIrrigation2.hex     Загрузочный файл

Удачи Вам в творчестве и всего наилучшего!

Скачать архив.

 

 

Схемы, устройства и проекты на микроконтроллерах AVR

GPS модули широко используются в современной электронике для определения местоположения, основываясь на координатах долготы и широты. Системы мониторинга транспортных средств, часы GPS, системы предупреждения о чрезвычайных происшествиях, системы наблюдения – это лишь небольшой список приложений, в которых может потребоваться технология … Читать далее →

Как показывают многочисленные исследования в современном мире люди более склонны доверять машинам нежели другим людям. Сейчас, когда в мире активно развиваются такие технологии как искусственный интеллект, машинное обучение, чат-боты, синергия (совместная деятельность) между людьми и роботами с каждым годом все … Читать далее →

Двигатели постоянного тока относятся к числу наиболее часто используемых двигателей. Их можно встретить где угодно – начиная от простейших конструкций до продвинутой робототехники. В этой статье мы рассмотрим подключение двигателя постоянного тока к микроконтроллеру ATmega16 (семейство AVR). Но сначала немного … Читать далее →

Принцип действия датчиков Холла основан на так называемом «эффекте Холла», открытым Эдвином Холлом (Edwin Hall) в 1869 году. Этот эффект гласит: «эффект Холла основан на явлении возникновения поперечной разности потенциалов (называемой также холловским напряжением) при помещении проводника с постоянным током … Читать далее →

Широтно-импульсная модуляция (сокр. ШИМ, от англ. PWM — Pulse Width Modulation) является технологией, позволяющей изменять ширину импульсов в то время как частота следования импульсов остается постоянной. В настоящее время она применяется в разнообразных системах контроля и управления, а также в … Читать далее →

ATmega16 (семейство AVR) является дешевым 8 битным микроконтроллером и имеет достаточно большое число интерфейсов ввода-вывода общего назначения. Он поддерживает все часто используемые в настоящее время протоколы связи такие как UART, USART, SPI и I2C. Он достаточно широко применяется в робототехнике, … Читать далее →

Существует несколько способов программирования микроконтроллеров семейства AVR. В данной статье мы рассмотрим один из наиболее популярных в настоящее время способов программирования данных микроконтроллеров – с помощью программатора USBASP v2.0 и программы Atmel Studio 7.0. Хотя на нашем сайте уже есть … Читать далее →

Создание робота – это всегда волнующее событие для всех энтузиастов, увлекающихся электроникой. И это волнение усиливается если создаваемый робот может автоматически делать некоторые вещи без внешних команд. Одним из широко известных подобных роботов, доступных для создания новичками, является робот, движущийся … Читать далее →

Часто во многих конструкциях, использующих микроконтроллеры AVR, используется аналогово-цифровой преобразователь (АЦП) данных микроконтроллеров. Он используется везде где необходимо преобразовать какое-нибудь аналоговое значение в цифровое. Обычно это конструкции с датчиками температуры, датчиками наклона, датчиками тока, гибкими датчиками и т.п. На нашем … Читать далее →

Шаговые двигатели – это бесщеточные двигатели постоянного тока, которую могут вращаться от 00 до 3600 дискретными шагами. С каждым управляющим сигналом ось такого двигателя поворачивается на фиксированное значение (шаг). Управление вращением подобных двигателей осуществляется последовательностью специальных сигналов. В отличие от … Читать далее →

Осваиваем простейший микроконтроллер PIC. Часть 1 / Habr

Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.

Первым делом необходимо скачать документацию по выбранному микроконтроллеру. Достаточно зайти на сайт производителя и скачать Datasheet.

На первых страницах перечислены основные характеристики МК (русское описание).

Основные моменты, которые нам понадобятся:

  • микроконтроллер содержит внутренний генератор на 4 MHz, так же можно подключить внешний кварц частотой до 20 MHz
  • 16 ног микроконтроллера можно использовать как цифровые входы\выходы
  • есть 2 аналоговых компаратора
  • 3 таймера
  • CCP модуль
  • USART модуль
  • 128 байт энергонезависимой памяти EEPROM

Схема расположения выводов:

Vdd — питание.
Vss — земля.

Это минимум, необходимый для работы МК.

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

Компилятор


Как я уже писал в предыдущих статьях, самым простым и легким я посчитал компилятор JAL с IDE JALEdit.

Качаем JALPack, устанавливаем.
В этом паке содержаться все необходимые библиотеки, а так же примеры их использования.

Запускаем JALEdit. Открываем пример програмы для нашего микроконтроллера: 16f628a_blink.jal, дабы не портить исходник, сразу сохраняем ее в новый файл, к примеру, 16f628a_test.jal.

Весь код можно разделить на 4 блока:

  • выбор МК и его конфигурация
    include 16f628a -- подключение библиотеки нашего МК
    --
    -- This program assumes a 20 MHz resonator or crystal
    -- is connected to pins OSC1 and OSC2.
    pragma target clock 20_000_000 -- oscillator frequency
    -- configuration memory settings (fuses)
    pragma target OSC HS -- HS crystal or resonator
    pragma target WDT disabled -- no watchdog
    pragma target LVP disabled -- no Low Voltage Programming
    pragma target MCLR external -- reset externally
    --

  • объявление переменных, процедур, функций
    alias led is pin_A0
    pin_A0_direction = output

  • выполнение настроек и расчетов до основного цикла
    enable_digital_io() -- переключение всех входов\выходов на цифровой режим
  • бесконечный цикл основных действий МК
    forever loop
    led = on
    _usec_delay(250000)
    led = off
    _usec_delay(250000)
    end loop

Нажав F9 (или соответсвующую кнопку) программа скомпилируется в готовую прошивку, при этом будет видно сколько ресурсов МК будет задействовано:
Code :58/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

Если прочитать комментарии, то станет ясно, что данная программа рассчитана на использование внешнего кварца 20MHz.
Так как у нас его пока нет, разберемся с конфигурацией и перепишем программу на использование внутреннего генератора.

Конфигурация


В разных микрокотнролерах существуют различные наборы конфигурационных битов. Узнать о назначении каждого бита можно в даташите (стр. 97).
В подключенной библиотеке каждому биту и каждому его значению присвоена читабельная переменная, остается только выбрать необходимые нам параметры.
-- Symbolic Fuse definitions
-- -------------------------
--
-- addr 0x2007
--
pragma fuse_def OSC 0x13 { -- oscillator
RC_CLKOUT = 0x13 -- rc: clkout on ra6/osc2/clkout, rc on ra7/osc1/clkin
RC_NOCLKOUT = 0x12 -- rc: i/o on ra6/osc2/clkout, rc on ra7/osc1/clkin
INTOSC_CLKOUT = 0x11 -- intosc: clkout on ra6/osc2/clkout, i/o on ra7/osc1/clkin
INTOSC_NOCLKOUT = 0x10 -- intosc: i/o on ra6/osc2/clkout, i/o on ra7/osc1/clkin
EC_NOCLKOUT = 0x3 -- ec
HS = 0x2 -- hs
XT = 0x1 -- xt
LP = 0x0 -- lp
}
pragma fuse_def WDT 0x4 { -- watchdog timer
ENABLED = 0x4 -- on
DISABLED = 0x0 -- off
}
pragma fuse_def PWRTE 0x8 { -- power up timer
DISABLED = 0x8 -- disabled
ENABLED = 0x0 -- enabled
}
pragma fuse_def MCLR 0x20 { -- master clear enable
EXTERNAL = 0x20 -- enabled
INTERNAL = 0x0 -- disabled
}
pragma fuse_def BROWNOUT 0x40 { -- brown out detect
ENABLED = 0x40 -- enabled
DISABLED = 0x0 -- disabled
}
pragma fuse_def LVP 0x80 { -- low voltage program
ENABLED = 0x80 -- enabled
DISABLED = 0x0 -- disabled
}
pragma fuse_def CPD 0x100 { -- data ee read protect
DISABLED = 0x100 -- disabled
ENABLED = 0x0 -- enabled
}
pragma fuse_def CP 0x2000 { -- code protect
DISABLED = 0x2000 -- off
ENABLED = 0x0 -- on
}
  • OSC — конфигурация источника тактирования
    может принимать 8 различных значений, 4 из которых нам могут понадобиться
    1. INTOSC_NOCLKOUT — внутренний генератор (4M Hz)
    2. HS — внешний высокочастотный кварц (8-20 MHz)
    3. XT = внешний кварц (200 kHz — 4 MHz)
    4. LP — внешний низкочастотный кварц (до 200 kHz)
  • WDT — сторожевой таймер.
    Основная работа этого таймера в том, что бы перезагрузить микроконтроллер когда он дотикает до конца.
    Что бы перезагрузки не происходило, его нужно своевременно обнулять.
    Таким образом при сбое счетчик таймера перестанет обнуляться, что приведет к сбросу МК. Иногда бывает удобно, но в данный момент нам это не потребуется.
  • PWRTE — очередной таймер.
    При активации он будет сбрасывать МК до тех пор, пока питание не поднимется до нужного уровня.
  • BROWNOUT — сброс МК при падении питания ниже нормы.
  • MCLR — активация возможности внешнего сброса МК.
    При включении функции МК будет в постоянном резете до тех пор, пока на ноге MCLR (pin 4) не будет положительного напряжения.
    Для сброса МК достаточно установить кнопку, замыкающую pin 4 на землю.
  • LVP — активация возможности программирования при низком напряжении.
    При активации один цифровой вход переключится в режим LVP (pin 10). Если подать 5В на эту ногу, то МК перейдет в режим программирования. Для нормальной работы МК требуется держать на этой ноге 0В (подсоединить к земле).
    Мы будем использовать программатор, использующий повышенное напряжение, потому LVP активировать не требуется.
  • CPD — защита EEPROM от считывания программатором.
  • CP — защита FLASH (прошивки) от считывания программатором.

Изменим конфигурацию под себя:

pragma target clock 4_000_000 -- указываем рабочую частоту, необходимо для некоторых функций расчета времени
-- конфигурация микроконтроллера
pragma target OSC INTOSC_NOCLKOUT -- используем внутренний генератор
pragma target WDT disabled -- сторожевой таймер отключен
pragma target PWRTE disabled -- таймер питания отключен
pragma target MCLR external -- внешний сброс активен
pragma target BROWNOUT disabled -- сбос при падении питания отключен
pragma target LVP disabled -- программирование низким напряжением отключено
pragma target CPD disabled -- защита EEPROM отключена
pragma target CP disabled -- защита кода отключена

Моргаем светодиодом по нажатию кнопки


Модифицируем программу так, что бы светодиод моргал только тогда, когда зажата кнопка.
Решив данную задачу мы научимся работать с цифровыми портами как в режиме входа, так и в режиме выхода.
Цифровой выход

Выберем еще неиспользуемую ногу МК. Возьмем, к примеру, RB5(pin 11). Данная нога не имеет дополнительных функций, потому она нам более нигде не понадобится.
В режиме цифрового выхода МК может притягивать к ноге либо питание, либо землю.
Подключать нагрузку можно как к плюсу, так и к минусу. Разница будет лишь в том, когда и в какую сторону потечет ток.


В первом случае ток потечет от МК при установке единицы, а во втором — к МК при установке нуля.

Дабы светодиод зажигался от логической единицы, остановимся на первом варианте.

Для ограничения тока через ногу (максимально допустимо 25 мА на цифровой вход или 200 мА на все порты) установлен токоограничительный резистор. По простейшей формуле высчитываем минимальное значение в 125 Ом. Но так как предел нам не нужен, возьмем резистор в 500 Ом (а точнее ближайший подходящий).

Для подключения более мощной нагрузки можно использовать транзисторы в различных вариантах.

Цифровой вход

Возьмем вторую неиспользуемую нигде ногу — RB4 (pin 10, указанная в распиновке функция PGM отностися к LVP, который мы отключили).
В режиме цифрового входа микроконтроллер может считывать два состояния: наличие или отсутствие напряжения. Значит нам необходимо подключить кнопку так, что бы в одном состоянии на ногу шел плюс, а во втором состоянии — к ноге подключалась земля.

В данном варианте резистор используется в качестве подтяжки (Pull-up). Обычно для подтяжки применяют резистор номиналом 10 кОм.

Впрочем, подтягивающий резистор не всегда необходим. Все ноги PORTB (RB0-RB7) имеют внутреннюю подтяжку, подключаемую программно. Но использование внешней подтяжки куда надежнее.

Можно подключать не только кнопку, главное помнить о ограничении тока через МК.
Кнопка сброса

Пока не забыли, что мы активировали внешний сброс, добавим аналогичную кнопку на ногу MCLR (pin 4).

После нажатия такой кнопки МК начнет выполнение программы с нуля.

Прошивка

Присваиваем нашему светодиоду и кнопке переменные:
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
alias button is pin_B4 -- кнопка подключена к RB4
pin_B4_direction = input -- настраиваем RB4 как вход
led = off -- выключаем светодиод

Теперь присваивая переменной led значения 1 или 0 (on или off, true или false, другие алиасы..) мы будем подтягивать к нужной ноге МК или плюс, или минус, тем самым зажигая и гася светодиод, а при чтении переменной button мы будем получать 1 если кнопка не нажата и 0 если кнопка нажата.

Теперь напишем необходимые нам действия в бесконечном цикле (эти действия будут выполняться постоянно. При отсутствии бесконечного цикла МК зависнет):

forever loop
led = off -- выключаем светодиод
_usec_delay(500000) -- ждем 0,5 сек
if Button == 0 then -- если кнопка нажата, выполняем действия
led = on -- зажигаем светодиод
_usec_delay(500000) -- ждем 0,5 сек
end if
end loop

Задержка считается просто:
частота генератора у нас 4MHz. Рабочая частота в 4 раза меньше: 1 MHz. Или 1 такт = 1 мкс. 500.000 мкс = 0,5 с.

Компилируем прошивку:

Errors :0 Warnings :0
Code :60/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

Теперь нам необходимо записать эту прошивку в МК, собрать устройство согласно схеме и проверить, что у нас все получилось как надо.

Программатор


Все таже схема:

Смотрим на распиновку:

  • PGD — pin 13
  • PGC — pin 12
  • MCLR(Vpp) — pin 4
  • Vdd — pin 14
  • Vss — pin 5

Паяем…


Некачественная пайка — одна из основных проблем неработоспособности устройства.
Не повторяйте мои плохие привычки: не используйте навесной монтаж.

В качестве питания 5В в данном случае использовался хвост от старой PS/2 мыши, вставленный в разъем для мыши.

Подключаем к компьютеру.

Качаем и запускаем WinPic800.

Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор

Нажимаем Hardware Test, затем Detect Device

Открываем нашу прошивку pic628a_test.hex

На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменить

Program All, затем Verify All

Если ошибок не возникло, продолжаем паять.

Результат


Финальная схема:

От программатора нам мешает только высокое напряжение (12в) на MCLR. Дабы не отпаивать весь программатор, можно отпаять только один провод… Или просто не подключать программатор к COM порту. Остальные провода нам мешать не будут (а подключенные питание и земля только упростят пайку).

Кнопку на MCLR паять можно по желанию, но подтяжка обязательна.

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


Результат работы можно увидеть на видео.

Итак, у нас получилось самое простое устройство на микроконтроллере: мигалка светодиодом.

Теперь нам необходимо научиться пользоваться всей оставшейся периферией, но об этом в следущей статье.

MPPT контроллер заряда на STM32F334C8T6 / Habr

В комментариях под моими предыдущими статьями неоднократно возникал вполне резонный вопрос: «Зачем делать dc/dc преобразователи на микроконтроллере, когда есть готовые?» и я в качестве ответа постоянно упоминал, как наиболее яркий пример, контроллер заряда с алгоритмом MPPT. Но сказать это одно, а показать… уже куда интереснее и нагляднее, поэтому сегодня расскажу о своем небольшом вялотекущем проекте такого контроллера.

Проект контроллера является открытым, все исходные файлы доступны на github. Сам контроллер является достаточно простым в реализации, построен он на топологии buck, в нем применены доступные компоненты и все это дает хорошую повторяемость даже без особых знаний. Компоновка разъемов и компонентов выполнены таким образом, чтобы данный контроллер можно было использовать и как отладочную плату для изучения силовой электроники, и как готовое устройство, останется просто изготовить корпус для него.


Собственно MPPT — это процесс поиска точки максимальной мощности у солнечной панели. Наличие данного алгоритма в контроллере позволяет в определенных условиях значительно повысить эффективность использования солнечных панелей. Когда производитель пишет на панели мощность, например, 100…200…250…320 Вт, то имеет ввиду номинальную мощность солнечной панели при уровне инсоляции 1000 Вт/м2. Разумеется производители не выносят панели на улицу и не ждут идеальных погодных условий, поэтому данная величина принята как стандартная и «генерируется» на лабораторном стенде.

В реальных условиях при ясном небе максимальный уровень инсоляции имеет значения от 250 Вт/м2 где-нибудь в Норвегии и до 900-1000 Вт/м2 в Северной Африке. Из этого следует, что на Севере солнечная панель не выдаст своей заявленной мощности, а вот в Африке легко. НО… Как только на небе появляются тучи, которые затеняют солнечную панель, то уровень инсоляции снижается. Вспомните погоду за последний месяц, много ли идеально солнечных дней вы видели? Если вы с Краснодара, то возможно много, а вот у жителей средней полосы облаков однозначно больше.

Собственно в чем проблема… При снижение освещенности солнечной панели — изменяется расположение точки максимальной мощности (ТММ) на ВАХ реальной солнечной панели. Теперь давайте разберемся что же такое ТММ… Для этого берем солнечную панель с заявленной мощностью 200 Вт (у меня это Delta BST200-24P) и снимаем с нее вольт-амперную характеристику (ВАХ) при уровне инсоляции в 1000 Вт/м2:

Если посмотреть на график мощности, то на нем четко виден пик в котором панель отдает максимально возможную мощность — это и есть ТММ. Так же если из этой точки опустить линию вниз, то она пересечет ВАХ — координаты этой точки являются тем самым результатом, который необходимо найти. Если говорить проще: «MPPT — это процесс поиска точки на ВАХ в которой произведение тока и напряжения имеет максимальное значение»

Дополнительно стоит обратить внимание, что солнечная панель может выдавать несколько больше, это нормальное явление, т.к. эффективность ее зависит не только от уровня инсоляции, но еще и от температуры. Если поставить панель под солнце, то через несколько часов она достаточно сильно нагреется и мощность упадет примерно на 10%.

Теперь давайте разберемся что именно будет делать контроллер заряда и зачем ему МРРТ. Как ранее было сказано — уровень инсоляции будет значительно меняться в процессе эксплуатации: облака, пасмурная погода, рассвет и закат Солнца, соответственно будет изменяться и ВАХ солнечной панели:

На графике изображены ВАХ для 4-х случаев: 1000, 800, 600 и 400 Вт/м2 и соответственно для каждого случая у нас будет своя точка на ВАХ, где произведение тока и напряжения будет иметь максимальное значение. Задача контроллера заряда с MPPT — искать точку максимальной мощности для конкретных погодных условий. Например, живете вы где-нибудь в Воронеже, у вас тепло и много солнечной энергии и вы нашли ТММ и получаете максимальную отдачу мощности, но через 15 минут над вашими панелями встала туча и частично закрыла собой панели и значение инсоляции изменилось, а следовательно изменилась ВАХ панели. Чтобы контроллер заряда мог подстроиться под новые условия ему необходимо с некоторой частотой, например, раз в 5 минут, производить вычисления и поиск ТММ для новой ВАХ.

Существует множество алгоритмов поиска ТММ, начиная от простейшего «0,8*Uxx» до различных сканирующих алгоритмов с нейронными сетями, но более подробно об алгоритмах и их реализации в коде я расскажу в отдельной статье. Надеюсь вам стало понятно, что такое ТММ и зачем мы ее ищем, теперь можно перейти непосредственно в железу.


Теперь необходимо решить что же должен уметь контроллер, чтобы обеспечить необходимый функционал. Во-первых, контроллер заряжает АКБ, а следовательно необходимо реализовать CC/CV управление (стабилизация тока и напряжения) на выходе и для этого понадобиться измерять ток и напряжение на выходе. Во-вторых, для поиска ТММ необходимо измерять ВАХ солнечной панели, а значит нужно измерять ток и напряжение на входе. В-третьих, должен быть понижающий dc/dc, который опустит входное напряжение до 12 или 24В, в данном случае это будет синхронный buck. Это все позволит реализовать основной функционал устройства, в итоге функциональная схема будет выглядеть так:

Как видите ничего сложного нет, схема очень похожа на пример из данной статьи и отличия лишь в дополнительных цепях обратной связи для реализации алгоритма поиска ТММ и процесса заряда. Помимо этого необходимо реализовать защиту от перегрева, от сквозных токов, добавить парочку интерфейсов для общения с внешним миром и удобного обновления прошивки.


Технические характеристики:

  • Входное напряжение: 15…60В
  • Выходное напряжение: 12/24В
  • Номинальный выходной ток: 20А
  • Алгоритмы МРРТ: да
  • Частота преобразования: 100 кГц
  • Защита от перегрева: да
  • Защита от сквозного тока: да
  • Защита АКБ: OVP и OCP
  • Интерфейсы: USB, Modbus
  • Ресурс: не менее 50 000 часов
  • Габаритные размеры: 110х90х20 мм

Особых изысков в данном решение не предполагается, основной уклон на повышенную надежность, эффективность алгоритмов ТММ и сохранение адекватной стоимости контроллера. Из удобств было решено заложить гальванически развязанный USB для настройки и перепрошивки управляющего микроконтроллера + его можно использовать для отладки, если SWO вам не нравится. Так же для реализации удаленного управления и мониторинга заложил RS-485, который надежен, дешевый в реализации и позволяет организовать связь на расстояние до 1000 метров. От wi-fi и прочего радио отказался сразу, т.к. контроллер обычно эксплуатируется в металлическом щите и как вариант в ж/б здании.


На КДПВ видно, что устройство состоит из двух печатных плат: 4-х слойных модуль управления и основная 2-х слойная плата. Внимательные могут заметить, что модуль управления похож на решение из прошлой статьи, только основательно переработанное. И действительно, после испытания предыдущей версии control board и после обсуждений в комментариях было решено внести ряд глобальных изменений:


  • Отказ от вертикального монтажа в разъем и переход к горизонтальному. Это позволило решить проблему с разъемом и обойтись обычными 2.54 мм PLS-ами, а так же значительно уменьшить высоту устройства. С вертикальной версией высота контроллера была бы 60 мм, а не 20 и был бы велик шанс отломить плату управления. Сейчас же она не выступает на фоне остальных компонентов и по-прежнему занимает мало места;
  • Размеры платы уменьшены до 90х35 мм;
  • Контроллер STM32F334R8T6 заменен на более компактный и дешевый STM32F334C8T6. Эта замена так же привела к уменьшению количества каналов для управления полумостом с 5 до 4-х. Как показала практика данный контроллер не вывозит управление разом 5-ю полумостами, разве что совсем простые алгоритмы. Исходя из этого было решено отказаться от корпус LQFP-64 в пользу LQFP-48;
  • Добавлен гальванически развязанный USB, а если быть точнее, то мост USB-UART, т.к. в самом микроконтроллере нет аппаратного USB интерфейса;
  • С платы управления убрана микросхема PHY для RS-485, т.к. нужна она не всем и не всегда, но для ее возможного использования на разъем выведен UART и дополнительный gpio для управления прием/передачей. Так же теперь на основную плату можно поставить гальванически развязанный PHY и не быть привязанным к выбранному мною решению;
  • На отладочный разъем помимо интерфейса SWD было решено вывести и SWO для более удобной отладки программы.

Теперь перейдем к выбору компонентов для основной (силовой) части преобразователя. В своем предыдущем рассказе о топологии Buck я поведал о выборе силовых компонентов (транзисторы, конденсаторы, дроссель) и о методике расчетов их номиналов. Сегодня хотелось бы чуть подробнее рассказать о не менее важных компонентах, а именно про драйвер управления силовыми ключами, датчики тока и прочее.


Датчик тока

Для управления зарядом АКБ и измерения ВАХ солнечной панели необходимо измерять постоянный ток в диапазоне от 0 до 20А. Вариантов измерить постоянный ток не так много, самые эффективные и простые способы — токовый шунт и датчик на эффекте Холла. В первой версии я опробовал связку «шунт + INA194», вариант в общем-то рабочий, но сам монитор оказался достаточно шумным и была проблема в измерение токов менее 3-4А. Проблема решалась увеличением номинала шунта и цифровым фильтром, но тогда повышалась мощность, выделяемая на шунте в виде тепла, чего сильно не хотелось.

Изначально вариант с применением датчиков Холла я откинул сразу, а именно серии ACS (например, ACS758 или ACS711), т.к. в прошлом уже пытался их применить, но они сильно врали и у них низка полоса измерения. Правда в одном из обсуждений человек рассказал об успешном опыте применения данных датчиков, оказалось, что относительно новые серии перестали реагировать на малейшие наводки, главное чтобы около них не было ничего железного или того, что может намагнититься. Измерять мне нужно постоянный ток в системе, где скорость изменения тока не высока, а следовательно и полосы в 100 кГц хватит. Исходя из простоты и цены решения во второй версии MPPT контроллера я поставил ACS713ELCTR-30A. У Allegro есть две версии датчиков — DC и DC/AC, мне переменку измерять не нужно, а следовательно выбор очевиден в пользу DC, которые так же обладают бОльшим значением «вольт на ампер». Это позволило достаточно точно измерять не только большие значения тока, но и малые на уровне 0,3…0,5А с реальной погрешностью ±5%. Схема включения данного датчика крайне проста:

Включение стандартное, никакой магии в схеме нет, единственное что необходимо сделать — «согласовать» выходной диапазон датчика 0…5В с тем, что может измерить АЦП у микроконтроллера STM32, а именно с диапазоном 0…3,3В. У датчика выход напряжением, он линеен и увеличение выходного напряжения на 133 мВ означает увеличение тока, протекающего через датчик, на 1А. Исходя из этого минимальное напряжение на выходе 0В, а максимальное 30А * 133 мВ/А = 3,99В. Теоретически делитель напряжения можно было бы не ставить, т.к. максимальный ток всего 20А и следовательно напряжение на выходе будет в пределах 2,66В и никак не угрожает входу АЦП, но лучше перестраховаться. Возможно после тестирования и длительной обкатки устройства я все таки уберу делитель и поставлю повторитель напряжения на ОУ.


Драйвер управления затворами транзисторов

Еще на стадии идеи я решил сразу отказаться от полной гальванической развязки управляющей схемы от силовой, это банально дорого, хотя и избавляет от наводок и защищает цифровую часть. Введение гальванической развязки 2-х напряжений и драйвера повысило бы цену преобразователя на 40%. Поэтому от любимых драйверов Infineon серии 1ED/1EDI пришлось отказаться и выбрать что-то приличное с бутстрепным питанием верхнего ключа, мой выбор пал на достаточно новое решение — NCP5183DR2G. Драйвер показал себя в работе очень стабильным и достаточным для управления парой mosfet-ов на частоте 100 кГц. Минус в нем я нашел один — отсутствие отдельного входа, например, ShutDown или Enable для выключения драйвера в случае аварии, поэтому для реализации защиты необходимо ставить дополнительную дискретную логику или использовать аппаратный вход FAULT в самом микроконтроллера STM32F334. Я выбрал второй вариант и пока он меня не подвел, хотя изначально относился скептически к надежности такого решения. Схема управления транзисторами выглядит так:

Решение простое и понятное, единственное добавлю от себя — конденсатор С1 должен быть керамическим с диэлектриком X7R и желательно не самый поганый, оригинального Yageo/Murata/Samsung хватит всем. Вся остальная рассыпуха может быть и брендом попроще. Кстати, о «муках выбора» номинала затворных резисторов R1 и R5 вы можете прочитать в данной статье.


Выходные конденсаторы

Выше я заявил о приоритете надежности и ресурса преобразователя, а следовательно необходимо устранить все слабые места. В современных dc/dc преобразователях по моему мнению осталось одно слабое место — электролитические конденсаторы, которые так или иначе через некоторое время «сохнут» и деградируют, что приводит сначала к росту пульсаций и перегреву, а затем к выходу преобразователя из строя.

В моем контроллере заряда целых 2 таких места: конденсаторы на входе и выходе. Было решено заменить выходные электролиты на твердотельные полимерные конденсаторы (как в ваших видеокартах), которые куда легче переносят работу на токах в десятки ампер и обладают ресурсом на порядок выше, чем у самого качественного электролитического конденсатора. Минус у них один — цена, данное удовольствие от Panasonic стоит 2$/шт, но оно того стоит.

На входе устройства напряжение может достигать 60В, а это значит, что твердотельные полимерные конденсаторы уже не поставить, их просто нет, максимум 35В. Правда есть гибридные варианты, это промежуточное звено между электролитом и твердотельным конденсатором, они есть до 100В. У данного типа конденсаторов жидкий электролит заменен на пастообразный, что позволяет в разы повысить его ресурс.

Самые внимательные могут заметить, что выходные твердотельные конденсаторы разные на двух платах. Я думаю, что все «оценили» стоимость за конденсатор 120 мкФ 35В, электролит от Wurth стоит в 10 раз дешевле. Исходя из этого я решил для тестов купить альтернативу конденсаторам 35SEK330M от Panasonic. Ну как альтернативу… есть такая азиатская компания Lelon, которая делает полный аналог (с их слов) конденсаторов от Panasonic. На одну плату я поставил оригинал, на другую аналог, сами устройства у меня уже тестируются около месяца и пока разницы действительно не замечено, посмотрим какой будет итоговый ресурс, но для желающих уронить цену в 5 раз до 0,4$/шт советую задуматься.


Общие сведения по компонентам

Хотелось бы отдельно сказать о политике выбора компонентов и решений. Так как идея предполагает использование данного контроллера не только для изучения на столе, но и работу «в поле», то было решено использовать только проверенных производителей и не использовать китайские компоненты (кроме опыта с Lelon) и различные поделки с алиэкспресс. В моем варианте исполнения и в BOM-е фигурируют оригиналы с digikey от производителей типа Infineon, TI, ON, ST, Yageo, Bourns и прочие. В принципе никто не запрещает вам поставить компоненты попроще, с того же алиэкспресс, но будьте готовы к снижению надежности и КПД контроллера.


Про силовые компоненты и методику расчетов я уже писал в своей статье про buck, прочитать ее можно тут. Я лишь приведу те результаты, что у меня получились:


  • Индуктивность силового дросселя — 30 мкГн, намотан на кольце R32/20/10 из материала Kool Mu. Кольцо откровенно с запасом выбрано, т.к. планировались эксперименты с частотой и повышением тока;


  • Емкость выходных конденсаторов — около 300 мкФ, в реальности емкость набрана существенно бОльшая, что уменьшило выходные пульсации. Я пробовал работу и с 3-мя конденсаторами, все отлично, так что если вы надумаете повторить, то смело оставляйте половину посадочных мест под выходные конденсаторы пустыми. В принципе можно попробовать впаять 6 обычных электролитических конденсаторов, если нет возможности купить твердотельные. По моим предположениям работать контроллер будет без каких-либо проблем;


  • Транзисторы (IPD053N08N3GATMA1) я выбрал те, что были у меня в запасах и достаточно легко покупаются. Если у вас уже есть ключи или не смогли купить те, что заложены у меня, то выбирайте транзистор с сопротивлением канала не более 8 мОм и затвором не более 100 нКл. В противном случае КПД достаточно сильно упадет и транзисторы будут существенно перегреваться.


Так же наверняка найдутся те, кому лень идти на github, поэтому оставлю полную схему устройства в формате PDF:


Железная часть проекта выполнена в Altium Designer 19, так же проект можно открыть в Curcuit Studio. Для тех, кто не хочет связываться с покупкой софта или пиратством, есть принципиальная схема в PDF и Gerber-файлы, этого вам будет достаточно для самостоятельного заказа печатных плат и сборки МРРТ контроллера.

Теперь что касается софта… В ближайшее время я «причешу» тестовый проект на котором сейчас работают контроллеры и так же выложу на github, все желающие смогут посмотреть реализацию тех или иных модулей, а может и помочь в его написании и поиске ошибок. Так же планирую пару статей касательно софтовой части управления dc/dc преобразователем, а именно про П-, ПИ-, ПИД-регуляторы, их реализацию, цифровые фильтры и соответственно про алгоритмы поиска ТММ.


В дальнейшем предполагается еще одна ревизия железа, т.к. в процессе работы вылезли небольшие, но неприятные мелочи, например, с некоторой вероятностью без прошивки на выводах МК может появиться лог.1 и она откроет оба транзистора и приведет к КЗ. Данная проблема побеждается или предварительной заливкой прошивки перед первым включением контроллера или более правильный путь — установка резисторов 10 кОм, подтягивающих входы HIN и LIN на землю (GND). Хотя и в текущем состоянии контроллер работоспособен, но хочется в дальнейшем «вычистить» все потенциально проблемные места.

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

Так же у меня осталось 2 комплекта печатных плат, если кто-то захочет собрать контроллер, то отдам безвозмездно в добрые руки. От вас лишь потребуется собрать и при наличии желания потом написать мне свои замечания и предложения. Желающие пишите в личку.

Проекты на Github

Схема контроллера электровелосипеда, как подключить?

На чтение 5 мин. Просмотров 799

Все конструкции электровелосипедов включают в себя не только электродвигатель, но и отдельную систему управления — контроллер. Он необходим для обеспечения работы электромотора в велосипеде. Контроллер выполняет важную функцию в транспорте и считается «головным мозгом» конструкции.

Что такое контроллер для электровелосипеда?

Контроллеры приводят в действие моторные колеса, регулирует скорость и вращение, а также обеспечивает правильную остановку

Контроллер считает одной из главных частей электровелосипеда, так как отвечает за совершенные действия. Он обеспечивает переход тока к электродвигателю.

Такая конструкция позволяет:

  • включать и выключать электронику;
  • регулировать работу мотор-колес;
  • позволяет устанавливать ограничитель скорости;
  • осуществляет круиз-контроль;
  • ускоряет двигатель до трехскоростного режима;
  • отвечает за рекуперативное торможение;
  • позволяет всем параметрам отображаться на панели управления;
  • осуществление обратного хода.

Главные функции контроллера делят на:

  • регулировку движения велосипеда;
  • осуществление крутящего момента;
  • защищает электродвигатель.

Параметры блока управления

Контроллеры обеспечены основными параметрами, благодаря которым электромоторы и батареи могут работать:

  1. Максимальный постоянный ток. Значение, которое отвечает за максимальный ток, который держит контроллер в течение установленного времени.
  2. Максимальный пиковый ток. Значение, которое выдерживается на минимальном отрезке времени. Данное число обычно гораздо больше, чем значение постоянного тока. Пиковый ток наблюдается при резком старте, когда в транспорте развивается большой крутящий момент.
  3. Максимальное напряжение аккумуляторов. Значение максимального количества используемых аккумуляторных банок. Если происходит повышение напряжения, контроллер может сгореть или выйти из строя. Разные модели имеют свой показатель напряженности. В основном они рассчитаны на 24, 48 и 60V.
  4. Внутреннее сопротивление. Данный параметр не является важным. Чем больше мощность контроллера, тем меньше сопротивление.
  5. Частота подачи импульсов. Значения данного параметра зависят от вида мотор-колес.

Схема контроллера электровелосипеда

Контроллер внешне выглядит, как коробка, выполненная из алюминия. Внутри неё содержится много цветных проводов. В некоторых моделях конструкцию устанавливают в отдельном боксе, для защиты от загрязнений и повреждения.

Схема контроллера включает в себя:

  1. Сердце в виде микроконтроллера, расположенное в центре конструкции.
  2. Преобразователи напряженностью 12 и 5 В.
  3. Периферия (ручки, датчики).
  4. Силовые компоненты.

Как подключить контроллер к электровелосипеду?

  1. Необходимо подключить питание мотор-колес к силовым проводам такого же цвета.
  2. К датчикам мотор-колес подключить главные провода. Если в комплекте есть велокомпьютер, его подключают к пульту управления.
  3. Если пульта управления нет, то замок зажигания подключают к красному и синему разъему.
  4. Затем ручку «газа» подключают к разъему.
  5. Тормоз подключают к отверстию ручки. Там содержится два разъема, поэтому во второй можно подключить стоп сигнал при желании.
  6. В ограничителе максимальной скорости можно установить данную функцию. Для этого замыкают два белых провода. Для того чтобы функция работала постоянно, следует контакты соединить между собой.
  7. При наличии системы ассистирования, ее можно подключить в специальном отделе.
  8. Следует подключиться к отделу аккумуляторной батареи.
  9. Необходимо помнить, что нельзя замыть контакты черного и красного цвета питания.При самостоятельной сборке рекомендуется следить за соответствием цветов и не соединять разъемы без надобности.

Виды контроллеров для электровелосипедов

По типу связи с двигателем:

  1. Для работы с установленным датчиком.
  2. Работающие без датчика.
  3. Универсального типа.

По форме получаемого сигнала:

  • Подают прямоугольный сигнал. Зачастую такие виды дешевле. Использование позволяет получать высокие скорости вращения, но из-за этого возникает шум при работе ввиду микровибраций.
  • Форма синусоиды — обеспечивают бесшумную работу, но на более низких скоростях.

Как выбрать контроллер для электровелосипеда – советы

Контроллер выбирают исходя из вида двигателя и аккумулятора. Основными параметрами считаются: напряжение и величина максимального тока.

Двигатель мощностью 350 Вт нуждается в контроллере 36 В 15 А.

Мощность 100 Вт — контроллер 48 В, силой тока не меньше 25 А. Для лучших показателей выбирают модели со значением тока 30, 35, 40 ампер.

Мощность 1000 Вт- контроллер 48 В 30 А. Существуют программируемые конструкции, где можно настраивать ток под собственные потребности.

Оптимальное соотношение скорости колес к напряжению -1 к 0,9. Исходя из этого, можно рассчитать скорость движения: при 36 В передвигаться следует при 32 км/ч, при 48 В — 45 км/ч.

Увеличение скорости изменяет и соотношение, так как имеют место существенные затраты энергии на борьбу с сопротивлением воздуха.

Контроллеры выпускают обычного типа и с функцией программирования. Последние подходят для любителей экспериментов, так как такие конструкции нуждаются в изучении. Программируемые конструкции можно подключить к компьютеру при помощи кабеля или функции Bluetooth. В компьютерном режиме изменяются различные значение тока, углы фаз.

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

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

Средства программирования PIC-контроллеров / Habr

Введение


PIC-контроллеры остаются популярными в тех случаях, когда требуется создать недорогую компактную систему с низким энергопотреблением, не предъявляющую высоких требований по ее управлению. Эти контроллеры позволяют заменить аппаратную логику гибкими программными средствами, которые взаимодействуют с внешними устройствами через хорошие порты.

Миниатюрные PIC контроллеры хороши для построения преобразователей интерфейсов последовательной передачи данных, для реализации функций «прием – обработка – передача данных» и несложных регуляторов систем автоматического управления.

Компания Microchip распространяет MPLAB — бесплатную интегрированную среду редактирования и отладки программ, которая записывает бинарные файлы в микроконтроллеры PIC через программаторы.

Взаимодействие MPLAB и Matlab/Simulink позволяет разрабатывать программы для PIC-контроллеров в среде Simulink — графического моделирования и анализа динамических систем. В этой работе рассматриваются средства программирования PIC контроллеров: MPLAB, Matlab/Simulink и программатор PIC-KIT3 в следующих разделах.

• Характеристики миниатюрного PIC контроллера PIC12F629
• Интегрированная среда разработки MPLAB IDE
• Подключение Matlab/Simulink к MPLAB
• Подключение программатора PIC-KIT3

Характеристики миниатюрного PIC-контроллера


Семейство РIС12ххх содержит контроллеры в миниатюрном 8–выводном корпусе со встроенным тактовым генератором. Контроллеры имеют RISC–архитектуру и обеспечивают выполнение большинства команд процессора за один машинный цикл.

Для примера, ниже даны характеристики недорогого компактного 8-разрядного контроллера PIC12F629 с многофункциональными портами, малым потреблением и широким диапазоном питания [1].

• Архитектура: RISC
• Напряжение питания VDD: от 2,0В до 5,5В (< 6,5В)
• Потребление:
— <1,0 мА @ 5,5В, 4МГц
— 20 мкА (тип) @ 32 кГц, 2,0В
— <1,0 мкА (тип) в режиме [email protected],0В
• Рассеиваемая мощность: 0,8Вт
• Многофункциональные каналы ввода/вывода: 6/5
• Максимальный выходной ток портов GPIO: 125мА
• Ток через программируемые внутренние подтягивающие резисторы портов: ≥50 (250) ≤400 мкА @ 5,0В
• Разрядность контроллера: 8
• Тактовая частота от внешнего генератора: 20 МГц
Длительность машинного цикла: 200 нс
• Тактовая частота от внутреннего RC генератора: 4 МГц ±1%
Длительность машинного цикла: 1мкс
• FLASH память программ: 1К
Число циклов стирание/запись: ≥1000
• ОЗУ память данных: 64
• EEPROM память данных: 128
Число циклов стирание/запись: ≥10K (-40оС ≤TA≤ +125 оС)
• Аппаратные регистры специального назначения: 16
• Список команд: 35 инструкций, все команды выполняются за один машинный цикл,
кроме команд перехода, выполняемых за 2 цикла
• Аппаратный стек: 8 уровней
• Таймер/счетчик ТМR0: 8-разрядный с предделителем
• Таймер/счетчик ТМR1: 16-разрядный с предделителем

Дополнительные особенности:
• Сброс по включению питания (POR)
• Таймер сброса (PWRTтаймер ожидания запуска генератора (OST
• Сброс по снижению напряжения питания (BOD)
• Сторожевой таймер WDT
• Мультиплексируемый вывод -MCLR
• Система прерываний по изменению уровня сигнала на входах
• Индивидуально программируемые для каждого входа подтягивающие резисторы
• Программируемая защита входа
• Режим пониженного энергопотребления SLEEP
• Выбор режима работы тактового генератора
• Внутрисхемное программирование ICSP с использованием двух выводов
• Четыре пользовательские ID ячейки

Предельная рабочая температура для Е исполнения (расширенный диапазон) от -40оС до +125 оС;
Температура хранения от -65оС до +150 оС.

КМОП технология контроллера обеспечивает полностью статический режим работы, при котором остановка тактового генератора не приводит к потере логических состояний внутренних узлов.
Микроконтроллер PIC12F629 имеет 6-разрядный порт ввода/вывода GPIO. Один вывод GP3 порта GPIO работает только на вход, остальные выводы можно сконфигурировать для работы как на вход так и на выход. Каждый вывод GPIO имеет индивидуальный бит разрешения прерываний по изменению уровня сигнала на входах и бит включения внутреннего подтягивающего резистора.

Интегрированная среда разработки MPLAB IDE

MPLAB IDE — бесплатная интегрированная среда разработки ПО для микроконтроллеров PIC включает средства для создания, редактирования, отладки, трансляции и компоновки программ, записи машинного кода в микроконтроллеры через программаторы.

Загрузка MPLAB IDE

Бесплатные версии MPLAB (включая MPLAB 8.92) хранятся на сайте компании Microchip в разделе «DOWNLOAD ARCHIVE».

Создание проекта

Пример создания проекта программ PIC контроллера в среде MPLAB включает следующие шаги [2].

1. Вызов менеджера проекта.


2. Выбор типа PIC микроконтроллера.
3. Выбор компилятора, например, Microchip MPASM для ассемблера.
4. Выбор пути к каталогу проекта (клавиша Browse…) и ввод имени проекта.

5. Подключение файлов к проекту в окне Project Wizard → Step Four можно не выполнять. Это можно сделать позднее, внутри активного проекта. Клавиша Next открывает следующее окно.

6. Завершение создания проекта (клавиша Finish).

В результате создания проекта FirstPrMPLAB интерфейс MPLAB принимает вид, показанный на Рис. 1.


Рис. 1. Интерфейс среды MPLAB v8.92 и шаблон проекта.

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

Создание программы в MPLAB можно выполнить в следующей последовательности.

1. Открыть редактор программ: меню → File → New. Изначально программе присвоено имя Untitled.

2. Набрать или скопировать программу, например, на ассемблере.

3. Сохранить программу под другим именем (меню → File → Save As), например, FirstPrMPLAB.asm.


Рис. 2. Пример простейшей программы (на ассемблере) вывода сигналов через порты контроллера GP0, GP1, GP2, GP4, GP5 на максимальной частоте.

Запись ‘1’ в разряде регистра TRISIO переводит соответствующий выходной буфер в 3-е состояние, в этом случае порт GP может работать только на вход. Установка нуля в TRISIO настраивает работу порта GP на выход.

Примечание. По спецификации PIC12F629 порт GP3 микроконтроллера работает только на вход (соответствующий бит регистра TRISIO не сбрасывается – всегда находится в ‘1’).

Регистры TRISIO и GPIO находятся в разных банках области памяти. Переключение банков выполняется 5-м битом регистра STATUS.

Любая программа на ассемблере начинается директивой org и заканчивается директивой end. Переход goto Metka обеспечивает циклическое выполнение программы.

В программе (Рис. 2) используются следующие обозначения.

Директива LIST — назначение типа контроллера
Директива __CONFIG — установка значений битов конфигурации контроллера
Директива equ — присвоение числового значения
Директива org 0 — начало выполнения программы с адреса 0
Команда bsf — устанавливает бит указанного регистра в 1
Команда bсf — сбрасывает бит указанного регистра в 0
Команда movlw — записывает константу в регистр W
Команда movwf — копирует содержимое регистра W в указанный регистр
Команда goto — обеспечивает переход без условия на строку с меткой
Директива end — конец программы

Установка требуемой конфигурации микроконтроллера
Конфигурация микроконтроллера PIC12F629 зависит от настроек слова конфигурации (2007h), которые можно задать в программе через директиву __CONFIG.

Непосредственно или через окно MPLAB: меню → Configure → Configuration Bits:

Где:

Бит 2-0 — FOSC2:FOSC0. Выбор тактового генератора
111 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как CLKOUT
110 — Внешний RC генератор. Подключается к выводу GP5. GP4 работает как ввод/вывод
101 — Внутренний RC генератор 4МГц. GP5 работает как ввод/вывод. GP4 — как CLKOUT
100 — Внутренний RC генератор 4МГц. GP5 и GP4 работают как ввод/вывод
011 — EC генератор. GP4 работает как ввод/вывод. GP5 — как CLKIN
010 — HC генератор. Резонатор подключается к GP4 и GP5
001 — XT генератор. Резонатор подключается к GP4 и GP5
000 — LP генератор. Резонатор подключается к GP4 и GP5

Бит 3 — WDTE: настройка сторожевого таймера (Watchdog Timer)
1 — WDTE включен
0 — WDTE выключен

Сторожевой таймер предохраняет микроконтроллер от зависания – перезапускает программу через определенный интервал времени если таймер не был сброшен. Период таймера устанавливается в регистре OPTION_REG. Обнуление сторожевого таймера вызывается командой CLRWDT.

Бит 4 — PWRTE: Разрешение работы таймера включения питания:
1 — PWRT выключен
0 — PWRT включен

Таймер задерживает микроконтроллер в состоянии сброса при подаче питания VDD.

Бит 5 — MCLR: Выбор режима работы вывода GP3/-MCLR
1 — работает как -MCLR
0 — работает как порт ввода-вывода GP3

Бит 6 — BODEN: Разрешение сброса по снижению напряжения питания (как правило < 2.0В)
1 — разрешен сброс BOR
0 — запрещен сброс BOR автоматически включается таймер

При разрешении сброса BOR автоматически включается таймер PWRT

Бит 7 — .CP: Бит защиты памяти программ от чтения программатором
1 Защита выключена
0 Защита включена

При выключения защиты вся память программ стирается

Бит 8 — .CPD: Бит защиты EPROM памяти данных
1 Защита выключена
0 Защита включена

После выключения защиты вся информация будет стерта

Бит 11-9 — Не используются: Читается как ‘1’.

Бит 13-12 — BG1:BG0. Биты калибровки сброса по снижению питания
00 — нижний предел калибровки
11 — верхний предел калибровки


Добавление программы к проекту

Пример добавления программы к проекту показан на (Рис. 3).


Рис. 3. Добавление программы FirstPrMPLAB.asm к проекту FirstPrMPLAB.mcp

Сохранить материалы проекта можно командой: меню → File → Save Workspace.

Компиляция


Чтобы создать бинарный файл с расширением hex для прошивки микроконтроллера необходимо откомпилировать проект. Запуск компиляции выполняется командой меню → Project → Build All. Результаты компиляции можно увидеть в окне Output (Рис. 1). Если в программе нет ошибок, то компилятор выдаёт сообщение об успешной компиляции: BUILD SUCCEEDED, загрузочный HEX файл можно найти в рабочем каталоге:

Отладка программы


Отладку программы в среде MPLAB IDE можно выполнить при помощи аппаратного эмулятора MPLAB REAL ICE или программного симулятора MPLAB SIM. Запуск последнего выполняется как показано на Рис. 4.
Рис. 4. Подключение к симулятору MPLAB SIM для отладки программы.

После запуска отладчика в окне Output (Рис. 1) появляется закладка MPLAB SIM, куда MPLAB выводит текущую информацию отладчика. Команды отладчика (Рис. 5) после запуска становятся активными.


Рис. 5. Команды отладчика.

Команды отладчика:

• Run — Непрерывное выполнение программы до точки останова (Breakpoint) если таковая установлена.
• Halt — Остановка программы на текущем шаге выполнения.
• Animate — Анимация непрерывного выполнения программы.
• Step Into — Выполнение по шагам (вызовы Call выполняются за один шаг).
• Step Over — Выполнение по шагам включая команды вызовов Call.
• Reset — Начальная установка программы. Переход указателя на первую команду.
• Breakpoints — Отображение списка точек останова. Обработка списка.

При выполнении программы по шагам текущий шаг выделяется стрелкой (Рис. 6). Непрерывное выполнение программы останавливается командой Halt или достижением программой точки останова. Точка останова устанавливается/снимается в строке программы двойным щелчком.
Пример программы на ассемблере, которая с максимальной скоростью меняет состояние портов контроллера показан на Рис. 6 (справа). Программа передаёт в регистр портов GPIO данные b’10101010’ и b’01010101’. Поскольку в регистре GPIO передачу данных в порты контроллера выполняют не все разряды, а только 0,1,2,4 и 5, то состояние регистра GPIO (Рис. 6, слева) отличается значениями: b’00100010’ и b’00010101’.


Рис. 6. Состояние регистров специального назначения контроллера на момент выполнения программы (слева) и выполняемая по шагам программа (справа).

В процессе отладки можно наблюдать за состоянием регистров, переменных, памяти в соответствующих окнах, открываемых в разделе View основного меню. В процессе отладки можно вносить изменения в код программы, содержимое регистров, памяти, изменять значения переменных. После изменения кода необходимо перекомпилировать программу. Изменение содержимого регистров, памяти и значения переменных (окна раздела View: Special Function Register, File Register, EEPROM, Watch) не требует перекомпиляции.

Входные сигналы портов модели микроконтоллера можно задать в разделе Debugger → Stimulus. Устанавливаемые состояния сигналов портов привязываются к времени (тактам) отладки.

Иногда результаты выполнения программы в режиме отладки не соответствуют выполнению этой же программы в реальном контроллере, так, например, отладчик программы (Рис. 6) без инструкций movlw 0x07 и movwf cmcon показывает, что выходы GP0 и GP1 регистра GPIO не изменяются — находятся в нулевом состоянии, содержимое регистра GPIO попеременно равно 0x14 и 0х20. Однако, контроллер, выполняющий программу без указанных инструкций, показывает на осциллографе циклическую работу всех пяти выходов: 0x15 и 0х22, включая GP0 и GP1 (см. Рис. 7).

Осциллограммы контроллера, выполняющего циклы программы Рис. 6 (Metka… goto Metka) показаны на Рис. 7.


Рис. 7. Осциллограммы выхода GP0 (слева) и GP1 (справа) микроконтроллера PIC12F629, работающего от внутреннего 4МГц RC генератора. Программа (Рис. 6) формирует сигналы максимальной частоты на всех выходах контроллера. За период сигналов 5.3 мкс выполняется 5 команд (6 машинных циклов), амплитуда GP0 сигнала на осциллограмме равна 4.6В, измеренное программатором питание контроллера 4.75В.

Прошивка микроконтроллера


Для записи программы в микроконтроллер (прошивки контроллера) необходимо микроконтроллер подключить к интегрированной среде MPLAB IDE через программатор. Организация подключения показана ниже в разделе «Подключение программатора PIC-KIT3».

Примечание. В контроллер PIC12F629 записана заводская калибровочная константа настройки частоты внутреннего тактового генератора. При необходимости её можно прочитать и восстановить средствами MPLAB с использованием программатора.

Команды для работы с программатором и изменения его настроек находятся в меню MPLAB Programmer. Тип программатора в MPLAB выбирается в разделе: меню → Programmer → Select Programmer.


Рис. 8. Выбор программатора для подключения к среде MPLAB.

Прошивка микроконтроллера через программатор запускается командой: меню → Programmer → Program. Сообщение об успешной прошивке показано на Рис. 9.


Рис. 9. Запуск прошивки микроконтроллера и вид сообщения об успешной прошивке.

Примечание: Во время прошивки микроконтроллера у программатора PIC-KIT3 мигает желтый светодиод.

Подключение MATLAB/SIMULINK к MPLAB


В системе моделирования динамических систем Simulink (приложение к Matlab) на языке графического программирования [7] можно разрабатывать программы для семейства PIC контроллеров имеющих АЦП/ЦАП, счетчики, таймеры, ШИМ, DMA, интерфейсы UART, SPI, CAN, I2C и др.

Пример Simulink программы PIC контроллера показан на Рис. 10.


Рис. 10. Пример программы на языке графического программирования для PIC контроллера выполненной в среде моделирования динамических систем Simulink.

Взаимодействие средств разработки и компиляции программ для PIC контроллеров в Simulink показано на Рис. 11 [6].


Рис. 11. Структура средств построения адекватной модели PIC контроллера на языке графического программирования.

Для построения среды разработки необходимы следующие компоненты Matlab:

• Simulink
• Real-Time Workshop Embedded Coder
• Real-Time Workshop

И Cи компилятор компании Microchip:

• C30 для контроллеров PIC24, dsPIC30 и PIC33
• или C32 для контроллеров серии PIC32

Установка компонентов Matlab


На сайте имеются Simulink библиотеки (dsPIC Toolbox) для PIC контроллеров и версий Matlab c R2006a по R2012a:

Для скачивания библиотеки необходимо зарегистрироваться. Программы поддерживают работу 100 микроконтроллеров из серий PIC 16MC, 24F, 30F, 32MC, 33F, 56GP, 64MC, 128MC, 128GP.
Бесплатные версии работают с Simulink моделями PIC контроллеров имеющих до 7 портов ввода-вывода.

Для установки dsPIC Toolbox — библиотеки блоков PIC контроллеров для Matlab/Simulink необходимо [4]:

• Скачать dsPIC Toolbox для требуемой версии Matlab.
• Распаковать zip файл в папке, в которой будут установлены Simulink блоки.
• Запустить Matlab.
• Настроить текущий каталог Matlab на папку с распакованным файлом.
• Открыть и запустить файл install_dsPIC_R2012a.m, например, кнопкой меню или клавишей клавиатуры.

Библиотеки dsPIC и примеры Simulink моделей устанавливаются в текущую папку Matlab (Рис. 12). Установленные блоки для моделирования PIC контроллеров доступны в разделе Embedded Target for Microchip dsPIC библиотеки Simulink (Рис. 13).


Рис. 12. Содержимое текущего каталога после выполнения install_dsPIC_R2012a.m.
Рис. 13. Блоки, установленной библиотеки «Embedded Target for Microchip dsPIC».

Для совместной компиляции Simulink модели средствами Matlab и MPLAB необходимо прописать в переменной окружения path Matlab с высшим приоритетом путь к каталогу MPLAB с файлами MplabOpenModel.m, MplabGetBuildinfo.m и getHardwareConfigs.m:

>> path('c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\',path) 

Установка Си компилятора MPLAB


Компиляторы MPLAB находятся на сайте Microchip (Download Archive → MPLAB C Compiler for PIC24 and dsPIC DSCs). Для установки демонстрационной версии компилятора С30 необходимо его скачать по ссылке PIC24/dsPIC v3.25 (Рис. 14) и запустить принятый файл mplabc30-v3.25-comboUpgrade.exe.
Рис. 14. Версии Си компилятора (слева) и режимы его установки (справа).

Примечание. Работа выполнена с версией v3.25 компилятора С30 для PIC24/dsPIC. Проверка показала, что следующая версия v3.30 не поддерживает совместную компиляцию моделей Matlab R2012a (dsPIC Toolbox) без ошибок.

Установочный exe файл создаёт в разделе c:\Program Files (x86)\Microchip\ новый каталог mplabc30 с файлами:


Рис. 15. Каталоги компилятора C30 MPLAB.

Последовательность Simulink программирования для PIC контроллеров

1. Создайте рабочий каталог и скопируйте в него *.mdl примеры из раздела example (см. Рис. 12).
2. Загрузите Matlab. Настройте его на рабочий каталог.
3. Включите в переменную окружения path Matlab с высшим приоритетом путь к MPLAB — каталогу c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\:

>> path('c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\',path) 

Примечание: Использование команды >>path без аргументов приводит к отображению списка путей переменной path в окне команд (Command Window). Удалить путь из переменной path можно командой rmpath, например:
>>rmpath(' c:\Program Files\Microchip\MPLAB IDE\Tools\MATLAB\')

4. Создайте Simulink модель для PIC контроллера, используя блоки библиотеки «Embedded Target for Microchip dsPIC» (Рис. 13), или загрузите готовую модель, например, Servo_ADC.mdl.

Тип контроллера, для которого разрабатывается Simulink модель, выбирается из списка в блоке Master > PIC (Рис. 16, Рис. 10), который должен быть включен в состав модели.


Рис. 16. Выбор типа контроллера в блоке Master модели.

5. Проверьте настройки конфигурации модели: Меню → Simulation → Configuration Parameters <Ctrl+E>. В строке ввода System target file раздела Code Generation должен быть указан компилятор S-функций dspic.tlc (Рис. 17). Выбор dspic.tlc настраивает все остальные параметры конфигурации модели, включая шаг и метод интегрирования.


Рис. 17. Выбор компилятора S-функций dspic.tlc для моделей PIC-контроллеров в разделе «основное меню → Simulation → Configuration Parameters → Code Generation».

6. Откомпилируйте модель tmp_Servo_ADC.mdl. Запуск компилятора показан на Рис. 18.


Рис. 18. Запуск компилятора Simulink модели.

В результате успешной компиляции (сообщение: ### Successful completion of build procedure for model: Servo_ADC) в текущем каталоге создаются HEX файл для прошивки PIC контроллера и MCP проект среды MPLAB (Рис. 19).


Рис. 19. Результаты компиляции модели.

Запуск модели в Matlab/Simulink выполняется в окне модели кнопкой, условное время моделирования устанавливается в строке:


Управление компиляцией Simulink моделей из среды MPLAB

Управление компиляцией Simulink модели можно выполнять командами раздела Matlab/Simulink среды MPLAB, например, в следующем порядке.

1. Разработайте модель PIC контроллера в Matlab/Simulink. Сохраните модель.
2. Запустите MPLAB.
3. Выберите MPLAB меню → Tools → Matlab/Simulink и новый раздел появится в составе меню.


4. В разделе Matlab/Simulink откройте Simulink модель, например, Servo_ADC, командой «Matlab/Simulink → Specify Simulink Model Name → Open → File name → Servo_ADC.mdl → Open». Команда Open запускает Matlab и открывает модель.

5. Откомпилируйте модель и создайте MCP проект командами Generate Codes или Generate Codes and Import Files. Перевод MDL модели в MCP проект выполняется TLC компилятором Matlab.
В результате создаётся проект MPLAB:

со скриптами модели на языке Си.

6. Откройте проект: меню → Project → Open → Servo_ADC.mcp (Рис. 20).


Рис. 20. Структура MCP проекта Simulink модели Servo_ADC.mdl в среде MPLAB.
Проект Simulink модели готов для редактирования, отладки и компиляции в машинные коды контроллера средствами MPLAB.

Подключение программатора PIC-KIT3


Узнать какие программаторы записывают бинарный код в конкретный микроконтроллер можно в разделе меню → Configure → Select Device среды MPLAB 8.92. Например, программатор PIC-KIT3 не поддерживает контроллер PIC12C508A (Рис. 21, левый рисунок), но работает с контроллером PIC12F629 (Рис. 21, правый рисунок).
Рис. 21. Перечень программаторов для прошивки микроконтроллера.

Информацию об установленном драйвере программатора PIC-KIT3 можно запросить у менеджера устройств ОС Windows (Рис. 22).


Рис. 22. Информация об установленном драйвере программатора PIC-KIT3.

Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3 показана на Рис. 23.


Рис. 23. Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3.

Вывод PGM программатора для прошивки контроллеров PIC12F629 не используется. Наличие вывода PGM для разных типов PIC контроллеров показано на Рис. 24. Вывод PGM рекомендуется «притягивать» к общему проводу (GND), через резистор, номиналом 1К [3].


Рис. 24. Выводы PGM PIC контроллеров.

Индикация светодиодов программатора Olimex PIC-KIT3 показана в ниже:

Желтый — Красный — Состояние программатора
Вкл — Выкл — Подключен к USB линии
Вкл — Вкл — Взаимодействие с MPLAB
Мигает — Включен постоянно — Прошивка микроконтроллера

Не следует подключать питание микроконтроллера VDD (Рис. 23) к программатору, если контроллер запитывается от своего источника питания.

При питании микроконтроллера от программатора на линии VDD необходимо установить рабочее напряжение, например, 5В программой MPLAB (Menu → Programmer → Settings → Power), как показано на Рис. 25.

Примечание. При отсутствии напряжения на линии VDD MPLAB IDE выдает сообщение об ошибке: PK3Err0045: You must connect to a target device to use


Рис. 25. Установка напряжения VDD на программаторе PIC-KIT3 программой MPLAB IDE v8.92.

Если программатор не может установить требуемое напряжение, например, 5В при его питании от USB, в которой напряжение меньше 5В, MPLAB IDE выдает сообщение об ошибке: PK3Err0035: Failed to get Device ID. В этом случае, сначала необходимо измерить напряжение программатора — считать его в закладке меню → Programmer → Settings → Status, а затем установить напряжение (не больше измеренного) в закладке меню → Programmer → Settings → Power.


Рис. 26. Измерение (слева) и установка (справа) VDD напряжения программатора PIC-KIT3 программой MPLAB IDE v8.92.

Пример MPLAB сообщения успешного подключения микроконтроллера к программатору по команде меню → Programmer → Reconnect показан на Рис. 27.


Рис. 27. Сообщение MPLAB об успешном подключении микроконтроллера к программатору.

Можно программировать не только отдельный PIC контроллер, но и контроллер, находящийся в составе рабочего устройства. Для программирования PIC контроллера в составе устройства необходимо предусмотреть установку перемычек и токоограничивающих резисторов как показано на Рис. 28 [3].


Рис. 28. Подключение микроконтроллера в составе электронного устройства к программатору.

Заключение


Малоразрядные PIC-контроллеры имеют широкий диапазон питания, низкое потребление и малые габариты. Они программируются на языках низкого уровня. Разработка программ на языке графического программирования Simulink с использованием многочисленных библиотек значительно сокращает время разработки и отладки в сравнении с программированием на уровне ассемблера. Разработанные для PIC-контроллеров Simulink структуры можно использовать и для компьютерного моделирования динамических систем с участием контроллеров. Однако, из-за избыточности кода такой подход применим только для семейств PIC контроллеров с достаточными ресурсами.

Устройства на микроконтроллерах — Меандр — занимательная электроника

Схемы на микроконтроллерах PIC, AVR

В современных промышленных стан­ках используются цифровые уст­ройства для измерения перемещения механизмов, датчиками которых служат электромеханические устройства, на­пример, ПДФ-3М [1] или ЛИР-158 [2] и аналогичные, использующие двухфаз­ный метод счёта. Предлагаемый прибор предназначен для проверки и отбраков­ки таких датчиков. Метод проверки — подсчёт числа импульсов на один обо­рот вала датчика. В приборе, схема которого изображе­на на рис. …

Читать далее

Постоянная ссылка на это сообщение: http://meandr.org/archives/36475

В доме автора нередко отключают электропитание, что очень некстати в тёмное время суток, когда детям нужно делать уроки, а у остальных членов семьи остаются незаконченными домаш­ние дела. Это побудило его изготовить резервную систему пита­ния. Было выяснено, что потребляемая полностью включённым освещени­ем дома мощность при использовании люминесцентных ламп не превышает 600 Вт. В наличии имелся компьютер­ный …

Читать далее

Постоянная ссылка на это сообщение: http://meandr.org/archives/36457

Сейчас очень попу­лярно освещение с помощью светодиод­ных лент. Особенно интересно примене­ние RGB-светодиодных лент, потому что это позволяет полу­чить самую разно­образную окраску освещения. Это устройство предназначено для управления RGB-светодиодной лентой или тремя свето­диодными блоками с общими анодами. Устройство обеспечивает 13 режимов работы светодиодной ленты: Выключенное состояние. Включены все светодиоды. Включены красные светодиоды. Включены зеленые светодиоды. Включены …

Читать далее

Постоянная ссылка на это сообщение: http://meandr.org/archives/36423

Описание и назначение устройства Публикация статьи рассчитана больше на начина­ющих — тех, кто только пытается заняться освоени­ем и пониманием работы устройств на AVR микро­контроллерах. Поэтому приведённый здесь проект в AVR Studio с текстом исходного кода написан с под­робными комментариями. Мне хотелось на реальном простом устройстве, которое может найти конкрет­ное применение в быту, привести пример реализа­ции …

Читать далее

Постоянная ссылка на это сообщение: http://meandr.org/archives/36158

Индикатор предназна­чен для непрерывного измерения и индикации напряжения в электро­сети. Индикатор состоит из цифрового трехразряд­ного измерителя напряжения, источника питания и датчика напряжения электросети. По сути, датчик напря­жения электросети и источник питания это единое целое. Прибор питается от электросети через источник питания, состоящий из понижаю­щего трансформатора, выпрямителя и стабили­затора на микросхеме 7805. Напряжение пита­ния измерителя 5V …

Читать далее

Постоянная ссылка на это сообщение: http://meandr.org/archives/36074

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *