• 582查看
  • 0回复

[底层软件] 使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验

[复制链接]


该用户从未签到

发表于 2-3-2024 15:15:30 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


实验环境

        Matlab版本:2021b

  操作系统:Win10专业版

  硬件平台:YF-STM32-ALPHA 1R4

  实验内容:I2C驱动数码管芯片显示‘0’~‘A’字符

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w1.jpg

模型与原理图

本次实验所用到的simulink模型如图5.2所示,电路原图如图5.3所示,实验效果为数码管从‘0’~‘A’轮流显示,如图5.1所示。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w2.jpg

图5.1 数码管驱动显示实验效果

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w3.jpg

图5.2 数码管显示I2C驱动模型

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w4.jpg

图5.3 CH422G共阴数码管电路连接



基础模型介绍与分析

1、数码管简介

        数码管简单来说就是将多个LED有规律的排列在一起,实验中用到的数码管外观如图5.4所示,其型号为:FJ3461AH,三维尺寸:30.00mmx14.00mmx7.20mm,数码管内部为共阴极,内部电路原理和引脚定义如图5.5图所示。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w6.jpg

图5.4  数码管实物外观

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w7.jpg

图5.5 数码管尺寸及内部电路原理图
2、CH422G芯片介绍

数码管驱动芯片CH422引脚分布如图5.6所示,引脚定义解释参考表5.1。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w8.jpg

图5.6 数码管驱动芯片

表5.1 CH422G芯片引脚功能说明

引脚号

引脚名称

类型

引脚说明

14

VCC

电源

正电源,持续电流不小于 100mA

7

GND

电源

公共接地,持续电流不小于 100mA

1~4、12、13、15、16、

SEG0~SEG7

三态输出及输入

数码管的段驱动,高电平有效,

双向输入输出,内置弱上拉电阻

8~11

DIG0~DIG3

推挽或开漏输出

数码管的字驱动,低电平有效,

通用输出,可选开漏输出,低电平有效

5

SDA

开漏输出及输入

2 线串行接口的数据输入和输出,内置上拉电阻

6

SCL

输入

2 线串行接口的数据时钟
3、simulink模型分析

        本次实验中只用到I2C写模型,写I2C数据核心模型如图5.7所示,其参数设置如图5.8所示,其中“I2C module”用于设置选用哪个I2C,即STM32中常说的I2C0,I2C1,I2C2,实验中用到的I2C芯片连接在I2C2(PB10->SCL,PB11->SDA)上,"Slave address"用于设置I2C器件地址,图中为了便于理解,使用了一个hex2dec('24')模型转换函数,“Slave register addr”用于设置寄存器地址,参数设置基本就介绍这些,后面用到其它方式再逐一介绍,这里面的具体参数含义稍后为大家解答。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w9.jpg

图5.7 I2C向寄存器写数据模型

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w10.jpg

图5.8 I2C写模型参数设置

        在驱动CH422芯片前,我们首先要知道进行哪些参数设置和数据写入才能使数码管正常工作,如下代码所示,先对芯片进行设置(读者朋友对着操作即可,此代码为官方提供的参考代码,官方手册上只有0x48和0x46有简要说明),我们只需往0x48,0x44,0x46地址中写入固定数据,最后往0x60地址中写如要显示的数据即可。
/* 共阴数码管编码表 0~F */unsignedchar BCD_decode_tab[ 0x10 ] = { 0X3F, 0X06, 0X5B, 0X4F, 0X66, 0X6D, 0X7D, 0X07, 0X7F, 0X6F, 0X77, 0X7C, 0X58, 0X5E, 0X79, 0X71 };   //0--9数码管数字

CH422_Write(0x48,0x01);  /* 设置输出引脚 DIG0~DIG3 开漏输出使能  */CH422_Write(0x44,0x00);  /* 设置低8位开漏输出命令,默认方式 */CH422_Write(0x46,0x00);  /* DIG0~DIG3使引脚输出低电平 */
CH422_Write(0x60,BCD_decode_tab); /* 设置双向输入输出命令,显示数据用 */
        这里作者首先用C语言方式正常驱动数码管工作,如图5.9所示,这是参数设置过程正确时逻辑分析仪捕获到的I2C波形,图5.10为正常显示数字过程中捕获到的I2C波形。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w11.jpg

