
音乐频谱时钟,低功耗
简介
使用2.9寸单色全反射屏,N32L403作为主控制作的低功耗音乐频谱,元器件少,焊接简单,可使用板子上的USB下载/更新固件。
简介:使用2.9寸单色全反射屏,N32L403作为主控制作的低功耗音乐频谱,元器件少,焊接简单,可使用板子上的USB下载/更新固件。开源协议
:CC BY-NC 4.0
描述
视频链接:
B站视频--功能演示及介绍
https://www.bilibili.com/video/BV1qay3BTEAb/?vd_source=53ffff59bca58f63dd0e83a5e2172875
源码链接
源码是VSCode EIDE工程 GCC编译器
https://gitee.com/keleLight/N32L40X__2.9lcd_MusicSpectrum
项目简介
本项目使用2.9寸单色全反射屏,N32L403作为主控制作的低功耗音乐频谱,设计了数字字体优化了显示效果。内置RTC芯片SD3900以及温湿度传感器SHT40。电容电阻采用0402规格。元器件少,焊接简单,可使用板子上的USB下载/更新固件,板子上预留了SWD接口,有2个版本外壳。
项目功能
- 低功耗
- 四种显示模式,模式0为时间日期显示,模式1~3为音乐频谱
- 三种频谱显示风格
- 频谱刷新率50Hz
- 可设置音乐频谱休眠来节省电量
- 可调麦克风增益
- 可调谱线平滑度
按键功能,背后还有一个复位按键

项目参数
功耗数据供电4V下使用合宙CC表获取的,续航以3.7V额定电压 450mAh电池计算。
- 关机:23uA。
- 模式0:1秒唤醒间隔,平均工作电流142uA,此模式下续航约132天。
- 模式1~3:20毫秒唤醒间隔,平均工作电流4.2mA,此模式下续航约4.5天。
- 模式1~3可启用频谱休眠来提升续航时间。
- ADC采样率20KHz
功耗展示

原理解析(硬件说明)
硬件电路框图

电源电路
省略了USB供电跟电池供电的切换电路,板子工作电流小于10mA,低于LGS4056充满判定电流。电池电压测量电路采用NMOS+PMOS控制通断以降低功耗。3.3V供电选择低噪声的LP5907以降低电源芯片对麦克风电路的影响。电池使用3.7V额定电压带保护板的软包锂电池,附件中提供购买链接。
V1.4本版已将锂电池充电由LGS4056更换为SK4554D8-42。

单片机选型
单片机是功耗的大头,单片机使用N32L403KBQ7 M4F内核64MHz主频 128K-flash 24K-SRAM,本项目着重考虑低功耗,看重单片机运行时候的功耗以及各种低功耗模式下的功耗以及唤醒速度。N32L403使用3.3V供电使用内置高速RC时钟64MHz主频下电流3.7-5.9mA,睡眠模式下2-3.8mA,STOP2模式下保持内存供电几个uA,12us即可从STOP2模式下唤醒。单片机的具有12bit 4.5Msps ADC足够应付麦克风数据采集,M4F内核可使用ARM-DSP库加速FFT等计算进一步降低功耗。RTC外设可作为低功耗的唤醒源使用。单片机可以通过USB接口下载更新程序,方便复刻制作。
麦克风以及运放选型
起初我考虑使用IIS输出的数字麦克风以简化电路,但由于数字麦克风进入待机时需要几个毫秒到十几毫秒的唤醒时间放弃了。麦克风选择6050规格灵敏度-26 ±2dB的咪头(附件中提供购买链接),想要拾音距离远需要高灵敏度咪头。使用的咪头输出信号很小 ,凑很近大喊才几十毫伏信号波动,还得使用运放来放大信号才能供单片机采集。ADC采样率为20KHz运放选择LMV321,功耗低带宽也足够,运放采用反向放大电路,这部分电路供电由单片机IO提供。单片机的ADC不能测量小于GND的电压信号,所以咪头信号经过运放放大时提供了偏置电压(大概1.64V),单片机采集运放输出的信号时要减去偏置电压。

