Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программное управление технологическим оборудованием

.pdf
Скачиваний:
1
Добавлен:
29.11.2025
Размер:
11.79 Mб
Скачать

Лабораторная работа 8

Реализация временных функций в микропроцессорных системах управления

Цель работы:

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

Порядок выполнения работы:

Изучить теоретические вопросы, связанные с понятием машинного цикла, с принципом функционирования таймера-счётчика, системой прерываний.

Изучить принципиальную электрическую схему к лабораторной работе.

Разработать программу в соответствии с индивидуальным заданием.

Отладить программу в среде MPLAB IDE.

Загрузить программу в учебный стенд.

Исследовать работу временных функций.

Оформить отчёт по лабораторной работе.

Ответить на контрольные вопросы.

1 Краткие теоретические сведения

1.1 Реализация временных функций

Временные функции в микропроцессорных системах используются в случаях, когда необходимо выполнять какие либо действия периодически, либо производить измерение длительности какого либо события. Наибольшее распространение для реализации временных функций получили метод программных циклов и использование таймера/счётчика. Во всех случаях микроконтроллер оперирует не непосредственно временем, а количеством машинных циклов, выполненных за интересующий интервал времени. Машинный цикл микроконтроллера – это процедура выполнения ядром микроконтроллера одной инструкции за один машинный такт, равный двум периодам тактирующего генератора. Частота внутреннего тактирующего генератора микроконтроллера dsPIC33fj32mc204 (по умолчанию) равна 7.37МГц. Следовательно, машинный цикл длится секунды.

491

1.2 Метод программных циклов

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

Для организации временных задержек библиотека компилятора MPLAB C30 имеет специальную функцию для языка программирования C:

void __delay32(unsigned long cycles);

Недостатком программного способа реализации временной задержки является нерациональное использование ресурсов микроконтроллера: во время формирования задержки МК практически простаивает, так как не может решать никаких задач управления объектом. В то же время аппаратные средства микроконтроллера позволяют реализовать временные задержки на фоне основной программы работы.

1.3 Использование таймера/счётчика

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

Микроконтроллеры семейства dsPIC33 имеют несколько 16-разрядных таймеров. Таймеры имеют обозначение Timer1, Timer2, Timer3 и т.д. С небольшими исключениями, все 16-битные таймеры имеют одинаковую функциональность, и разделены на 3 типа:

1.Таймер типа A (Timer1);

2.Таймер типа B (Timer2, Timer4, Timer6, Timer8);

3.Таймер типа C (Timer3, Timer5, Timer7, Timer9).

Таймеры типа B и C могут быть объединены для формирования 32разрядного таймера.

Каждый из таймеров настраивается следующими регистрами, доступными для чтения и записи:

492

1.TMRx4 – регистр счёта;

2.PRx – регистр периода;

3.TxCON – регистр конфигурации.

Также с каждым таймером ассоциированы следующие биты в регистре управления прерываниями:

1.TxIE – бит разрешения прерывания;

2.TxIF – бит статуса прерывания;

3.TxIP<2:0> – биты установки приоритета прерывания.

2 Электрическая принципиальная схема к лабораторной работе

На рис. 2.1 приведена электрическая принципиальная схема к лабораторной работе.

Рис. 2.1. Электрическая принципиальная схема к лабораторной работе

В схеме два дискретных входа оформлены в виде двух переключателей SA1 и SA2, подключенных к выводам RA2 и RA3 микроконтроллера. Два дискретных выхода оформлены в виде двух светодиодов VD1 и VD2, подключенных к выводам RB15 и RB13 микроконтроллера соответственно.

493

3 Пример выполнения работы

Задача: Разработать программу для учебного стенда, позволяющую мигать светодиодом VD1 с частотой 1Гц.

Метод программных циклов.

Листинг программы для решения задачи:

#include <P33FJ32MC204.h> #define FOSC 7370000 #define FCY (FOSC / 2)

_FOSCSEL(FNOSC_FRC) // настройка работы микроконтроллера // от внутреннего тактового генератора

void main()

 

