Arduino的克服缓冲区大小限制
这个例子向您展示了基于Arduino的局限性可以通过使用自动节点周期性车辆网络工具箱™的传输特性。它还向您展示了如何克服限制使用计时器功能,用MATLAB是可用的。
所需的硬件
要运行这个示例,您将需要以下硬件:
向量可以例XL
Arduino Mega2560董事会
se工作室can总线盾V2
硬件设置
se工作室CAN总线盾V2安装在Arduino Mega2560和向量可以情况下XL是节点。使用向量CANcable 1和向量CANcable组合连接CANH
和CANL
向量和Arduino节点的在一起。
示例使用向量可以例XL发射机和Arduino Mega2560 se工作室CAN总线盾V2的接收器。
创建可以通道
创建传输通道对象,可以使用自动消息传输命令使用canChannel
从车辆网络工具箱™函数。
txCh = canChannel (“向量”,“CANCaseXL 1”1);
创建接收通道对象。
arduinoObj = arduino (“COM11”,“Mega2560”,“库”,“可以”);rxCh = canChannel (arduinoObj,“se工作室can总线盾V2”);
在本例中,您将使用一个数据库文件可以定义和解码信息。打开数据库并将它附加到渠道。
db = canDatabase (“demoVNT_CANdb.dbc”);txCh。数据库=数据库;rxCh。数据库=数据库;
创建可以消息
创建可以使用数据库信息定期发送消息。
msgFast = canMessage (db,“EngineMsg”);msgSlow = canMessage (db,“TransmissionMsg”);
为定期发送配置信息
为周期配置消息传输,使用transmitPeriodic
指挥车辆网络工具箱™指定通道,通道上的信息登记,模式价值,周期性的速度。
transmitPeriodic (txCh msgFast,“上”,0.200);transmitPeriodic (txCh msgSlow,“上”,0.500);
开始周期性消息传输
当你开始一个通道周期信息注册,立即开始传输。允许渠道运行一段时间。
开始(txCh);暂停(2);
修改传输数据
更新现场消息或信号数据发送到CAN总线。
msgFast.Signals。VehicleSpeed = 60;暂停(1);msgFast.Signals。VehicleSpeed = 65;暂停(1);msgFast.Signals。VehicleSpeed = 70;暂停(1);
阅读的消息
定期阅读所有传播消息。
读(rxCh, 100)
分析接收到的消息和采取行动
有允许运行的周期性信息超过5秒,至少30消息传输。MATLAB支持包Ar金宝appduino硬件只提供10可以帧缓冲区。多次收到的消息以来,我们看到,超过10信息已收到。也只有最古老的消息会被保留由于Arduino不接收更新车辆的速度。使用Arduino作为一个有效的接收机,可以网络,我们必须做试验和错误的实验,根据应用程序设置它。
有效地接收的所有消息被传播,阅读和数据收集必须发生在平行于车辆速度更新运动。我们使用一个计时器设置Arduino的接待。
msgRx = [];stopArduinoReceptionTimer = false;t =定时器;t。Name =“ArduinoTimer”;t。ExecutionMode =“fixedRate”;t。时间= 0.1;t。TimerFcn = @collectData;开始(t);暂停(2);
再次修改传输数据
更新现场消息或信号数据发送到CAN总线。
msgFast.Signals。VehicleSpeed = 60;暂停(1);msgFast.Signals。VehicleSpeed = 45;暂停(1);msgFast.Signals。VehicleSpeed = 10;暂停(1);
分析周期传输行为
停止传输通道,我们创建的计时器Arduino接收消息。您可以分析的分布信息通过绘制每个消息的标识符反对他们的时间戳。注意区别两条消息出现频率根据他们的定期利率。
停止(txCh);stopArduinoReceptionTimer = true;暂停(1);情节(msgRx。时间、msgRx.ID“x”400)ylim([0])标题(“消息分布”,“FontWeight”,“大胆”)包含(“时间戳”)ylabel (“可以标识符”)
为进一步分析,分离两条消息为单独的时间表。
msgRxFast = msgRx (strcmpi (“EngineMsg”msgRx.Name):);:msgRxFast (1:10) msgRxSlow = msgRx (strcmpi (“TransmissionMsg”msgRx.Name):);msgRxSlow (1:10,:)
分析每组的消息的时间戳,看看密切的平均值差异对应配置的定期利率。
avgPeriodFast =意味着(毫秒(diff (msgRxFast.Time))) avgPeriodSlow =意味着(毫秒(diff (msgRxSlow.Time)))
一块接收到的信号数据反映了更新在CAN总线上的消息数据发送。
signalTimetable = canSignalTimetable (msgRx,“EngineMsg”);情节:signalTimetable (25) (signalTimetable。时间,signalTimetable.VehicleSpeed)标题(“从EngineMsg车辆速度”,“FontWeight”,“大胆”)包含(“时间戳”)ylabel (“车速”)ylim ([75])
视图配置为周期传输的消息
看到消息上配置周期传输通道,使用transmitConfiguration
命令。
transmitConfiguration (txCh)
清理
完成后,清理到硬件的连接和创建的消息。
清晰的txCh清晰的arduinoObj清晰的rxCh清晰的msgFast清晰的msgSlow清晰的msgRx清晰的msgRxFast清晰的msgRxSlow清晰的signalTimetable
使用Arduino程序收集数据
的collectData
函数是用来读取消息并行数据更新。更多的信息collectData
函数,在MATLAB命令行执行以下命令:
打开(“collectData.m”)