Генератор импульсов на pic-контроллере. Многорежимный управляемыйгенератор прямоугольных импульсов (частоты)на микроконтроллере pic12f675 Схема генератора прямоугольных импульсов на контроллере

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

Проект такого генератора я и хочу предложить.

Сначала схема генератора импульсов:

Основу устройства составляет популярный микроконтроллер ATmega8 фирмы Atmel.

Описание схемы. Вся схема питается напряжением 5 В. Микроконтроллер тактируется частотой 8 МГц, которая стабилизирована кварцем Х1. Для генерации импульсов используется таймер/счетчик №1. В виде кнопок на схеме, подключенных к выводам PC3, PC4 и PC5 изображен энкодер. Две крайних кнопки заменяют переключение энкодера при вращении, а кнопка посередине – это кнопка энкодера, замыкающаяся при нажатии на его ось. Прямоугольные импульсы заданной с помощью энкодера частоты амплитудой 5 В снимаются с выхода таймера 1 (OCR1A). Для отображения выходной частоты применяется 16-и символьный однострочный ЖК-дисплей WH1601, подключенный к порту D микроконтроллера. Дисплей тоже распространенный, на драйвере HD44780. Резистором R1 регулируется контраст дисплея. Обмен данными между МК и дисплеем организован с помощью 4-х проводной шины. Разъем J1 для внутрисхемного программирования МК.

Теперь о программе для микроконтроллера.

Программа написана в среде разработки CodeVisionAVR . В данной среде имеются готовые библиотеки для работы с дисплеем, да и настройка МК понятна и проста. Я использовал версию до выхода CodeVisionAVR версии 3.12. Она немного отличается в генерации кода с использованием Wizarda. Но, в основном, все то же самое. Далее все описано на примере работы с CodeVisionAVR версии 3.12. В интернете полно ссылок для изучения данной среды, например: изучение интегрированной среды разработки CodeVisionAVR .

Запускаем CVAVR. Создаем новый проект (New Project ). Программа предложит использовать мастер создания проекта.

Соглашаемся. Затем выбираем семейство контроллера.

Настраиваем порты ввода-вывода. Нужно сделать выходом бит 1 порта B (PB1) – с него снимается генерируемая частота. Порт D пока оставляем как есть. А выводы, с которых будет считываться состояние энкодера (PC3, PC4, PC5) настроить на вход (Data Direction: In ) и включить внутреннюю подтяжку к питанию (Pullup/Output Value – значение P ).

Переходим на вкладку Timers/Counters . Здесь нужно настроить 2 таймера: Timer0 и Timer1 , остальные таймеры оставляем выключенными (Clock Value: Stopped ).

Устанавливаем частоту Timer0 125 кГц. Данный таймер необходим для периодического опроса состояния энкодера. Опрос будет происходить каждый раз, как только таймер досчитает до верхнего значения. Поскольку Timer0 8-и разрядный, то верхнее значение у него 255. А чтобы контроллер прерывал выполнение основной программы для опроса энкодера, нужно включить прерывание по переполнению Timer0 (Overflow Interrupt ).

Настраиваем Timer1 . Нужно выбрать режим (Mode ) CTC (Clear Timer on Compare – Сброс при совпадении). В этом режиме выход таймера будет переключаться в лог. 0 как только содержимое счетного регистра TCNT1 совпадет с регистром OCR1A . За счет изменения значения в регистре OCR1A мы и будет изменять частоту выходных импульсов. В схеме используется выход А таймера 1. Для него нужно выбрать значение Toggle on Compare Match (переключиться в другое состояние при совпадении). В общем, смотрим картинку:

Следующий шаг – подключение дисплея. В CodeVisionAVR достаточно указать к какому порту МК будет подключен дисплей. Выбираем порт D.

Теперь нужно сгенерировать код программы. Нажимаем Program ->Generate, Save and Exit