{

 

TRISBbits.TRISB15 = 0;

// Выход VD1 (RB15)

while (1)

 

{

 

__delay32(FCY);

 

LATBbits.LATB1

 

5 = 1;

 

__delay32(FCY);

 

LATBbits.LATB1

 

5 = 0;

 

}

 

}

 

Использование таймера/счётчика.

Анализ задачи: Таймер/счётчик T1 настроен таким образом, что прерывания генерируются с частотой 1 кГц. В функции прерывания происходит увеличение значения переменной _ms на 1, таким образом, переменная _ms содержит количество миллисекунд, прошедших с момента запуска программы. В основном цикле происходит анализ значения переменной _ms, и в зависимости от этого, происходит управление светодиодом по заданному алгоритму.

Листинг программы для решения задачи:

#include

<P33FJ32MC204.h>

// настройка работы

_FOSCSEL(FNOSC_FRC) микроконтроллера

// от внутреннего тактового генератора

// Инициализация таймера

T1

494

void Init_Timer1()

 

{

 

 

T1CON = 0;

// сброс таймера

IFS0bits.T1IF =

 

0;

 

// сброс флага прерывания таймера

IEC0bits.T1IE =

// разрешение прерывания от

1;

 

таймера

TMR1

 

// обнуление текущего значения

=

0x0000;

таймера

PR1 = 0x0E65;

// задание периода таймера

 

 

= 1; // разрешение работы таймера и его

T1CONbits.TON

запуск

}

int _ms = 0;

// Прерывание таймера T1 по совпадению void __attribute__((interrupt)) _T1Interrupt()

{

_ms++;

 

 

 

 

// Сброс флага прерывания

IFS0bits.T1IF = 0;

таймера

TMR1

= 0;

// Перезапуск таймера

}

void main()

{

Init_Timer1();

TRISBbits.TRISB15 = 0; // Выход VD1 (RB15) while (1)

{

if (_ms < 1000)

{

LATBbits.LATB15 = 0;

}

else if (_ms < 2000)

{

LATBbits.LATB15 = 1;

}

else

{

_ms = 0;

}

}

}

495

4 Варианты индивидуальных заданий к лабораторной работе

Разработать программу для учебного стенда, позволяющую выполнить следующие действия:

1.При включении тумблера SA1 мигать светодиодом VD1 с частотой 1Гц.

2.При включении тумблеров SA1 и SA2 одновременно мигать светодиодами VD1 и VD2 попеременно с частотой 1Гц.

3.При включении тумблера SA1 зажечь светодиод VD1 на 2 секунды.

4.При включении тумблера SA1 управлять светодиодом VD1 по следующему алгоритму: время включения – 2 с, время отключения – 1 с.

5.При любом изменении тумблера SA1 управлять светодиодом VD1 по следующему алгоритму: время включения – 1 с, время отключения – 2 с.

5.Контрольные вопросы

1.Какие существуют способы формирования временных задержек в микроконтроллерных системах?

2.Как формируется временная задержка методом программных циклов?

3.Как формируется временная задержка с использованием таймера/счётчика?

4.Каким образом можно определить длительность импульса?

5.Каким образом можно определить частоту сигнала?

496

Лабораторная работа 9

Исследование устройства динамической индикации

Цель работы:

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

Порядок выполнения работы:

Изучить теоретические вопросы, связанные с устройствами статической и динамической индикации.

Изучить принципиальную электрическую схему к лабораторной работе.

Разработать программу в соответствии с индивидуальным заданием.

Отладить программу в среде MPLAB IDE.

Загрузить программу в учебный стенд.

Исследовать работу устройства динамической индикации.

Оформить отчёт по лабораторной работе.

Ответить на контрольные вопросы.

1 Краткие теоретические сведения

1.1 Устройства цифровой индикации

Для отображения цифровой индикации большое распространение получили светодиодные семисегментные индикаторы (рис. 1.1). Сегменты индикатора расположены в виде восьмёрки и обозначены латинскими буквами алфавита. Засвечивая группы сегментов, можно получить все цифры и некоторые символы.

