Съдържание:

Таймери на Arduino: 8 проекта: 10 стъпки (със снимки)
Таймери на Arduino: 8 проекта: 10 стъпки (със снимки)

Видео: Таймери на Arduino: 8 проекта: 10 стъпки (със снимки)

Видео: Таймери на Arduino: 8 проекта: 10 стъпки (със снимки)
Видео: Котика ударило током, 10 т. Вольт 2024, Юни
Anonim
Таймери на Arduino: 8 проекта
Таймери на Arduino: 8 проекта

Arduino Uno или Nano могат да генерират точни цифрови сигнали на шест специални пина, като използват трите вградени таймера. Те изискват само няколко команди за настройка и не използват цикли на процесора за изпълнение!

Използването на таймерите може да бъде плашещо, ако започнете от пълния лист с данни ATMEGA328, който има 90 страници, посветени на тяхното описание! Няколко вградени Arduino команди вече използват таймерите, например millis (), delay (), tone (), AnalogWrite () и серво библиотеката. Но за да използвате пълната им мощност, ще трябва да ги настроите чрез регистрите. Споделям тук някои макроси и функции, за да направя това по -лесно и по -прозрачно.

След много кратък преглед на таймерите, следвайте 8 готини проекта, които разчитат на генериране на сигнал с таймерите.

Стъпка 1: Необходими компоненти

Задължителни компоненти
Задължителни компоненти

За да направите всички 8 проекта, ще ви трябва:

  • Arduino Uno или съвместим
  • Прототипен щит с мини протоборд
  • 6 кабела за джъмпери
  • 6 къси джъмпера за макет (направете си от 10 -сантиметрова жица за свързване)
  • 2 изводи за крокодил
  • 1 бял 5 мм светодиод
  • резистор 220 ома
  • 10kOhm резистор
  • потенциометър 10 kOhm
  • 2 керамични 1muF кондензатора
  • 1 електролитен 10muF кондензатор
  • 2 диода, 1n4148 или подобни
  • 2 микро серво мотора SG90
  • 1 8Ohm високоговорител
  • 20 м тънка (0,13 мм) емайлирана тел

Стъпка 2: Преглед на таймерите Arduino за генериране на сигнали

Timer0 и timer2 са 8-битови таймери, което означава, че те могат да броят най-много от 0 до 255. Timer1 е 16-битов таймер, така че може да брои до 65535. Всеки таймер има два свързани изходни пина: 6 и 5 за timer0, 9 и 10 за timer1, 11 и 3 за timer2. Таймерът се увеличава при всеки тактов цикъл на Arduino или със скорост, която се намалява с коефициент на предварително мащабиране, който е или 8, 64, 256 или 1024 (32 и 128 също са разрешени за timer2). Таймерите се броят от 0 до „ТОП“и след това отново (бърза ШИМ) или надолу (фазова правилна ШИМ). Така стойността на „TOP“определя честотата. Изходните щифтове могат да задават, нулират или обръщат стойността на регистъра за сравнение на изхода, така че те определят работния цикъл. Само таймер 1 има възможност за независимо задаване на честотата и работните цикли за двата изходни щифта.

Стъпка 3: LED мигане

Image
Image
LED мига
LED мига
LED мига
LED мига

Най-ниската честота, която може да бъде достигната с 8-битовите таймери, е 16MHz/(511*1024) = 30, 6Hz. Така че, за да мига светодиод с 1Hz, се нуждаем от таймер 1, който може да достигне 256 пъти по -малки честоти, 0,12 Hz.

Свържете светодиод с неговия анод (дълъг крак) към pin9 и свържете неговия катод с резистор 220 Ohm към земята. Качете кода. Светодиодът ще мига точно на 1Hz с работен цикъл от 50%. Функцията loop () е празна: таймерът се инициализира при setup () и не се нуждае от допълнително внимание.

Стъпка 4: LED димер

Image
Image
LED димер
LED димер
LED димер
LED димер

