Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт
Шрифт:
Интервал:
Закладка:
delay();
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFB: //PA2 Окружность
PORTB = 0x04; // подсвечивает светодиод порта PORTB
delay();
PORTB=0x00; //включает красные светодиоды индикатора
break;
case 0xFD: //PA1 Синусоида
PORTB = 0x02; // подсвечивает светодиод порта PORTB
delay();
PORTB=0x00; // включает красные светодиоды индикатора
break;
case 0xFE: //PA0 Остановка
PORTB = 0x01; // подсвечивает светодиод порта PORTB
position_laser(0x00,0x00);
shutter(close);
delay();
PORTB=0x00; // включает красные светодиоды индикатора
go = 0;
break;
case 0xFF:
break;
default:
; //все остальные случаи
}//конец switch(new_PORTA)
old_PORTA = new_PORTA;
}//конец if(new_PORTA ! = old_PORTA)
}//конец while(go)
}//конец main
//********************************************************************
// initialize_ports: производится конфигурация портов в качестве
//входных/выходных
//********************************************************************
void initialize_ports(void)
{
DDRA=0x00; //установить PORTA в качестве входного порта
DDRB=0xFF; //установить PORTB в качестве выходного порта
PORTB=0x00; //включить красные светодиоды индикатора
DDRS=0xFF; //установить PORTT в качестве выходного порта
DDRP=0xFF; //установить PORTP в качестве выходного порта
}
//********************************************************************
/// /shutter(int action) : открытие и закрытие затвора
//********************************************************************
void shutter(int action) {
if (action == open) PORTP = 0x01;
if (action == close) PORTP = 0x00;
}
//********************************************************************
//position_laser(unsigned char x_pos, unsigned char y_pos): посылает
//сигнал управления для каналов X и Y гальванометра из портов PORTS
//и PORTT соответственно.
//********************************************************************
void position_laser(char x_pos,char y_pos) {
PORTS = x_pos;
PORTT = y_pos;
}
//********************************************************************
//delay(void): создает задержку
//********************************************************************
void delay(void) {
int j;
for(j=0x0000; j<0x1000; j=j+0x01) {
asm("nop");
}
}
//********************************************************************
7.2.7. Испытания устройства
До подсоединения компонентов системы к МК 68HC12, мы должны полностью проверить схему. В главе 5 мы рассматривали методики проверки, позволяющие моделировать входы системы переключателями, а выходы светодиодами. Наше устройство уже содержит переключатели и светодиоды для такой проверки. Однако, как мы проверим аналоговые сигналы? Имеется два метода, позволяющих легко проверить связь друг с другом сигналов на каналах X и Y:
1) использование перьевого X-Y графопостроителя,
2) использование классической контрольно-измерительной методики, связанной с получением так называемых фигур Лиссажу.
При первой методике, выходной аналоговый сигнал, формируемый X-каналом ЦАП, переключается с X-канала гальванометра на X-канал перьевого X-Y графопостроителя, а сигнал с Y-канала гальванометра на Y-канал на графопостроителя. Сигнал управления затвором может быть подан на драйвер пера графопостроителя, смещающийся вверх и вниз. Необходим плоттер со специальными характеристиками, чтобы определить, требуется ли схема интерфейса между ТТЛ совместимым сигналом для управления затвором от 68HC12 и управления движением пера вверх и вниз. После подключения микроконтроллера 68HC12 к графопостроителю, каждое из изображений может быть полностью проверено.
Вторая методика испытаний использует классический метод фигур Лиссажу. Чтобы получить фигуры Лиссажу, выходные сигналы с X-канала и Y-канала ЦАП подаются на соответствующие каналы осциллографа.
После подключения 68HC12 к осциллографу, каждое из изображений также может быть полностью проверено. Дополнительную информация о фигурах Лиссажу можно найти в [2].
7.2.8. Заключительные испытания системы управления
После полной проверки программного обеспечения, оно может быть испытано совместно с устройством управления лазером. Реальные устройства описываются в литературе, выпускаемой изготовителями оптических устройств и в учебниках, посвященных оптическим блокам [3, 8].
7.3. Цифровой вольтметр
7.3.1. Описание проекта
Для этого проекта мы должны разработать цифровой вольтметр (ЦВ), способный измерять входной аналоговый сигнал в диапазоне от +10 до –10 В. Измеряемое напряжение, отображается на ЖК дисплее, число знакомест которого позволяет отображать числа от 0 до 100.
Диапазон входных измеряемых напряжений для модуля аналого-цифрового преобразования ATD МК 68HC12 составляет 0…5 В. Чтобы измерить входное напряжение в более широком диапазоне, необходим внешний интерфейс. Поэтому мы преобразуем входной сигнал ±10 В в сигнал, лежащий в диапазоне от 0 до 5 В.
7.3.2. Системы 68HC12 используемые в проекте
Для реализации проекта мы должны будем использовать следующие модули в составе МК 68HC12, внешние устройства и программы управления:
• Модуль ATD в составе МК 68HC12;
• Символьный ЖК индикатор;
• Интерфейс преобразователя диапазона входного сигнала;
• Алгоритм преобразования измеряемого напряжения в ASCII код для отображения на ЖК индикаторе.
Прежде чем разрабатывать программное обеспечение, рассмотрим некоторые аппаратные решения.
7.3.3. Расчет интерфейса модуля ATD
В разделе 5.9 мы описали, как подключить аналоговое устройство ввода данных к МК 68HC12, использовав методику расчета интерфейса преобразователя. Мы можем применить этот материал для разработки устройства, изменяющего диапазон входного напряжения от исходного ±10 В до диапазона от 0 до 5 В, совместимого с подсистемой аналого-цифрового преобразования для 68HC12.
Структурная схема согласующего устройства приводится на рис. 7.13. Это устройство должно сформировать напряжение 5 В на входе АЦП микроконтроллера, когда на вход вольтметра подается 10 В, и 0 В на входе АЦП при напряжении в –10 В на входе вольтметра. Чтобы выполнить такое преобразование, входной сигнал должен быть умножен на масштабирующий коэффициент, и, кроме того, должно быть создано напряжение смещения. В нашей схеме операцию масштабирования выполняет блок K, и его выходной сигнал суммируется с сигналом смещения B.
Рис. 7.13. К расчету согласующего устройства
По рассмотренной ранее методике составим два уравнения с двумя неизвестными, чтобы описать работу интерфейса преобразователя нашего проекта:
V2max = V2min * K + B
V1max = V1min * K + B
Нетрудно установить, что V1min = –10 В, а V2min = + 10 В, в то время как V1max = 0 В, и V2max = 5 В. Подставим эти значения в нашу систему уравнений:
5 = 10 * K + В
0 = (–10) * K + В
В результате решения системы получим масштабный множитель K = 0.25, и напряжение смещения B = 2.5 В. Cоздадим схему на ОУ с коэффициентом передачи 0.25, и добавим напряжение смещения в 2.5 В.
При работе вольтметра после преобразования входного напряжения встроенным в МК АЦП, мы должны выполнить пересчет кода оцифровки, чтобы получить фактически измеренное входное напряжение для вывода его на дисплей. Эта операция выполняется с помощью программного обеспечения.
7.3.4. Структура программы и блок-схема алгоритма
Мы приводили структуру программы и блок-схему алгоритма для каждого из рассматриваемых проектов. Для этого проекта мы оставляем разработку структуры и блок схемы читателю в качестве домашней работы (задание 17).
7.3.5. Программа управления
/********************************************************************/
/* Имя файла: voltmeter2.с */
/* Это программа для реализации простого вольтметра на базе АЦП, */
/* встроенного в МК HC12. Приведенный программный код выполняет */
/*одно преобразование и затем программа может вручную */
/* перезапускаться пользователем для измерения другого напряжения */
/********************************************************************/
#include <912b32.h>