В этом разделе мы более подробно исследуем некоторые из концепций, связанных с проектом, рассмотрев требования к двигателю, работу оптического кодера и конфигурирование прерываний в режиме реального времени на языке Си, а также программу на Си для подсчета импульсов с помощью подсистемы аккумулятора импульсов.
Требования к двигателю. Специфический двигатель, который мы используем — это двигатель постоянного тока, выпускаемый компанией Electro-Craft Corporation. Мы уже рассмотрели основные характеристики двигателя. Однако, имеется ряд дополнительных характеристик, которые требуются для этого проекта, таких, например, как зависимость скорости двигателя от его тока. Так как они не приводятся в информационных данных, мы получим их экспериментально. Будем изменять питающее напряжение, поданное на двигатель, и соответствующую этому напряжению скорость. Для этого подключим частотомер на выход оптического кодера, чтобы определить частоту следования импульсов при заданном питающем напряжении двигателя, и затем вычислим скорость вращения. Одновременно будем измерять также токи двигателя. Результаты эксперимента показаны на рис. 7.17.
Рис. 7.17. Результаты испытаний двигателя
Оптический кодер. Существует широкое разнообразие оптических кодеров для определения скорости вращения вала двигателя. Эти кодеры закрепляются непосредственно на валу, или могут быть связаны с валом какими-либо устройствами. При установке кодера на вращающийся вал, это устройство обеспечивает на выходе прямоугольное напряжение. Кодеры питаются от постоянного напряжения 5 В, и рассчитаны на максимальную скорость вращения в 12 000 об/мин. Мы используем оптические кодеры, чтобы обеспечить измерение скорости вращения двигателя, как описано в [11]. Установка для измерения частоты вращения показана на рис. 7.18.
Рис. 7.18. Установка для измерения скорости вращения двигателя
Прерывания в режиме реального времени. Мы используем в МК 68HC12 модуль меток реального времени (RTI), периодически прерывая работу 68HC12, чтобы измерить скорость двигателя и скорректировать коэффициент заполнения ШИМ, если это необходимо для стабилизации скорости вращения двигателя. Перед обсуждением программного кода для управления RTI, мы советуем Вам, возобновить в памяти информацию о сбросах и прерываниях. Ниже приведен краткий обзор действий, необходимых, чтобы инициализировать прерывание RTI:
• Инициализируют вектор прерывания по запросу RTI;
• Устанавливают масштабирующий коэффициент RTR[2:0];
• Устанавливают флаг RTIE разрешения прерываний от RTI в регистре RTICTL;
• Очищают флаг RTIF в регистре RTIFLG;
• Разрешают все маскируемые прерывания прерывания (команда CLI).
Приведенные ниже программный код поможет Вам ознакомиться с работой RTI. В этом примере, мы переходим к программе ISR обработки прерывания RTI, переключая флаг порта PORTP. Если вы исследуете возникающую в результате форму сигнала, показанного на рис. 7.19, с помощью осциллографа или логического анализатора, то сможете измерить период повторения системы RTI прерываний.
Рис. 7.19. Прерывания в режиме реального времени
//********************************************************************
//имя файла: RTI_test.с//
//Port P[0]: Конфигурируется как цифровой выходной порт, обеспечивающий TTL
// совместимые сигналы для управления затвором.
// авторы: Стив Барретт и Даниель Пак
//дата создания: Mar 10, 2003
//последняя редакция: Mar 10, 2004
//********************************************************************
#include 912b32.h
#pragma interrupt_handler RTI_isr
//Функции-прототипы
//***************************************************
void initialize_ports(void); //инициализация портов
void RTI_isr(void);
void initialize_RTI(void);
//main program* *******************************************************
void main(void) {
//инициализация вектора сброса для B32
asm(".area vectors(abs)\n"
" .org 0xFFF0\n" // инициализация вектора прерывания RTI
" .word _RTI_isr\n"
" .org 0xFFF8\n" // инициализация вектора сброса для B32