LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[PROJEKT] Sterowanie urządzeniami dużych mocy – KA-NUCLEO oraz moduł z przekaźnikami

Gdy już wiemy jakie funkcje będą pełniły poszczególne piny można podłączyć moduł przekaźnika do KA-NUCLEO oraz do urządzeń, którymi będziemy sterować. Można zacząć od połączenia z płytką z mikrokontrolerem. Należy to zrobić zgodnie z poniższą tabelką:

Pin KA-NUCLEO Pin modułu z przekaźnikami
+5V DC+
GND DC-
D7 IN1
D8 IN2

Urządzenia, którymi będziemy sterować (przy założeniu że przekaźniki będą załączać urządzenie a nie je rozłączać) należy podłączyć w następujący sposób:

Pin modułu z przekaźnikami Pin urządzania do sterowania
COM1 Plus urządzenia 1
NC1 Plus zasilania 12V
COM2 Plus urządzenia 2
NC2 Plus zasilania 12V

Zmontowany układ prezentuje się następująco:

Rys 11. Moduł z przekaźnikami podłączony do KA-NUCLEO

 

Po zmontowaniu układu można przejść do napisania programu w środowisku AC6. Będzie działał on następująco – gdy przyciśniemy przycisk 1 zostanie załączony przekaźnik 1, natomiast gdy drugi raz przyciśniemy przycisk 1 przekaźnik 1 zostanie rozłączony. Analogicznie będzie odbywało się to w przypadku drugiego przycisku oraz drugiego przekaźnika (projekt dla programu AC 6 z kodem programu wykorzystanym w projekcie znajduje się w sekcji do pobrania na końcu tego artykułu).

Najpierw deklarujemy dwie zmienne stan_przycisk_1 oraz stan_przycisk_2  należy je umieścić w sekcji Private variables:

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
uint stan_przycisk_1 = 0;
uint stan_przycisk_2 = 0;

/* USER CODE END PV */

Następnie w sekcji Private function prototypes znajduje się funkcja do obsługi przerwań:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

	if(GPIO_Pin == PRZYCISK_1_Pin)
	{
		if (stan_przycisk_1 == 0)
		{
			stan_przycisk_1 = 1;
		}
		else if (stan_przycisk_1 == 1)
		{
			stan_przycisk_1=0;
		}
	}

	if(GPIO_Pin == PRZYCISK_2_Pin)
	{
		if (stan_przycisk_2 == 0)
		{
			stan_przycisk_2 = 1;
		}
		else if (stan_przycisk_2 == 1)
		{
				stan_przycisk_2=0;
		}
	}
}

Jeżeli wystąpi przerwanie zewnętrzne, najpierw sprawdzane jest od którego pinu pochodzi: PA10 (PRZYCISK_1) czy PB3 (PRZYCISK_2). Następnie ustalana jest wartość zmiennej przypisanej do konkretnego przycisku. Dla przykładu jeżeli wystąpiło przerwanie od pinu PA10, sprawdzana jest wartość zmiennej stan_przycisku_1, i jej wartość zostaje zamieniona na przeciwną (jeżeli jej wartość wynosiła 1 to jest ustawiane 0, jeżeli było 0 jest ustawiane 1). Dla przycisku drugiego kod wygląda analogicznie.

Następnie można przejść do omówienia do pętli głównej programu. W sekcji /* USER CODE BEGIN 3 */ umieszczony jest kod, który sprawdzi zmienną stan_przycisku_1, następnie odczeka 50 ms (ma to przeciwdziałać drganiom styków przycisków i przypadkowym zmianom stanów). Po 50 milisekundach sprawdzany jest stan przycisku 1. Jeżeli jest on wciśnięty (stan niski) na wyjściu wyj_przekaznik_1 ustawiany jest stan niski. Dla drugiego przycisku kod wygląda podobnie z tą różnica, że sprawdzana jest zmienna stan_przycisku_2 oraz załączane jest wyjście wyj_przekaznik_2.

 

/* USER CODE BEGIN 3 */

	  // Przekaznik 1
	  if (stan_przycisk_1 == 1)
	  {
		  HAL_Delay(50);
		  if (HAL_GPIO_ReadPin(GPIOA, PRZYCISK_1_Pin)== GPIO_PIN_RESET)
		  {
		  HAL_GPIO_WritePin(GPIOA, WYJ_PRZEKAZNIK_1_Pin, GPIO_PIN_SET);
		  }
	  }
	  else if (stan_przycisk_1 == 0)
	  {
		  HAL_Delay(50);
		  if (HAL_GPIO_ReadPin(GPIOA, PRZYCISK_1_Pin)== GPIO_PIN_SET)
		  {
		  HAL_GPIO_WritePin(GPIOA, WYJ_PRZEKAZNIK_1_Pin, GPIO_PIN_RESET);
		  }
	  }

	  // Przekaznik 2
	  if (stan_przycisk_2 == 1)
	  	  {
		  	  HAL_Delay(50);
		  	  if (HAL_GPIO_ReadPin(GPIOB, PRZYCISK_2_Pin)== GPIO_PIN_RESET)
		  	  {
		  		  HAL_GPIO_WritePin(GPIOA, WYJ_PRZEKAZNIK_2_Pin, GPIO_PIN_SET);
		  	  }
	  	  }
	   else if (stan_przycisk_2 == 0)
	  	  {
	  		  HAL_Delay(50);
	  		  if (HAL_GPIO_ReadPin(GPIOB, PRZYCISK_2_Pin)== GPIO_PIN_SET)
	  		  {
	  			  HAL_GPIO_WritePin(GPIOA, WYJ_PRZEKAZNIK_2_Pin, GPIO_PIN_RESET);
	  		  }
	  	  }
  }
  /* USER CODE END 3 */

 

Działanie programu zostało przedstawione na poniższym materiale wideo:

Autor: Patryk Mądry