Desktop-Uhr mit IV-11 VFD-Röhren auf STM32F401 und DC-DC-Wandlern
Dieses Projekt realisiert eine stilvolle Desktop-Uhr mit Vakuum-Fluoreszenz-Anzeigen (VFD-Röhren) – konkret die IV-11. Der Mikrocontroller STM32F401CC steuert die dynamische Zeitanzeige über einen 8-Kanal-Treiber wie den TD62783AP (oder kompatiblen KID65783AP). Die Stromversorgung erfolgt über moderne DC-DC-Module: XL6009 hebt auf 45 V für die Anode an, während MP2307 USB-5 V auf präzise 1,5 V für den Heizfaden herunterregelt. Die integrierte Hardware-RTC sorgt für exakte Zeit ohne externe Module.
IV-11-Anforderungen: 1,5 V Heizfaden, ~50 V Anode. Entwickelt in Altium Designer mit produktionsreifen Gerber-Dateien.
Bauteile und Schaltplan
Wichtige Komponenten:
- Mikrocontroller: STM32F401CC (Black Pill Board) mit integrierter RTC.
- Anzeigetreiber: TD62783AP für Hochvolt-Segmentsteuerung.
- Stromversorgung:
- XL6009: Boost-Wandler 5 V → 45 V.
- MP2307: Buck-Regler für stabile 1,5 V Heizfadenversorgung.
- Anzeige: 4-stellige IV-11 VFD mit dynamischem Multiplexing.
- Bedienung: Ein einziger Taster zur Zeiteinstellung (kurzer Druck: Minuten; langer Druck: Stunden).
Der Schaltplan nutzt GPIO für Segmente und Ziffern plus einen Timer für Tasterentprellung.
Firmware in STM32CubeIDE
Der Code basiert auf einer segment_lcd-Bibliothek für flüssige dynamische Anzeige. Hauptschleife: Abfrage RTC, Tasterbehandlung, Formatierung der Zeichenkette mit blinkendem Doppelpunkt (2-Sekunden-Periode) und Display-Update.
Vollständiger Code:
#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);
}
}
// ... (weitere Funktionen: SystemClock_Config, MX_RTC_Init, MX_TIM10_Init, MX_GPIO_Init - siehe Original)
Uhr-Einrichtung und RTC-Konfiguration
Systemtakt: HSE 25 MHz → PLL 84 MHz (HCLK). LSE 32,768 kHz für RTC. Vorteiler: async 127, sync 255. RTC-Kalibrierung: Smooth-Cal mit -142 Impulskorrektur über 32 s.
Erststart-Initialisierung: Setzt 12:00 am 02.12.2026, Backup-Flag in BKP_DR0 (0x32F2). TIM10 (10 kHz) für Tasterverarbeitung.
GPIO: PB3-6,12-15 für Ziffern/Segmente (Push-Pull-Ausgang, niedrige Geschwindigkeit); PA2 für Taster (Eingang, kein Pull).
Zusammenbau und Debugging
- Gerbers an Fabrik senden.
- Über STM32CubeIDE (ST-Link) flashen.
- USB-5 V anschließen.
- Mit Taster Zeit einstellen.
Tipps: Billige TD62783AP-Fakes meiden – KID65783AP wählen. Für IV-6-Röhren Widerstand für 1,2 V Heizfaden hinzufügen.
Wichtige Highlights
- TD62783AP-Dynamik spart GPIO-Pins.
- Integrierte STM32-RTC – kein DS3231 nötig.
- XL6009/MP2307-Module liefern stabile USB-Stromversorgung.
- RTC-Kalibrierung erreicht ±142 Impulse/32 s Genauigkeit.
- Code kompilierbar out-of-the-box; segment_lcd-Bibliothek vereinfacht VFD-Steuerung.
— Editorial Team
Noch keine Kommentare.