• 254查看
  • 0回复

[底层软件] 使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验

[复制链接]


该用户从未签到

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

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


在前面的文章中介绍过使用matlab2018b + stm32 mat Target方式实现CAN总线硬件在环数据收发,但是由于该方法存在诸多不足,无法进行“高大上”的数据分析,"Dashboard"也无法用,并且使用起来很麻烦,而目前官方的CAN总线支持库存在很多问题,且只支持F7和H7高档系列MCU,这里给大家介绍另外一种方法,使用外挂MCP2515方式在matlab2021b中实现CAN总线硬件在环数据收发。
实验环境

Matlab版本:2021b

Simulink CAN库:MCP2515

Visual Studio 版本:Community 2019

操作系统:Win10专业版

硬件平台:YF-STM32-ALPHA 1R5 + MCP2515模块

USB-CAN工具:开源PCAN模块和PCAN-View

实验内容:CAN总线硬件在环可视化数据收发实验

?温馨提示:MCP2515 CAN总线方式不仅STM32可以使用,树莓派,Arduino模型本身就支持(支持包中包含有MCP2515模块),但是不建议大家使用Arduino UNO,实际测试过程中发现其RAM和Flash空间太小,无法进行硬件在环功能,建议直接上Mega2560

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w1.jpg

模型与原理图

本次CAN实验所用到的simulink模型如图5.1所示,MCP2515 与STM32 SPI0(PA4->CS, PA5->SCK, PA6->SO, PA7->SI )总线电路原理如图5.3所示,实验演示过程中通过USB-CAN设备给STM32发送数据并通过simulink硬件在环显示出来,同时STM32也往CAN总线上发送数据,如图5.2所示,整个模型中可以看到既可以通过“Scope”方式监控数据,也可以使用“Dashboard”仪表可视化数据,当然也可以通过“数据检查器”监控数据波形,非常直观方便。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w2.jpg

图5.1 MCP2515 CAN收发simulink模型

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w3.jpg

图5.2 CAN总线“数据检测器”数据波形可视化

?温馨提示:市面上购买的MCP2515模块由于CAN接口芯片使用的NXP的TJA1050,必须采用5V供电,否则无法正常收发数据。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w4.jpg

图5.3 MCP2515 SPI0硬件连接原理



基础模型介绍与分析

       使用MCP2515前需要先添加MCP2515 simulink库,这里给读者朋友提供了该库下载链接:

MCP2515 simulink库链接:https://ww2.mathworks.cn/matlabcentral/fileexchange/64782-can-device-driver-mcp2515-for-arduino-and-raspberry-pi

库下载好后解压出来,然后按照图5.4所示使用“pathtool”指令将MCP2515库路径添加Matlab中,添加完后“保存”并重启matlab软件。

?温馨提示:一定要使用“添加并包含子文件夹...”方式添加MCP2515 Simulink库

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w6.jpg
图5.4 添加MCP2515 simulink库

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w7.jpg

图5.5 MCP2515 simulink库成功添加后效果

      添加好的库并不能直接使用,这里需要进入到库里面改造下才能使用,放置图5.6中MCP2515三个模型中的任意模型,然后点击模型左下角的向下箭头进入到里面对其进行修改。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w8.jpg
图5.6 MCP2515配置模型

       进入到“USART/CANbegin/setup/changeCANmode(config)/mcp2515_modifyRegister/SPI driver/Arduino”中,我们可以看到默认该模型中使用的是Arduino的SPI库,读者朋友这里需要将其替换为STM32的SPI库。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w9.jpg

图5.7 MCP2515默认SPI接口

        找到STM32的SPI库,直接往图5.7中拖入STM32“SPI Master Transfer ”模型,这时最上面有个黄色条幅提示,点击“打开库”即可,如图5.8所示。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w10.jpg

图5.8 拖入STM32 “SPI Master Transfer”模型

         打开后进入到MCP2515原始simulink库模型中,如图5.9所示,找到“SPI driver”,一层一层打开进入到“mcp2515lib/CAN application/mcp2515 driver/SPI driver/Arduino”中,然后继续拖入STM32的“SPI Master Transfer”模型,将Arduio SPI的库进行替换,如图5.10所示。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w11.jpg

图5.9 MCP2515模型库

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w12.jpg

图5.10 替换Arduino SPI库

        如图5.11所示,“Slave select pin:”引脚可以自行定义,这里将其设置为“PA_4”,读者朋友可以根据自身的实际情况进行设置,其它参数保持默认即可。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w13.jpg

图5.11 替换成STM32 SPI库效果

        MCP2515模型改造完后,直接拖入“CANbegin”,“CANTransmit”,"CANreceive"三个模型,然后按照如图5.12所示搭建好测试收发模型即可,这里就不过多介绍了,读者朋友可以参考前面的系列文章。

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w14.jpg

图5.12 MCP2515 STM32 CAN总线收发模型

        MCP2515的“CANbegin”模型设置如图5.13所示,我们只需要设置好"CAN speed(kHz)"波特率和"Oscillator frequency(MHz)"晶振频率即可,其它参数保持默认。

??注 意:市面上在售的MCP2515有两种版本,一种使用的是16M晶振,还有一种使用的是8M晶振,读者朋友一定要根据实际模块上的晶振频率进行设置,否则波特率可能设置的与实际的对不上,如图5.14示意图

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w15.jpg

图5.13 “CANbegin”模型设置

使用Simulink学习STM32-(8)外挂MCP2515方式CAN总线可视化数据收发实验w16.jpg

图5.14 8M晶振MCP2515模块



总 结

       本篇简单介绍了如何在STM32上使用外挂MCP2515方式进行CAN总线收发通信和数据可视化展示,使用本篇介绍的方式可以弥补之前数据分析的不灵活性,CAN的通信的关键是要能进行数据分析,否则无法将xxx.dbc文件方便的结合起来使用,尤其是在汽车CAN总线数据分析上尤为重要,并且使用MCP2515方式可以不局限STM32的具体型号以及多路MCP2515同时使用,希望能对读者朋友有所帮助。


快速发帖

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

本版积分规则

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

GMT+8, 1-2-2025 12:10 , Processed in 0.239759 second(s), 33 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.