0%

MicroLabBox教程 6 - dSPACE程序设计 中级篇

本篇介绍使用Simulink进行dSPACE程序设计的技巧,涉及向量、矩阵的使用,以及定时器与中断;

1 - MUX

  • 使用Matlab Function进行向量合成,不要使用Mux,其输出无法识别

2 - 通过索引使用不定长数组

点击按钮后,接下来N秒内,RGB模块每秒显示一种红绿之间的随机颜色,其中N为可调参数(1-10),N种随机颜色在按钮触发时被完全定义;

💡 Simulink的Matlab Function不支持创建可变长度数组,可以创建固定长度数组,再通过索引调用;


3 - 数组越界与计算超时

  • 进行数组索引时,元素不可越界,否则dSPACE直接宕机;(重启机器+重启ControlDesk)
  • 当单个计算周期的计算耗时超过采样时间,ControlDesk会卡住;(重新开始测量)

    • 可通过Task Info → turnaroundTime 查看dSPACE的计算耗时,并改进算法效率;


4 - 定时器与定时中断

在多数的嵌入式系统中,往往存在多个不同运行频率的程序段;以控制系统为例,包含观测器和控制器两部分,观测器的执行频率一般高于控制器,以保障在控制计算之前系统当前的状态信息得到有效估计。

  • Step 1 - 使用dSPACE的Timer Interrupt作为定时中断触发,并配置定时间隔

  • Step 2 - 在定时执行模块中添加触发连接,并将触发配置为function call

  • Step - 3 在不同执行速度的模块之间添加缓冲器,并取消勾选Ensure deterministic data transfer,以实异步通信

  • Step - 4 对于含有全局变量的情况,在模型配置中将Multi data store选项设置为none

  • Step - 5 配置定时器的中断优先级

dSPACE中Simulink模型的执行过程(3)

  • dSPACE使用独立的定时器去运行该定时器下的模块和程序,其中TimerA被用来执行基础定时程序;

  • 每个定时模块/中断模块可以看作是一个独立的线程,线程之间需要缓冲器(消息队列,FIFO)来实现数据的传递;


5 - 硬件中断

ASCII编码转换,ASCII码在线查询工具

实现功能:使用串口接收中断,在每次接受到串口数据时,向上位机发送‘Hello’

  • 使用串口接收中断和模块,并搭建中断执行模块

6 - 异步通信

实现功能:在每次接受到串口数据时,RGB红灯闪烁三秒

💡在进行异步通信时,不同线程之间的缓冲器会使得信号被降采样,因此在异步通信中传递触发信号时,确保信号能够被正确传递;

7 - 中断优先级

dSPACE中Simulink模型的执行过程(4)

当dSPACE运行低优先级的中断处理函数(线程)时,当有高优先级的中断触发,则dSPACE会暂停当前任务,转去处理高优先级的任务,处理玩之后在返回继续执行之前的任务


8 - Host Service

通过Host Service指定上位机数据采集、显示和记录的频率,以满足特定的需求;
尽量避免在一个模型中配置多个Host Service,可能会导致数据采集紊乱;