Теперь нужно зайти в настройки Project -> Configure и проверить, что правильно заданы тип МК и его тактовая частота:

Готовый проект для CVAVR

(316,0 KiB, 670 hits)

Для прошивки МК нужен файл с расширением .hex . В готовом проекте это файл Gen_mega8.hex . Онрасположен в папке Release/Exe/.

Если есть желание написать программу с нуля, то в проекте есть комментарии, какие команды для чего нужны. Или можно просто вставить готовый код из файла gen_mega8.c. И, изменяя его, смотреть как это отражается на готовом устройстве. Для генерации файла прошивки МК нужно нажать кнопку Build the project. Файл с расширением .hex сгенерится в папку Release/Exe/.
Fuse-биты контроллера программируются на работу с внешним кварцевым резонатором 8 МГц в соответствии с рисунком:

Теперь об управлении генератором импульсов.

После подачи питания происходит инициализация дисплея и энкодера (настраиваются выводы, к которым подключен энкодер). Далее по дисплею пробегает полоса (необязательная “фишка”, была сделана для тренировки вывода на дисплей) и высвечивается надпись “Генератор выкл.”. Спустя 2 сек дисплей очищается. Частота на выходе появляется после вращения ручки энкодера, и изменяется на единицы Герц. При нажатии и удержании кнопки энкодера около 0.5 сек на экран выводится сообщение “Отпусти кнопку”. После этого вращением ручки энкодера частота меняется по десяткам Герц. Для изменения частоты на сотни (тысячи) Герц нужно еще раз (2 раза) нажать кнопку энкодера. Затем все снова начинается с единиц Герц.

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

О точности выходной частоты.

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

Недавно приобрел очень удобный и компактный мультиметр, которым можно померить частоту (до 9.999 МГц). Вот его видеообзор . А заказать можно по этой ссылке .

Микроконтроллер можно прошить специальным программатором либо сделать простой программатор самому. Например, я успешно использую программатор USBasp . Об этом программаторе можно почитать по

ССуперпробник может измерять напряжение, частоту, емкость, индуктивность, генерировать различные сигналы и многое другое, и все это на одной микросхеме - PIC16F870, и четырехрязрядном 7-сегментном индикаторе. Вместо индикатора LTC4627 может быть использован любой другой с общими анодами.

Стабилизатор питания выполнен на LM2931 - регуляторе с низким падением напряжения. Это позволяет питать прибор напряжением до 30 вольт с защитой от переполюсовки.

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

Резисторы R5, R1? R2-R10 на входах микроконтроллера в разных режимах тестирования используются по-разному. Неиспользуемые в данный момент резисторы исключаются из схемы путем перевода выводов ПИКа в высокоомное состояние. R5, к примеру, используется для импульсного пробника. R4 используется для зарядки конденсатора при измерении его емкости.

Устройство собрано в корпусе от старого пробника.

Пробник управляется двумя кнопками. Режимы переключаются нажатием кнопки 1 при нажатой кнопке2...

Prob PULS FrEq Cnt VoLt diod CaP CoiL SIG ntSC 9600 Midi r/c Prn ir38 PWM StOP (Отображается на индикаторе).

Описание режимов работы

Prob Логический пробник
Показывает в первой позиции дисплея "H" при напряжении на входе больше 3,7 вольт), "L" - при напряжении ниже 0.8 вольт) "-" при Z-состоянии. Если обнаружены импульсы (минимум 0.5 мкс),во второй позиции мигает символ "P".
PULS Индикатор импульсов
Отображается частота импульсов (5, 50, 500, 5.0) в трех правых позициях. В первой позиции отображается логический уровень в виде черточки внизу или вверху цифры. Если нажать и держать кнопку 1, то генерируется серия 0.5-мкс импульсов обратной полярности, и загорается средний сегмент. Кнопкйо 2 перебираются 4 частоты. Выбранная частота сохраняется в памяти.
FrEq частотомер В режиме частотомера, нажатие кнопки 1 переключает индикацию на следующие 4 цифры измеренной частоты. К примеру, индикатор показывает "12.57" для частоты 12 576 Гц. Если нажать кнопку 1 то индикатор покажет "2576" - последние 4 цифры. Если отображается точка, то значение в КГц, если точка мигает, то в МГц.
Cnt Счетчик импульсов
В режиме счетчика импульсов дисплей отображает 4 младших разряда. Кнопка 1 переключает на отображение 4-х старших разрядов. Кнопка 2 сбрасывает счетчик.
VoLt Вольтметр Режим вольтметра. В данной прошивке отображается примерное значение - примерно на 2% выше. Делителя напряжения и защиты на входе нет, поэтому не подключайте пробник к напряжениям больше 5 В.
diod Индикатор падения напряжения на диоде или транзисторе
Аналогично режиму вольтметра, но с резистором 10k, подающим ток на щуп пробника. Когда диод или один из переходов транзистора подсоединен к щупу и земляному выводу, отображается падение напряжения.
Cap Измеритель емкость
При нажатии кнопки 1 измеряется и отображается емкость конденсатора. Значения от.001 мкФ до 500 мкФ. Чем больше конденсатор, тем дольше измерение. Измерение конденсатора емкостью 100 мкФ занимает пару секунд.
Coil Измеритель индуктивности
П ри нажатии кнопки 1 измеряется и отображается индуктивность. Значения от 0.1 до 999.9 мГн. Замечание: предполагается, что сопротивление катушки постоянному току не превышает нескольких Ом. Если прибор зависает в этом режиме, прикоснитесь щупом к земляному выводу.
SIG Генератор прямоугольного сигнала
В этом режиме при нажатии кнопки 1 генерируются прямоугольные импульсы частотой 500 Гц и амплитудой 0.5 вольт.
ntSC Видео генератор
Генерируется сигнал NTSC с паттерном из белых точек.
9600 Генератор кода Ascii Каждый раз, когда нажата кнопка 1, генерируются символы A-Z , следующие за cr/lf. Автоматический выбор полярности при подключении к сигнальной линии. Кнопкой 2 переключается скорость: 1200, 2400, 4800, 9600 бод.
Midi Генератор MIDI
Посылает ноту 60 (среднее До) на любом из16 midi-канале. Нажатие кнопки 1 посылает "note on". Отпускание кнопки 1 посылает "note off". Кнопкой 2 переключаются каналы. текущий номер канала сохраняется в памяти.
R/C Генератор импульсов для сервомашинок Генерирует 1- 2 мс импульсы для сервомашинок. Кнопка 1 увеличивает ширину импульса, кнопка 2 - уменьшает. При входе в режим по умолчанию генерируются импульсы 1.5 мс.
Генератор прямоугольных импульсов
Генерирует прямоугольные импульсы частотой 1 - 9999 Гц. Кнопка 1 увеличивает частоту, кнопка 2 - уменьшает.
Prn Генератор псевдослучайных чисел
Генерирует последовательности псевдослучайных чисел с частотой 10 кГц.
ir38 Генераторр ИКкоманд Генерирует 1 мс прямоугольные импульсы с 2.5 мс паузой между ними на частоте 38 кГц. Если подсоединить ИК диод, используется для проверки модулей ИК управления.
PWM ШИМ Генерирует сигнал ШИМ от 3 до 97 % на частоте около 6 кГц. Кнопка 1 увеличивает скважность, кнопка 2 - уменьшает.
StOP Таймер Кнопка 1 запускает/останавливает таймер. Изменение состояния щупа тоже запускает/останавливает таймер. Кнопка 2 сбрасывает таймер. Таймер считает 1/100 секуды от 0 до 99 сек, затем считает 1/10 сек от 100 до 999 сек,затем считает целые секунды от 1000 до 9999 секунд (около 2 ч 46 мин).

В любом режиме при удержании двух кнопок вызывается меню. Переключение режимов вперед и назад осуществляется кнопками 1 и 2 соответственно.

Пробник-генератор ТВ сигнала собран на основе микроконтроллере серии pic12f629, и по совокупности габаритов, потребления тока, стоимости изготовления прибора и функционалу для телемастера, просто незаменим. Напряжение питания 3 вольта, т.е. две пальчиковые батарейки. Ток потебления в режиме генерации 11 миллиампер, в режиме сна - всего 3 микроампера.

Принципиальная схема ТВ генератора сигнала

Рисунок печатной платы


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


К статье прилогается архив, в котором есть схема, плата пробника, две прошивки . На видео видно, что у меня на телевизоре картинка слегка не линейна - это потому, что телевизору 12 лет, а может что-то в видеовходе не то. Предлагаемое устройство представляет собой генератор прямоугольных импульсов управляемый через последовательный порт с компьютера. Оно было сделано для решения конкретной задачи буквально за день и возможно содержит ошибки или недоделки, я не могу гарантировать что продавая его вы заработаете кучу денег. Но все основные функции были проверены.
Максимальная частота выдаваемая генератором немного больше 13 кГц, минимальная меньше 0,01 Гц (для частоты кварцевого генератора 4 МГц).

Схема.

width=710>
Рисунок не помещается на странице и поэтому сжат!
Для того, чтобы просмотреть его полностью, щелкните .

Схема достаточно простая. Она собрана на основе микроконтроллера PIC16C63A, сигнал снимается с двух его выводов, их состояние всегда разное. Без нагрузки уровень единицы отличается от напряжения питания меньше чем на 0,1 вольт, уровень нуля тоже очень низкий. Выводы рассчитаны на ток до 30 мА. Микросхема МАХ232 используется для преобразования уровней интерфейса RS232 в уровни TTL. Для питания устройства нужен 5 вольтовый блок питания, на рисунке он не показан.

Программа.

Для установки параметров сигнала выдаваемого микроконтроллером необходимо использовать специальную программу. Программа написана для ОС Windows, ниже приведен вид ее окна.

Элементы управления предназначены для задания частоты выходного сигнала, отношения длин положительного и отрицательного полупериодов. Есть возможность ограничить количество выдаваемых импульсов (1...2 23 -1). Так как программа в микроконтроллере не позволяет выводить любую частоту, после нажатия на кнопку "Send" будет рассчитано ближайшее возможное значение частоты и оно запишется в поле частота вместо введенного с клавиатуры. Поля "Длительность 1" и "Длительность 0" содержат длительности сигнала в условных единицах с которыми работает программа в PICе, это целые числа больше нуля и меньше 2 24 . Предусмотрены настройки для выбора номера последовательного порта и частоты используемого кварцевого резонатора.

Этот проект основан на схеме функционального генератора, описанного на веб-сайте Mondo . Я только сделал очень незначительные изменения и исправил некоторые очевидные опечатки в схеме. Код переписан для синтаксиса Microchip .

Характеристики генератора:
Частотный диапазон: 11 Гц - 60 кГц
Цифровая регулировка частоты с 3 различными шагами
Форма сигнала: синус, треугольный, прямоугольный, пульс, пакетный, sweep, шум
Выходной диапазон напряжения: ± 15В для синуса и треугольника, 0-5В для других
Синхронизация: выход для импульсного сигнала.

Устройство питается от 12-вольтового трансформатора, который обеспечивает достаточно высокое (более 18 В) постоянное напряжение, необходимое для нормальной работы стабилизаторов 78L15 и 79L15. Питание в ±15 В необходимо для того, чтобы ОУ LF353 на выходе давал полный спектр сигналов при 1кОм нагрузки. При использовании питания ±12 В этот резистор должен быть не менее 3 кОм.

Датчик вращения (поворотный энкодер) который я использовал – ALPS SRBM1L0800 в виде двух переключателей в круге на схеме. Автор, вероятно, использовал другой, так что некоторые изменения в коде программы контроллера были необходимы. Мой датчик имеет две группы контактов: ВЫКЛ и ВКЛ (когда ротор перемещается в соответствующем направлении). Таким образом, изменение прерывания PORTB должны быть созданы, если одна из пар контактов коротится. Это достигается за счет подключения обоих групп контактов на контакты PIC16 (RB4 - RB7), которые проверяются программой на изменение состояния. К счастью, RB4 не был использован в оригинальном дизайне, так что я просто перенаправлен RB3 на RB4. Другая модификация вызвана использованием поворотного энкодера, потому я немного изменил прерывания микропрограммы. Я заставил регулятор, сохранять состояние в течении 100 последовательных измерений вместо 10 в оригинальном дизайне. Заметим, что некоторые ножки PIC используются для перенаправления +5 В для упрощения компоновки печатной платы, поэтому они настроены в качестве входов портов.

Печатная плата предусматривает три резисторных сборки. Одна – R/2R – для ЦАП из Bourns 4310R серии. Сборка ЦАП резисторов может быть построена и на дискретных резисторах по схеме выше. Следует использовать резисторы с допуском до ± 1% или лучше. Светодиодные ограничительные резисторы серии Bourns 4306R. Яркость светодиодов может быть увеличена изменением сопротивления ограничительных резисторов до 220 – 330 Ом.

Генератор собран в 179x154x36 мм пластиковом корпусе с алюминиевыми передней и задней панелями. Уровень выходного сигнала регулируется переменным резистором Alfa 1902F серии. Все другие компоненты устанавливаются на передней и задней панелях (кнопки, разъемы, светодиодные сборки, разъем питания). Платы крепятся к корпусу болтами в 6мм с пластиковыми прокладками.

Генератор производит 9 различных форм сигналов и работает в трех режимах, которые выбираются с помощью кнопки "Выбрать (Select)" и их индикация выводится на трех верхних (по схеме) светодиодах. Датчик вращения корректирует параметры сигнала в соответствии со следующей таблицей:


Режим \Форма

Triangle

Режим 1

Режим 2

Режим 3

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

P.S. От себя добавлю: при повторении устройства с авторской печатной платой прибор отказался заводиться (возможно на печатной плате есть ошибка), а при монтаже на макетной плате – генератор начал работать сразу.

Ниже вы можете скачать исходники asm, прошивку и файлы печатных плат ()

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

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Схема генератора.
Микроконтроллер PIC16F870 1 В блокнот
Сдвиговый регистр

CD74HC164

1 В блокнот
Операционный усилитель

LF353

1 В блокнот
Мультиплексор/демультиплексор

CD4053B

1 В блокнот
Линейный регулятор

LM7805

1 В блокнот
Линейный регулятор

LM78L15

1 В блокнот
Линейный регулятор

LM79L15

1 В блокнот
Выпрямительный диод

1N4002

3 В блокнот
Конденсатор 22 пФ 2 В блокнот
Конденсатор 51 пФ 1 В блокнот
Конденсатор 100 пФ 1 В блокнот
Конденсатор 1000 пФ 1 В блокнот
Конденсатор 0.1 мкФ 1 В блокнот
1 мкФ 2 В блокнот
Электролитический конденсатор 4.7 мкФ 1 В блокнот
Электролитический конденсатор 100 мкФ 2 В блокнот
Электролитический конденсатор 500 мкФ 1 В блокнот
Резистор

470 Ом

6 В блокнот
Переменный резистор 1 кОм 1 В блокнот
Резистор

2.7 кОм

1 В блокнот
Резистор

4.7 кОм

1 В блокнот
Резистор

10 кОм

4 В блокнот
Резистор

15 кОм

1 В блокнот
Резистор

22 кОм

1