Модулацията с широчина на импулса е ефективен начин за регулиране на интензитета на светодиода. С подходящ драйвер, той също е предпочитаният метод за регулиране на скоростта на електродвигателите. Тъй като сигналът е или 100% включен, или 100% изключен, не се губи мощност при последователно съпротивление. По принцип, това е като мигането на светодиода по -бързо, отколкото окото може да проследи. 50 Hz по принцип е достатъчно, но все пак може да изглежда, че леко примигва и когато светодиодът или очите се движат, може да се получи досадна непрекъсната „следа“. Използвайки предварителна скала от 64 с 8-битов таймер, получаваме 16MHz/(64*256) = 977Hz, което отговаря на целта. Избираме timer2, така че timer1 остава на разположение за други функции и не се намесваме във функцията Arduino time (), която използва timer0.

В този пример работният цикъл и следователно интензитетът се регулират от потенциометър. Втори светодиод може да се регулира независимо със същия таймер на щифт 3.

Стъпка 5: Цифро-аналогов конвертор (DAC)

Image
Image
Цифрово-аналогов преобразувател (DAC)
Цифрово-аналогов преобразувател (DAC)
Цифрово-аналогов преобразувател (DAC)
Цифрово-аналогов преобразувател (DAC)

Arduino няма истински аналогов изход. Някои модули приемат аналогово напрежение за регулиране на параметър (контраст на дисплея, праг на откриване и т.н.). Само с един кондензатор и резистор timer1 може да се използва за създаване на аналогово напрежение с резолюция 5mV или по -добра.

Нискочестотният филтър може да „усредни“PWM сигнала до аналогово напрежение. Кондензатор е свързан чрез резистор към PWM щифт. Характеристиките се определят от честотата на ШИМ и стойностите на резистора и кондензатора. Разделителната способност на 8-битовите таймери ще бъде 5V/256 = 20mV, затова избираме Timer1 да получи 10-битова резолюция. RC веригата е нискочестотен филтър от първи ред и ще има известни вълни. Времевата скала на RC веригата трябва да бъде много по-голяма от периода на PWM сигнала, за да се намали пулсацията. Периодът, който получаваме за 10-битова прецизност, е 1024/16MHz = 64mus. Ако използваме 1muF кондензатор и 10kOhm резистор, RC = 10ms. Пикът на върха на върха е най-много 5V*0.5*T/(RC) = 16mV, което се счита за достатъчно тук.

Обърнете внимание, че този ЦАП има много висок изходен импеданс (10 kOhm), така че напрежението ще спадне значително, ако тече ток. За да се избегне това, той може да бъде буфериран с opamp или може да бъде избрана друга комбинация от R и C, например 1kOhm с 10muF.

В примера изходът на DAC се управлява с потенциометър. Втори независим DAC канал може да бъде пуснат с таймер 1 на щифт 10.

Стъпка 6: Метроном

Image
Image
Метроном
Метроном
Метроном
Метроном

Метрономът помага да се следи ритъма при възпроизвеждане на музика. За много кратки импулси изходът на таймера arduino може да се подава директно към високоговорител, което ще произведе ясно чуваеми щраквания. С потенциометър честотата на биене може да се регулира от 40 до 208 удара в минута, в 39 стъпки. Таймер1 е необходим за необходимата точност. Стойността на „TOP“, която определя честотата, се променя във функцията loop () и това изисква внимание! Тук виждате, че режимът WGM се различава от другите примери с фиксирана честота: този режим, с TOP зададен от регистъра OCR1A, има двойно буфериране и предпазва от липсващ TOP и дълъг проблем. Това обаче означава, че можем да използваме само 1 изходен щифт.

Стъпка 7: Звуков спектър

Image
Image
Звуков спектър
Звуков спектър
Звуков спектър
Звуков спектър

Хората могат да чуят над 3 порядъка на звукови честоти, от 20Hz до 20kHz Този пример генерира пълния спектър с потенциометър. Между високоговорителя и Arduino е поставен 10muF кондензатор за блокиране на DC тока. Таймер 1 произвежда квадратна вълна. Режимът на генериране на вълновата форма тук е фазово-правилен ШИМ. В този режим броячът започва да брои назад, когато достигне върха, което води до импулси, чиято средна стойност е фиксирана, дори когато работният цикъл варира. Въпреки това, това също води до период, който е (почти) удвоен, и просто се случва, че с предварително скалиране 8, timer1 обхваща целия звуков спектър, без да се налага да се променя предварителното мащабиране. Също така тук, тъй като стойността на TOP се променя в движение, използването на OCR1A като върх намалява грешките.

