|
Алгоритм работы системы управления |
|
|
|
Aug 20 2013, 08:11
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
Добрый день форумчане,
Нужна ваша помощь в составлении алгоритма работы следующей системы на базе MEGA 32. Система делает следующее: 1. меряет температуру в 3х точках с помощью датчиков DS18B20, и выводит на lcd дисплей, температура никак не обрабатывается и является чисто информационной. 2. меряет температуру 1 датчиком и в зависимости от температуры регулирует обороты двигателя с помощью симистора. 3. меряет температуру 1 датчиком и в зависимости от температуры регулирует мощность ТЭНа 1 с помощью симистора.
Всего в системе 5 датчиков ds18b20. 4 из них имеют разрядность 9 бит, 1 - 12 бит(для ТЭНа).
4. обработка "детектора нуля" и управление 2-мя триаками. (Так как нагрузка активно-индуктивная) 5. вывод значений мощности (ШИМ) тэна и мотора на lcd.
Собственно на данный момент разработана схема, вытравлена и распаяна. Схему не привожу ибо все просто. На данный момент меряю температуру 5-ю датчиками и вывожу на лсд, но процесс считывания занимает уйму времени в контроллере, около 3 с на один цикл для 5и датчиков. Собственно этот вариант не устраивает, так как совсем не остается времени для обработки детектора нуля и управления симисторами. Если кто то сталкивался с подобным, подскажите умную мыслю пожалуйста.
Может имеет смысл использовать второй контроллер для обработки детектора нуля и симисторов? или можно организовать работу одним контроллером, но ускорить считывание с датчиков?
|
|
|
|
|
Aug 20 2013, 08:37
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
да, использую стандартную библиотеку CV AVR...
|
|
|
|
|
Aug 20 2013, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(eugmai86 @ Aug 20 2013, 11:37)  да, использую стандартную библиотеку CV AVR... Я не вникал в то, как она устроена, но едва ли ее функции можно прерывать, например, тем же таймером (чтобы выполнить что-то свое). Если можно, все не так плохо. Но вообще я бы сделал наоборот - реализовал бы обмен с датчиками без всяких готовых библиотек, с использованием прерывания от таймера, разместив в его обработчике машину состояний (т.е., цифровой автомат), реализующую обмен. А сами задачи разместил бы или в фоновом процессе, или в других обработчиках ...
|
|
|
|
|
Aug 20 2013, 09:02
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
да, моих знаний не хватает, буду курить даташит по работе с таймером.
Вот еще алгоритм по работе детектора нуля и симистора тоже до конца не понятен. Я прошеряю состояние перехода через ноль, в момент перехода, а точнее, за некоторое кол-во милисекунд я получаю импульс с детектора нуля, в этот момент я должен начать отсчет полупериодов, по 10мс на полупериод, и в зависимости от требуемой мощности пропускать например только четные для 50% мощности, или каждый 10 период для 10% мощности. я на правильном пути?
|
|
|
|
|
Aug 20 2013, 09:17
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
спасибо, буду коварять
|
|
|
|
|
Aug 22 2013, 07:35
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
Цитата(ArtemKAD @ Aug 20 2013, 17:45)  1) Считайте по два полупериода. Иначе получите постоянку на выходе. 2) Надеюсь ТЭНы маломощные... Иначе начнёт моргать свет. попробую считать периодами. Тэны по 1,5 квт каждый. 1 тэн будет управляться реле, т.е вкл до определенной температуры, потом выкл, и плавно доводим вторым тэном до нужной температуры. Вот начитался про помехи и моргание света, вроди если открывать и закрывать триак только в момент перехода через ноль, помехи будут минимальны, но я уже начинаю в этом сомневаться. Цитата(Tanya @ Aug 20 2013, 18:09)  Перестаем засекать пересечение нуля - используем оптроны, которые сами это делают. Тепловая инерция у Вас (отсюда видно) очень большая. Неизвестно, что лучше - резать синусоиду на куски, получая большие наводки (надо еще сильно заботиться о симметрии) или привыкать к мигающему немного свету. можно по подробнее про оптроны с детектором нуля, это что то типа MOC306Х Инерция очень большая, поэтому требуется плавная регулировка. А что по поводу симметрии, значит ли это, что нужно симметрично пропускать или обрезать периоды? и в таком случае все равно не избежать помех? Цитата(kolobok0 @ Aug 21 2013, 13:19)  при параллельном сканировании датчиков, можно получать температуру с любой точностью с энного кол-ва датчиков (зависит от кол-ва свободных ног) менее чем за 1 секунду. при этом можно фильтровать помехи(если требуется) и оценивать процент помех на линиях. под параллельным сканированием, насколько я понял, подразумевается сканирование каждого датчика висящего на разных ногах? но 1 с это тоже очень много, я просто не разобрался еще, можно ли обрабатывать прерывания при использовании стандартной библиотеки cvavr для ds18b20. Если можно, то 3 секунды нормально а 1 с еще лучше, а если нельзя использовать прерывание, то я не смогу дрыгать ногой триака, и как писали выше нужна своя функция для обработки датчиков. Для меня это пока оч сложно.
|
|
|
|
|
Aug 22 2013, 07:51
|
Участник

Группа: Участник
Сообщений: 27
Регистрация: 28-05-12
Пользователь №: 72 050

|
Алгоритм Брезенхема более или менее ровномерно распределит периоды включённого состояния ТЭН-ов в общем количестве периодов цикла регулирования и заметно снизит моргание. Алгоритм красивый и простой, я сам когда то его реализал на MEGA8 для получения линейной интерполяции.
|
|
|
|
|
Aug 22 2013, 08:13
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 20-03-11
Пользователь №: 63 737

|
Цитата(vgo1 @ Aug 22 2013, 10:51)  Алгоритм Брезенхема более или менее ровномерно распределит периоды включённого состояния ТЭН-ов в общем количестве периодов цикла регулирования и заметно снизит моргание. Алгоритм красивый и простой, я сам когда то его реализал на MEGA8 для получения линейной интерполяции. если не трудно, поделитесь реализацией под мегу8
|
|
|
|
|
Aug 22 2013, 08:38
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(eugmai86 @ Aug 22 2013, 12:13)  если не трудно, поделитесь реализацией под мегу8 Какая разница под какой процессор. Я Вам подскажу... другое. Но будет то же самое. Вот Ваша система управления (пусть будет ПИД...) вырабатывает сигнал управления - число, пропорциональное требуемой мощности. Создаете интегратор (в цифровом случае - переменную). На каждом такте (периоде сети) добавляем туда сигнал управления и вычитаем фиксированное число, если в этом полупериоде был (или будет) включен нагреватель. Сигналом включения может быть (удобно) превышение половины максимальной величины этой самой переменной - компаратор после интегратора. Но это не тот интегратор, который в ПИДе живет. Для точных систем управления вместо константы нужно вычитать реальную энергию за период. Цитата(eugmai86 @ Aug 22 2013, 11:35)  можно по подробнее про оптроны с детектором нуля, это что то типа MOC306Х Инерция очень большая, поэтому требуется плавная регулировка. А что по поводу симметрии, значит ли это, что нужно симметрично пропускать или обрезать периоды? и в таком случае все равно не избежать помех? Если инерция большая, то плавная подача мощности не нужна. Скачки фильтруются тепловой инерцией - теплоемкостью. Если резать синусоиду, то помехи будут независимо от (необходимой) симметрии в момент включения тиристора. Самый плохой вариант - половинная мощность от максимума - когда включение происходит при максимальном напряжении.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|