Реле Tianbo - ресурс 10 млн переключений

4-канальный ШИМ-контроллер на микроконтроллере AVR. Часть 2

John Giffard, Mark Lewin

В предыдущей части мы ознакомились со схемотехническим решением 4-канального ШИМ-контроллера, рассмотрели принципы работы и основные характеристики устройства.

Программное обеспечение для микроконтроллера разработано с таким расчетом, чтобы во время некритичных задержек (например, при обработке протокола работы с LCD-дисплеем) выполнялись задачи высокого приоритета (например, обработка принятой информации по последовательному интерфейсу). Достигнуто это путем использования прерывания по переполнению Timer0 (таймер/счетчик 0) – т.е. 32 мкс, переполнение рассчитано с учетом некритичных задержек, пока в основном цикле программы выполняются проверка UART и буфера FIFO EEPROM. Прерывания используются для обслуживания клавиатуры, для отправки байта данных по последовательному интерфейсу.

Какими будут станции зарядки электромобилей в 2030 году: лучшие решения и мировой опыт для отечественных разработок

Программное обеспечение для микроконтроллера написано на ассемблере в среде разработки AVR Studio, что позволяло провести отладку и внутрисхемное программирование микроконтроллера с помощью программатора AVRISP.

При подаче питания (Power-up reset), загружаются необходимые настройки из EEPROM, многие из них помещаются в SRAM, для ускорения доступа к ним. Настраивается периферия микроконтроллера: Timer0, Timer1, Timer2, последовательный интерфейс, АЦП, порты ввода/вывода. Резервируется пространство под FIFO-буферы, которые организованы для: приема байта UART, передачи байта UART, записи в EEPROM, нажатие клавиш на клавиатуре, работы с LCD-индикатором. Это позволяет микроконтроллеру эффективно выполнять много задач одновременно (например, вести запись данных в EEPROM, прием байта данных по UART и отображать информацию на дисплее).

Одна из главных особенностей кода – переменная названная «Ticker_Val». Эта переменная инкрементируется каждый раз при обработке прерывания по переполнению Таймера0 и служит для подсчета интервалов времени по 32 мкс. Уменьшая значение переменной «Ticker_Val» и проверяя опустошение при декременте можно получить определенные временные интервалы. 8-битный счетчик тогда вызывает прерывание по истечении 8.1 мс, 16-битный счетчик – приблизительно через 2 с. Основная причина использования этой переменной – формирование некритичных временных интервалов и при таком подходе высвобождает ресурсы микроконтроллера для других целей, т.к. все таймеры-счетчики были использованы для реализации ШИМ.

Обслуживание прерываний выполняется после критически важных событий. Это прерывания по обнаружению нажатия клавиш на клавиатуре (причем используются внешние прерывания и в момент отработки данного прерывания, остальные внешние прерывания запрещаются, пока клавиатура не будет полностью просканирована и не будет точно определена нажатая клавиша), приема данных через UART. Также прерывания используются для ускорения последовательной передачи данных через UART (прерывание UART DRE) и при записи в EEPROM (прерывание EEPROM Ready).

В основном цикле программы постоянно проверяются задачи для выполнения: проверяются последовательно буфер FIFO приема UART, буфер FIFO передачи UART, буфер FIFO EEPROM и перезагрузка переменной «Ticker_Val».
Если буфер передачи UART содержит данные, активизируется процесс передачи данных и проверка FIFO отключается, пока буфер не будет пуст. Эта процедура занимает несколько машинных циклов, которые могли быть потрачены на проверку FIFO. Запись данных в EEPROM из буфера организована подобным способом.

Перезагрузка переменной «Ticker_Val» требует чтения и последующего сброса значения переменной. Данные, полученные из нее, вычитаются из счетчика контролирующего и определяющего протоколы работы с клавиатурой, LCD-дисплеем.

Исходный текст программы снабжен подробными комментариями и изначально нацелен на использование микроконтроллера ATMega32 (ATMega32L). Пользователь самостоятельно, в исходном коде, может сделать изменения для использования микроконтроллера ATMega16 (ATMega16L), а также присвоить имена для каждого канала ШИМ-контроллера, задать приветствие при включении устройства, скорость обмена по последовательному интрефейсу.

Внещний вид устройства

4-канальный ШИМ-контроллер на AVR

Приложение:

  1. Исходный код программы для микроконтроллера (а также .HEX файлы для ATMega32).
  2. Команды для управления устройством через последовательный порт (RS232).

circuitcellar.com

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Four Channel PWM Controller. Part 2

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя