任务介绍
本次任务的核心目标是设计一款四位数码管驱动模块,由于数码管的尺寸限制,我们需要重新设计尺寸大小。该款模块要求使用驱动四位七段数码管,采用串行接口控制,也就是说通信后可以自己控制数码管,最主要的要求在得捷官网上可售的,我们浏览的搜索显示驱动器,在其中进行筛选查找。具体的任务要求如下:
设计一款四位七段数码管驱动模块
2线串行接口控制
包含:亮度调节功能
主要器件:需在DigiKey官网上有货且正常售卖。
模块介绍
设计思路
本次设计四位数码管驱动模块本着模块化的思想,设计一个紧凑的的而接口简单的四位数码管驱动模块,本次任务的电路相对还是比较简单的,主要对驱动芯片要求比较高,最后通过PH2.0的接口进行连接控制。
功能介绍
本次设计的是数码管模块,集成了一下功能:
四位数码管显示;
8级亮度调节;
硬件介绍
本次设计的四位数码管驱动模块是基于ET6226M设计的,ET6226M是一款矩阵LED驱动控制芯片,具备键盘扫描功能。该芯片设计用于提供可靠的LED显示控制,并支持多种控制模式与操作要求。它集成了多个功能,包括数字输入输出接口、数据锁存、LED驱动、亮度调节、键盘扫描等,因此它非常适合于需要LED矩阵显示的应用场景,如数码管。ET6226M的高稳定性和抗干扰能力使得它能够在长时间连续运行的条件下保持出色的表现。ET6226M芯片采用8×4或7×4显示矩阵模式,具备不低于25mA的段驱动电流和不低于150mA的位驱动电流,这使得它能够驱动多个LED单元以实现高效的显示效果。为了适应不同的应用需求,芯片提供了八个亮度调节等级,能够根据不同的环境需求进行调整。此外,ET6226M芯片内建有时钟振荡电路和上电复位电路,支持3.0V至5.5V的电源电压范围,具有较强的电压适应性。ET6226M支持高效的双线串行接口,通过DAT和CLK信号实现数据传输。数据传输采用同步方式,当CLK信号为高时,DAT信号必须稳定。只有当CLK信号为低时,DAT信号的状态才会发生变化。芯片通过这种方式与外部微控制器(MCU)进行通信,保证了数据的准确传输和实时响应。ET6226M的工作电压范围为3V至5.5V,待机电流非常低,只有0.3mA,而在休眠模式下,电流降至0.05mA,极大地延长了电池寿命。它的输入电压范围为-0.5V到VCC+0.5V,适用于大部分常见的工作环境。ET6226M还具有较高的抗干扰能力,可以在多种电磁环境下稳定工作。ET6226M是一款功能全面、性能稳定、抗干扰能力强的矩阵LED驱动芯片,适合广泛应用于LED显示控制、键盘扫描等场合。其低功耗、高亮度调节能力和良好的兼容性使得它在工业控制、家电、消费电子等领域有着广泛的应用前景。
设计框图
本次设计的是四位数码管驱动模块,我们通过统一的接口进行供电和控制,控制是基于串行接口进行的,整体模块还是挺简单的,通过上拉电阻进行串行接口的初始状态设定,最终实现的是数码管的控制。
原理图和PCB介绍
原理图
PCB
可以看到整体的模块还是挺小的(主要受限于于数码管的尺寸),本次的芯片也是比较焊接的,对外围电路的要求也不是很高,直接可以焊接上,焊接后的实物图如下:
软件调试
本次设计的模块只能说是一个功能模块,用于数码管的控制,我们需要使用一款主控单元,通过杜邦线与HY2.0接口的线根据以下模块引脚定义进行适当的连接:
管脚属性 | 管脚名 | 管脚编号 |
P | GND | 1 |
P | VOUT | 2 |
IO | D | 3 |
IO | C | 4 |
这里我们选择了一款ST官方开发板作为本次测试验证的主控单元,根据功能需求连接如下:
这里我们需要注意一下,软件的控制是需要和硬件相关联的,下面是我们通过硬件连接推断出不同数字(0-9)对应的点位关系:
下面我们就可以开始具体的软件设计了,主要代码介绍:
串行接口的关联,实际上上使用的就是IIC,对应开发板来说是IIC1,PB6和PB7引脚:
void Send_Data(uint8_t CMD,uint8_t DATA)
{
HAL_I2C_Master_Transmit(&hi2c1,CMD, &DATA, 1, 1000);
}
为了进行效果展示,我们应用定时器进行显示数据的更改,定时周期为1s,逐渐增大并进行显示:
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM6) {
HAL_IncTick();
Num++;
DISPLAY_Num(Num);
}
}
这里面用到的DISPLAY_Num函数是我们根据Send_Data进行的区分显示:
void DISPLAY_Num(uint16_t num)
{
uint8_t a,b,c,d;
num %= 10000;
a = num/1000;
num %= 1000;
b = num/100;
num %= 100;
c = num/10;
d = num%10;
Send_Data(ET6226_CMD_DISPLAY_0,mapNum[a]);
Send_Data(ET6226_CMD_DISPLAY_1,mapNum[b]);
Send_Data(ET6226_CMD_DISPLAY_2,mapNum[c]);
Send_Data(ET6226_CMD_DISPLAY_3,mapNum[d]);
}
然后对于亮度变化的测试是通过板载按键进行,循环变化:
void BSP_PB_Callback(Button_TypeDef Button)
{
if(Button == BUTTON_USER)
{
BrightLevel++;
Send_Data(ET6226_CMD_DISPLAY,Bright[BrightLevel%9]);
}
}
模块调试效果图
心得体会
本次我们选择了一个四位数码管驱动模块的设计,整体硬件电路设计还是挺简单的,软件验证选择了ST官方开发板,有很多的不匹配的地方需要我们继续关联和调整,建议还是根据数据手册和实际连接效果详细改一下,目前能满足基本的数码管显示功能。