3 - Commander une LED RGB par PWM” : Différence entre versions
(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
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 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 */
}