3 - Commander une LED RGB par PWM”
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
Et le schéma de câblage
Nous devons comme précédemment pré-configurer les broches du STM32 sous CubeMx comme ceci
Dans l'onglet "Configuration" , régler les Timer 2 et 3 avec le "Prescaler" à 80 et le "Counter Periode" à 100
Et le code à incorporer dans votre fichier main.c
Le programme suivant va faire varier les trois timers de 0 à 100 qui permettra 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 en цs 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, 90); // Green
__HAL_TIM_SET_COMPARE( &htim3, TIM_CHANNEL_2, 60); // Red
__HAL_TIM_SET_COMPARE( &htim2, TIM_CHANNEL_1, 80); // Blue
HAL_Delay( 1000 );
/* 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( 1000 );
}
/* USER CODE END 3 */
}