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

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

16. central30 - 24 Ноября, 2013 - 12:33:12 - перейти к сообщению
1)Нагревается оба тенами
2)для упращения задачи,я сделал отключения оба тенов без ступени
3)остывает,должен включится тен1,включается тен1,за след включается тен2
4)по достижению температуры,отключаются оба тена
5)остывает,включается тен2,за след включается тен1
6)и.т.д
(Добавление)
Вообщем надо как то сделать условие чтобы при включение тена1,тен2 ожидал отключения тена1,после этого тен2 включался
17. central30 - 26 Ноября, 2013 - 18:43:17 - перейти к сообщению
Уважаемые,ну неужели никто ничего не может мне подсказать?
18. mihail - 28 Ноября, 2013 - 00:34:23 - перейти к сообщению
Для начала неплохо было бы понять как все должно работать.

central30 пишет:
ступенчатый термостат для управления тремя тэнами.Отключает с разницей в 3 градуса.Поставили к примеру 50 градусов,первый отключается по достижению 43 градусов,второй 46,и последний 50.После отключения и падения температуры опять включается последний,то есть первый уже так и будет отдыхать,а последний постоянно работать


Если температура меньше 43, работают все три ТЭН.
Если температура от 43 до 46, работают второй и третий ТЭН.
Если температура от 46 до 50, работает третий ТЭН.
Если температура больше 50, все ТЭН отключены.

Так?
19. central30 - 28 Ноября, 2013 - 08:19:43 - перейти к сообщению
Все правильно.Но только при температуре 46-50 градусов,должна менятся очередь включения тенов
20. mihail - 28 Ноября, 2013 - 22:12:49 - перейти к сообщению
central30 пишет:
при температуре 46-50 градусов, должна меняться очередь включения тенов


Пытаться писать программу мне пока рано :-)

Итак...

Если температура меньше 43, то включаются первый ТЭН, второй ТЭН и третий ТЭН.
Если температура поднимается до 43, то первый ТЭН отключается. Второй ТЭН и третий ТЭН включены.
Если температура поднимается до 46, то второй ТЭН отключается. Первый ТЭН отключен. Третий ТЭН включен.
Если температура поднимается до 50, то третий ТЭН отключается. Второй ТЭН и третий ТЭН отключены.

Если температура снижается до 46, то включается третий ТЭН. Первый ТЭН и второй ТЭН отключены.
Если температура снижается до 43, то включается второй ТЭН. Первый ТЭН отключен. Третий ТЭН включен.
Если температура снижается ниже 43, то включается первый ТЭН. Второй ТЭН и третий ТЭН включены.

Оно?
21. central30 - 29 Ноября, 2013 - 08:23:53 - перейти к сообщению
Все правильно уважаемый mihail.Ступень я написал,работает.Единственная загвоздка у меня в смене очереди.
22. mihail - 29 Ноября, 2013 - 22:57:15 - перейти к сообщению
central30 пишет:
Все правильно


Программа
char t3, t2, t1, t;

char termometer( void )
{
return 0;
}

int main( void )
{
DDRD |= ((1<<7)|(1<<6)|(1<<5));
PORTD &= ~((1<<7)|(1<<6)|(1<<5));

t3 = 50;
t2 = t3 - 4;
t1 = t2 - 3;

t = 0;

for(;;)
{
t = termometer();

if ( t < t1 )
{
PORTD |= ((1<<7)|(1<<6)|(1<<5)); // 1 on, 2 on, 3 on
}

if ( t == t1 )
{
PORTD &= ~(1<<7); // 1 off
PORTD |= ((1<<6)|(1<<5)); // 2 on, 3 on
}

if ( t == t2 )
{
PORTD &= ~((1<<7)|(1<<6)); // 1 off, 2 off
PORTD |= (1<<5); // 3 on
}

if ( t >= t3 )
{
PORTD &= ~((1<<7)|(1<<6)|(1<<5)); // 1 off, 2 off, 3 off
}

// delay(1000);
}

return 0;
}


Первый ТЭН управляется PD7. Второй ТЭН управляется PD6. Третий ТЭН управляется PD5.

Функция termometer() возвращает измеренную температуру. В примере она всегда возвращает 0. Функция delay(1000) обеспечивает задержку в 1 секунду. Она необязательна. Поэтому я ее закомментировал.
23. mihail - 30 Ноября, 2013 - 20:21:09 - перейти к сообщению
Я тут еще немного подумал и
char t3, t2, t1, t;

char termometer( void )
{
return 0;
}

int main( void )
{
DDRD |= ((1<<7)|(1<<6)|(1<<5));
PORTD &= ~((1<<7)|(1<<6)|(1<<5));

t3 = 50;
t2 = t3 - 4;
t1 = t2 - 3;

t = 0;

for(;;)
{
t = termometer();

if ( t < t1 ) PORTD |= (1<<7); // 1 on
if ( t >= t1 ) PORTD &= ~(1<<7); // 1 off
if ( t <= t1 ) PORTD |= (1<<6); // 2 on
if ( t >= t2 ) PORTD &= ~(1<<6); // 2 off
if ( t <= t2 ) PORTD |= (1<<5); // 3 on
if ( t >= t3 ) PORTD &= ~(1<<5); // 3 off

// delay(1000);
}

return 0;
}

Так намного лучше.
24. central30 - 04 Декабря, 2013 - 20:15:52 - перейти к сообщению
Большое спасибо Михаил,буду пробовать и отлаживать.О результатах сообщу
25. mihail - 05 Декабря, 2013 - 19:55:24 - перейти к сообщению
Не стоит благодарности Улыбка
26. central30 - 11 Декабря, 2013 - 23:08:37 - перейти к сообщению
Всем привет!Наконец то написал чередование с помощью счетчика.Привожу пример для двух ТЭНов
CODE:

int cnt=0; //переменная счетчика
int temp ; //переменная температуры
int porog; //
while(1){
if(temp>=porog){
PORTC.1=0;
PORTC.2=0;
cnt=cnt+1;//прибавляем после отключения единицу к нашей переменнной
}
if(temp<=(porog-3) && cnt==0){
PORTC.1=1;
if(temp<=(porog-6){
PORTC.2=1
}
}
if(temp<=(porog-3) && cnt==1){
PORTC.2=1;
if(temp<=(porog-6){
PORTC.1=1
}
}
if(cnt==2){ //сбрасываем счетчик на ноль
cnt=0
}

Считаю тему закрытой.Всем большая благодарность и спасибо за помощь и поддержку
27. cjA - 02 Января, 2014 - 18:27:59 - перейти к сообщению

это не Си, вот смотрел и думал- почему я не понимаю. В Си не может идентификатор начинаться с чеслительного
28. central30 - 12 Января, 2014 - 12:11:56 - перейти к сообщению
По вашему я должен был весь код написать на 3 страницы.Это небольшой примерик.А си это или не си,главное у меня получился требуемый результат.Трехступеньчатый термостат с отдельным термостатом на Бойлер.