Таймер для точечной сварки на attiny13 своими руками схема

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Потребовалось регулировать температуру маленького 12-ти вольтового паяльника Baku 938 мощностью 8 Вт , но в интернете попадались схемы ШИМ на дискретных элементах, например, схемы на таймере 555, к561ла7, к561лн2, на мультивибраторе из транзисторов.

ШИМ или PWM — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте.

Собрав несколько из них, ни одна меня не устроила, у них был слишком крутой спад\подъем сопротивления при вращении ручки переменного резистора - от 2 кОм сразу подскакивало к 7 кОм, и следовательно, при этом, к примеру, подключенный для теста на исток полевого транзистора, компьютерный вентилятор со скорости 20 процентов сразу поднимал обороты до 90-100 процентов. В общем, чтобы пользоваться схемой, пришлось бы вращать потенциометр с прецизионной точностью и\или с замером сопротивления при вращении.

Сначала я отнесся к ней скептически, но зря, потому что схема минимальна по обвязке, по сравнению с дискретными схемами найденными ранее. Микросхема маленькая и дешевая, изготавливается в корпусах SOIC,DIP, QFN, MLF, ножек всего 8, как и у таймера NE\LM555.

ШИМ на ней получается точным и легко регулируется.

Смотрите также статьи по теме:


Наглядная схема (принципиальную схему смотрите по ссылке выше на сайте-источнике).

Описание чипа Atmel (Microchip) ATTiny13A

ATTiny13A - это 8 битный AVR микроконтроллер с программируемой Flash памятью внутрисистемно, размером 1 КБ.


Распиновка (pinout) микроконтроллера ATTiny13A

В чем отличие ATTiny13 от ATTiny13A ?

Tiny13A - это более новый и улучшенный микроконтроллер от Atmel.

Ранее выпускались два варианта Тини13 - с обычным (ATTiny13, работает от 2.7 вольт) и пониженным (ATTiny13V, работает от 1.8 вольт) питанием.

При этом первый вариант работает на частоте до 20 Мгц, второй - до 10Мгц.

С выходом Тини13А убрали разделение мк по питанию, Тини13А работает и от 1.8 вольт (в этом режиме, при пониженном низковольтном питании его невозможно заставить работать на высокой частоте).

Примечание по сборке схемы

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

Светодиоды лучше брать с тусклым свечением, разные яркие цвета могут раздражать, особенно ярко светится синий светодиод. Яркость можно снизить применив в цепи питания светодиодов резисторы, например, до 2 кОм.

Можно обойтись и без светодиодов (следовательно и еще без трёх резисторов), они просто нужны для индикации и отображения режима работы.

Также можно обойтись и без линейного стабилизатора напряжения LM7805 (КРЕН5), если схема питается напряжением в 5 вольт, и регулируемая нагрузка работает от такого же напряжения, а не от 12 вольт.

Для стабильности напряжения можно добавить керамические конденсаторы (на наглядной схеме выделены квадратом салатового цвета) - 0,33 микроФарад (334) на вход 7805, и 0,1 микрофарад (104) на выходе 7805.

Используемая нагружаемая мощность будет ограничена полевым (MOSFET) транзистором.

Прошивка

Почитав комментарии на оригинальной странице, увидел несколько комментариев об ошибке - надо вначале держать кнопку 30 секунд, чтобы ШИМ запустился, что конечно же ну очень долго.

Пришлось его скачать и открыть исходник в нем. Исправив ошибку с ожиданием в 30 секунд - решил проверить и залить прошивку. Но прошивка не захотела литься, подумав что это ошибка компилятора BascomAVR, было решено написать свой код для ATTiny13 на Си в Atmel Studio 7, конечно с сохранением оригинальной схемотехники, чтобы было можно только лишь залить прошивку и ничего не переделывать на печатке.

Написал тестовый код в Atmel Studio, скомпилировал прошивку, заливаю в attiny13 – опять ошибка:

mismatch 0x000000

C:\Program Files\eXtreme Burner – AVR\Data\chips.xml

Найти ATTiny13 и между тегами 64 Вместо 64 написать 32 – после этого ATTiny13 начал шиться без проблем.

Спустя несколько дней программа была написана.

Индикация включения - при включении очень быстро и с реверсом перельются все три светодиода.

Переключение режимов осуществляется нажатием на кнопку, действует циклически.

При возникновении дополнительных вопросов по работе с кодами для микроконтроллеров , вам может помочь статья:

Пояснения по работе устройства с новой прошивкой

Режимы работы:
0 - Все светодиоды выключены, Значение ШИМ - 0 (0%)
1 - Моргает светодиод 1, ШИМ - 32 (12%)
2 - Моргает светодиод 2, ШИМ - 64 (25%)
3 - Моргает светодиод 3, ШИМ - 96 (37.6%)
4 - Все светодиоды переливаются, ШИМ - 128 (50%)
5 - Горит светодиод 1, ШИМ - 160 (62.7%)
6 - Горит светодиод 2, ШИМ - 192 (75.2%)
7 - Горит светодиод 3, ШИМ - 224 (87.8%)
8 - Все светодиоды моргают, ШИМ - 255 (100%)

ШИМ - 0 (0%) - питание на "регулируемом устройстве" отсутствует, например, паяльник не греется.

ШИМ - 255 (100%) - полная мощность работы "регулируемого устройства".

Для включения автосохранения значения ШИМ необходимо удержать кнопку в течении 3-х секунд, для отключения - осуществить тоже самое.

При этом при включении автосохранения на 1,5 секунды загорится светодиод 1.
При отключении - на 1,5 секунды загорится светодиод 3.Удерживать кнопку можно в любом режиме, но лучше это делать в режиме 0- так будет нагляднее.

Не стоит забывать, что при включенном автосохранении каждый раз, при нажатии на кнопку записываются данные в EEPROM, ресурс записи EEPROM в Atmel AVR - 100 000.

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

  1. Для заливки прошивки в ATTiny потребуется: USB ASP Программатор микроконтроллеров ATmega AVR.
  2. Программа eXtreme Burner AVR.

Необходимо поставить фьюз на работу от внутреннего тактового генератора на 9,6 Мгц

Т.к. я пользуюсь eXtreme Burner AVR то во вкладке Fuse\Bits записываю такие байты вместо выставления галок(в других программах-прошивальщиках галки):

Младший байт(Low Byte\Fuse) – 7A

Старший байт (High Byte\Fuse) – EB

Для того, чтобы знать какие галки ставить в других программах, чтобы микроконтроллер работал на частоте 9.6Мгц , можно использовать данный сайт:

Слева вверху, где написано Байты конфигурации вводим – 7A в окошечко LOW

и EB в окошечко HIGH – получаем указание на то, где следует поставить галки.

Собранное в корпус устройство ШИМ с вынесенной кнопкой:

(Принципиальная схема и печатная плата имеется на приведенном выше сайте.)


Плата ШИМ, упакованная в корпус от другого устройства и подключенный к ней паяльник.

Файлы прошивки в формате HEX:

Оригинальная, скомпилированная из приведенных ниже исходников:

Прошивка с более высокой частотой (Не тестировалась на реальной схеме!):

Прошивка по просьбе одного из пользователей нашего сайта, частота ШИМ - около 2,3 килоГерц:

В данной прошивке всего три режима

1 - ШИМ 80%, светится светодиод 1

2 - ШИМ 90%, светится светодиод 1,2

3 - ШИМ 100%(Постоянное питание), светится светодиод 1, 2 и 3

Исходник с подробными комментариями также прилагается, можно изменить под свои нужды:

Средний рейтинг / 5. Количество оценок:

Мы сожалеем, что эта публикация Вас не устроила.

Напишите, пожалуйста, что Вам конкретно не понравилось, как можно улучшить статью?(оценка будет засчитана только при наличии отзыва)


Всем добрый день, в прошлом году поставил себе подогрев руля в машину. Штука хорошая, но не устраивает меня алгоритм работы.
Управление собрано на attiny13, но исходников нет. Поэтому хочется написать
прошивку самому. Опыт программирования МК имеется, но очень не большой, писать буду на bascom avr.
Прошу помощи в составлении алгоритма.
В attiny13 один таймер, который я хочу использовать для аппаратного ШИМ управления подогревом, а если таймер занят под шим, как тогда обрабатывать нажатия кнопок( только по прерыванию ?), как отсчитывать время работы подогрева?
Собственно хочется, чтоб работало так :
При подаче питания шима нет, при нажатии на кнопку включается шим с заполнением 90%, через несколько минут заполнение уменьшается до 50%, и потом через некоторое время шим выключается.
Люди опытные, знакомые с AVR, накидайте пожалуйста примерный алгоритм программы, потому как я на это убью не одну неделю)
А код по алгоритму я уже сам напишу как нибудь.

Комментарии 66


И не вздумай дрыгать тинькой затвор полевика напрямую, получишь каку.



Начал бы с того, что баском обратно на пыльную полку.

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


Я не понимаю, зачем заморачиваться таймером и шим? Для подогрева программная реализация за глаза. Тут не нужна точность или стабильность частоты. Да и время величина относительная. Никаких внешних кварцев и лишних обвязок.


Так счас куда ни попадя то атмегу то аттини то ардуину втыкают.


