Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
Шрифт:
//initialize_ports: обеспечивает начальную конфигурацию портов
//ввода - вывода
//********************************************************************
void initialize_ports(void) {
DDRP = 0xFF; // Установить PORTP как выходной для ШИМ
DDRT = 0x00; //Установить PORTT как входной, а вывод PORTT[7]
// как вход аккумулятора PA
DDRB = 0xFF; //PORTB на вывод - двунаправленная
//магистраль
данных для ЖКИ
DDRDLC = 0xFF; //порт PORT DLC на вывод - линии управления ЖКИ
}
//********************************************************************
//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.4.6. Испытания
Установка для испытания системы стабилизации скорости вращения была показана на рис. 7.18. Это — очень сложная система, содержащая целый ряд компонентов и микроконтроллерную систему 68HC12. Чтобы гарантировать успешную работу системы, настоятельно рекомендуется применять обсужденный в главе 2 метод измерений. Собрав и запустив всю систему, можно включить двигатель на умеренную нагрузку, и убедиться, что система стабилизирует скорость вращения на уровне в 1600 об/мин.
Поделиться:
Популярные книги
70 Рублей
1. 70 Рублей
Фантастика:
фэнтези
боевая фантастика
попаданцы
постапокалипсис
6.00
рейтинг книги
Жатва душ. Остров мертвых
Фантастика:
боевая фантастика
рпг
5.20
рейтинг книги
Сердце Дракона. Том 9
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Как я строил магическую империю 6
6. Как я строил магическую империю
Фантастика:
попаданцы
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Леди для короля. Оборотная сторона короны
3. Королевская охота
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Кодекс Крови. Книга VI
6. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
АллатРа
Научно-образовательная:
психология
история
философия
обществознание
физика
6.25
рейтинг книги
Газлайтер. Том 10
10. История Телепата
Фантастика:
боевая фантастика
5.00
рейтинг книги
Дорога к счастью
Любовные романы:
любовно-фантастические романы
6.11
рейтинг книги
Газлайтер. Том 8
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Камень Книга седьмая
7. Камень
Фантастика:
фэнтези
боевая фантастика
6.22
рейтинг книги
Николай I Освободитель. Книга 2
2. Николай I
Фантастика:
героическая фантастика
альтернативная история
5.00
рейтинг книги
Секретарша генерального
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46