Перейти к содержанию
    

stm32f1 автомат управления уровня воды

Spoiler
void TIM2_IRQHandler (void)
{
	if(TIM2->SR & TIM_SR_UIF)
	{
		TIM2->SR &= ~ TIM_SR_UIF;
		 IWDG->KR= 0xAAAA;

		 if((GPIOB->IDR&GPIO_IDR_IDR1)==0)
          {
		    GPIOB->BSRR|=GPIO_BSRR_BR12;
				        	// flag4=0;
				        	// flag_uroven=0;
		 }




             if((GPIOB->IDR&GPIO_IDR_IDR5)==0)
			  {

			  			nastroyki.flag=1;


			  	}

                if(nastroyki.flag==1)
                {
                	nastroyki.pauza1++;
                }

                if(nastroyki.pauza1==10)
                {
                	menu_lcd++;
                	menu_btn++;
                }
                if(GPIOB->IDR&GPIO_IDR_IDR5)
                {
                	nastroyki.flag=0;
                	nastroyki.pauza1=0;
                }

	}



}
void TIM3_IRQHandler (void)
{
	if(TIM3->SR & TIM_SR_UIF)
	{
		TIM3->SR &= ~ TIM_SR_UIF;
		 IWDG->KR= 0xAAAA;






		          if((GPIOB->IDR&GPIO_IDR_IDR0)==0)
		           {

		        		 pauza1=0;
		           }
		          else
		           {

		        		pauza1++;
		        	}
		        // program_start();
		//     if(flag_uroven==1)
		//     {
		            	//flag_uroven=0;
		                 if(pauza1>=20)
		         		     {

		         		    	 flag_start2=0;
		         		    	// flag_peregruz=0;
		         		     }

		         		   if(pauza1>=1400)
		         		   {

		         			   GPIOB->BSRR|=GPIO_BSRR_BS12;

		         				GPIOC->BSRR|=GPIO_BSRR_BS13;
		         			   GPIOA-> BSRR |=GPIO_BSRR_BS6;

		         		  }
		         		   if(pauza1>=1410)
		         		   {

		         			  flag_start2=1;//On ADC
		         		   }

		         		   if(pauza1>=1501)
		         		  {

		         		       GPIOA-> BSRR |=GPIO_BSRR_BR6;
		         		      GPIOC->BSRR|=GPIO_BSRR_BR13;
		         		      //flag_uroven=0;

		         		  }











	}
}

Решил я сделать автомат уровня воды для эл. насоса .Написал программу.А она работает со збоем.В качестве управление уровнями на GPIO выбрал контакты реле ~24 v .Если ёмкость пуста реле отключённые.А при отключении работают тики в прерывании по таймеру и через минуту загрузки процессора включается двигатель.Так организован нижний уровень .А верхний уровень так.Когда насос работает срабатывает первое реле срабатывает и через время срабатывает GPIO устанавливается в лог 1.Вода дошла до верхнего уровня и GPIO устанавливается в лог 0.И двигатель стал. Проблема в том что нет стабильной работы
уровней.Контролер работает стабильно.А подпрограмма в прерывании по таймеру.

Изменено пользователем haker_fox
Тему переместил в раздел STM32. Длинный код убрал под спойлер. Текст сообщения отформатировал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 06.09.2023 в 13:46, VladislavS сказал:

Держи нас в курсе! 

Ну да вы же профиссианал.Куда мне до вас.Я звёзд с неба не хватаю.А почему не стабильно работает .Проблемма аппаратная или програмная?.Если аппаратная .То как выйти с тупика.?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

19 hours ago, dimir said:

.В качестве управление уровнями на GPIO выбрал контакты реле ~24 v .

Контакты реле не могут управлять или изменять уровень на на GPIO.

Они могут подключить или отсоеденить какую-то цепь, которая и поменяет уровень на GPIO, но если нет схемы, то что у вас там собранно не понятно.

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

 

19 hours ago, dimir said:

Если аппаратная .То как выйти с тупика.?

Все просто, покажите ел. схему, фото как собранно и вам смогут подсказать что поменять.

Дребезг контактов, наводки как вы с этим боретесь?

Изменено пользователем codenamehawk

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Контакты реле можно использовать  как кнопку управления .Я уже решил данную проблему.Смещением включения порта В12 и понял причину почему подвисает подпрограмма.1 нужен интервал времени между включением и выключением. и 2 сместил В12 относительно включения В6

Спойлер
void TIM3_IRQHandler (void)
{
	if(TIM3->SR & TIM_SR_UIF)
	{
		TIM3->SR &= ~ TIM_SR_UIF;
		 IWDG->KR= 0xAAAA;






		          if((GPIOB->IDR&GPIO_IDR_IDR0)==0)
		           {

		        		 pauza1=0;
		           }
		          else
		           {

		        		pauza1++;
		        	}
		        // program_start();
		//     if(flag_uroven==1)
		//     {
		            	//flag_uroven=0;

		                     if(pauza1==20)
		         		     {

		         		    	 flag_start2=0;
		         		    	// flag_peregruz=0;
		         		     }

		         		   if(pauza1==1400)
		         		   {

		         				GPIOC->BSRR|=GPIO_BSRR_BS13;
		         			   GPIOA-> BSRR |=GPIO_BSRR_BS6;

		         		    }
		         		   if(pauza1==1410)
		         		   {

		         			  flag_start2=1;//On ADC
		         		   }
		         		  if(pauza1==1450)
		         		  {
		         			GPIOB->BSRR|=GPIO_BSRR_BS12;
		         		   }
		         		   if(pauza1==1501)
		         		  {

		         		       GPIOA-> BSRR |=GPIO_BSRR_BR6;
		         		      GPIOC->BSRR|=GPIO_BSRR_BR13;
		         		      //flag_uroven=0;

		         		  }











	}
}

 

Вот 2 прерывания по таймеру порт В0 на вход верхний уровень.Порт В1  тоже на вход нижний уровень. а В 12 для отключения системы (насоса) В6 для включения насоса или клапана водоснабжения выходные реле подключаются параллельно.А входными цепями управляют  2 реле на ~24v их контакты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...