STM32F401 驱动 IV-11 VFD 真空荧光显示桌摆钟
这个项目打造了一款时尚的桌面时钟,使用真空荧光显示管(VFD)——具体是 IV-11 型号。STM32F401CC 微控制器通过 8 通道驱动器(如 TD62783AP 或兼容的 KID65783AP)实现动态时间显示。电源采用现代 DC-DC 模块:XL6009 升压至 45V 供阳极使用,MP2307 将 USB 5V 稳压至精确的 1.5V 灯丝供电。板载硬件 RTC 确保走时精准,无需外部模块。
IV-11 参数:灯丝 1.5V,阳极约 50V。使用 Altium Designer 设计,提供生产级 Gerber 文件。
组件与原理图
主要部件:
- 微控制器:STM32F401CC(Black Pill 开发板),内置 RTC。
- 显示驱动:TD62783AP,用于高压段选控制。
- 电源模块:
- XL6009:升压转换器 5V → 45V。
- MP2307:降压稳压器,提供稳定的 1.5V 灯丝电压。
- 显示屏:4 位 IV-11 VFD,支持动态扫描。
- 控制:单按钮调时(短按调分,长按调时)。
原理图使用 GPIO 控制段码和位选,按键去抖用定时器。
STM32CubeIDE 固件开发
代码基于 segment_lcd 库实现流畅动态显示。主循环:读取 RTC、处理按键、格式化时间字符串(冒号 2 秒闪烁周期),并刷新显示。
完整代码:
#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);
}
}
// ... (其他函数:SystemClock_Config, MX_RTC_Init, MX_TIM10_Init, MX_GPIO_Init - 详见原代码)
时钟设置与 RTC 配置
系统时钟:HSE 25 MHz → PLL 84 MHz (HCLK)。RTC 使用 LSE 32.768 kHz。预分频器:异步 127,同步 255。RTC 校准:平滑校准,32 秒内 -142 脉冲修正。
首次上电初始化:设置为 2026 年 12 月 2 日 12:00,备份标志存于 BKP_DR0 (0x32F2)。TIM10 (10 kHz) 处理按键逻辑。
GPIO:PB3-6,12-15 用于位选/段码(推挽输出,低速);PA2 为按键输入(无上拉)。
组装与调试
- 将 Gerber 文件发送给 PCB 厂家制作。
- 使用 STM32CubeIDE 通过 ST-Link 烧录固件。
- 插入 USB 5V 供电。
- 用按钮设置时间。
小贴士:避免假冒 TD62783AP,推荐 KID65783AP。若用 IV-6 管子,灯丝加电阻降至 1.2V。
核心亮点
- TD62783AP 动态驱动节省 GPIO 引脚。
- STM32 内置 RTC,无需 DS3231。
- XL6009/MP2307 模块提供稳如磐石的 USB 供电。
- RTC 校准精度达 ±142 脉冲/32 秒。
- 代码即插即用;segment_lcd 库简化 VFD 控制。
— Editorial Team
暂无评论。