Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Ступеньчатое управления нагревателями

Страниц (2): [1] 2 »
 

1. central30 - 28 Февраля, 2013 - 08:52:06 - перейти к сообщению
Всем добрый день.Вобщем собрал ступеньчатый термостат для управления тремя тэнами.Отключает с разницой в 3 градуса.Поставили к примеру 50 градусов,первый отключается по достижению 43 градусов,второй 46,и последний 50.После отключения и падения температуры опять включается последний,тоесть первый уже так и будет отдыхать,а последний постоянно работать.В чем собственно вопрос,как мне реализать на Си смену очереди включения тенов.Подскажите если не трудно.Заранее благодарю.
2. Predator - 28 Февраля, 2013 - 10:16:23 - перейти к сообщению
CODE:

if (temp<=tempporog)
{
switch (curent_order)
case 0:
PowerOnTEN(0);
curent_order=1;
break;
case 1:
PowerOnTEN(1);
curent_order=2;
break;
case 2:
PowerOnTEN(2);
curent_order=0;
break;
}


как-то так...
3. elmot - 28 Февраля, 2013 - 17:08:08 - перейти к сообщению
Телепат вернулся из отпуска.
4. central30 - 11 Июня, 2013 - 11:31:10 - перейти к сообщению
не совсем понятен код.А как мне ступень реализовать тогда
CODE:

if (temp<=(porV-3)) // устанавливаем порог включения
{
PORTC.0=1;
t1 =1; // ставим значение переменной для тригера порта
}


if (temp>=porV) // установим верхний порог отключения
{
PORTC.0=0;
t1=0; //ставим значение переменной для тригера порта
}
if ( temp >= (porV - 9) )//устанавливаем верхний порог PORTC 2
{
PORTC.2=0;
}
if (temp<=(porV-12))//устанавливаем нижний порог РС2
{
PORTC.2=1;
}

if ( temp >= (porV - 4) )//верхний порог РС1
{
PORTC.1=0;
}
if (temp<=(porV-7)) //нижний порог РС1
{
PORTC.1=1;
}


вот это мой код для работы ступени
5. Predator - 11 Июня, 2013 - 22:04:00 - перейти к сообщению
во вот. всплыла тема.
а чего непонятного?
curent_order - текущая очередь - при необходимости включить еще один тэн - включается тот "чья" очередь и очередь передается следующему.
это дело можно упаковать в функцию и вызывать при достижении каждого порога. ну а выключать - дело не хирое.
6. Artem - 11 Июня, 2013 - 22:42:19 - перейти к сообщению
central30 пишет:
управления тремя тэнами

Можно глупый вопрос: что такое тен?
8. central30 - 12 Июня, 2013 - 11:47:09 - перейти к сообщению
Прошу прощение за тупость,хотя это у меня не редкость,что то до меня не доходит.
Я в своих условиях написал,что если температура установлена на 60 градусов,то по достижению temp >= (porog - 9),отключаем PORTC.2,тоесть дал конкретную задачу именно на отключение этого порта.Так как же мне сделать что бы он сменил Порт в следующий раз?
Получается типо так: temp >= (porog - 9) curent_order PORTC.2?
9. Predator - 12 Июня, 2013 - 14:47:03 - перейти к сообщению
я с трудом понимаю задачу, пишу отталкиваясь от первого поста:
для начала упростите себе жизнь: сделайте функции PowerOnTEN(order) и PowerOffTEN(order), где order-номер тена.
Далее у вас при включении питания должны включиться все 3, потом понемногу поотключаться и потом поочереди поддерживать температуру.
получаем что-то типа того:
CODE:

void main (void)
{
config_all();
PowerOnTEN(0);
PowerOnTEN(1);
PowerOnTEN(2);
while (temper<=temper_porog-9)
{
temper=gettemper();
}; // ждем пока нагреется до порог-9
PowerOffTEN(2);

while (temper<=temper_porog-6)
{
temper=gettemper();
}; // ждем пока нагреется до порог-6
PowerOffTEN(1);
curent_order=0;// текущий включен номер 0

while(1) // бесконечный цикл поддержания температуры
{
keep_temperature();
}


}


keep_temperature -функция из поста от 28 февраля.
10. central30 - 12 Июня, 2013 - 15:09:28 - перейти к сообщению
Попробую написать и отладить,о результатах сообщу
11. central30 - 23 Ноября, 2013 - 11:03:06 - перейти к сообщению
CODE:
if (temp<=tempporog)
{
switch (curent_order)
case 0:
PowerOnTEN(0);
curent_order=1;
break;
case 1:
PowerOnTEN(1);
curent_order=2;
break;
case 2:
PowerOnTEN(2);
curent_order=0;
break;
}

Не получается:После Break идет дальнейшая операция.Надо как то сделать условие бесконечного цикла
12. central30 - 23 Ноября, 2013 - 18:51:41 - перейти к сообщению
Уважаемые форумчане,ну никак не получается сделать мне очередь.Совсем застрял на маленьком кусочке кода.Вообщем мой код
CODE:
if (temp2<=(porV2-3)){
switch (t2) {
case 0 : PORTC.1=1;
t2=1;
break;

case 1 : PORTC.2=1;
t2=0;
break;
}

}
//temp2-переменная измерения температуры
//porV2-переменная установки порога включения
//t2-переменная установки очереди,триггер

Пока пытаюсь сделать на 2 тена.Проверяю в протеусе,меняется очередь PORTC после отключения,но заслед включается следующий порт,а мне надо по одному.Упала,температура,включился PORTC.1,набрал-отключился,упала температура-включился PORTC.2 и.т.д.
13. Predator - 23 Ноября, 2013 - 23:31:34 - перейти к сообщению
так а отключение у вас вообще работает?
14. central30 - 23 Ноября, 2013 - 23:45:18 - перейти к сообщению
Отключение работает,просто ставлю условия на оба порта по достижению температуры.
15. Predator - 24 Ноября, 2013 - 11:50:37 - перейти к сообщению
т.е. работает примерно так:
1) нагревается 2-мя тенами
2) оба тена отключаются
3) остывает - включается тен 1
4) нагревается - отключаются оба (второй и был отключен, но для упрощения сделано так)
5) остывает - должен включиться тен 2, а включаются оба.
я правильно понял?