Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovoy_Boyko_100416.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
245.52 Кб
Скачать
  1. Разработка измерителя частоты сигналов на микроконтроллере pic16f628

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

Сегменты можно питать и напрямую от контроллера, но при этом яркость их действительно будет заметно занижена, к тому же, может возникнуть просадка напряжения, из-за которой станут нестабильно работать модуль компаратора и тактовый генератор. Чтобы избежать этого, лучше включать сегменты через npn или pnp транзистор, в зависимости от того, какую логику планируется использовать, положительную или отрицательную.

Так как ток от ножки контроллера будет течь через базу на землю, требуется защитить микроконтроллер добавлением резисторов, номиналом в несколько КОм. Так как биполярный транзистор открывается напряжением, стоит взять запас, поэтому применён будет резистор номиналом 4 КОм-а.

Но в защите от замыкания нуждается не только контроллер, но и сам индикатор. Так как он всё ещё остаётся светодиодным и достаточно примитивным, то, как и любой светодиод, его сегменты могут быть повреждены большим током. Для ограничения этого тока установим резисторы возле каждой из ножек-анодов. Обычно применяются резисторы номиналом порядка 100 Ом, но так как было решено брать номиналы с запасом, будут установлены варианты с номиналом 400 Ом, это так же не изменит яркость, но обеспечит лишнюю защиту.

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

Для надёжности и уменьшения помех будут установлены два конденсатора на землю.

Электрическая схема устройства приведена в Приложении 1.

  1. Разработка программы измерителя частоты сигналов на микроконтроллере pic16f628

При написании программы всегда первым делом проводится инициализация. Она позволяет подготовить микроконтроллер к работе, запустить необходимые функции и описать, за что будут отвечать ножки. Это общие правила. При разработке программ в среде AVR studio многие вещи выполняются в автоматическом режиме. С контроллерами компании Microchip дело обстоит сложнее, среда программирования для PIC не предусматривает автоматическое именование служебных регистров, поэтому его необходимо провести самостоятельно.

Это делается с помощью директивы EQU, пример: d16 EQU H'36' – ячейке 36 присвоить имя D16. Буква H в данном случае говорит о том, что число записано в шестнадцатеричной системе счисления. Таким образом нужно дать имена всем основным специальным регистрам.

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

Кроме того, обязательно применение директивы #include, она указывает на информационный файл конкретного микроконтроллера, в котором описана структура его памяти, система команд и другие элементы.

В программе реализована функция временной задержки. Она исполняется за счёт занесения в два регистра определённых чисел и в применении специально обставленного цикла.

DELAY1

movlw D'125'

movwf timer1

movlw D'7'

movwf timer2

LOOP1

decfsz timer1, f

goto loop1

decfsz timer2, f

goto loop1

return

В приведённом участке кода DELAY1 и LOOP1 – метки, предназначенные для удобного перемещения по программе и осуществлении условных переходов.

В два регистра, timer1 и timer2, записываются значения, буква D говорит о том, что используется десятичная система счисления. В следующей части применяется команда decfsz, которая декрементирует число в регистре и пропускает следующую команду, если оно достигло нуля. Таким образом, цикл выполняет чётко определённое количество раз, пересчётом тактов и определяется величина задержки.

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

dsp1

movfw dgt100

addlw H'20'

movwf FSR

movfw INDF

movwf PORTB

movfw dgt100

addlw H'30'

movwf FSR

movfw INDF

movwf PORTA

return

dsp2

movfw dgt10

addlw H'20'

movwf FSR

movfw INDF

movwf PORTB

movfw dgt10

addlw H'30'

movwf FSR

movfw INDF

movwf PORTA

return

dsp3

movfw dgt1

addlw H'20'

movwf FSR

movfw INDF

movwf PORTB

movfw dgt1

addlw H'30'

movwf FSR

movfw INDF

movwf PORTA

return

Здесь, путём взаимодействия с буферными регистрами W и F, проходит следующий процесс:

  • в буфер заранее заносится число;

  • в цикле из него вычитаются сотни, десятки или единицы, каждый раз инкрементируется счётчик;

  • в тот момент, когда исходное число станет меньше или равно нулю, происходит переход к следующему циклу.

В итоге из одного числа выводятся три. Их уже можно выводить на индикатор.

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

Полный текст программы приведён в Приложении 2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]