你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 875|回复: 3

[其他] STM32CubeMonitor 介绍(二)例程二:实时波形检测

[复制链接]

1347

主题

1124

回帖

0

蝴蝶豆

管理员

最后登录
2020-12-9
发表于 2020-7-27 17:27:31 | 显示全部楼层 |阅读模式

在第一个例程中,我们了解了CubeMonitor的基本用法,包括如何监测/修改变量,如何导入/保存流文件,如何使用debug节点等。
接下来我们通过第二个例程来理解direct和snapshot这两种不同的采样模式,并学习更多的节点的使用。

11.png

这个例程的MCU要完成的工作就是通过GPIO口输出一个PWM波,而我们将用CubeMonitor来实时监控这个PWM波,并且可以调节PWM波的频率和占空比。
在这一部分,我们将学习以下内容:
1.直接读写寄存器
2.对读出的变量值进行后处理
3.添加switch节点过滤输出到chart节点的变量
4.在dashboard中添加文字显示框
5.如何使用snapshot模式进行采样
6.如何保存波形

PWM波输出

22.png

可以通过CubeMX来初始化MCU输出PWM波,上图是例程中使用的配置,如果你使用的是其他的开发板则根据实际使用的定时器和GPIO口进行配置。

33.png

在CubeMX生成的初始化工程代码里面,还需要添加启动PWM波输出的代码,见上图。

变量节点配置

44.png

CubeMonitor部分,我们在第一个例程的基础上进行修改。首先先来修改myVariables变量节点的配置。
这次我们要监测的是PB14引脚输出的PWM波以及PWM波的周期和占空比寄存器配置。而当GPIO口输出PWM波的时候,从它的输入数据寄存器中,可以读到当前的高低电平值,所以这里要输入的监测变量是三个寄存器。
先删除之前添加的变量,再按照图中的步骤修改myVariables变量组,逐个添加要监控的变量地址:
添加变量PB14,地址为GPIOB_IDR寄存器的地址0x48000410
添加变量Period,地址为TIM15_ARR寄存器的地址0x4001402C
添加变量Duty,地址为TIM15_CCR1寄存器的地址0x40014034

555.png

我们还要在程序运行的过程中实时修改PWM波的频率和占空比,也就是TIMER15的自动重载寄存器的值和捕获/比较寄存器的值。所以在myWriteVariables变量节点中,删除之前添加的变量,再修改myWriteVariables变量组,按照图中步骤添加这两个寄存器的地址。
添加变量Period,地址为TIM15_ARR寄存器的地址0x4001402C
添加变量Duty,地址为TIM15_CCR1寄存器的地址0x40014034

66.png

因为PB14这个变量读出来的是PortB端口所有引脚的状态,而我们只想监测PB14这一个引脚的状态,就需要在PB14这个变量中将bit14的值提取出来。在processing节点中,利用post-processing功能,将变量PB14右移14位,其结果定义为一个新的变量PWM1,这个就是我们最终要监测的PWM波的输出。

变量输出配置

77.png

现在Processing节点一共有4组变量输出,但我们只想在最终的点线图上输出PWM1一路变量的实时值。这时就可以利用switch节点来对processing节点的输出进行过滤了。如图在processing节点和chart节点之间添加一个switch节点。在switch节点中配置过滤条件:只有payload的variablename等于PWM1的消息才输出。

88.png

对于processing节点输出中的Period和Duty这两个变量,我们希望在dashboard上显示它们当前的值,所以需要再添加两个”text”文字框节点。文字框节点的输入只需要变量的值,不需要时间戳值。Processing节点输出的消息结构不满足文字框节点的要求,所以我们还需要用”single value”子流程来进行处理,输出单个的数值到文字框节点。在“singlevalue”子流程的配置中指定要输出的变量名就可以了。“single value”子流程实际是由多个节点组成,在编辑窗口点击”编辑流程模板“就可以看到。在CubeMonitor里面,你也可以编辑自己的子流程来实现特定的功能。

99.png

调整dashboard的布局如图所示。

10.png

重新部署运行。

111.png

在Dashboard,点击START按键启动采样。这时就可以看到实时显示的PWM波和自动重载寄存器以及捕获/比较寄存器所配置的值。
在输入框中,可以实时修改自动重载寄存器以及捕获/比较寄存器的值来改变PWM波的周期和占空比。
snapshot

