Многозадачность ПИД+1Wire+UART

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

В общем решил один мой знакомый собрать себе шкаф для автоматизации системы отопления.
Он немного пишет для Arduino.
Все бы ничего но мучает он меня с одним и тем же вопросом уже полгода. ( я совсем чуть чуть пишу на асме )
Он ни как не может решить, как же ему решить задачу многозадачности на данном МК
В качестве МК он выбрал ATmega 2560
Система содержит кучу датчиков температуры Даллас 1-Wire ( около десятка )
Имеется дисплей подключенный по SPI
К UARTу подключен GSM модуль, для тотального контроля и удаленного управления системой.
система рассчитывает ПИД и крутит приводами ( регулирует поток горячей воды в трубах )
Приводы управляются через реле, ни какого спец протокола для них не надо.

Задача заключается в том, что нельзя оставлять регулирование ни на секундочку.
"По хорошему нужно регулировать как минимум три раза в секунду" сказал он мне :) Не знаю как он это высчитал, но раз надо - значит надо.
Все бы ничего, но у нас есть GSM модуль, который может отнять процессорное время общаяс с МК по UARTу
а также куча датчиков температуры. Готовые библиотеки для них не используют прерывания, а просто висят в цикле и тоже тратят процессорное время...

Вот тут то он меня и замаял. говорит что слишком много времени тратим на висение в циклах. Давай юзать прерывания.
не зная броду не лезь к вольтмоду
Реклама
Аватара пользователя
Мурик
Друг Кота
Сообщения: 3383
Зарегистрирован: Пн окт 11, 2010 19:00:08

Re: Многозадачность ПИД+1Wire+UART

Сообщение Мурик »

uwrtey писал(а):Давай юзать прерывания.
Используйте. :)
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6308
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Многозадачность ПИД+1Wire+UART

Сообщение Jack_A »

uwrtey писал(а): Готовые библиотеки для них не используют прерывания, а просто висят в цикле и тоже тратят процессорное время....
В дупу топку такие иблетеки ! Внешние устройства, а также таймеры должны выполнять свои функции в прерываниях, выставляя флаги ПРОИЗОШЛО СОБЫТИЕ N. Главная программа вертится в бесконечном цикле, посматривая на флаги и обслуживая их в порядке приоритетов. Это и есть многозадачность, реализованная на уровне пользователя. Ну а для понтов можно купить ОС реального времени ( пустяки, пару десятков килобаксов ) и влимонить ее в МК баксов за 20. Круть неимоверная!
Изображение
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

Ну а для понтов можно купить ОС реального времени ( пустяки, пару десятков килобаксов ) и влимонить ее в МК баксов за 20. Круть неимоверная!
Хм. Вот он про то-же что то говорил.. :)
А что за штука? неужели сможет работать на таком МК ?
И что то она шибко дорогая....

А есть либа 1-wire на прерываниях, на асме ? Подглядеть бы одним глазком. Я не спец библиотеки свои еще не писал ни разу.
в порядке приоритетов
Вот я и думаю, что как то нужно задать приоритеты. Мне кажется это ключевой момент.
не зная броду не лезь к вольтмоду
Реклама
Эиком - электронные компоненты и радиодетали
roman.com
Друг Кота
Сообщения: 9149
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Многозадачность ПИД+1Wire+UART

Сообщение roman.com »

uwrtey писал(а):Задача заключается в том, что нельзя оставлять регулирование ни на секундочку.
Поставьте 2 МК... если уж всё там так критично... )))

МК 1 - К UARTу подключен GSM модуль
МК 2 - куча датчиков температуры.

:)))
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Многозадачность ПИД+1Wire+UART

Сообщение Аlex »

roman.com писал(а): :)))
Кстати, напрасно смеётесь. Это вполне нормальный вариант распределения задач.
"Разделяй и властвуй" (с)
Реклама
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Многозадачность ПИД+1Wire+UART

Сообщение ARV »

гораздо проще, пожалуй, по прерываниям сделать регулирование, а все эти обмены и вычисления пусть в главном цикле крутятся...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

Всех приветствую...

roman.com, одного этого МК вполне достаточно. Просто необходимо понять какой вариант исполнения лучше ( надежнее, быстрее )

Аlex, вариант нормальный, но выбор на 2560 пал не с проста ( я видел проекты на этом чипе в сотню раз круче поставленной задачи )

ARV, да, пожалуй один из нормальных вариантов.
вариант Jack_A тоже интересный..

Проблема у нас больше в том что я немного пишу на асме, а мой приятель немного пишет на СИ для ардуинок, тока начал так сказать и не знаком толком с этими чипами...
До этого он практиковался в программировании очень давно ( лет 30 назад )

Он знает чего он хочет, но не знает как это организовать на данном камне.
Просит помощи меня, а от меня мало толку, потому что я толком не могу понять что конкретно ему нужно :))) :))) :)))
Понял лишь то, что он хочет сэкономит время на всем чем можно и организовать что т о вроде псевдо многозадачности..
не зная броду не лезь к вольтмоду
Аватара пользователя
НАПАЛМ
Это не хвост, это антенна
Сообщения: 1314
Зарегистрирован: Пт ноя 27, 2009 19:47:13
Откуда: Казань

Re: Многозадачность ПИД+1Wire+UART

Сообщение НАПАЛМ »

uwrtey писал(а): Он знает чего он хочет, но не знает как это организовать на данном камне.
Пусть почитает на easyelectronics.ru цикл статей про архитектуру программ и про конечный автомат. http://easyelectronics.ru/category/avr- ... urs/page/2
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

Ему проще мне обьяснить что надо, что бы я на асме написал.. :)
не зная броду не лезь к вольтмоду
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6308
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Многозадачность ПИД+1Wire+UART

Сообщение Jack_A »

uwrtey писал(а): А что за штука? неужели сможет работать на таком МК ?
И что то она шибко дорогая....
На меге 8 не сможет, конечно, а на каком - нить АРМе - пожалуйста. Дорогая - это же не Винда с стомилионными тиражами, оттого и цены. Сам, правда, не покупал - зайчиков маловато :)
Для примера гляньте у Вики QNX.
А тот вариант, что я накорябал, работает у меня на полдюжине неслабых дивайсов серийных.
Изображение
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

ОК, спс... будем кумекать...
не зная броду не лезь к вольтмоду
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Re: Многозадачность ПИД+1Wire+UART

Сообщение pokk »

По мне так единственное что может давать задержку так это 1-Wire, уже очень он критичен к времени.
Я бы сделал так на таймер посадил бы 1-Wire, как написал,НАПАЛМ
http://easyelectronics.ru/avr-uchebnyj- ... tomat.html
А всё остальное оставил бы в главном цикле. С USART, не вижу особых проблем он хорошо подходит к конечным автоматам, там всего пару состояний получается (дождаться байт, и принять).
Что-то типа такого.

Код: Выделить всё

        if(send_usart==ON){           
             if(len>0){ 
                if (!(UCSR1A & (1<<UDRE1))==0){
                //------------------Отправляем байт-------------
				   UDR1=usart_send_buffer[index_usart];                      
                    len--;
                    index_usart++;
                }
             }
             else{            
                 index_usart=0;
                 send_usart=OFF;
                 Usart_resive=ON;
             }
        }
Недостатки такого подхода в том что главный цикл должен крутится быстро что бы не пропустить байты,по этому надо строго поддерживаться такому же подходу, и полностью исключать задержки типа delay, и ожидания флага в while.

PS: По поводу конечных автоматов, есть ещё вот есть пример http://we.easyelectronics.ru/blog/AVR/2599.html
плюс внизу прикреплен цикл статей татарчевского.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Многозадачность ПИД+1Wire+UART

Сообщение Z_h_e »

pokk писал(а):По мне так единственное что может давать задержку так это 1-Wire
Для таких датчиков можно выделить какую-нибудь "тиньку", а эту тиньку опрашивать головным контроллером.
uwrtey писал(а):нельзя оставлять регулирование ни на секундочку.
DS18B20 при максимальной точности измеряет температуру в течении 750мс.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: Многозадачность ПИД+1Wire+UART

Сообщение Vov123 »

Чего-то бред какой-то.
Действительно, время преобразования датчика DS18B20 - 750мс., да умножить на "кучу датчиков" и в то-же время надо получить данные обработать и выдать "на гора" раз в 333мс.
Это где-же такие регуляторы воды продаются?
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Многозадачность ПИД+1Wire+UART

Сообщение Z_h_e »

За секунду то я думаю можно все обработать. Выдать команду начать замер для всех датчиков разом (вроде так должно работать) и потом за оставшееся время все посчитать, ну или конвеер организовать.. Вот только что за система отопления такая, что нужна дискретность "ни на секундочку"?
Последний раз редактировалось Z_h_e Вт фев 02, 2016 12:33:54, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
uwrtey
Поставщик валерьянки для Кота
Сообщения: 2309
Зарегистрирован: Пт июл 17, 2009 07:34:07
Откуда: Свердловская обл.

Re: Многозадачность ПИД+1Wire+UART

Сообщение uwrtey »

"на гора" раз в 333мс.
Это где-же такие регуляторы воды продаются
Хм.. Регулятор самый простой, привод в виде мотора.
В начале и конце установлены концевики, что бы мотор не свернул "шею" редуктору.
Микроконтроллер рассчитывает ПИД и задает мотору некоторую позицию.
Три раза в секунду внести корректировки в положение мотора это не так то уж много.
Мотор может за одну секунду доехать от начала до конца своего редуктора....
Это не те сервоприводы у которых всего два положения on/off... :) Уж шибко они дорогие...
не зная броду не лезь к вольтмоду
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: Многозадачность ПИД+1Wire+UART

Сообщение Vov123 »

Задвижка-самопал, вероятно. Согласен "левши" могут придумать и по-круче.
А как-же с временем преобразования датчиков?
Если не секрет, где находится радиатор, температуру помещения, которого, необходимо поддерживать с такой точностью?

Это я к тому, что инерционность будет по-любому выше, чем 333мс, а в реале достигать несколько минут.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Многозадачность ПИД+1Wire+UART

Сообщение Z_h_e »

Я немного с ПИД сталкивался. Есть такой метод Циглера-Никольса настройки коэффициентов ПИД . Сначала все коэфф. устанавливаются в 0. Потом, постепенно увеличивая коэфф. пропорциональности, нужно добиться чтобы система перешла в режим устойчивых колебаний. Количество измерений на период колебаний достаточно 5-10 раз.
Не знаю что у Вас за система отопления, но период может измеряться даже часами.
Vov123 писал(а):А как-же с временем преобразования датчиков?
Его можно снизить до <100мс, уменьшив дискретность до пол грудуса, все равно погрешность датчика как раз такая и даже хуже, если во всем диапазоне.
Последний раз редактировалось Z_h_e Вт фев 02, 2016 13:17:39, всего редактировалось 1 раз.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Vov123
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Re: Многозадачность ПИД+1Wire+UART

Сообщение Vov123 »

Вероятно ПИД-самопал будет использоваться.
А реальный, к примеру, есть у ОВЕНА ТРМ-10, можно ознакомиться с инструкцией и сделать себе какое-то понятие о ПИ и ПИД регулировании.

Да, на закуску, про тепло-инерционность самого датчика температуры забыли?
Ответить

Вернуться в «AVR»