Регулятор скорости вентилятора отопителя салона на ATtiny2313 — Сообщество «Электронные Поделки» на DRIVE2
Обновление от 17.01.2015 г.:Есть несколько повторивших схему, по их просьбам были немного модернизированы прошивки. Из “полезностей” добавлен плавный старт вентилятора при включении и добавлены прошивки для индикатора с общим анодом.
Итак, очень краткое описание:
Индикатор с общим анодом, 5 положений (старая схема)t2313_Emelya_5_CA_old.eept2313_Emelya_5_CA_old.hex
t2313_Emelya_5_CA_old.rom
Индикатор с общим катодом, 5 положений (старая схема)t2313_Emelya_5_CC_old.eept2313_Emelya_5_CC_old.hex
t2313_Emelya_5_CC_old.rom
Индикатор с общим анодом, 10 положений (старая схема)t2313_Emelya_10_CA_old.eept2313_Emelya_10_CA_old.hex
t2313_Emelya_10_CA_old.rom
Индикатор с общим катодом, 10 положений (старая схема)t2313_Emelya_10_CC_old.eept2313_Emelya_10_CC_old.hex
t2313_Emelya_10_CC_old.rom
Для схем на 10 положений индикация от нуля до девяти.
// ———————————————————————–
В результате очередного приступа непреодолимого желания изготовить что-то полезное для любимого боевого коня был собран ШИМ регулятор для электродвигателя отопителя салона. Появился методом проб и ошибок, немного подробнее и с картинками ТУТ и ТУТ.
Но здесь, в отличие от БЖ, немного больше скучных подробностей.
Финальная схема выглядит так:
Схема 1
Схема 2
После первых испытаний в авто решил разнести силовую и управляющую части на разные платы. ШИМ применил аппаратный, кнопки также подключены к выводам, на которые настроены аппаратные прерывания.
Опыта работы с микроконтроллерами пока маловато, а такой подход позволил большую часть работы по написанию прошивки переложить на хрупкие плечи мастера проектов из CodeVision AVR. Также захотелось реализовать индикацию режима работы, поэтому на свободный порт В был подключен семисегментный светодиодный индикатор.
Небольшой неожиданностью стало отсутствие на радиорынке каких-либо декоративных панелек для монтажа индикатора. Пришлось использовать корпус от кнопки. В результате было собрано следующего вида “нечто”:
Нечто )))
Решил не утруждать себя изготовлением корпуса и упаковал платы в прозрачную термоусадку:
Комплект для установки
Видео работы схемы снимал на “стенде”, ибо в авто ничего и не видно:
Монтаж не занял много времени, потому как органы управления и индикации (если так пафосно можно обозвать кнопку на 2 положения и одноразрядный светодиодный индикатор) при помощи ножа, напильника, эпоксидки, суперклея и “такой-то матери” удалось разместить в штатной заглушке. Также пришлось произвести небольшое хирургическое вмешательство в электропроводку авто. Печальная история (с картинками) о разрезанном проводе ТУТ.
В работе (фото 1)
В работе (фото 2)
В ходе экспериментов менял и частоту ШИМ. Самым “тихим” оказалось значение частоты ШИМ 1,93 кГц. В результате запрограммировал 5 режимов работы вентилятора. 3-й режим приблизительно соответствует штатному через резистор. На первых двух — вентилятора вообще практически не слышно. Схема установлена в авто и проходит тестовую эксплуатацию.
Актуальная на 12.11.2013 г. прошивка ТУТ
Продолжение…
Источник: https://www.drive2.ru/c/767012/
AVR. Учебный курс. Использование ШИМ
Вот уже несколько раз я ругался странным словом ШИМ. Пора бы внести ясность и разьяснить что же это такое. Вообще, я уже расписывал этот режим работы, но все же повторюсь в рамках своего курса.
Вкратце, Широтно Импульсная Модуляция (в буржуйской нотации этот режим зовется PWM — Pulse Width Modulation) это способ задания аналогового сигнала цифровым методом, то есть из цифрового выхода, дающего только нули и единицы получить какие то плавно меняющиеся величины. Звучит как бред, но тем не менее работает. А суть в чем:
Представь себе тяжеленный маховик который ты можешь вращать двигателем. Причем двигатель ты можешь либо включить, либо выключить. Если включить его постоянно, то маховик раскрутится до максимального значения и так и будет крутиться. Если выключить, то остановится за счет сил трения.
А вот если двигатель включать на десять секунд каждую минуту, то маховик раскрутится, но далеко не на полную скорость — большая инерция сгладит рывки от включающегося двигателя, а сопротивление от трения не даст ему крутится бесконечно долго.
Чем больше продолжительность включения двигателя в минуту, тем быстрей будет крутится маховик.
При ШИМ мы гоним на выход сигнал состоящий из высоких и низких уровней (применимо к нашей аналогии — включаем и выключаем двигатель), то есть нулей и единицы.
А затем это все пропускается через интегрирующую цепочку (в аналогии — маховик). В результате интегрирования на выходе будет величина напряжения, равная площади под импульсами.
Меня скважность (отношение длительности периода к длительности импульса) можно плавно менять эту площадь, а значит и напряжение на выходе.
Таким образом если на выходе сплошные 1, то на выходе будет напряжение высокого уровня, в случае моего робота, на выходе из моста L293 это 12 вольт, если нули, то ноль. А если 50% времени будет высокий уровень, а 50% низкий то 6 вольт.
Интегрирующей цепочкой тут будет служить масса якоря двигателя, обладающего довольно большой инерцией.
А что будет если взять и гнать ШИМ сигнал не от нуля до максимума, а от минуса до плюса. Скажем от +12 до -12. А можно задавать переменный сигнал! Когда на входе ноль, то на выходе -12В, когда один, то +12В. Если скважность 50% то на выходе 0В. Если скважность менять по синусоидальному закону от максимума к минимуму, то получим… правильно! Переменное напряжение.
А если взять три таких ШИМ генератора и гнать через них синусоиды сдвинутые на 120 градусов между собой, то получим самое обычное трехфазное напряжение, а значит привет бесколлекторные асинхронные и синхронные двигатели — фетиш всех авиамоделистов. На этом принципе построены все современные промышленные привода переменного тока.
Всякие Unidrive и Omron Jxx
В качестве сглаживающей интегрирующей цепи в ШИМ может быть применена обычная RC цепочка:
Так, принцип понятен, приступаем к реализации. ШИМ сигнал можно сварганить и на операционных усилителях и на микроконтроллере. Причем последние умеют это делать просто мастерски, благо все у них для этого уже есть.
В случае ATMega16 проще всего сделать на его ШИМ генераторе, который встроен в таймеры. Причем в первом таймере у нас целых два канала. Так что без особого напряга ATmega16 может реализовать одновременно четыре канала ШИМ.
Как это реализовано
У таймера есть особый регистр сравнения OCR**. Когда значение в счётном регистре таймера достигнает значения находящегося в регистре сравнения, то могут возникнуть следующие аппаратные события:
- Прерывание по совпадению
- Изменение состояния внешнего выхода сравнения OC**.
Выходы сравнения выведены наружу, на выводы микроконтроллера
На демоплате Pinboard к этим выводам как раз подключены светодиоды. А если поставить джамперы вдоль, в сторону надписи RC то к выводу ШИМ будет подключена интегрирующая цепочка.
Для Pinboard II разница в подключении невелика. Джамперы тут сгруппированы в один блок. А светодиоды и RC цепочки сгруппированы в левом верхнем углу платы.
Предположим, что мы настроили наш ШИМ генератор так, чтобы когда значение в счетном регистре больше чем в регистре сравнения, то на выходе у нас 1, а когда меньше, то 0. Что при этом произойдет? Таймер будет считать как ему и положено, от нуля до 256, с частотой которую мы настроим битами предделителя таймера. После переполнения сбрасывается в 0 и продолжает заново.
Как видишь, на выходе появляются импульсы. А если мы попробуем увеличить значение в регистре сравнения, то ширина импульсов станет уже.
Так что меняя значение в регистре сравнения можно менять скважность ШИМ сигнала. А если пропустить этот ШИМ сигнал через сглаживающую RC цепочку (интегратор) то получим аналоговый сигнал.
У таймера может быть сколько угодно регистров сравнения. Зависит от модели МК и типа таймера. Например, у Атмега16
- Timer0 — один регистр сравнения
- Timer1 — два регистра сравнения (16ти разрядных!)
- Timer2 — один регистр сравнения
Итого — четыре канала. В новых AVR бывает и по три регистра сравнения на таймер, что позволяет одним МК организовать просто прорву независимых ШИМ каналов. Самих режимов ШИМ существует несколько:
Fast PWM
В этом режиме счетчик считает от нуля до 255, после достижения переполнения сбрасывается в нуль и счет начинается снова. Когда значение в счетчике достигает значения регистра сравнения, то соответствующий ему вывод ОСхх сбрасыватся в ноль. При обнулении счетчика этот вывод устанавливается в 1. И все!
Частота получившегося ШИМ сигнала определяется просто: Частота процесора 8Мгц, таймер тикает до 256 с тактовой частотой. Значит один период ШИМ будет равен 8000 000/256 = 31250Гц. Вполне недурно. Быстрей не получится — это максимальная скорость на внутреннем 8Мгц тактовом генераторе. Но если переключить FUSE биты на внешний кварц то можно раскачать МК на 16Мгц.
Еще есть возможность повысить разрешение, сделав счет 8, 9, 10 разрядным (если разрядность таймера позволяет), но надо учитывать, что повышение разрядности, вместе с повышением дискретности выходного аналогового сигнала, резко снижает частоту ШИМ.
Phase Correct PWM ШИМ с точной фазой. Работает похоже, но тут счетчик считает несколько по другому. Сначала от 0 до 255, потом от 255 до 0. Вывод OCxx при первом совпадении сбрасывается, при втором устанавливается.
Но частота ШИМ при этом падает вдвое, изза большего периода. Основное его предназначение, делать многофазные ШИМ сигналы, например, трехфазную синусоиду. Чтобы при изменении скважности не сбивался угол фазового сдвига между двумя ШИМ сигналами. Т.е. центры импульсов в разных каналах и на разной скважности будут совпадать.
Еще одна тонкость:
Чтобы не было кривых импульсов, то в регистр сравнения любое значение попадает через буфферный регистр и заносится только тогда, когда значение в счетчике достигнет максимума. Т.е. к началу нового периода ШИМ импульса.
Clear Timer On Compare
Сброс при сравнении. Это уже скорей ЧИМ — частотно-импульсно моделированный сигнал. Тут работает несколько иначе, чем при других режимах. Тут счетный таймер тикает не от 0 до предела, а от 0 до регистра сравнения! А после чего сбрасывается.
В результате, на выходе получаются импульсы всегда одинаковой скважности, но разной частоты. А чаще всего этот режим применяется когда надо таймером отсчитывать периоды (и генерить прерывание) с заданной точностью. Например, надо нам прерывание каждую миллисекунду. И чтобы вот точно.
Как это реализовать проще? Через Режим СТС! Пусть у нас частота 8Мгц. Прескалер будет равен 64, таким образом, частота тиков таймера составит 125000 Гц. А нам надо прерывание с частотой 1000Гц. Поэтому настраиваем прерывание по совпадению с числом 125. Дотикал до 125 — дал прерывание, обнулился.
Дотикал до 125 — дал прерывание, обнулился. И так бесконечно, пока не выключим. Вот вам и точная тикалка.
Нет, конечно, можно и вручную. Через переполнение, т.е. дотикал до переполнения, загрузил в обработчике прерывания заново нужные значение TCNTх=255-125, сделал нужные полезные дела и снова тикать до переполнения. Но ведь через СТС красивей! 🙂
Аппаратура А теперь контрольные регистры, которыми все это безобразие задается и программируется. Опишу на примере Двухканального FastPWM на таймере 1. В других все похоже. Даташит в зубы и вперед.
Итак, тут правят бал регистры TCCR1A и TCCR1B. Гы, кто бы сомневался %)
Распишу их по битам.
Регистр TCCR1A, биты COM1A1:COM1A0 и COM1B1:COM1B0. Эта братия определяет поведение вывода сравнения OC1A и OC1B соответственно.
COMxx1 | COMxx0 | Режим работы выхода |
вывод отцеплен от регистра сравнения и не меняется никак. | ||
1 | Поведение вывода зависит от режима заданного в WGM, различается для разных режимов (FastPWM, FC PWM, Compar out) и разных МК, надо сверяться с даташитом. | |
1 | прямой ШИМ (сброс при совпадении и установка при обнулении счета) | |
1 | 1 | обратный ШИМ (сброс при обнулении и установка при совпадении) |
Регистр TCCR1A, биты WGM11 и WGM10 вместе с битами WGM12 и WGM13, находящимися в регистре TCCR1B задают режим работы генератора.
WGM13 | WGM12 | WGM11 | WGM10 | Режим работы |
1 | 1 | Fast PWM 8 бит | ||
1 | 1 | Fast PWM 9 бит | ||
1 | 1 | 1 | Fast PWM 10 бит |
Другие комбинации битов WGM задают режимы Phase Correct PWM и CTC (сброс OCxx при совпадении). Если интересно, то читай даташит, я для себя много интересного там не нашел, кроме Phase Correct PWM. И то мне сейчас важней скорость, а не точность фазы 🙂
После остается только запустить таймер, установив бит CS10 (подсчет тактовых импульсов с делителем 1:1)
Пример кода:
Попробуем поиграться яркостью светодиодов с помощью ШИМ сигналов. Подключи джамперы, чтобы запитать светодиоды LED1 и LED2 Для версии Pinboard II все аналогично, с поправкой на другое расположение джамперов:
Теперь все готово, можно писать код. Вначале в раздел инициализации устройств добавляю настройку таймера на запуск ШИМ и подготовку выводов.
1 2 3 4 5 6 7 8 9 10 11 12 |
;FastPWM Init SETB DDRD,4,R16 ; DDRD.4 = 1 Порты на выход SETB DDRD,5,R16 ; DDRD.5 = 1 ; Выставляем для обоих каналов ШИМ режим вывода ОС** сброс при совпадении. ; COM1A = 10 и COM1B = 10 ; Также ставим режим FAST PWM 8bit (таймер 16ти разрядный и допускает ; большую разрядность ШИМ сигнала. Вплоть до 10 бит. WGM = 0101 ; Осталось только запустить таймер на частоте МК CS = 001 OUTI TCCR1A,2 |
Источник: http://easyelectronics.ru/avr-uchebnyj-kurs-ispolzovanie-shim.html
4-канальный ШИМ-контроллер на микроконтроллере AVR. Часть 1
» Схемы » Применение микроконтроллеров
01-02-2010
John Giffard, Mark Lewin
Широтно-импульсная модуляция очень часто используется для регулировки/управления источниками света, двигателями. Целью данного проекта было создание дешевого устройства – ШИМ-контроллера, которое будет полезно во многих областях.
Изначально основой конструкции был выбран микроконтроллер компании Atmel ATMega32, т.к.
имеющаяся периферия легко позволяла организовать не только многоканальный ШИМ с управлением по последовательному интерфейсу, но и добавить аналоговый интерфейс управления, клавиатуру и LCD-индикатор для организации пользовательского интерфейса, а также получить дополнительные выходные линии общего назначения. Однако, не проигрывая в функциональности, может использоваться и микроконтроллер ATMega16 (это учтено при разработке программного обеспечения). Рабочая частота выбрана из расчета возможности использования микроконтроллеров ATMega32L и ATMega16L.
Данная версия 4-канального 8-битного ШИМ-контроллера сконструирована с использованием микроконтроллера ATmegа16.
Устройство сдержит интерфейс RS232 для управления с компьютера, интерфейс для 12-кнопочной клавиатуры и 4 аналоговых 10-битных канала для подключения потенциометров. Для отображения текущих режимов работы и параметров имеется 4-х строчный LCD-дисплей.
Дополнительно ШИМ-контроллер имеет: 4 выхода на светодиоды, для индикации режимов управления (могут быть задействованы в роли выходов общего назначения), 3 выхода общего назначения.
Устройство имеет очень гибкие настройки.
Например, параметры работы каналов ШИМ могут управляться посредством команд с компьютера, посредством аналоговых регуляторов (потенциометры) или с помощью клавиатуры (с отображением пользовательского интерфейса на LCD-индикаторе). Самим LCD-индикатором также возможно управлять через RS232, отображение текущих установок и режимов возможен в числовом, либо в графическом формате.
Основные характеристики устройства:
- 4-канала ШИМ, разрешение 8 бит, частота ШИМ – 31 кГц;
- интерфейс RS232 для управления и контроля с PC;
- простое схемотехническое решение с минимальным количеством внешних элементов;
- 12-кнопочная клавиатура;
- возможность аналоговой регулировки;
- до 7 выходных линий общего назначения;
- 4-строчный LCD-дисплей;
- управление LCD-дисплеем через последовательный интерфейс;
- пользовательское меню;
- гибкие настройки;
- программная реализация буферов FIFO для ускорения работы.
Управление выходами общего назначения (в т.ч. светодиодными индикаторами) осуществляется с компьютера (RS232), пользователь так же имеет возможность считывать историю нажатия клавиш на клавиатуре (последние 32 нажатия клавиш, либо сразу же после нажатия какой-либо клавиши).
Благодаря таким гибким настройкам, выбирая соответствующую настройку, ШИМ-контроллер может использоваться в различных приложениях и как самостоятельное устройство.
В конструкции используется микроконтроллер ATmega16, минимальное количество внешних элементов, поскольку весь контроль и управление выполняет сам микроконтроллер.
Для пользователя возможно использование только необходимых компонентов, например, LCD-индикатор, если в нем нет необходимости, может быть исключен.
Логическая схема устройства.
Принципиальная схема устройства
Кликните для увеличения
Схемотехническое решение очень простое. Для тактирования микроконтроллера выбран кварцевый резонатор 8 МГц, источник питания +5.0 В собран на интегральном стабилизаторе LM7805, индуктивность 10 мкГн и конденсатор 100 нФ – образуют фильтр, предотвращающий проникновение помех при переключениях в аналоговых цепях.
Преобразователь логических уровней MAX232 используется для реализации последовательного интерфейса. LCD-индикатор на чипсете Hitachi (HD44780) с разрешением 20×4 либо 40×2. Узел управления подсветкой индикатора реализован на транзисторе MJE3055T (возможно использование более дешевого аналога).
Матрица клавиатуры, стандартная, 4×3.
После подачи питания, микроконтроллер устанавливает последние сохраненные параметры в EEPROM: режимы управления каналами ШИМ (аналоговое управление, управление по последовательному интерфейсу, управление с клавиатуры), формат отображения параметров на индикаторе (управление по последовательному интерфейсу, отображение значений ШИМ, отображение аналоговых значений), а также состояние выходных линий общего назначения, состояние подсветки дисплея.
ШИМ генерация присутствует всегда на всех четырех каналах после подачи питания.
Пользователь может настроить все параметры ШИМ-контроллера, используя последовательный интерфейс, посылая управляющие команды, а затем сохранить все сделанные настройки в EEPROM памяти микроконтроллера.
Полный список команд и значений приведен ниже в приложении. Последовательный интерфейс также может использоваться для пересылки текущих значений аналоговых каналов управления (по запросу).
На индикаторе, при подаче питающего напряжения, отображается приветствие (пользователь может изменить приветствие), а затем, в соответствии с текущими настройками, отображает текущие параметры и значения выходов ШИМ, значения аналоговых каналов.
Для примера практической реализации устройства и ШИМ управления различными внешними устройствами приведена следующая схема.
В данном примере показаны схемотехнические решения для подключения к 4 каналам ШИМ двигателя вентилятора, мощного светодиода семейства Luxeon Star, преобразователь ШИМ-напряжение на операционном усилителе LM358.
А также для возможности тестирования выходных линий общего назначения подключены светодиоды.
Пример реализации выходных каскадов ШИМ-контроллера
Кликните для увеличения
Следующая часть будет посвящена программному обеспечению микроконтроллера, где будут рассмотрены основные блоки алгоритма, их особенности.
circuitcellar.com
Источник: https://www.rlocman.ru/shem/schematics.html?di=62862
Регулируем скорость вращения двигателя с помощью ШИМ(PWM) на ATtiny2313
Реализация регулировки скорости вращения двигателя довольно не сложная. Для этого необходимо знать что такое Широтно Импульсная Модуляция (ШИМ по английски PWM), иметь понятие о возможных вариантах её реализации.
В данном примере я расскажу как использовать программную ШИМ, то есть специальные таймеры-счетчики при программной ШИМ не будут задействованы. ШИМ с применением аппаратного ресурса таймеров-счетчиков называется аппаратной ШИМ про нее хорошо рассказал мой коллега.
И так, алгоритм следующий, необходимо организовать уменьшение и увеличение заполненности импульсов, при нажатии на кнопки “+” и соответственно “-“.
Подпрограммы уменьшения и увеличения скорости вращения будет включаться двумя кнопками, которые в свою очередь будут присоединены к прерываниям int0 и int1. Такое решение в связи с тем что управляющих кнопок больше не будет, а значит прерывания просто грех не использовать.
Соответственно скорость будет увеличиваться или уменьшаться в зависимости от заполненности импульсов коммутирующих силовую схему управления двигателем.
Схема устройства представляет из себя следующее:
Используется только один полевой транзистор из сборки.
В основном цикле программы будет сама непосредственно программа реализации программной ШИМ.
-
//Подключаем стандартные библиотеки необходимые для работы
-
#include //библиотека ввода/вывода
-
#include //библиотека прерываний
-
#define nop() {asm(“nop”);}//функция позаимствованная из ассемблера “nop”
-
//перечисление переменных
-
unsigned int i=1;//переменная для ШИМ
-
unsigned int p;//переменная для ШИМ
-
unsigned int pp=50;//переменная для ШИМ скорость нарастания напряжения
-
unsigned int ms;//переменная для задержки
-
unsigned int x;//переменная для задержки
-
//Попрограммы обработки прерываний
-
SIGNAL(SIG_INTERRUPT0)//обработка прерываний кнопки “+”
-
{pp=pp+1;} //увеличение при нажатии на кнопку “+” на 1
-
SIGNAL(SIG_INTERRUPT1)//обработка прерываний кнопки “-“
-
{pp=pp-1;} //уменьшение при нажатии на кнопку “-” на 1
-
//функция задержки
-
void delay_ms(int ms)
-
{for (x=ms;x>0;x–) nop (); }
-
//Функция включения бита 0 порта B
-
void ledon(int ms)
-
{ PORTB = 0x01; delay_ms(ms); }
-
//Функция выключения бита 0 порта B
-
void ledoff(int ms)
-
{ PORTB = 0x00; delay_ms(ms); }
-
//Основная программа
-
int main( void )
-
{
-
DDRB=0x01;//конфигурирование порта B на выход
-
GIMSK=0b11000000; //разрешаем прерывание int0 и int1
-
MCUCR=0b00001111;// прерывание по возрастающему фронту – для кнопки 1 и 2
-
sei();//разрешаем прерывания
-
for (;;)//бесконечный цикл
-
{ p=pp-i;//реализация<\p>
-
ledon(p);//программного
-
ledoff(i);//ШИМ
-
}
-
}
Вывод 12 микроконтроллера AtTiny2313 необходимо соединить с силовой схемой. Силовую схему для управления двигателем предлагаю построить на сборке из двух полевых транзисторов IRF7105. Довольно дешевая, компактная и доступная в продаже сборка.
Преимущество применения именно полевых транзисторов в том что на них практически нету падения напряжения, и собственно они за счет этого не греются.
Небольшим недостатком является напряжение открытия полевых транзисторов этой сборки оно составляет по паспорту 5В, но экспериментально проверено что оно порядка 4В.
А это значит что мы будем иметь довольно узкий диапазон изменения скорости вращения двигателя от 4В до 5В.
В принципе можно использовать любую другую схему для управления мощной нагрузкой, применение такой схемы обусловлено маленькой мощностью портов микроконтроллера ATTiny2313 да и вообще всех микроконтроллеров семейства AVR.
Что бы не сжечь порты микроконтроллера как-раз и применяется силовая схема управления нагрузкой а в данном случаи коллекторным двигателем.
На фотографии:
– макетная плата для attiny2313;
– сборка IRF7105 на полевых транзисторах;
– маломощный коллекторный двигатель.
Видео работы регулятора:
»
Источник: https://avrlab.com/node/52
Конфигурируем ШИМ в Bascom
Источник: http://AVRproject.ru/publ/pwm_bascom/1-2-0-37
Плавный розжиг ламп фар. Часть2. PWM контроллер ATTiny2313 — DRIVE2
Всем привет! В этом посте поделюсь своим первым самостоятельным проектом на МК семейства AVR. Потому прошу сильно не плевать в монитор)))
В первой части я рассказал о будущем функционале устройства, а тут напомню лишь, что это будет автономный контроллер с автоматическим и ручным управлением головным освещением авто.
В первой части разработал, собрал и протестировал драйвер управления лампой автомобиля на основе N-канального MOSFET под управлением PWM-генератора на К155ЛН2. В этой записи ШИМ-генератор заменил на более “культурный” на основе Attiny2313 с кнопочным управлением и регулировкой скважности от 0 до 100%.
Ну вот и макетка! =))
В схеме нет ничего особенного. Разве что забыл подтянуть RESET к питанию.
Снял небольшое видео работы. Экран осциллографа не захотел, чтоб его снимали. Потому что частота выхода порядка 60Гц всего.
Для знатоков ассемблера есть вопрос.МК новый, фьюзы по дефолту. Настроил аппаратный PWM на ТС0. Судя по ДШ, частота встроенного RC-генератора по дефолту 8МГц. Рассчитывая получить частоту в режиме Fast PWM 122Гц, устанавливаю Кдел=256.
Частота будет рассчитываться по формуле:Fвых=Fclk/(Кдел*256) [формула на стр.
69 datasheet]Шью и наблюдаю неспешное мигание с частотой 15Гц!Меняю Кдел, поочереди 1/8/64/256/1024 и наблюдаю следующие частоты: 3,89кГц/486Гц/60,8Гц/15,6ГцИз этого делаю вывод, что частота генератора составляет всего 1МГц, вместо положенных 8! В чем может быть проблема?
Учитывая частоту в 1МГц, пересчитал и установил выдержку на ТС1 OCR1A=8 равную 8мс для 256 ступеней регулировки яркости (содержимое регистра OCR0A), при удерживании кнопки это будет изменение яркости от одного крайнего значения к другому за 2,09 секунды. Режим таймера — СТС, Кдел=1024. И тут вышло, что тактовая частота 1МГц вместо положенных 8.
.Include “tn2313def.inc”
.def temp1=R16.def temp2=R17.def input=R18.def output=R19.def bright=R20.def kdelH=R26
.def kdelL=R27
.CSEG.
org 0rjmp RESET ; Reset Handlerrjmp intt_0 ; External Interrupt0 Handlerrjmp intt_1 ; External Interrupt1 Handlerrjmp TIM1_CAPT ; Timer1 Capture Handlerrjmp TIM1_COMPA ; Timer1 CompareA Handlerrjmp TIM1_OVF ; Timer1 Overflow Handlerrjmp TIM0_OVF ; Timer0 Overflow Handlerrjmp USART0_RXC ; USART0 RX Complete Handlerrjmp USART0_DRE ; USART0,UDR Empty Handlerrjmp USART0_TXC ; USART0 TX Complete Handlerrjmp ANA_COMP ; Analog Comparator Handlerrjmp PCINT ; Pin Change Interruptrjmp TIMER1_COMPB ; Timer1 Compare B Handlerrjmp TIMER0_COMPA ; Timer0 Compare A Handlerrjmp TIMER0_COMPB ; Timer0 Compare B Handlerrjmp USI_START ; USI Start Handlerrjmp USI_OVERFLOW ; USI Overflow Handlerrjmp EE_READY ; EEPROM Ready Handler
rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
; RESET: ; Reset Handlerintt_0: ; External Interrupt0 Handlerintt_1: ; External Interrupt1 HandlerTIM1_CAPT: ; Timer1 Capture Handler; TIM1_COMPA: ; Timer1 CompareA HandlerTIM1_OVF: ; Timer1 Overflow HandlerTIM0_OVF: ; Timer0 Overflow HandlerUSART0_RXC: ; USART0 RX Complete HandlerUSART0_DRE: ; USART0,UDR Empty HandlerUSART0_TXC: ; USART0 TX Complete HandlerANA_COMP: ; Analog Comparator HandlerPCINT: ; Pin Change InterruptTIMER1_COMPB: ; Timer1 Compare B HandlerTIMER0_COMPA: ; Timer0 Compare A HandlerTIMER0_COMPB: ; Timer0 Compare B HandlerUSI_START: ; USI Start HandlerUSI_OVERFLOW: ; USI Overflow HandlerEE_READY: ; EEPROM Ready HandlerWDT_OVERFLOW: ; Watchdog Overflow Handler
reti
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж; -настройка-
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
RESET: cli
;——– СТЁКldi temp1,RamEnd ;установка указателя стека
out SPL, temp1
;——– ЛАПКИldi temp1,0b00000000 ; порт PD на входout ddrD, temp1ldi temp1,0b11111111 ; порт PB на выходout ddrB, temp1
out PORTD, temp1 ; включаем подтягивающие резисторы порта PD
;——— PWM OC0Aldi temp1,0b10000011 ; вкл ОС0A, уст. FAST PWMout TCCR0A, temp1ldi temp1,0b00000011 ; Кдел=64out TCCR0B, temp1clr temp1out OCR0A, temp1
out TCNT0,temp1
;——— НАСТРОЙКА ТАЙМЕРА ТС1А НА ЗАДЕРЖКУldi temp1,0b00001101 ; включаем режим СТС и clk/1024out TCCR1B, temp1ldi kdelH,0ldi kdelL,8out OCR1AH, kdelH
out OCR1AL, kdelL
;——— ИНИЦИАЛИЗАЦИЯ КОМПАРАТОРАldi temp1,80
out ACSR, temp1
sei;=======================================
;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж; -прога-;жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжINPT:in input, PINDsbrs input,0rjmp MAXsbrc input,1rjmp INPTcpi bright,0 ; из bright вычитаем нольbrne DE ; пропустить 1 шаг, еслине ноль т.е.
Z=0rjmp INPTDE: dec brightrjmp PWMMAX:CPI bright,255 ; из bright вычитаем 255brne I ; пропустить 1 шаг, если не ноль (Z=0) т.е.
если bright не 255rjmp INPTI: inc brightPWM:cliout OCR0A, bright ; грузим в ШИМ значение яркостиclr temp1out TCNT1H, temp1out TCNT1L, temp1 ; обнуляем содержимое счетчика выдержкиldi temp1,0b01000000out TIMSK, temp1 ; включаем разрешение прерывания по таймеруseiCIKL: nop
rjmp CIKL ; ждем выдержку таймера
;———— ОБРАБОТКА ПРЕРЫВАНИЯ ТАЙМЕРАTIM1_COMPA:clr temp1out TIMSK, temp1 ; отключаем прерыванияrjmp INPT
И еще, на осциллографе скважность ШИМ не уменьшается до нуля т.е. все-равно на выходе присутствуют узенькие импульсы, почему? Когда загоняю на максимум, генерация прекращается и на выходе четкая единица. Хотелось-бы видеть и четкий нуль на нижнем пределе…
Разъясните новичку, в чем ошибка? За прогу сильно не пинайте — первый опыт и некогда было сильно приводить в порядок.
Дальше планирую разработку нескольких вариантов девайсов под любой вкус:— плавное включение света, ручной и автоматический режим, выход на контрольную лампу, возможность включения режима ДХО “дальний в полнакала” — во всех вариантах— автоматическое переключение ближнего/дальнего света — опционально— контроль исправности нитей накала ламп — опционально
— отдельный выход включения ДХО, переключение режима с простых ДХО на “дальний в полнакала” — опционально
Себе соберу и установлю полную версию, за исключением последней опции — выхода на отдельные ДХО т.к. устанавливать их не планирую.
В ближайших выпусках блога:
— Мега8 вместо Тиньки2313
— эксперименты с фотодатчиками
— обкатка режимов работы контроллера
— изготовление ПП и сборка контроллера
— результаты работы и смета
Источник: https://www.drive2.com/b/884181/
Микроконтроллер Attiny2313. Описание
RISC (Reduced Instruction Set Computer). Данная архитектура обладает большим набором инструкций, основное количество которых исполняются в 1 машинный цикл. Из этого следует, что по сравнению с предшествующими микроконтроллерами на базе CISC архитектуры (например, MCS51), у микроконтроллеров на RISC быстродействие в 12 раз быстрее.
Или если взять за базу определенный уровень быстродействия, то для выполнения данного условия микроконтроллерам на базе RISC (Attiny2313) необходима в 12 раз меньше тактовая частота генератора, что приводит к значительному снижению энергопотребления. В связи с этим возникает возможность конструирование различных устройств на Attiny2313, с использованием батарейного питания.
Оперативно – Запоминающее Устройство (ОЗУ) и энергонезависимая память данных и программ:
- 2 кБ самостоятельно программируемой в режиме Flash памяти программы, которая может обеспечить 10 000 повторов записи/стирания.
- 128 Байт записываемой в режиме EEPROM памяти данных, которая может обеспечить 100 000 повторов записи/стирания.
- 128 Байт SRAM памяти (постоянное ОЗУ).
- Имеется возможность использовать функцию по защите данных программного кода и EEPROM.
Свойства периферии:
- Микроконтроллер Attiny2313 снабжен восьми разрядным таймер-счетчиком с отдельно устанавливаемым предделителем с максимальным коэффициентом 256.
- Так же имеется шестнадцати разрядный таймер-счетчик с раздельным предделителем, схемой захвата и сравнения.
Тактироваться таймер – счетчик может как от внешнего источника сигнала, так и от внутреннего.
- Два ШИМ канала. Существует режим работы быстрый ШИМ-модуляции и ШИМ с фазовой коррекцией.
- Внутренний аналоговый компаратор.
- Сторожевой таймер (программируемый) с внутренним генератором.
- Последовательный универсальный интерфейс (USI).
Особые технические показатели Attiny2313:
- Внутрисистемное программирование с использованием SPI порта. SPI (Serial Peripheral Interface) – последовательный высокоскоростной канал обмена информацией ATtiny2313 с периферийными устройствами.
- Улучшенный алгоритм организации сброса в момент включения питания.
- Программируемая модель выявления непродолжительных провалов в питании.
- Встроенный генератор с калибровкой частоты.
- Встроенный отладчик debugWIRE.
Встроенный комплекс системы отладки debugWIRE применяет однопроводный интерфейс двойного направления для контроля над процессом исполнения программы, исполнения определенных команды процессора, а также для осуществления программирования всех типов энергонезависимой памяти микроконтроллера Attiny2313.
- Источники прерывания: внутренние и внешние.
Причины, вызывающие прерывание выполнения основного кода программы с уходом в подпрограмму прерывания приведены в следующей таблице:
- Работа микроконтроллера Attiny2313 в состоянии пониженного потребления энергии:
- Idle – Режим холостого хода. В данном случае прекращает свою работу только центральный процессор. Idle не оказывает влияние на работу SPI, аналоговый компаратор, аналого-цифровой преобразователь, таймер-счетчик, сторожевой таймер и систему прерывания. Фактически, происходит только остановка синхронизация ядра центрального процессора и флэш-памяти. Возврат в нормальный режим работы микроконтроллера Attiny2313 из режима Idle происходит по внешнему либо внутреннему прерыванию.
- Power-down – Наиболее экономный режим, при котором микроконтроллер Attiny2313 фактически отключается от энергопотребления. В этом состоянии происходит остановка тактового генератора, выключается вся периферия. Активным остается лишь модуль обработки прерываний от внешнего источника. При обнаружении прерывания микроконтроллер Attiny2313 выходит из Power-down и возвращается в нормальный режим работы.
- Standby – в этот дежурный режим энергопотребления микроконтроллер переходит по команде SLEE. Это аналогично выключению, с той лишь разницей, что тактовый генератор продолжает свою работу.
Порты ввода – вывода микроконтроллера Attiny2313:
Микроконтроллер наделен 18 выводами ввода – вывода, которые можно запрограммировать исходя из потребностей, возникающих при проектировании конкретного устройства. Выходные буферы данных портов выдерживают относительно высокую нагрузку.
- Port A (PA2 – PA0) – 3 бита. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.
- Port B (PB7 – PB0) – 8 бит. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.
- Port D (PD6 – PD0) – 7 бит. Двунаправленный порт ввода-вывода с программируемыми подтягивающими резисторами.
Диапазон питающего напряжения:
Микроконтроллер успешно работает при напряжении питания от 1,8 до 5,5 вольт. Ток потребления зависит от режима работы контроллера:
Активный режим:
- 20 мкА при тактовой частоте 32 кГц и напряжении питания 1,8 вольт.
- 300 мкА при тактовой частоте 1 МГц и напряжении питания 1,8 вольт.
Режим энергосбережения:
- 0,5 мкА при напряжении питания 1,8 вольт.
Скачать Attiny2313 Datasheet на русском и английском (3,6 Mb, скачано: 4 707)
Источник: http://www.joyta.ru/5791-mikrokontroller-attiny2313-opisanie/
Восстановление микроконтроллеров
Источник: http://elwo.ru/publ/skhemy_na_mikrokontrollerakh/vosstanovlenie_mikrokontrollerov/9-1-0-533
Adblockdetector