}
//********************************************************************
//RTI_isr: Программа обработки прерывания по меткам реального времени
//********************************************************************
void RTI_isr(void) {
unsigned int new_count;
unsigned int pulse_count;
unsigned int current_RPM;
float max_count = 65535.0;
new_count = PACNT; // Получить текущее число импульсов в аккумуляторе
if (new_count > old_count) // Определить текущее число импульсов
pulse_count = new_count - old_count;
else pulse_count = (unsigned int)(max_count-(float)(old_count+new_count));
// Преобразовать число импульсов кодера в об/мин
current_RPM = (unsigned int)(pulse_count/0.032768);
// Изменить число прерываний RTI в счетчике
RTI_int_count = RTI_int_count + 1;
if (RTI_int_count == 10) // Изменить на ЖКИ значение после 10 прерываний RTI
{
display_count_LCD(current_RPM); // Изменить показания ЖКИ
RTI_int_count=0; // Сбросить счетчик прерываний RTI
}
// Изменить значение скорости двигателя
if (current_RPM < desired_motor_RPM) PWM_duty_cycle = PWM_duty_cycle + 1; // Ускорить двигатель
else PWM_duty_cycle = PWM_duty_cycle - 1; // Замедлить двигатель
// Изменить скорость двигателя с помощью ШИМ
PWDTY0 = PWM_duty_cycle; //коэффициент заполнения
old_count = new_count;
RTIFLG = 0x80; //сбросить флаг прерывания RTI
}
//********************************************************************
// Initialize_RTI: конфигурирует регистры связанные с RTI
//- Регистр управления RTI (RTICTL):
// - разрешение RTI, флаг RTIE
// - установка периода RTI на 32.768 мс
// - сброс RTI, бит RTIF регистре Флагов RTI (RTIFLG)
//********************************************************************
void initialize_RTI(void) {
RTICTL = 0x86; // Установить период RTI 32.768 мс
RTIFLG = 0x80; // сброс RTI
}
//********************************************************************
// Initialize_RTI_PA: инициализация 68HC12 аккумулятора импульсов PA
//********************************************************************
void initialize_PA(void) {
TIOS = 0x00; // конфигурировать канал 7 для работы в качестве счетчика
TCTL1 = 0x00; // импульсов оптического кодера
OC7M = 0x00; // Включить бит разрешения таймера
TSCR = 0x80; // Установить разрешение для аккумулятора по фронту
//импульса,
PACTL = 0x50; // Режим счета событий
}
/********************************************************************/
//initialize_PWM: генерировать сигнал ШИМ 976 Гц с */
// коэффициентом заполнения 67.2% */
/********************************************************************/
void initialize_PWM(void) {
PWTST =0x00; /*установить ШИМ в режим нормальной работы */
PWCTL =0x00; /*установить выравнивание по левой границ */
PWCLK = 0x28; /*без конкатенации, разделить clk на 32 */
PWPOL = 0x01; /*состояние : высокое затем переход к низкому */
DDRP = 0xFF; /*установить порт PORTP как выходной */
PWEN = 0x01; /*разрешение на ШИМ для канала 0 */
PWPER0= 0xFF; /* установить период равным 256 */
PWDTY0= PWM duty_cycle; /* установить коэффициент заполнения равным 172 */
}
/********************************************************************/
Установка для испытания системы стабилизации скорости вращения была показана на рис. 7.18. Это — очень сложная система, содержащая целый ряд компонентов и микроконтроллерную систему 68HC12. Чтобы гарантировать успешную работу системы, настоятельно рекомендуется применять обсужденный в главе 2 метод измерений. Собрав и запустив всю систему, можно включить двигатель на умеренную нагрузку, и убедиться, что система стабилизирует скорость вращения на уровне в 1600 об/мин.
Летающий робот, разработку которого мы собираемся обсудить — это парящий робот, который может зависать непосредственно над областью, представляющей интерес, пока не выполнит всю необходимую работу. За последние двадцать лет рядом исследователей в университетах и научно-исследовательских лабораториях были изучены и разработаны летающие роботы различных размеров и форм для ряда применений. Одни использовали при этом существующие образцы самолетов и вертолетов, другие изобретали механические системы с машущим крылом, третьи использовали дирижабли. Все эти усилия были предприняты из-за огромных выгод, которые сулят такие роботы в военных и промышленных применениях, включая исследование отдаленных планет, внутреннее и наружное наблюдение, распознавание и локализация целей при военных действиях.
Опишем сначала общие характеристики системы, составляя список требований к проекту, а затем представим проект парящего робота, удовлетворяющий всем этим требованиям. Описание системы включает в себя описание конструкции устройства, структуру программы, и блок-схему алгоритма. После этого приводится пример программы на языке Си.
Читать дальше