Мегаобучалка Главная | О нас | Обратная связь


Структура программного обеспечения



2020-03-19 224 Обсуждений (0)
Структура программного обеспечения 0.00 из 5.00 0 оценок




Рисунок 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

 

           

 

 



2020-03-19 224 Обсуждений (0)
Структура программного обеспечения 0.00 из 5.00 0 оценок









Обсуждение в статье: Структура программного обеспечения

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (224)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)