3 - Commander une LED RGB par PWM” : Différence entre versions

De Wiki L.A.B
Aller à : navigation, rechercher
(Page créée avec « =='''Commander une led Rgb par PWM'''== <br> <br> Nous allons poussez un peu plus loin l'exploration du PWM en pilotant l’éclairage d'une led RGB. Réaliser le montage... »)
 
(Commander une led Rgb par PWM)
Ligne 9 : Ligne 9 :
  
 
- 1 résistance de 200 Ω pour la broche rouge
 
- 1 résistance de 200 Ω pour la broche rouge
 +
 +
La valeur de ces trois résistances permet de faire varier linéairement la tension  aux bornes des broches de la led RGB
 +
permettant de générer une couleur blanche.
  
 
Voici l'emplacement des différentes broches de la led RGB
 
Voici l'emplacement des différentes broches de la led RGB
Ligne 29 : Ligne 32 :
  
 
Et le code à incorporer dans votre fichier main.c
 
Et le code à incorporer dans votre fichier main.c
 +
Le programme suivant va faire varier les trois timers de 0 à 100 sur qui permettra de une variation de tension linéaire sur l'ensemble des 3 broches RGB de la led.
  
 
<syntaxhighlight lang="cpp" enclose="div">
 
<syntaxhighlight lang="cpp" enclose="div">
Ligne 47 : Ligne 51 :
 
   while (1)
 
   while (1)
 
   {
 
   {
  for ( int i = 0; i < 100; i ++ )
+
  for ( int i = 0; i < 100; i ++ ) // variation de 0 à 100 de la valeur du Timer.
 
  {
 
  {
 
   /* USER CODE END WHILE */
 
   /* USER CODE END WHILE */
Ligne 66 : Ligne 70 :
  
 
   }
 
   }
 +
  /* USER CODE END 3 */
 +
 +
  }
 +
 +
</syntaxhighlight>
 +
 +
Dans l'exemple suivant , nous déterminons la valeur du timer pour chaque couleur
 +
 +
<syntaxhighlight lang="cpp" enclose="div">
 +
 +
  /* Initialize all configured peripherals */
 +
  MX_GPIO_Init();
 +
  MX_TIM3_Init();
 +
  MX_TIM2_Init();
 +
 +
  /* USER CODE BEGIN 2 */
 +
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_1 ); // Green
 +
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_2 ); // Red
 +
  HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 ); // Blue
 +
  /* USER CODE END 2 */
 +
 +
  /* Infinite loop */
 +
  /* USER CODE BEGIN WHILE */
 +
  while (1)
 +
  {
 +
 +
  /* USER CODE END WHILE */
 +
  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, 30); // Green
 +
  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, 50); // Red
 +
  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 20); // Blue
 +
  HAL_Delay( 500 );
 +
 +
 +
  /* USER CODE END WHILE */
 +
  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, 5); // Green
 +
  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, 5); // Red
 +
  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 3); // Blue
 +
  HAL_Delay( 500 );
 +
 +
}
 
   /* USER CODE END 3 */
 
   /* USER CODE END 3 */
  

Version du 16 novembre 2017 à 16:08

Commander une led Rgb par PWM



Nous allons poussez un peu plus loin l'exploration du PWM en pilotant l’éclairage d'une led RGB.

Réaliser le montage suivant à l'aide de :

- 2 résistances de 100 Ω pour les broches Vert et Bleu

- 1 résistance de 200 Ω pour la broche rouge

La valeur de ces trois résistances permet de faire varier linéairement la tension aux bornes des broches de la led RGB permettant de générer une couleur blanche.

Voici l'emplacement des différentes broches de la led RGB

RGB-LED.png


Et le schéma de câblage

STM32-RGB1-LED4.PNG


Nous devons comme précédemment pré-configurer les broches du STM32 sous CubeMx comme ceci

STM32-RGB-LED1.PNG


Dans l'onglet "Configuration" , régler les Timer 2 et 3 avec le "Prescaler" à 80 et le "Counter Periode" à 100

STM32-RGB-LED5.PNG
STM32-RGB-LED6.PNG


Et le code à incorporer dans votre fichier main.c Le programme suivant va faire varier les trois timers de 0 à 100 sur qui permettra de une variation de tension linéaire sur l'ensemble des 3 broches RGB de la led.

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_1 ); // Green
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_2 ); // Red
  HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 ); // Blue
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	  for ( int i = 0; i < 100; i ++ ) // variation de 0 à 100 de la valeur du Timer.
	  {
  /* USER CODE END WHILE */
	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, i); // Green
	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, i); // Red
	  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, i); // Blue
	  HAL_Delay( 20 );
  }
	  for ( int i = 100; i > 0; i -- )
	  {
	   /* USER CODE END WHILE */
	 	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, i); // Green
	 	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, i); // Red
	 	  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, i); // Blue
	 	  HAL_Delay( 20 );
	   }
  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

  }

Dans l'exemple suivant , nous déterminons la valeur du timer pour chaque couleur

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM3_Init();
  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_1 ); // Green
  HAL_TIM_PWM_Start( &htim3, TIM_CHANNEL_2 ); // Red
  HAL_TIM_PWM_Start( &htim2, TIM_CHANNEL_1 ); // Blue
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
	
  /* USER CODE END WHILE */
	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, 30); // Green
	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, 50); // Red
	  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 20); // Blue
	  HAL_Delay( 500 );


	   /* USER CODE END WHILE */
	 	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_1, 5); // Green
	 	  __HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, 5); // Red
	 	  __HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 3); // Blue
	 	  HAL_Delay( 500 );

}
  /* USER CODE END 3 */

  }