Zpět na domů

Hodiny na VLI IV-11 a STM32F401: schéma a kód

Projekt stolních hodin používá VLI IV-11 s mikrokontrolérem STM32F401CC. Implementováno dynamické řízení indikace, hardwarový RTC s kalibrací a napájení z USB přes DC-DC moduly. Kompletní kód a schéma pro reprodukci.

Retro-hodiny IV-11 na STM32: kompletní průvodce sestavením
Advertisement 728x90

Stolní hodiny s VLI IV-11 na STM32F401 a DC-DC měničích

Projekt realizuje stolní hodiny s použitím vakuově luminiscenčních indikátorů (VLI) IV-11. Mikrokontrolér STM32F401CC řídí dynamickou indikaci času přes 8-kanálový řidič TD62783AP (nebo analog KID65783AP). Napájení je zajištěno moderními DC-DC moduly: XL6009 pro anodové napětí 45 V a MP2307 pro žhavení 1,5 V z USB 5 V. Hardwarové RTC mikrokontroléru zajišťuje přesný chod času bez externích modulů.

Požadavky na napájení VLI IV-11: žhavení 1,5 V, anod ~50 V. Schéma je navrženo v Altium Designer, deska je vyrobena podle Gerber souborů.

Komponenty a schéma

Klíčové prvky:

Google AdInline article slot
  • Mikrokontrolér: STM32F401CC (Black Pill) s hardwarovým RTC.
  • Řidič indikátorů: TD62783AP pro vysokonapěťové řízení segmentů.
  • Napájení:

- XL6009: zvyšující měnič 5 V → 45 V.

- MP2307: snižující pro přesné 1,5 V žhavení.

  • Indikace: 4 číslice VLI IV-11, dynamické multiplexování.
  • Ovládání: tlačítko pro nastavení času (krátký stisk — minuty, dlouhý — hodiny).

Schéma zahrnuje GPIO pro segmenty a číslice, časovač pro debouncing tlačítka.

Google AdInline article slot

Firmware na STM32CubeIDE

Kód využívá knihovnu segment_lcd pro dynamickou indikaci. Hlavní smyčka: dotazování RTC, zpracování tlačítek, tvorba řetězce času s blikající tečkou (perioda 2 s), výstup na indikátor.

Kompletní kód:

#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);
  }
}

// ... (ostatní funkce: SystemClock_Config, MX_RTC_Init, MX_TIM10_Init, MX_GPIO_Init - viz originál)

Nastavení taktování a RTC

Systémová frekvence: HSE 25 MHz → PLL 84 MHz (HCLK). LSE 32,768 kHz pro RTC. Předděliče: asynchronní 127, synchronní 255. Kalibrace RTC: smooth calibration s korekcí -142 impulsů na 32 s.

Google AdInline article slot

Inicializace při prvním spuštění: nastavení 12:00 12.02.2026, marker v BKP_DR0 (0x32F2). Časovač TIM10 (10 kHz) pro zpracování tlačítek.

GPIO: PB3-6,12-15 — číslice/segmenty (output PP, low speed); PA2 — tlačítko (input, no pull).

Sestavení a ladění

  • Nahrajte Gerber do výroby.
  • Nasaďte firmware STM32CubeIDE (ST-Link).
  • Připojte USB 5 V.
  • Nastavte čas tlačítkem.

Zvláštnosti: vyhněte se padělkům TD62783AP, použijte KID65783AP. Pro VLI-6 přidejte rezistor do obvodu žhavení (1,2 V).

Co je důležité

  • Dynamická indikace přes TD62783AP minimalizuje počet GPIO.
  • Hardwarové RTC STM32 eliminuje potřebu DS3231.
  • DC-DC moduly XL6009/MP2307 zajišťují stabilní napájení z USB.
  • Kalibrace RTC koriguje přesnost (±142 imp/32s).
  • Kód je připraven ke kompilaci, knihovna segment_lcd zjednodušuje řízení VLI.

— Editorial Team

Advertisement 728x90

Číst dál