Программное управление технологическим оборудованием
.pdfОкончание таблицы 1.2
|
|
|
|
|
|
Бит запуска |
|
|
|
|
|
|
|
|
|||
1 |
|
SAMP |
|
|
выборки |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
SAMP = 1: Запуск выборки в промежуточные |
|
|
|||||||||
|
|
|
|
|
|
усилители |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
SAMP = 0: Выборка |
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
остановлена |
|
|
|
|
|
|
|
|
|||
0 |
|
DONE |
|
|
Бит статуса преобразования |
|
|
|
|
|
|||||||
|
|
|
|
|
|
DONE = 1: Преобразование завершено |
|
|
|
||||||||
|
|
|
|
|
|
DONE = 0: Преобразование не запущено либо не |
|
|
|||||||||
|
|
|
|
|
|
завершено |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.3 |
||
|
|
|
|
|
|
Биты регистра AD1CON2 |
|
|
|
|
|
||||||
Обозначени |
|
|
VCFG<2: |
|
|
|
|
|
|
CSCN |
CHPS<1: |
|
|||||
е |
|
|
|
0> |
|
|
|
- |
|
- |
|
A |
|
0> |
|
||
Номер бита |
|
15 |
|
14 |
|
13 |
|
12 |
|
11 |
|
10 |
9 |
8 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначени |
|
BUF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
е |
|
|
S |
|
- |
|
|
|
SMPI<3:0> |
|
|
BUFM |
ALTS |
|
|||
Номер бита |
|
7 |
|
6 |
|
5 |
|
4 |
|
3 |
|
2 |
1 |
0 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.4 |
||
|
|
|
Назначение некоторых битов регистра AD1CON2 |
|
|
|
|||||||||||
Номер |
Обозначени |
|
|
|
|
|
|
|
|
Описани |
|
|
|
||||
|
|
|
е |
|
|
|
|
|
|
|
|
е |
|
|
|
|
|
бита |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15-13 |
VCFG<2:0> |
|
|
Выбор источника опорного напряжения |
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
VREF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
H |
VREFL |
|
|
|
||
|
|
|
|
|
|
VCFG<2:0> = |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
000 |
|
|
|
|
AVDD |
|
AVSS |
|
|
|
||
|
|
|
|
|
|
VCFG<2:0> = |
|
VREF |
|
|
|
|
|
||||
|
|
|
|
|
011 |
|
|
|
|
+ |
|
VREF- |
|
|
|
||
|
|
|
|
|
|
Выбор каналов |
|
|
|
|
|
|
|
|
|||
9-8 |
CHPS<1:0> |
|
|
преобразования |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
CHPS<1:0> = 1x: Преобразование сигналов CH0, CH1, |
|
||||||||||
|
|
|
|
|
|
CH2, CH3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHPS<1:0> = 01: Преобразование сигналов |
|
|
|||||||||
|
|
|
|
|
|
CH0, CH1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CHPS<1:0> = 00: Преобразование сигнала |
|
|
|||||||||
|
|
|
|
|
|
CH0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
531 |
|
Таблица 1.5
Биты регистра AD1CON3
Обозначени |
|
ADR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
е |
|
C |
- |
|
- |
|
|
|
|
|
|
SAMC<4:0> |
|
|
|
||||||||
Номер бита |
|
15 |
|
14 |
|
13 |
|
|
12 |
|
|
11 |
|
|
10 |
|
|
9 |
|
8 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначени |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
е |
|
|
|
|
|
|
|
|
|
ADCS<7:0> |
|
|
|
|
|
|
|
|
|
||||
Номер бита |
|
7 |
|
6 |
|
5 |
|
|
4 |
|
|
3 |
|
|
2 |
|
|
1 |
|
0 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.6 |
|||
|
|
|
Назначение некоторых битов регистра AD1CON3 |
|
|
|
|
||||||||||||||||
Номер |
Обозначени |
|
|
|
|
|
|
|
|
|
Описани |
|
|
|
|
||||||||
|
|
|
е |
|
|
|
|
|
|
|
|
|
е |
|
|
|
|
|
|
|
|
|
|
бита |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выбор источника тактирования |
|
|
|
|
|||||||||||||
15 |
|
ADRC |
|
преобразования |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
ADRC = 0: Внутренняя RC- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
цепочка |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADRC = 1: Системная тактовая частота |
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.7 |
|||
|
|
|
|
|
|
Биты регистра AD1CHS123 |
|
|
|
|
|
|
|
|
|
||||||||
Обозначени |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CH123NB<1:0 |
CHS123 |
|
||||||
е |
|
- |
|
- |
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
> |
|
B |
|
||
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
бита |
|
15 |
|
14 |
|
13 |
|
|
12 |
|
|
11 |
10 |
|
|
9 |
8 |
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
Обозначени |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CH123NA<1:0 |
CH123S |
|
||||||
е |
|
- |
|
- |
|
- |
|
|
- |
|
|
- |
|
|
|
|
|
> |
|
A |
|
||
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
бита |
|
7 |
|
6 |
|
5 |
|
|
4 |
|
|
3 |
|
2 |
|
|
1 |
0 |
|
||||
532
Таблица 1.8
Назначение некоторых битов регистра AD1CHS123
Номер |
|
|
|
Обозначение |
Описание |
бита |
|
|
|
CH123NB<1: |
Выбор отрицательного входа для усилителей CH1, CH2, |
10-9 |
0> |
CH3 для |
|
|
варианта подключения MUXB |
|
|
CH123NB<1:0> = 11: Для CH1 отрицательный вход |
|
|
AN9, для CH2 – |
|
|
AN10, для CH3 – |
|
|
AN11. |
|
|
CH123NB<1:0> = 10: Для CH1 отрицательный вход |
|
|
AN6, для CH2 – |
|
|
AN7, для CH3 – AN8. |
|
|
CH123NB<1:0> = 0x: Для CH1, CH2, CH3 |
|
|
отрицательный вход VREFL. |
|
|
Выбор положительного входа для усилителей CH1, |
8 |
CH123SB |
CH2, CH3 для |
|
|
варианта подключения MUXB |
|
|
CH123SB = 1: Для CH1 положительный вход AN3, для |
|
|
CH2 – AN4, |
|
|
для CH3 – |
|
|
AN5. |
|
|
CH123SB = 0: Для CH1 положительный вход AN0, для |
|
|
CH2 – AN1, |
|
|
для CH3 – |
|
|
AN2. |
|
CH123NA<1: |
Выбор отрицательного входа для усилителей CH1, CH2, |
2-1 |
0> |
CH3 для |
|
|
варианта подключения |
|
|
MUXA |
|
|
CH123NA<1:0> = 11: Для CH1 отрицательный вход |
|
|
AN9, для CH2 – |
|
|
AN10, для CH3 – |
|
|
AN11. |
|
|
CH123NA<1:0> = 10: Для CH1 отрицательный вход |
|
|
AN6, для CH2 – |
|
|
AN7, для CH3 – AN8. |
|
|
CH123NA<1:0> = 0x: Для CH1, CH2, CH3 |
|
|
отрицательный вход VREFL. |
533
Окончание таблицы 1.8
|
|
|
|
|
Выбор положительного входа для усилителей CH1, |
|
|||||||||
8 |
|
CH123SA |
CH2, CH3 для |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
варианта подключения |
|
|
|
|
|
|
|
|||
|
|
|
|
|
MUXA |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CH123SA = 1: Для CH1 положительный вход AN3, для |
||||||||||
|
|
|
|
|
CH2 – AN4, |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
для CH3 – AN |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
CH123SA = 0: Для CH1 положительный вход AN0, для |
||||||||||
|
|
|
|
|
CH2 – AN1, |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
для CH3 – AN |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.9 |
||
|
|
|
|
|
Биты регистра AD1CHS0 |
|
|
|
|
|
|
||||
Обозначени |
|
|
|
|
|
|
|
CH0SB<4: |
|
|
|
||||
е |
|
CH0NB |
|
- |
|
- |
|
|
0> |
|
|
|
|
||
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
бита |
|
15 |
|
14 |
|
13 |
12 |
11 |
|
10 |
|
9 |
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Обозначени |
|
|
|
|
|
|
|
CH0SA<4: |
|
|
|
||||
е |
|
CH0NA |
|
- |
|
- |
|
|
0> |
|
|
|
|
||
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
бита |
|
7 |
|
6 |
|
5 |
4 |
3 |
|
2 |
|
1 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.10 |
||
|
|
|
Назначение некоторых битов регистра AD1CHS0 |
|
|
|
|||||||||
Номер |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обозначение |
|
|
|
|
Описание |
|
|
|
||||||
бита |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выбор отрицательного входа для усилителя CH0 для |
||||||||||
15 |
|
CH0NB |
выборки B |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
CH0NB = 1: Для CH0 отрицательный вход AN1. |
|
|||||||||
|
|
|
|
|
CH0NB = 0: Для CH0 отрицательный вход VREFL. |
|
|||||||||
|
|
|
|
|
Выбор положительного входа для усилителя CH0 для |
||||||||||
12-8 |
CH0SB<4:0> |
выборки B |
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
CH0SB<4:0> = 01001: Для CH0 положительный вход |
||||||||||
|
|
|
|
|
AN9. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CH0SB<4:0> = 00001: Для CH0 положительный вход |
||||||||||
|
|
|
|
|
AN1. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CH0SB<4:0> = 00000: Для CH0 положительный вход |
||||||||||
|
|
|
|
|
AN0. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
534 |
Окончание таблицы 1.10
|
|
Выбор отрицательного входа для усилителя CH0 для |
|
7 |
CH0NA |
выборки A |
|
|
|
CH0NA = 1: Для CH0 отрицательный вход AN1. |
|
|
|
CH0NA = 0: Для CH0 отрицательный вход VREFL. |
|
|
|
Выбор положительного входа для усилителя CH0 для |
|
4-0 |
CH0SA<4:0> |
выборки A |
|
|
|
CH0SA<4:0> = 01001: Для CH0 положительный вход |
|
|
|
AN9. |
|
|
|
… |
|
|
|
CH0SA<4:0> = 00001: Для CH0 положительный вход |
|
|
|
AN1. |
|
|
|
CH0SA<4:0> = 00000: Для CH0 положительный вход |
|
|
|
AN0. |
|
1.4 Настройка АЦП
Для настройки модуля АЦП необходимо выполнить следующие действия:
1.Выбрать 10либо 12-битный режим (ADxCON1<10>).
2.Выбрать источник опорного напряжения (ADxCON2<15:13>).
3.Выбрать источник тактирования модуля АЦП (ADxCON1<7:5>).
4.Установить требуемые линий порта микроконтроллера как аналоговые входы (ADxPCFGH<15:0> и ADxPCFGL<15:0>) .
5.Задать, каким образом аналоговые входы будут подключены к входам усилителей (ADxCHS123<15:0>).
6.Задать число усилителей, которые будут использованы для одновременной выборки (ADxCON2<9:8>, ADxPCFGH<15:0> и
ADxPCFGL<15:0>).
7.Задать события, по которому будет происходить выборка каналов
(ADxCON1<3>, ADxCSSH<15:0> и ADxCSSL<15:0>).
8.Установить автоматическую либо ручную выборку каналов.
9.Задать события, по которому будет происходить запуск преобразования.
10.Задать каким образом результат преобразования сохраняется в буфер
(ADxCON1<9:8>).
11.Задать прерывание или шаг увеличения указателя на буфер DMA сохранения результата преобразования (ADxCON2<9:5>).
12.Задать число выборок в буфере DMA для каждого входа модуля АЦП (ADxCON4<2:0>).
13.Задать формат сохранения результата преобразования.
14.Настроить прерывание модуля АЦП (если требуется).
15.Настроить буферы DMA (если требуется).
16.Включить модуль АЦП (ADxCON1<15>).
535
2 Электрическая принципиальная схема к лабораторной работе
На рис.2.1 приведена электрическая схема подключения аналоговых сигналов к микроконтроллеру.
Рис. 2.1. Электрическая схема подключения источников аналогового сигнала
В стенде в качестве источников аналоговых сигналов используются переменные резисторы RP1, RP2, которые через фильтрующие RC-цепочки подключены к входам AN0, AN1 микроконтроллера. Таким образом, напряжение на входе микроконтроллера может изменяться в пределах от 0В
до +3.3В.
3 Пример выполнения работы
Задача: Разработать программу для учебного стенда, отображающую на LED данные аналоговых сигналов с переменных резисторов RP1, RP2.
Анализ задачи: Источники аналогового сигнала подключены к входам AN0, AN1. Положительное опорное напряжение – AVdd (+3.3В), отрицательное – AVss (0В). Необходимо вход AN0 подключить к положительному входу усилителя CH0, вход AN1 – к положительному входу усилителя CH1. Отрицательные входы усилителей по умолчанию подключены к отрицательному опорному напряжению, т.е. к AVss. Далее необходимо настроить модуль АЦП на одновременное преобразование сигналов с усилителей CH0, CH1. В основном цикле программы следует периодически запускать процесс аналого-цифрового преобразования, и после его завершения, вывести значения сигналов на LED.
Листинг программы:
#include <P33FJ32MC204.h> #define FOSC
7370000 #define
536
FCY (FOSC / 2) |
|
|
|
|
_FOSCSEL(FNOSC_ |
|
// настройка работы |
||
FRC) |
|
микроконтроллера |
||
|
|
// от внутреннего тактового |
||
|
|
генератора |
|
|
// объявление кодов сегментов |
|
|
|
|
#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 |
|
|
SEG_A + SEG_B + |
|
#define N7 |
SEG_C |
|
|
SEG_A + SEG_B + SEG_C + SEG_D + SEG_E + |
|
#define N8 |
SEG_F + SEG_G |
|
|
SEG_A + SEG_B + SEG_C + SEG_D + SEG_F + |
|
#define N9 |
SEG_G |
|
#define DIP |
SEG_DP |
|
#define |
|
|
MINUS |
SEG_G |
|
#define OFF |
0x00 |
|
// массив кодов цифр
char DIGITS[] = {N0, N1, N2, N3, N4, N5, N6, N7, N8, N9};
537
// Инициализация таймера |
|
|
T1 |
|
|
void Init_Timer1( |
|
|
|
void ) |
|
{ |
|
|
T1CON = 0; |
// сброс таймера |
|
IFS0bits.T1IF = 0; |
// сброс флага прерывания таймера |
|
|
|
// разрешение прерывания от |
IEC0bits.T1IE = 1; |
таймера |
|
TMR1 |
|
// обнуление текущего значения |
= |
0x0000; |
таймера |
|
0x0E65 |
|
PR1 = |
; |
// задание периода таймера |
|
|
// разрешение работы таймера и его |
T1CONbits.TON = 1; |
запуск |
|
} |
|
|
char _ind = 0; // номер активного индикатора
char _data[8]; // буфер индикации - массив кодов символов
// Отправление данных в регистр
MBI5168 void Ind_Send(char digit)
{
НТЦ-02.31.2 «Микропроцессорная техника PIC». Методические указания.
char c;
for (c = 0; c < 8; c++)
{
установка требуемого логического уровня
на последовательном входе SDI драйвера
MBI5168 if ((digit & (1 << c)) != 0)
{
LATCbits.LATC3 = 1;
}
else
{
LATCbits.LATC3 = 0;
}
538
формирование синхроимпульса на входе SCK
LATCbits.LATC4 = 1;
LATCbits.LATC4 = 0;
}
// формирование синхроимпульса на входе LE
LATBbits.LATB5 = 1;
LATBbits.LATB5 = 0;
} |
|
|
|
// Инициализация линий портов |
|
|
|
void Ind_Init() |
|
|
|
{ |
|
|
|
|
|
|
(RB |
TRISBbits.TRISB6 = 0; |
// Выход |
A |
6) |
|
|
|
(RB |
TRISBbits.TRISB7 = 0; |
// Выход |
B |
7) |
|
|
|
(RB |
TRISBbits.TRISB8 = 0; |
// Выход |
C |
8) |
|
|
|
(RB |
TRISBbits.TRISB9 = 0; |
// Выход |
D |
9) |
|
|
|
(RC |
TRISCbits.TRISC3 = 0; |
// Выход |
SDI |
3) |
|
|
SC |
(RC |
TRISCbits.TRISC4 = 0; |
// Выход |
K |
4) |
|
|
|
(RB |
TRISBbits.TRISB5 = 0; |
// Выход |
LE |
5) |
} |
|
|
|
// Разбитие числа на цифры
void Ind_Show(unsigned int a, unsigned int b)
{
_data[3] = DIGITS[a % |
|
10]; |
a /= 10; |
_data[2] = DIGITS[a % |
|
10]; |
a /= 10; |
_data[1] = DIGITS[a % |
|
10]; |
a /= 10; |
_data[0] = DIGITS[a % |
|
10]; |
|
_data[7] = DIGITS[b % |
|
10]; |
b /= 10; |
539
_data[6] = DIGITS[b % |
|
10]; |
b /= 10; |
_data[5] = DIGITS[b % |
|
10]; |
b /= 10; |
_data[4] = DIGITS[b % |
|
10]; |
|
}
// Прерывание таймера T1 по совпадению
void __attribute__((interrupt,no_auto_psv)) _T1Interrupt( void )
{
Ind_Send(OFF); |
// Отключение индикатора |
|
LATB &= ~(0x07 << |
|
|
6); |
|
// Переключение на следующий |
LATB |= (_ind << |
|
|
6); |
|
// индикатор |
Ind_Send(_data[_ind]); |
// Отправка кода цифры |
|
_ind++; |
|
// переход к след. индикатору |
if (_ind == 8) |
|
|
{ |
|
|
_ind = 0; |
|
|
} |
|
|
IFS0bits.T1IF = 0; |
// Сброс флага прерывания таймера |
|
TMR1 |
= 0; |
// Перезапуск таймера |
} |
|
|
void |
|
|
ADC_Init() |
|
|
{ |
|
|
AD1CON1bits.AD12B |
|
|
= 0; |
|
// 10-битный режим |
AD1CON2bits.V |
|
|
CFG |
= 0; |
// Опорное напряжение – Avdd |
AD1CON1bits.SS |
// Запуск преобразования после |
|
RC |
= 0; |
очистки |
|
|
// бита выборки |
AD1PCF |
|
|
GL |
= 0xFFFF; |
|
AD1PCFGLbits.PCFG |
|
|
0 = 0; |
|
// AN0 - аналоговый вход |
AD1PCFGLbits.PCFG |
|
|
1 = 0; |
|
// AN1 - аналоговый вход |
AD1CON1bits.AS |
// Автоматический запуск выборки |
|
AM |
= 1; |
после |
540
