Horloge de bureau avec tubes VFD IV-11 sur STM32F401 et convertisseurs DC-DC
Ce projet réalise une élégante horloge de bureau utilisant des tubes à affichage fluorescent à vide (VFD), plus précisément les IV-11. Le microcontrôleur STM32F401CC gère l'affichage dynamique de l'heure via un pilote 8 canaux comme le TD62783AP (ou compatible KID65783AP). L'alimentation provient de modules DC-DC modernes : le XL6009 monte à 45 V pour l'anode, tandis que le MP2307 abaisse les 5 V USB à un filament stable de 1,5 V. L'horloge temps réel (RTC) intégrée assure une précision parfaite sans module externe.
Exigences IV-11 : filament 1,5 V, anode ~50 V. Schéma conçu dans Altium Designer avec fichiers Gerber prêts pour production.
Composants et schéma
Pièces principales :
- Microcontrôleur : STM32F401CC (carte Black Pill) avec RTC intégré.
- Pilote d'affichage : TD62783AP pour commande haute tension des segments.
- Alimentation :
- XL6009 : convertisseur élévateur 5 V → 45 V.
- MP2307 : régulateur abaisseur pour filament stable à 1,5 V.
- Affichage : IV-11 VFD 4 chiffres avec multiplexage dynamique.
- Commandes : Un seul bouton pour réglage heure (appui court : minutes ; appui long : heures).
Le schéma utilise les GPIO pour segments et chiffres, plus un timer pour anti-rebonds du bouton.
Firmware dans STM32CubeIDE
Le code exploite une bibliothèque segment_lcd pour un affichage dynamique fluide. Boucle principale : interroge le RTC, gère les boutons, formate la chaîne d'heure avec deux-points clignotants (période 2 s), et met à jour l'affichage.
Code complet :
#include "main.h"
#include "segment_lcd.h"
#include "stdio.h"
#include "button.h"
/* Private variables ---------------------------------------------------------*/
RTC_HandleTypeDef hrtc;
TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim10;
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef DateToUpdate = {0};
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_RTC_Init(void);
static void MX_TIM10_Init(void);
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_RTC_Init();
MX_TIM10_Init();
HAL_PWR_EnableBkUpAccess();
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
HAL_TIM_Base_Start_IT(&htim10);
while (1)
{
HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &DateToUpdate, RTC_FORMAT_BIN);
BUTTON_Process();
if (BUTTON_GetAction(BUTTON_SETTINGS) == BUTTON_SHORT_PRESS)
{
sTime.Minutes++;
sTime.Seconds = 0;
if(sTime.Minutes >=60)
{
sTime.Seconds = 0;
sTime.Minutes = 0;
}
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
}
if (BUTTON_GetAction(BUTTON_SETTINGS) == BUTTON_LONG_PRESS)
{
sTime.Hours++;
if(sTime.Hours >=24)
{
sTime.Hours = 0;
}
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
}
BUTTON_ResetActions();
SEG_LCD_Process();
HAL_Delay(1);
char str[DIGITS_NUM + 2];
if(sTime.Seconds % 2 == 0)
{
snprintf(str, DIGITS_NUM +2, "%02d.%02d", sTime.Hours, sTime.Minutes );
}
else
{
snprintf(str, DIGITS_NUM +2, "%02d%02d", sTime.Hours, sTime.Minutes );
}
SEG_LCD_WriteString(str);
}
}
// ... (autres fonctions : SystemClock_Config, MX_RTC_Init, MX_TIM10_Init, MX_GPIO_Init - voir original)
Configuration de l'horloge et du RTC
Horloge système : HSE 25 MHz → PLL 84 MHz (HCLK). LSE 32,768 kHz pour RTC. Prédiviseurs : asynchrone 127, synchrone 255. Étalonnage RTC : calibration lisse avec correction -142 impulsions sur 32 s.
Init au premier démarrage : fixe 12:00 le 02/12/2026, drapeau backup dans BKP_DR0 (0x32F2). TIM10 (10 kHz) gère le traitement des boutons.
GPIO : PB3-6,12-15 pour chiffres/segments (sortie push-pull, vitesse faible) ; PA2 pour bouton (entrée, sans pull-up).
Assemblage et débogage
- Envoyez les Gerber au fabricant.
- Flashez via STM32CubeIDE (ST-Link).
- Branchez USB 5 V.
- Réglez l'heure avec le bouton.
Astuces : Évitez les TD62783AP contrefaits — optez pour KID65783AP. Pour tubes IV-6, ajoutez une résistance pour abaisser le filament à 1,2 V.
Points forts
- Pilote dynamique TD62783AP économise les broches GPIO.
- RTC STM32 intégré — pas besoin de DS3231.
- Modules XL6009/MP2307 assurent une alimentation USB ultra-stable.
- Étalonnage RTC atteint ±142 impulsions/32 s de précision.
- Code compile directement ; bibliothèque segment_lcd simplifie le contrôle VFD.
— Editorial Team
Aucun commentaire pour le moment.