Принципиальная схема генератора показана на рисунке. Генератор вырабатывает электрические колебания синусоидальной формы частотой от 25 Гц до 25 кГц. Весь диапазон разбит на три поддиапазона: 25…250 Гц; 0,25…2,5 кГц; 2,5…25 кГц. Максимальное напряжение сигнала на выходе прибора — 1,5 В. Коэффициент нелинейных искажений формы сигнала — около 0,3%. Задающий узел генератора выполнен на операционном усилителе DA1, с выхода которого сигнал поступает на вход эмиттерного повторителя на транзисторе VT2. В генераторе мост Вина применяется в цепи обратной связи операционного усилителя. Плечи моста образуют цепь положительной обратной связи, которая состоит из последовательного (С3.2, R9) и параллельного (С3.1, R3) RC-контуров, и цепь отрицательной обратной связи (ООС) — детали VT1, R7, R12. Амплитуду колебаний на выходе усилителя регулируют подстроенным резистором R7. Транзистор VT1, включенный по схеме электрически регулируемого резистора, стабилизирует напряжение на выходе генератора. Это происходит следующим образом. При изменении амплитуды выходного сигнала напряжение с выхода эмиттерного повторителя через цепочку VD1R8 поступает на затвор полевого транзистора VT1 и регулирует сопротивление канала исток-сток транзистора. Изменение сопротивления канала приводит к изменению глубины ООС и, как следствие, к изменению коэффициента усиления усилителя DA1. Например, при увеличении амплитуды сигнала напряжение на затворе возрастет. Транзистор VT1 начнет закрываться, сопротивление его канала увеличится и увеличится коэффициент ООС: напряжение на выходе генератора уменьшится. При уменьшении амплитуды сигнала напряжение на затворе транзистора тоже уменьшится, что приведет к снижению значения ООС и росту амплитуды сигнала. Напряжение на выходе генератора регулируют плавно переменным резистором R14. Максимальное напряжение снимают с цепочки R15R16 («Выход 1:1»), а уменьшенное в 10 раз — с резистора R16 («Выход 1:10»). При подключении к генератору нагрузки необходимо, чтобы ее сопротивление было не менее 1 кОм. Детали генератора, кроме блока переменных конденсаторов, переключателя SA1 и переменного резистора R14, монтируют на печатной плате из фольгированного текстолита. В приборе можно применить транзисторы КП303В (VT1), КТ603А, КТ603В, КТ603Г, КТ608А, КТ608Б, КТ815А — КТ815Г (VT2), диоды Д220, Д223, КД521А -КД521Д, КД522А, КД522Б. Блок переменных конденсаторов может быть от любого радиоприемника, в частности от «Селги». Если минимальное значение емкости переменного конденсатора будет меньше 15 пФ, необходимо установить дополнительные конденсаторы емкостью 10…15 пФ. Их подключают параллельно каждой секции конденсатора С3. Ручка, надеваемая на блок конденсаторов, должна быть из изоляционного материала. Резисторы R3, R9 (МЛТ) составлены из нескольких соединенных последовательно резисторов меньшего номинала. Наладку генератора начинают с того, что конденсатор С3 устанавливают в среднее положение, а переменный резистор R14 — в верхнее по схеме положение. Регулировкой подстроенного резистора R7 добиваются, чтобы напряжение сигнала на выходе генератора (гнездо «Выход 1:1») было примерно 1…1.5 В. Напряжение контролируют с помощью осциллографа, который подключают к гнезду «Выход 1:1». При регулировке напряжения необходимо следить за тем, чтобы нелинейные искажения наблюдаемого на экране осциллографа сигнала были минимальными. При переключении с одного поддиапазона на другой напряжение на выходе генератора должно быть стабильным. После этого приступают к градуировке шкалы генератора. Для этого переключатель SA1 переводят на первый поддиапазон и к гнезду «Выход 1:1» подключают частотомер либо осциллограф. С помощью этих приборов контролируют частоту колебаний. Переменный конденсатор переводят в положение, в котором значение его емкости максимально (желательно, чтобы это было крайнее левое положение). При этом частота генерируемых колебаний должна равняться 25 Гц. Если действительное значение частоты, контролируемой частотомером или осциллографом, не равно 25 Гц, необходимо либо регулировкой переменного конденсатора С3 (в случае, если частота колебаний меньше 25 Гц), либо подборкой резистора R3 (при частоте колебаний больше 25 Гц) добиться, чтобы значение генерируемых колебаний соответствовало заданному. Положение ручки переменного конденсатора, при котором частота равна 25 Гц, отмечают на шкале прибора. Затем уменьшают емкость конденсатора С3 до значения, при котором частота колебаний равна 35 Гц. Эту точку также отмечают на шкале прибора. Снова изменяют емкость конденсатора С3 до значения, при котором частота равна 45 Гц. И отмечают эту точку. И так — до значения частоты 250 Гц. Когда шкала первого поддиапазона будет отградуирована, переключатель SA1 переводят на второй поддиапазон и приступают к градуировке шкалы второго поддиапазона. Для этого указатель конденсатора С3 совмещают с крайней левой отметкой шкалы и подборкой резистора R4 добиваются, чтобы значение частоты в этой точке было равно 250 Гц. Затем совмещают указатель конденсатора с крайней правой отметкой шкалы и подборкой резистора R10 добиваются, чтобы в этой точке частота колебаний равнялась 2,5 кГц. Аналогично подборкой резисторов R5, R11 калибруют шкалу третьего поддиапазона. Питают генератор от стабилизированного источника постоянного напряжения 12…15 В, рассчитанного на ток нагрузки 20…30 мА.
|
НИЗКОУРОВНЕВОЕ ПРОГРАММИРОВАНИЕ ARDUINO(ASSEMBLER): ПРЕРЫВАНИЯ ПО ТАЙМЕРУ
09. 01.2023
ВВЕДЕНИЕ
ЧТО ТАКОЕ ТАЙМЕР?
Таймер(точнее Таймер/Счетчик ) — это часть аппаратного обеспечения, реализованная в микроконтроллере (он также есть в других контроллерах и процессорах). Таймер программируется по специальным реестрам. Например, мы настраиваем предварительный делитель , его режим, генератор сигналов, который будет объяснен более подробно в ближайшее время.
Пока мы работаем с Croduino/Arduino (микроконтроллер Atmel AVR ATmega328), мы снова сконцентрируемся на этой части. ATmega328 имеет три таймера: timer0, timer1 и timer2 . Timer0 и timer2 — 8-битные таймеры, timer1 — 16-битные. Основное различие заключается в разрешении: 8-битное имеет 256 значений, 16-битное — 65536 для большего разрешения, а 16-битное — 65536 для большего разрешения.
Все таймеры зависят от системных часов, на Croduino/Arduino это 16 МГц. Все таймеры в прошивке Arduino (загрузчик) настроены на частоту 1 кГц и разрешены все прерывания.
Представьте, что у вас есть счетчик, который при нажатии кнопки увеличивается на единицу. Таймер/счетчик работает по тому же принципу: считает удары часов. Мы упоминали, что скорость счета составляет 16 миллионов ударов в секунду, примерно 63 нс на удар или операцию. 8-битный таймер будет считать от 0 до 255 и 16-битный от 0-65535. Время, необходимое для сброса счетчика, составляет 256/16 000 000 = 16 мкс и 65 536/16 000 000 = 4 мс для 16-битного реестра. это не очень практичный способ подсвечивать светодиод каждую 1 секунду. Вместо управления скоростью таймера/счетчика мы будем использовать что-то под названием Предварительный делитель . В следующем разделе мы сосредоточимся на реестрах, отвечающих за таймеры, и в одном из них мы определим Prescaler.
Предварительный делитель
Предварительный делитель определяет скорость определенного таймера (таймер0, таймер1 или таймер2) по следующей формуле: prescaler
Согласно спецификации, Prescaler имеет определенные значения 1, 8, 64, 256 i 1024 . Можно видеть, что Prescaler 1 будет увеличивать тактовую частоту на 16 МГц, Prescaler 8 — на 2 МГц, Prescaler 64 — на 250 кГц и т. д. Проще говоря, Prescaler, установленный на 1024, будет после каждых 1024 ударов таймера/счетчика на 16 МГц добавлять 1 к своему счетчику (timer0, таймер1, таймер2). Проще говоря, за то время, пока Джон съест 1024 гамбургера, Боб съест 1,9.0003
Вернемся к таймерам. Первый новый реестр, который мы упомянем в этом руководстве, — это OCR — выходной регистр сравнения , в котором мы сохраним значение сравнения соответствия . Кажется, что это слишком много сразу? Это не так, обо всем вышеперечисленном мы уже упоминали, а теперь им дали официальные названия. Вставьте это в формулу, чтобы мы могли лучше визуализировать это:
Объяснение:
16Mhz — скорость таймера/счетчика Arduino, мы вставляем это как 16.000.000 Гц
brzina.timera — учитывая, что мы хотим мигать светодиодом каждую секунду, подставляем частоту 1Гц
-1 — номер счетчика 0 поэтому подставляем -1 в формулу
Из таблицы видно, что наименьший прескалер, который мы можем использовать, равен 256 для 16-битного таймера 1. Причина? Значение 62499 можно сохранить в 16-битном реестре таймера1.
Для измерения счетчиков с частотой 1 Гц (1 секунда) мы можем использовать прескалер 1024, но гораздо точнее использовать прескалер меньшего размера. Ни в одном из этих случаев мы не можем использовать 8-битные таймеры timer0 и timer2.
Теперь, когда мы выбрали таймер и прескалер, пришло время познакомиться с реестрами, которые нам нужно настроить.
Регистрации
Для получения дополнительной проверки. нет icr)(256-предделитель)
TCCR1C Регистр управления отсчетом таймера — 0B0000000000 (без усилий)
OCR1AH РЕГИСТРАЦИЯ СПОСОБРАЖЕНИЯ — Высокий байт 0XF4
OCR1AL . вычисленное значение соответствия сравнения, 62499. Поскольку мы установили старшего и младшего байта отдельно, мы меняем 62499 с десятичного на шестнадцатеричный, то есть 0xF423. Таким образом, старший байт равен 0xF4, а младший – 0x23.
TIMSK1 Маска прерывания таймера 0B00000010 (Выходное сравнение U включение — OCIE1A)
DDRB
Portb
Мы уже упомянуты DDRB и 31313131313131313 годы.
КОД C
БИБЛИОТЕКА ТАЙМЕРА
ЗАКЛЮЧЕНИЕ
Простой набор таймеров на базе Arduino Uno
— Реклама —
Здесь представлен простой комплект таймера, построенный на плате Arduino Uno. Его можно использовать для измерения времени задержки таких устройств, как реле времени, автоматические выключатели и другие последовательные логические схемы. Этот таймер будет недорогим решением для лабораторных/промышленных нужд. Авторский прототип показан на рис. 1.
Рис. 1: Авторский прототип комплекта таймераСхема и работа
Принципиальная схема комплекта, показанная на рис. 2, содержит несколько компонентов, кроме платы Arduino Uno (Board1). Он имеет внешние входные контакты для запуска и остановки измерения времени. Оба контакта могут быть либо нормально разомкнутыми (N/O), либо нормально замкнутыми (N/C). Переключение пусковых контактов инициирует измерение времени, а стопорных контактов останавливает измерение.
Измеренное время отображается в секундах на LCD1. Возможно измерение в диапазоне от миллисекунд до нескольких минут. Он протестирован с известными значениями, установленными в мини-программируемом логическом контроллере (ПЛК). Кнопка сброса (подключенная через CON3) предназначена для сброса дисплея на ноль и начала нового измерения времени.
— Реклама —
Программное обеспечение (timing_kit.ino) написано на языке программирования Arduino с использованием среды разработки Arduino IDE версии 1.8.5. Скетч/программа использует функции прерывания и millis ( ) Arduino.
Конструирование и испытания
Соберите схему на макетной плате или печатной плате. Макет печатной платы комплекта таймера в реальном размере показан на рис. 3, а расположение его компонентов — на рис. 4. Соедините плату Arduino Uno и LCD1, как показано на принципиальной схеме. Убедитесь, что вы сначала загрузили исходный код (timing_kit.ino) на плату Arduino Uno через USB-кабель, подключенный к ноутбуку/рабочему столу.
Подсоедините пусковые контакты к CON1, стоповые контакты к CON2 и кнопку сброса к CON3. Включите плату Arduino Uno через USB/адаптер питания. Отрегулируйте контраст LCD1 с помощью потенциометра VR1, чтобы получить четкое изображение.
Рис. 3: Схема печатной платы для комплекта таймераРис. 4: Принципиальная схема комплекта таймераЗагрузить PDF-файлы с компоновкой печатных плат и компонентов:
щелкните здесьЗагрузить
Исходный кодПеред измерением времени нажмите кнопку сброса. Вы получите сообщение «Набор для проверки времени» в первой строке и «Время (с): 0,000» во второй строке ЖК-дисплея 1. Схема в основном представляет собой счетчик/таймер.
Теперь замкните пусковые контакты, чтобы начать счет. Подсчитанное показание будет отображаться на LCD1. В зависимости от ваших требований, вы можете остановить счет в любое время, замкнув стоп-контакты после задержки. Время подсчета отображается в секундах с левой стороны и в долях секунд (в миллисекундах) с правой стороны ЖК-дисплея 1, что является промежутком времени между запуском и остановкой набора для проверки времени.
После сборки схемы поместите ее в подходящую коробку с дисплеем LCD1 и кнопкой сброса на передней панели. Разъемы пуска и останова могут быть предусмотрены на задней стороне панели для ручного управления или подключения ПЛК. Теперь набор готов к использованию для измерения времени работы реле времени, автоматических выключателей и подобных устройств.
Примечание.