图5.9 C语言方式正常设置数码管波形

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w12.jpg

图5.10 C语言方式正常显示数字波形

       为了实现上述相同的效果,我们需要在simulink对参数进行设置来达到上述效果,0x48,0x44,0x46参数设置如图5.11~5.13所示,细心的读者应该有发现,器件地址与C语言写的地址不一样,这里作者暂时没找到原因,但是好在还有一定的规律可循,最终得到的波形如图5.14所示,与C语言驱动的还是有点不一样,只代表其能工作,图中首次出现一个脉冲符号样式,"Enable"模型它是作为子模型的使能用,另外就是每一个写入模型都是放在一个子模型中,方便对数据进行控制操作。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w13.jpg
图5.11 simulink中"0x48"写入“0x01”

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w14.jpg

图5.12 simulink中"0x44"写入“0x00”

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w15.jpg

图5.13 simulink中"0x46"写入“0x00”

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w16.jpg

图5.14 使用simulink模型初始化数码管I2C波形

        数码管显示数据显示模型如图5.15所示,地址部分还是一样的问题,只是寄存器部分数据可以正常使用编码表中的十六进制数据,最终的波形如图5.16所示。

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w17.jpg

图5.15 simulink中"0x60"写入“0x3F”

使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验w18.jpg

图5.16 simulink模型“0x60”显示字母'A'指令波形

       最后我们来看下整个模型,参考图5.2中,除最后一个显示模型,其它所有的I2C写入模型都是顺序执行,且都只执行一次,最终停留在在显示字符'A'处。

实验代码统一放在码云上,有问题欢迎给我留言!!

Simulink实验码云链接:https://gitee.com/wllis121/stm32-simulink



??总结

本节实验中实现了一个基本I2C驱动数码管显示实验,模型中初步做到了参数初始化和数据显示写入,但是这里有个问题,我们无法使用硬件在环修改参数达到同步修改数码管数据的效果,这里读者朋友可以研究研究下。另外本节中还有个问题就是数据显示不是循环显示,大家也可以修改模型实现循环滚动显示。



?拓展延申

        本节实验中由于使用的芯片资料有限,可参考性不强,但是可以起到介绍基本I2C设备的操作方式,读者朋友可以尝试驱动其他I2C器件,如常用的加速度传感器MPU6050,温度传感器SHT20。


该用户已被删除
发表于 14-3-2025 21:12:00 | 显示全部楼层
针对您提供的实验环境描述和要求,以下是对使用Simulink学习STM32-(6)I2C写入驱动数码管显示实验的专业回复:

在Matlab 2021b环境下,基于Win10专业版操作系统,利用YF-STM32-ALPHA 1R4硬件平台,本次实验目标是实现I2C驱动的数码管芯片显示‘0’~‘A’字符。实验涉及的Simulink模型如图5.2所示,用于数码管显示的I2C驱动。电路原理图如图5.3所示。实验效果为数码管依次显示‘0’~‘A’。为确保实验顺利进行,需熟悉Simulink模型构建和STM32的I2C通信机制。在操作过程中需严格遵守硬件平台的操作规范,确保连接正确且无误。实验中可能遇到的问题包括通信错误、数码管不显示等,需根据错误提示进行排查和解决。
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 14-3-2025 21:12:00 | 显示全部楼层
基于提供的实验环境、模型和原理图,关于使用Simulink学习STM32的I2C写入驱动数码管显示实验的专业回复如下:

在Matlab 2021b环境下,于Win10专业版操作系统中,利用YF-STM32-ALPHA 1R4硬件平台,实验目标是实现I2C驱动的数码管芯片显示字符‘0’~‘A’的轮流显示。实验所用的simulink模型如图5.2所示,电路原图如图5.3。通过I2C通信,将数据显示在数码管上。实验效果如图5.1所示,数码管能够正确显示‘0’~‘A’。此实验需熟悉Simulink与STM32的联合仿真环境,掌握I2C通信原理及数码管驱动技术。

确保模型配置正确,理解I2C通信流程,以及数码管显示原理,是完成此实验的关键。
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 18:03 , Processed in 0.363698 second(s), 39 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.