222.png

前面采样使用的是direct模式,这种模式下每次采样由PC触发,受PC上其他程序的影响,采样的时间间隔可能会不均匀,有延时。而snapshot模式,是通过运行在MCU的代码进行采样,可以通过定时器中断来保证采样的精确性。采样数据先保存在MCU的内存,再由 CubeMonitor 读出。但snapshot模式需要添加特定的代码到用户程序,这段特定的代码已经包含在CubeMonitor的安装包中。snapshot模式下的采样频率由调用采样函数的频率决定,但建议不要超过1KHz。

333.png

STM32CubeMonitor安装包中有一个snapshot_embedded_SW.zip文件,里面包含了使用snapshot模式时需要用到的MCU代码。
使用snapshot模式时,需要对用户工程做以下修改:
1.将该压缩文件中的C文件和头文件拷贝到用户工程路径下,并将其中的acqTrigger.c和dataAcq.c文件添加到用户工程。
2.在代码中调用DumpTrace函数进行采样,可用timer中断设置需要的采样频率。
3.根据实际设置的采样频率,修改dataAcq.c中的SNP_TRC_TIMESTAMP_BASE_UNIT,SNP_TRC_TIMESTAMP_VALUE和SNP_TRC_BUFFER_SIZE等参数。代码默认每次最多可以采集10个32位的变量。如果需要采集更多的变量,可以调整SNP_TRC_NB_MAX_WORD_VAR的值。
snapshot代码大约需要使用3KB的Flash, 使用SRAM的大小跟采样频率和采样的变量个数有关。

444.png

在该例程中,我们使用TIM16产生定时中断,来调用采样函数Dumptrace。TIM16的初始化代码可以通过CubeMX生成。具体配置见上图。

666.png

然后手动添加启动TIM16的代码,TIM16中断的回调函数以及在主循环中调用采样函数的代码。

777.png

在CubeMonitor上需要做的配置如下:
1.因为snapshot模式下,CubeMonitor需要知道g_traceHeader变量的起始地址,所以需要在variables节点中导入添加了snapshot代码后的可执行文件。这样当选择了snapshot模式后,CubeMonitor就会自动从其中提取出该变量的起始地址。
2.在variables变量节点的配置中,选择snapshot变量采集模式。

888.png

我们还可以利用processing节点中的log功能,将采集的波形数据保存到本地文件。而后在Dashboard中可以随时导入log文件,在图表中显示波形。
这里还有一个小小的诀窍可以在snapshot模式下提高采样频率。在snapshot模式下关闭实时图形显示功能(断开processing节点与chart节点的连接),只开启log功能记录采集的数据。数据采集结束后再在dashboard的chart中导入log文件进行显示。实验下来,采用这种方式使用ST-LINK v2可以到2KHz的采样速度,使用ST-LINK v3可以到4KHz的采样速度。但需要注意的是,当使用超过1KHz的采样速度时,CubeMonitor的点线图中显示的每次采样的时间间隔还是由SNP_TRC_TIMESTAMP_BASE_UNIT 和SNP_TRC_TIMESTAMP_VALUE这两个宏定义决定,最小的时间间隔是1ms,所以这时波形图上显示的时间值是不对的。两个采样点之间的实际时间间隔应根据设定的采样频率计算。

999.png

分别在direct模式和snapshot模式下对同样的PWM波进行采样,从采样结果可以看到,direct模式下每次采样由电脑触发,但受PC端运行的其他程序的影响,每次采样的时间间隔不确定,会有延时。snapshot模式下由运行在MCU上的代码进行采样,可以做到很精确。所以如果对采样的精度有要求,建议使用snapshot模式。


<
回复

使用道具 举报

0

主题

56

回帖

0

蝴蝶豆

中级会员

最后登录
2020-10-29
发表于 2020-7-27 17:34:55 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

10

回帖

0

蝴蝶豆

初级会员

最后登录
2020-8-27
发表于 2020-7-29 09:18:21 | 显示全部楼层
您好,能否分享一下PPT和示例工程。实在看不见
回复 支持 反对

使用道具 举报

0

主题

1

回帖

0

蝴蝶豆

初级会员

最后登录
2020-9-28
发表于 2020-9-28 10:04:04 | 显示全部楼层
这图片质量眼睛都要看花了,没有原图吗?
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版