A

E B

G

E C

H

D

Рис. 1.1. Светодиодный семисегментный индикатор

Конструктивно индикаторы оформляют в виде светодиодных модулей с общим катодом или с общим анодом (рис. 1.2).

497

Рис. 1.2. Электрические принципиальные схемы семисегментных индикаторов с общим анодом (а) и с общим катодом (б)

При построении систем отображения информации различают два подхода: статическая и динамическая индикация.

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

H

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

L

 

 

 

 

HL

 

 

 

HL

 

 

 

HL

1

2

 

 

3

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

R

 

 

 

 

 

R

 

 

 

 

R

 

 

 

 

R

1

 

2

 

 

3

 

 

4

 

Рис. 1.3. Устройство статической индикации

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

498

D

HL1

HL2

HL3

HL4

R1

Рис. 1.4. Устройство динамической индикации

2 Электрическая принципиальная схема к лабораторной работе

На рис.2.1 приведена электрическая принципиальная схема к лабораторной работе.

Рис. 2.1. Электрическая принципиальная схема к лабораторной работе

В качестве символьного светодиодного индикатора LED используется 2 индикатора CA04-41. Индикаторы представляют собой модули по четыре семисегментных светодиодных индикатора с общим анодом.

Для фиксации кода семисегментного символа служит восьмиканальный светодиодный драйвер DD170 MBI5168, представляющий собой сдвиговый регистр вывода, выходные каналы которого выполнены в виде стабилизатора тока для светодиодов. Сигнал тактирования CLK светодиодного драйвера подключен к линии RC4, сигнал данных – к RC3, сигнал защёлки – к линии RB5 порта микроконтроллера.

Для выбора активного индикатора используется дешифратор DD150 HC154. На вход дешифратора подаются сигналы A, B, C, D с линий портов RB6, RB7, RB8, RB9. Непосредственно на индикатор сигнал подаётся через усилитель тока, собранный на транзисторах VT151..VT158.

499

3 Пример выполнения работы

Задача: Разработать программу для учебного стенда, отображающую на LED количество секунд, прошедших после запуска программы.

Анализ задачи: Для хранения символов индикации используется массив _data[8], i-тый элемент которого представляет собой код символа, отображаемого на i-той позиции индикатора LED. Для хранения активного в данный момент времени индикатора используется переменная _ind. Переключение активного индикатора происходит по прерыванию таймера T1, настроенного таким образом, что прерывания генерируются с частотой 1 кГц. Количество секунд, прошедших с момента запуска программы, хранится в переменной seconds. В основном цикле программы происходит непрерывное увеличение значения переменной seconds на 1 с паузой 1 секунда.

Листинг программы:

#include <P33FJ32MC204.h>

#define FOSC 7370000 #define FCY (FOSC / 2)

// объявление кодов сегментов

 

 

 

#define SEG_A

0x08

//

--- SEG_A ---

#define SEG_B

0x01

//

|

|

#define SEG_C

0x20

//

SEG_F SEG_B

#define SEG_D

0x04

//

|

|

#define SEG_E

0x80

//

--- SEG_G ---

#define SEG_F

0x10

//

|

|

#define SEG_G

0x40

//

SEG_E SEG_C

#define SEG_DP

0x02

//

|

|

 

 

//

--- SEG_D --- SEG_DP

// объявление кодов цифр

 

 

 

 

SEG_A + SEG_B + SEG_C + SEG_D + SEG_E +

#define N0

SEG_F

 

 

 

#define N1

SEG_B + SEG_C

 

 

 

#define N2

SEG_A + SEG_B + SEG_G + SEG_E + SEG_D

#define N3

SEG_A + SEG_B + SEG_G + SEG_C + SEG_D

#define N4

SEG_F + SEG_G + SEG_B + SEG_C

#define N5

SEG_A + SEG_F + SEG_G + SEG_C + SEG_D

 

SEG_A + SEG_F + SEG_G + SEG_C + SEG_D +

#define N6

SEG_E

 

 

 

500

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