显示屏选型
屏幕也是功耗的大头,本项目选择了鱼鹰光电2.9寸全反射类型的单色屏 分辨率384*168,没有背光、可视角度不如带背光的屏,但为了功耗能妥协。这个屏有低功耗跟高功耗两种工作模式,刷新率0.25Hz~51Hz,刷新率越低功耗越低。本项目使用了1Hz以及51Hz刷新率,3.3V供电下这两种刷新率下维持显示的静态电流大概为19uA以及560uA。附件中提供购买链接。
时钟芯片选型
使用了SD3900 3225小封装,内置晶振以及温度补偿,工作电流0.8uA,±3.8ppm。SD3900可以使用一次性电池或者可充电电池做后备供电电源,可以为可充电电池充电,本工程使用了锂电池供电所以省略了时钟芯片的后备供电。
温湿度传感器选型
使用SHT40,简单易用,精度足够且相对SHT45便宜不少(±0.2℃ ±1.5%RH),1Hz测量频率下平均电流0.4uA。
电池选型
选择303040规格软包锂电池,为了让焊接简单一些牺牲了电池空间,没尽可能紧凑布局元器件。
软件代码
此处可将代码嵌入
源码是VSCode EIDE工程 GCC编译器,有需要可自行移植到keil。以下为程序原理介绍,程序篇幅过大不能全部展示出来,详细得亲自参考源码。
程序流程以及工作模式示意

麦克风信号使用ADC采集
配置N32L403的TIM3定时器的TRGO功能来触发ADC采集,采样率为20K,有效频率为10K,采集的数据通过DMA搬运到内存,搬运256次后触发DMA中断提醒程序取走采集好的数据,取走数据后开启新的一轮数据采集。ADC采集的数据还需要减去运放的偏置电压。
FFT运算相关
FFT使用ARM-DSP库,计算使用浮点数。首先把采集到的数据加汉明窗处理以减少频率泄露,接着把加窗处理后的数据填入FFT输入数据的实部后对数据进行FFT变换,对FFT变换后数据进行对数变换后就是直观的谱线频谱的能量数据了。
屏幕以及显示相关
屏幕的主控为ST7305,屏的内存每个字节映射了2路4个垂直像素,给跑64MHz的N32L403绘制屏幕带来了不小的压力,绘制消耗的时间多也增加了功耗。为了达到足够快的频谱以及数字的绘制区分了频谱绘制以及时间动画,频谱谱线绘制直接根据谱线长度操作CGRAM。时间动画的字体绘制一份存到内存中,每次动画就逐帧复制到CGRAM中。一个循环周期内绘制的内容完成后发送CGRAM给屏幕刷新显示。
*192行14列,每个列3字节24bit(对应屏幕上相邻2列的12像素)
*CGRM 每个字节映射到8个垂直像素,两列各4个垂直像素
* L0 L1
*byte0 7 6
*byte0 5 4
*byte0 3 2
*byte0 1 0
*byte1 7 6
*byte1 5 4
*byte1 3 2
*byte1 1 0
/* 绘制像素 */
void LCD_DrawPixel(uint16_t x,uint8_t y,uint8_t Color)
{
if(x>=LCD_MAX_X || y>=LCD_MAX_Y) return;
if(Color) CGRAM[ x>>1][y>>2] |= (0x80 >> ((y<<1)&0x07)) >> (x&0x01);
else CGRAM[ x>>1][y>>2] &= ~((0x80 >> ((y<<1)&0x07)) >> (x&0x01));
}
功耗控制
模式0下每1秒唤醒一次判定要不要刷新时间日期、温湿度、电量等,屏设置1Hz的低功耗的工作模式,使用按键中断代检查按键动作来触发20毫秒唤醒间隔的按键扫描。
模式1~3下每20毫秒唤醒一次,唤醒后取出DMA搬运好的ADC采集数据后立即开始新的一轮数据采集,在新的一轮数据采集的同时做FFT变化以及绘制谱线、时间日期、温湿度、电量等。绘制好屏幕内容后通关SPI DMA发生给屏幕,发送期间进入睡眠模式等待屏的数据发送完成以及ADC数据采集完成关闭外设,都完成后进入STOP2模式待机。
模式1~3切换为模式0时关闭ADC、TIM、麦克风运放电路供电以节省电量。
按键驱动
按键扫描在RTC中断函数中运行,记录下按键状态后由主循环里的按键驱动函数做出动作,模式0下使用按键中断来触发开启按键扫描,5秒后没按键动作后再关闭。按键提供单击、长按两种功能。
PCB与外壳绘制、字体绘制、图片取模相关
异形板框:使用立创EDA画出大概PCB轮廓后导出PCB3D预览的3D文件到fusion360中绘制后导出dxf格式文件,接着再导入立创EDA做板框。
外壳绘制:使用立创EDA导出的PCB3D预览的3D文件到fusion360进行绘制,本项目外壳绘制视频https://www.bilibili.com/video/BV13fkDBPEFW/
数字字体:使用window自带的画图工具绘制。
图片取模:Image2Lcd、CharacterMatrix。
焊接组装
必须的焊接工具:电烙铁(小烙铁头的,比如C245)、加热台/板、吸锡带(处理FPC连锡)
外壳有两个版本,带亚克力盖板与不带的,自行选择打印。
- 绝大部分元器件以匹配好立创商城,附件中提供bom表,可从立创商城bom下单购买。
- PCB焊接推荐打钢片刷锡膏焊接,附件中提供了辅助焊接网页工具。
- 不使用上面推荐的方式请先焊接好N32L403以及LGS4056HDA再焊接其他元器件,SHT40、咪头最后再焊接。
- SHT40的检测窗口不要粘到助焊剂,维修佬的洗板水可以洗,暂未发现有问题。
- 咪头需要剪短引脚,先给咪头负极上一点焊锡后再焊接。
- PCB底面的贴屏幕区域的焊盘不能太突出,防止抬起屏幕,可用吸锡带抹平焊盘。
- 焊接完成后必须检查是否焊接正常有没有短路虚焊,不然下载程序可能会烧USB口或者下载器。
- 使用DFU下载程序需要使用Nations MCU Download Tool,不能焊接电池,下载工具、固件(bin文件)、使用在附件中给出。
- 确定焊接没问题且安装好DFU驱动后电脑识别不出板子可把+5V跟VBAT连接起来再插入电脑。
- 下载程序后确定没问题了再用薄双面胶把屏幕贴好(5mm厚度以下)。
- 贴好屏幕了再焊接电池,电池使用303040规格软包锂电池(需要剪短线材),附件中给出购买链接。
- 外壳附件中提供stl格式的3D打印文件(光固化打印)
- 按键帽附件中提供stl格式的3D打印文件(光固化打印),也有成品的金属键帽购买链接。
- PCB跟外壳为卡扣固定,后盖跟主体也是卡扣固定。
- 亚克力盖板使用dxf文件打样,0.5mm厚度的透明亚克力。中间方框为透明开窗-底部打印(颜色自选)-常规遮光-正品3M9448A(背胶)。盖板左右两边宽度不同,用来调整安装差异用,对准好了再贴。
- 使用手机支架贴到后盖立起来,附件中给出购买链接。
- 有疑问或者问题可进QQ群咨询,QQ群号:697752852
屏幕背面贴少量双面胶可方便调整位置以及拆下屏幕,我用的0.3mm厚度3M双面胶。

注意事项
- C17~C22使用的电容耐压至少要25V !!!
- PCB厚度为1mm
- 一定要检查好焊接!!!
- 屏幕一定要下载程序确定没问题了再贴!!!
- 确定焊接没问题且安装好DFU驱动后电脑识别不出板子可把+5V跟VBAT连接起来再插入电脑。
- bom表中没有的元器件,如屏幕、SD3900、咪头、电池、按键帽、手机支架在附件中给出购买链接。
- 外壳使用尼龙打印会大概率会变形严重,但打印树脂又会发黄等请自行选择打印材料方式。
- 焊接状态下更新程序不需要拆下电池,短接3V3EN与GND一秒即可识别出USB(DFU)。


首次开机会提示按键操作


实物图





更新记录
2025-11-19:删除了部分调试内容的显示。
2025-11-20:补上了我遗漏没写的12小时制时间显示。
2025-11-26:增加了电池空电关机,修改了12小时制时间计算错误。
2025-12-02:增加了带透明亚克力盖板的外壳。
2025-12-10:修复了在时间日期设置时长按menu会设置时间日期的bug,修复了设置界面更改显示模式异常的bug。
2025-12-13:修复了切换模式死机无法复位、电量绘制bug。
2025-12-29:调整PCB布局、增加咪头焊接注意事项、USB识别不出来问题处理、屏幕装配建议。
2026-01-12:增加多次初始化是否成功判断、修复温度低于10度显示异常、调整频谱模式2以及3的温度数字位置。
2026-03-10:锂电池充电由LGS4056更换为SK4554D8-42、充电电流从100mA左右改为210mA左右、增加关断3.3V供电的焊盘以便带电池状态重新下载程序。
2026-05-21:去掉了USB口电源进线的ESD二极管。
2026-06-03:修改了LMV321放大倍数计算用了错误电阻的描述。
演示视频
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论