Стъпка 8: Серво мотори

Image
Image
Серво мотори
Серво мотори
Серво мотори
Серво мотори

Има мощни серво библиотеки, но ако имате само две серво за управление, можете също да го направите директно с timer1 и по този начин да намалите процесора, използването на паметта и да избегнете прекъсвания. Популярното серво SG90 приема 50Hz сигнал и дължината на импулса кодира позицията. Идеален за таймер 1. Честотата е фиксирана, така че и двата изхода на щифт 9 и щифт 10 могат да се използват за независимо управление на сервомоторите.

Стъпка 9: Удвоител на напрежение и инвертор

Удвоител на напрежение и инвертор
Удвоител на напрежение и инвертор
Удвоител на напрежение и инвертор
Удвоител на напрежение и инвертор
Удвоител на напрежение и инвертор
Удвоител на напрежение и инвертор

Понякога вашият проект изисква напрежение, по -високо от 5V, или отрицателно напрежение. Възможно е да стартирате MOSFET, да стартирате пиезо елемент, да захранвате opamp или да нулирате EEPROM. Ако токът е достатъчно малък, до ~ 5mA, помпата за зареждане може да е най -простото решение: само 2 диода и два кондензатора, свързани към импулсен сигнал от таймер, позволяват да се удвоят arduino 5V до 10V. На практика има 2 диодни капки, така че това ще бъде по -скоро 8,6V на практика за удвоителя, или -3,6V за инвертора.

Честотата на квадратната вълна трябва да е достатъчна, за да изпомпва достатъчно заряд през диодите. 1muF кондензатор се движи с 5muC промяна, когато напрежението се промени между 0 и 5V, така че за 10mA ток, честотата трябва да бъде най -малко 2kHz. На практика по -високата честота е по -добра, тъй като намалява пулсациите. С таймер 2, който брои от 0 до 255 без предварително скалиране, честотата е 62,5 kHz, което работи добре.

Стъпка 10: Безжичен трансфер на енергия

Image
Image
Безжичен трансфер на енергия
Безжичен трансфер на енергия
Безжичен трансфер на енергия
Безжичен трансфер на енергия

Не е необичайно да зареждате интелигентен часовник без кабели, но същото може лесно да бъде част от проект на Arduino. Бобина с високочестотен сигнал може да предава мощност на друга близка бобина чрез индукция, без електрически контакт.

Първо подгответе намотките. Използвах хартиена ролка с диаметър 8,5 см и емайлирана тел с диаметър 0,13 мм, за да направя 2 намотки: първичната с 20 завъртания, вторичната с 50 завъртания. Самоиндукцията на този тип намотка с N намотки и радиус R е ~ 5muH * N^2 * R. Така че за N = 20 и R = 0.0425 дава L = 85muH, което беше потвърдено с компонентния тестер. Ние произвеждаме сигнал с честота 516kHz, което води до импеданс 2pi*f*L = 275Ohm. Това е достатъчно високо, че Arduino не влиза в свръхток.

За да работим намотката най -ефективно, бихме искали да използваме истински източник на променлив ток. Има един трик, който може да бъде направен: двата изхода на таймер могат да се изпълняват в противоположна фаза, чрез обръщане на един от изходите. За да го направим още по-подобен на синусоида, използваме ШИМ с корекция на фазата. По този начин между щифт 9 и 10 напрежението се редува между 0V, щифт 9 +5V, и двете 0V, щифт 10 +5V. Ефектът е показан на снимката от проследяване на обхвата (с 1024 предварително скала, този обхват на играчки няма голяма честотна лента).

Свържете първичната намотка към щифт 9 и 10. Свържете светодиод към вторичната намотка. Когато вторичната намотка се доближи до първичната, светодиодът светва ярко.

Препоръчано: