реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Алгоритм работы системы управления
eugmai86
сообщение Aug 20 2013, 08:11
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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и датчиков. Собственно этот вариант не устраивает, так как совсем не остается времени для обработки детектора нуля и управления симисторами. Если кто то сталкивался с подобным, подскажите умную мыслю пожалуйста.

Может имеет смысл использовать второй контроллер для обработки детектора нуля и симисторов? или можно организовать работу одним контроллером, но ускорить считывание с датчиков?

Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2013, 08:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(eugmai86 @ Aug 20 2013, 11:11) *
процесс считывания занимает уйму времени в контроллере, около 3 с на один цикл для 5и датчиков

Вы используете готовую библиотеку для работы с датчиками ? Вроде той, что поставляется с CodeVision ? Тогда все понятно. Наверное, придется написать свои функции для обмена с датчиком, такие, чтобы их можно было прерывать, приостанавливая обмен и выполняя какие-то другие задачи, когда это необходимо ...
Go to the top of the page
 
+Quote Post
eugmai86
сообщение Aug 20 2013, 08:37
Сообщение #3


Участник
*

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



да, использую стандартную библиотеку CV AVR...
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2013, 08:43
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(eugmai86 @ Aug 20 2013, 11:37) *
да, использую стандартную библиотеку CV AVR...

Я не вникал в то, как она устроена, но едва ли ее функции можно прерывать, например, тем же таймером (чтобы выполнить что-то свое). Если можно, все не так плохо. Но вообще я бы сделал наоборот - реализовал бы обмен с датчиками без всяких готовых библиотек, с использованием прерывания от таймера, разместив в его обработчике машину состояний (т.е., цифровой автомат), реализующую обмен. А сами задачи разместил бы или в фоновом процессе, или в других обработчиках ...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Aug 20 2013, 08:44
Сообщение #5


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



1-wire замечательно вешается на свободный UART.
Кстати, как раз для AVR есть готовая аппликуха

А на таймер я бы вынес захват нуля детектора и автоматический отсчет задержки для управления симистором.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
eugmai86
сообщение Aug 20 2013, 09:02
Сообщение #6


Участник
*

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



да, моих знаний не хватает, буду курить даташит по работе с таймером.

Вот еще алгоритм по работе детектора нуля и симистора тоже до конца не понятен. Я прошеряю состояние перехода через ноль, в момент перехода, а точнее, за некоторое кол-во милисекунд я получаю импульс с детектора нуля, в этот момент я должен начать отсчет полупериодов, по 10мс на полупериод, и в зависимости от требуемой мощности пропускать например только четные для 50% мощности, или каждый 10 период для 10% мощности. я на правильном пути?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Aug 20 2013, 09:05
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(eugmai86 @ Aug 20 2013, 12:02) *
я на правильном пути?

http://cxem.net/mc/mc3.php
http://www.platan.ru/shem/pdf/brezenhem.pdf
Go to the top of the page
 
+Quote Post
eugmai86
сообщение Aug 20 2013, 09:17
Сообщение #8


Участник
*

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



спасибо, буду коварять
Go to the top of the page
 
+Quote Post
ArtemKAD
сообщение Aug 20 2013, 14:45
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 508
Регистрация: 26-06-06
Из: Киев
Пользователь №: 18 364



Цитата(eugmai86 @ Aug 20 2013, 12:02) *
Я прошеряю состояние перехода через ноль, в момент перехода, а точнее, за некоторое кол-во милисекунд я получаю импульс с детектора нуля, в этот момент я должен начать отсчет полупериодов, по 10мс на полупериод, и в зависимости от требуемой мощности пропускать например только четные для 50% мощности, или каждый 10 период для 10% мощности. я на правильном пути?

1) Считайте по два полупериода. Иначе получите постоянку на выходе.
2) Надеюсь ТЭНы маломощные... Иначе начнёт моргать свет.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Aug 20 2013, 15:09
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Перестаем засекать пересечение нуля - используем оптроны, которые сами это делают.
Тепловая инерция у Вас (отсюда видно) очень большая. Неизвестно, что лучше - резать синусоиду на куски, получая большие наводки (надо еще сильно заботиться о симметрии) или привыкать к мигающему немного свету.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 21 2013, 10:19
Сообщение #11


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(eugmai86 @ Aug 20 2013, 12:11) *
...процесс считывания занимает уйму времени в контроллере, около 3 с на один цикл для 5и датчиков...


при параллельном сканировании датчиков, можно получать температуру с любой точностью с энного кол-ва датчиков (зависит от кол-ва свободных ног) менее чем за 1 секунду. при этом можно фильтровать помехи(если требуется) и оценивать процент помех на линиях.
Go to the top of the page
 
+Quote Post
eugmai86
сообщение Aug 22 2013, 07:35
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 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 с еще лучше, а если нельзя использовать прерывание, то я не смогу дрыгать ногой триака, и как писали выше нужна своя функция для обработки датчиков. Для меня это пока оч сложно.
Go to the top of the page
 
+Quote Post
vgo1
сообщение Aug 22 2013, 07:51
Сообщение #13


Участник
*

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



Алгоритм Брезенхема более или менее ровномерно распределит периоды включённого состояния ТЭН-ов в общем количестве периодов цикла регулирования и заметно снизит моргание. Алгоритм красивый и простой, я сам когда то его реализал на MEGA8 для получения линейной интерполяции.
Go to the top of the page
 
+Quote Post
eugmai86
сообщение Aug 22 2013, 08:13
Сообщение #14


Участник
*

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



Цитата(vgo1 @ Aug 22 2013, 10:51) *
Алгоритм Брезенхема более или менее ровномерно распределит периоды включённого состояния ТЭН-ов в общем количестве периодов цикла регулирования и заметно снизит моргание. Алгоритм красивый и простой, я сам когда то его реализал на MEGA8 для получения линейной интерполяции.

если не трудно, поделитесь реализацией под мегу8
Go to the top of the page
 
+Quote Post
Tanya
сообщение Aug 22 2013, 08:38
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(eugmai86 @ Aug 22 2013, 12:13) *
если не трудно, поделитесь реализацией под мегу8

Какая разница под какой процессор.
Я Вам подскажу... другое. Но будет то же самое.
Вот Ваша система управления (пусть будет ПИД...) вырабатывает сигнал управления - число, пропорциональное требуемой мощности. Создаете интегратор (в цифровом случае - переменную). На каждом такте (периоде сети) добавляем туда сигнал управления и вычитаем фиксированное число, если в этом полупериоде был (или будет) включен нагреватель.
Сигналом включения может быть (удобно) превышение половины максимальной величины этой самой переменной - компаратор после интегратора. Но это не тот интегратор, который в ПИДе живет. Для точных систем управления вместо константы нужно вычитать реальную энергию за период.

Цитата(eugmai86 @ Aug 22 2013, 11:35) *
можно по подробнее про оптроны с детектором нуля, это что то типа MOC306Х Инерция очень большая, поэтому требуется плавная регулировка. А что по поводу симметрии, значит ли это, что нужно симметрично пропускать или обрезать периоды? и в таком случае все равно не избежать помех?

Если инерция большая, то плавная подача мощности не нужна. Скачки фильтруются тепловой инерцией - теплоемкостью. Если резать синусоиду, то помехи будут независимо от (необходимой) симметрии в момент включения тиристора. Самый плохой вариант - половинная мощность от максимума - когда включение происходит при максимальном напряжении.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:02
Рейтинг@Mail.ru


Страница сгенерированна за 0.015 секунд с 7
ELECTRONIX ©2004-2016