Таймер времени очень удобно делать на ватчдоге, точность особая не нужна. При срабатывании ватчдога не ресет, а вход в прерывание.
Рекомендую так же сменить контроллер, что бы использовать внешний кварц (внутренний генератор в холода может плавать, а может вообще не запуститься) по входу 12 вольт на стабилизатор рекомендую добавить диод и RC цепочку. резистора на 5 — 10 Ом хватит, конденсатор микрофарад на 10 и керамику 0.1
АВР Студио как то так выглялит:
code/


Кварц для данного применения не нужен, поскольку задача высокой точности поддержания тактовой частоты не требует.
Делал поделки для автомобиля, в -25 Тини13 и Тини25 работали без проблем. С диодом и RC цепью перед 7805 согласен.


Делай на таймере 0 переполнение с периодом 1 мс. В обработке переполнения делай инкремент программного ШИМа на переменной и проверку на достижение нужного уровня. Так же можно там же сделать обработку дребезга кнопок.


А смысл делать такую штуку без обратной связи?


Ну вообще легко. время считаеш таймером. шим и кнопки в цикле по кругу. не использовать задержки вообще — проще понизить частоту проца. в качестве антидребезга, длительности нажатий и шима переменные которые в таймере ++.


Включаем аппаратный шим и прерывание таймера, проблем нет никаких.




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


У 13йтиньки можно использовать wdt как таймер. Wdt настраиваешь на нужное время без ресета и им отсчитываешь время включения устройства и время удержания кнопки.


Сделайте чисто программный ШИМ и проблемы с отслеживанием интервалов времени не будет. Для нагревателей высокая частота и точность ШИМ не нужна, поэтому вполне обойдетесь без аппаратного ШИМ.
По алгоритму: Вы же его в тексте уже описали. А перевести его в конкретный код можно несколькими путями.
Запустите таймер в режиме прерывания по переполнению и внутри обработчика прерывания наращивайте 2 переменные-таймера: для времени и для ШИМ. А в основном цикле уже отслеживайте значения переменных. Для отслеживания нажатия кнопки можно и прерывание использовать, но в данном случае проще постоянный опрос состояния. Заодно и программное подавление дребезга контактов организуете. И не рекомендую использовать функции задержки типа delay(), без них вполне можно обойтись и занять процессор чем-то более полезным.
По схеме: IRFZ44 в данном применении явно избыточен по току и габаритам корпуса ТО220. В данном случае целесообразнее использовать MOSFET в корпусе soic8 (выбор достаточно широкий). При частоте ШИМ в сотню Гц греться не будет, проверено.


Я раньше по началу вообще сам делал шим не используя таймер( не было времени разбираться)
Тем более, что заполнение нужно два три положения. например 20% 50 % 80%
Это организовать вообще просто.


Сделайте чисто программный ШИМ и проблемы с отслеживанием интервалов времени не будет. Для нагревателей высокая частота и точность ШИМ не нужна, поэтому вполне обойдетесь без аппаратного ШИМ.
По алгоритму: Вы же его в тексте уже описали. А перевести его в конкретный код можно несколькими путями.
Запустите таймер в режиме прерывания по переполнению и внутри обработчика прерывания наращивайте 2 переменные-таймера: для времени и для ШИМ. А в основном цикле уже отслеживайте значения переменных. Для отслеживания нажатия кнопки можно и прерывание использовать, но в данном случае проще постоянный опрос состояния. Заодно и программное подавление дребезга контактов организуете. И не рекомендую использовать функции задержки типа delay(), без них вполне можно обойтись и занять процессор чем-то более полезным.
По схеме: IRFZ44 в данном применении явно избыточен по току и габаритам корпуса ТО220. В данном случае целесообразнее использовать MOSFET в корпусе soic8 (выбор достаточно широкий). При частоте ШИМ в сотню Гц греться не будет, проверено.

Я бы сказал irfz44 сопротивление многовато, нужно смотреть на мосфеты из автоиндустрии, а вообще у человека irlz44, но 22мОм, считаю много, лучше искать транзисторв 2-5мОм


neid52, при токе в 10А рассеяние на 22мОм составит 2,2 мВт — мизер. На частотах переключения в десятки килогерц рассеяние будет выше, но для частот в десятки герц, полагаю увеличение рассеяния будет вообще незаметным. Или я чего-то не понимаю?


На практике греется, я теорию знаю, вот дела себе как месяц назад управление для обогрева заднего стекла, частота 20Hz. Вообщем это дело каждого))


Подаче питания мерим температуру и от неё выбираем одно из 3 режимов шим, чем холоднее тем больше заполнение. Всё отключается через 10 минут само


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


запитать нагрев через термистор PTC по средствам реле с самоподхватом, при нагреве сопротивление возрастет, самоподхват разомкнется
или применить 96116223


Тоже неплохое решение.


Могу просто написать прошивку для нагревателя. Бесплатно


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

Это небольшое устройство разработано, прежде всего, для диабетиков, но для него можно найти гораздо более широкий спектр применений. Его задача — сигнализировать о прохождении заданного отрезка времени, измеряемого с момента нажатия кнопки.

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

miniatyurnyj-tajmer-napominatel-na-mikrokontrollere-attiny13a-min

Устройство используется для измерения одного из четырех возможных периодов времени: 15 минут, 30 минут, 1 час или 2 часа. Отсчет времени сигнализируется быстрым миганием светодиодов, а конец отсчета миганием и звуком. Для питания предусмотрена одна батарея типа CR2032, поэтому напоминатель очень легкий и миниатюрный.

Конструкция

Принципиальная схема предлагаемого решения показана на рисунке ниже.

Использование микроконтроллера ATtiny13A компании ATMEL позволило значительно упростить конструкцию устройства. Этот тип микроконтроллера идеально подходит для использования в данном случае. Он имеет небольшой корпус SO8, возможность использования напряжения от 1,8В и различные режимы снижения энергопотребления. Кроме того, это один из самых популярных и дешевых микроконтроллеров этого класса, который доступен практически в любом магазине электроники.

Для питания используется литиевая батарея типа CR2032, обеспечивающая напряжение 3В, что вполне достаточно для питания компонентов устройства.

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

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

Звуковое оповещение об истечении заданного промежутка времени производится с помощью пьезоэлектрического излучателя со встроенным генератором. Он достаточно громкий и его можно услышать даже тогда, когда устройство спрятано, например, в кармане. Управление звуковым излучателем осуществляется с помощью транзистора VТ2 (BC847).

Запуск обратного отсчета и остановка осуществляется одним нажатием кнопки SW1, контакт которого предварительно подтянут резистором R6 (10кОм) к плюсу питания.

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

Выбор временного интервала производится путем переключения одной из четырех секций переключателя SW2, типа DIP-SWITCH. Замкнутая секция подключает на минус питания один из четырех резисторов (R7 до R10), образуя с резистором R11 делитель напряжения.

Микроконтроллер, подавая высокий логический уровень на резистор R11, измеряет с помощью АЦП (аналого-цифрового преобразователя) напряжение, которое образуется на делителе.

Таким образом, для задания времени используются всего лишь два вывода микроконтроллера. Помимо этого, данный контур можно отключить, изменив уровень вывода PB1 на низкий, что значительно сократит потребление питания.

Сборка и ввод в эксплуатацию

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

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

Эксплуатация

Находясь в спящем режиме, схема не проявляет никаких признаков работы. После однократного нажатия кнопки SW1 считывается информации с делителя и начинается отсчет времени, о чем свидетельствует однократное мигание светодиодов. С этого момента они будут мигать каждые 1 секунду до окончания обратного отсчета. Если все переключатели SW2 находятся в положении OFF, светодиоды не будут мигать, а устройство перейдет в спящий режим.

По истечении установленного времени светодиоды начинают мигать интенсивно, а звуковой излучатель издает короткие звуки. Остановка производиться кратким нажатием SW1.

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

Потребляемый ток в состоянии покоя составляет около 0,5 мА, поэтому теоретически батареи номинальной емкостью 200 мАч должно хватить на 45 лет в режиме ожидания. На практике же можно рассчитывать на время сопоставимое со сроком годности батареи. Во время обратного отсчета среднее потребление тока составляет около 8 мА, а в состоянии оповещения повышается до 15 мА.


В примере кода используется таймер в режиме Fast PWM (WGM02: 0 = 3, см. раздел 11.7.3 руководства). В этом режиме, устанавливая биты COM0A1:0 в единицу, блок сравнения позволяет генерировать сигналы ШИМ на выводе AC0A (PB0) с рабочим разрешением 0..255.

Представленный пример может работать на нескольких частотах: 4,687 кГц, 585 Гц, 73 Гц, 18 Гц, 4 Гц (@ 1,2 МГц). Если вам нужны более высокие частоты ШИМ, установите биты предохранителя для запуска ATtiny13 с источником тактовой частоты 9,6 МГц. Код примера находится на Github, щелкните здесь.

ШИМ на Attiny13 - осциллограмма

Требуемые детали

Принципиальная электрическая схемаПринципиальная электрическая схема ШИМ на Attiny13

Этот код написан на C и может быть скомпилирован с помощью avr-gcc. Вся информация о том, как скомпилировать этот проект AVR, находится здесь.

Читайте также: