Структура программного обеспечения
12
Рисунок 4. Структурная схема программного обеспечения Функция Init инициализирует стек под прерывание и массив. Функция Start содержит основной код для работы с микроконтроллером. Здесь настраиваются пины на режим выхода, разрешаются прерывания для таймер-счетчиков и определяется модель подсчета тактов. Функция Wait вызывает сама себя, то есть программа входит в бесконечный цикл. Interraption _ PWM _0 – прерывание 1-го таймер-счетчика. Сравнивает номер значения из массива table_sin и в зависимости от результата или отправляет на функцию L1, или инициализирует массив table_sin заново. Функция L 1 считывает из массива новое значение со сдвигом указателя на 1. При срабатывании прерывания значение записывается во 2й таймер счетчик. Interraption _ PWM _2 – обработчик прерываний 2-го таймер-счетчика. При переполнении значения подает 5 вольт на пин.
Алгоритмы функционирования программного обеспечения В программе есть функция предустановки, которая глобально разрешает все прерывания, в том числе локальные прерывания по таймер счетчикам. На последних построен весь принцип функционирования программы. После глобального завершения прерываний программа уходит в бесконечный цикл. Назовём бесконечный цикл основным. Его основная ждать прерывания счетчиков. При переполнении первого таймера-счетчика, время выполнения которого фиксировано, считывается значение из массива и помешается во второй таймер-счетчик, который, в свою очередь, является генератором ШИМ. Время, за которое записывается 2й таймер счетчик, может принимать значения от 0 до 255. Максимальное значение 255 устанавливается в виду изменения скважности от 0 до 0xFF (255), а это, в свою очередь, позволяет задействовать 255 уровней постоянного напряжения. Используя в определенном порядке значения, можно получить практически любую форму сигнала. Также, значение 255 является максимальным уровнем дискретности, для ШИМ. Во время прерывания 2го таймер счетчика на порт генератора ШИМ подаются попеременно низкоуровневые и высокоуровневые сигналы. За счет того, что значение переполнения 1го таймер счетчика одно и то же, а значение 2го, отвечающего за ШИМ, разное, появляется возможность задать любую функцию. Так как синус – функция периодическая, для полноты картины необходимо получить несколько значений. Изменяя значения 1го таймер счетчика, меняется скважность системы. Проще говоря, увеличивая значение, синусоида будет растягиваться, и наоборот. Таким образом появляется возможность управления периодом синусоиды. Так как ШИМ генерирует дискретные сигналы, а задача курсовой – создать непрерывную функцию, соединим отдельные сигналы. Решить возникшую трудность поможет фильтр низких частот. Существует огромное разнообразие фильтров. Для выполнения курсового проекта подойдёт фильтр с самым простым функционалом. Выбор пал на фильтр низких частот. Он представляет из себя RC цепь. Благодаря периодической перезарядке конденсатора сигнал превращается из дискретной функции в непрерывную. Так же не стоит забывать о проблеме переполнения массива значений для второго таймер счетчика, для этого в программе существует специальная переменная, которая следит за тем на каком значении массива сейчас находиться программа, и при достижении последнего переменная обнуляется. Тем самым программа будет генерировать синусоиду бесконечно.
Рисунок 5. Блок-схема основного алгоритма программы
Рисунок 6. Блок-схема прерывания Т2
Рисунок 7. Блок-схема прерывания Т2.
Структура схемы Структурная схема программного обеспечения приведена на рисунке 8. Рисунок 8. Структурная схема программного обеспечения
Микроконтроллер – на рисунке отмечен цифрой 1. Используется для ШИМ сигнала. RC -цепь – фильтр низких частот. Схема состоит из конденсатора и сопротивления, на рисунке отмечена номером 2. Благодаря периодической перезарядке конденсатора превращает сигнал из дискретного в непрерывный. Осциллограф – обозначен на рисунке цифрой 3. Осциллограф формирует из получаемых данных картинку.
Методика тестирования Проведем несколько испытательных тестов, чтобы продемонстрировать необходимость наличия грамотной фильтрации сигнала. Моделируем схему без RC цепи. Рисунок 9. Внешний вид сборки
Запустим ее и пронаблюдаем за работой: Рисунок 10. Внешний вид окна осциллографа
0.000020 0.000008
Список литературы 1. Модуляция, WIKIPEDIA. 9 сентября 2019 год – https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F 2. Получение синусоидального сигнала при помощи ШИМ. 9 мая 2013 год – http://avr-start.ru/?p=749 3. ШИМ для построения синусоиды на ATmega8. 6 января 2015 года. – http://www.ap-impulse.ru/shag26-ispolzuem-shim-dlya-postroeniya-sinusoidy-na-atmega8/ 4. Таймер - счетчик Т0. Регистры. 14 августа 2013 – https://chipenable.ru/index.php/programming-avr/171-avr-timer-t0-ch1.html Приложение А
.def temp = r16 .def temp1 = r17 .def i0 = r18 .MACRO outi ldi temp1,@1 out @0,temp1 .ENDMACRO
;CSEG-------------------------------------- .CSEG .org 0 rjmp init .org $0006 rjmp Interraption_PWM_2 .org $0026 rjmp Interraption_PWM_0
table_sin: .DB 152,176,198,218,234,245,253,255,253,245,234,218,198,176,152,128,103, 79, 57, 37, 21, 10, 2, 0,2, 10, 21, 37, 57, 79,103,128
Init: outi spl, low(RAMEND) outi sph, high(RAMEND) ldi Zl,low(table_sin<<1) ldi ZH,high(table_sin<<1) Start: outi PORTB,0 outi DDRB,0xff outi TIMSK,(1<<OCIE0)|(1<<OCIE2) outi TCCR0,(0<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS02)|(1<<CS01)|(0<<CS00) outi TCCR2,(0<<WGM01)|(0<<WGM00)|(0<<COM01)|(0<<COM00)|(0<<CS22)|(1<<CS21)|(0<<CS20); outi TCNT0,0 outi TCNT2,0 outi OCR0,0 outi OCR2,255 ldi i0,0 sei Wait: rjmp wait
Interraption_PWM_0: cpi i0,32 brne L1 ldi Zl,low(table_sin<<1) ldi ZH,high(table_sin<<1) ldi i0,0 L1: LPM temp,Z+ out OCR0,temp inc i0
in temp,PORTB ldi temp1,(1<<PINB2) eor temp,temp1 out PORTB,temp reti Interraption_PWM_2: outi PORTB,(1<<PINB2) reti
12
Популярное: Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Почему стероиды повышают давление?: Основных причин три... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (224)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |