[an error occurred while processing this directive]
А можно я приведу небольшой пример?
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено rezident 09 апреля 2006 г. 18:01
В ответ на: Да, в общем именно так, но (+) отправлено SM 09 апреля 2006 г. 17:20

Мне ближе АСУТПшные задачи, поэтому простейший пример оттуда.
Задачи АСУТП почему хорошо в "карусель" ложатся? Потому что, там уже изначально почти детерминированная цепочка событий. Сбор данных-обработка-принятие решения/выдача управляющего воздействия. Если данные не готовы, то нечего и обрабатывать. А если нет решения, то нельзя и управляющее воздействие корректировать. Тем не менее все эти события асинхронные, а обрабатывать их нужно в реальном времени. Синхронизация делается с помощью буферов и семафоров.
Такой пример задачи. Измерение с помощью АЦП сопротивления термосопротивления, пересчет в градусы, расчет по какому-то закону регулирования и коррекция ШИМа для управления мощностью нагревателя. Понятно что АЦП и ШИМ проще на прерывания посадить.
Оцифровали данные, положили в буфер, установили флаг. АЦП не волнует кто и когда заберет его данные. Данные заказывали? Готово! Получите. Причем АЦП может ведь быть встроенный в МК, или отдельный на I2C или SPI шине. Следовательно при чтении данных в первом случае достаточно считать какой-то регистр, а в других еще и какой-то интерфейс использовать для доступа к данным. Тем не менее, это первый КА в данной системе.
Сборщик данных в основном цикле при каждом проходе "карусели" опрашивает флаг и при готовности считывает данные из буфера АЦП в свой собственный буфер к которому могут обращаться уже все остальные потребители этих данных. И для них данные будут всегда готовы. После считывания данных из буфера АЦП сборщик сбрасывает флаг готовности данных АЦП. Это второй КА в системе.
Пересчет данных АЦП в температуру и расчет по закону регулирования управляющего воздействия могут занимать довольно много времени МК, поэтому их можно разбивать на несколько этапов, каждый из которых, выполняется за один "оборот" "карусели". Результат расчета также складывается в буфер с установкой флага. Это третий КА системы.
Хотя прерывание от ШИМ может вызываться на каждый его такт (если ШИМ программный), но как и аппаратный ШИМ его тоже нельзя изменять в любой момент времени, а только в конце или начале периода ШИМ. Вот в этот момент ему и "скармливаются" данные из буфера расчета со сбросом флага расчета. Кроме этого ШИМ ничего не интересует. У него есть внутренний счетчик тактов, переменная периода и т.п. Когда будет установлен флаг коррекции ШИМ, тогда он считает значение из буфера. А если флаг не установлен, то ШИМ так и будет "ногодрыгалкой в себе" со своими параметрами ногодрыганья. ШИМ предавляет из себя четвертый КА системы.
Итого получается система из четырех КА, каждый из которых формально независим от других, но тем не менее умеет взаимодействовать с другими КА.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru