# 基于 JY901 与 STM32 的波浪测量系统
## 1. 实习内容概述
(在本篇报告中出现的仅是我们实习项目的一个概述,关于具体的技术报告与上课笔记请参阅本文件夹中的“技术报告.docx”与“课堂笔记.pdf”文件,技术报告由小组共同完成,但每个人的因自身负责的模块不同略有侧重。我的技术报告重点放在 STM32 读取数据并存储进 SD 卡和频域积分处理数据两部分)
在 7 月 15 日至 7 月 31 日期间,我和其他 14 名同学于浙江大学舟山海洋研究中心进行了为期 2 周半的实习。在此期间,我们被分到了两组,接到了构建基于 JY901 的波浪参数测量系统的任务。在指导老师的帮助下,经过两周多的实践与应用,我们组最终完成了一个能够较为精准测量并计算相关波浪相关数据的系统,并在指导老师搭建的硬件平台上进行了调试与改进。
我们的最终任务是通过 JY901 和 STM32 进行波浪相关数据的计算。主要包括波高、波向、周期这三个方面的波浪属性。为了得到这个结果,我们首先需要通过 JY901 获得单片机随波浪运动过程当中的三轴加速度、三个方向的旋转角度,以计算得到波浪的位移曲线;再通过位移曲线,通过概率统计,得到波浪的周期和 1/3 大波波高。然后,通过旋转角度的概率分布,计算得到波向的最大可能方向。
### a) 项目架构
在项目开始之前,我们组根据老师给的实习方案,设计了一个最初的系统框架。基于基本的海浪传感器框架,整体的传感器系统应该包括传感器层、数据传输层、数据交互层以及数据可视化层。如下图
![](https://www.writebug.com/myres/static/uploads/2022/1/5/06f4d6353aab5e902cc229cb67bb3d3e.writebug)
但是在真实的实习当中,由于我们并没有时间来完成所有的设计。最终,我们最终只完成了传感器层和传输层的基本结构,并跳过了交互层的数据库结构,直接将最终数据进行处理,并做了简单的可视化。
最终项目架构图如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/5/950fc6e2a93b998f85447622489288aa.writebug)
### b) 项目介绍
在建立了最基本的系统架构之后,我们开始了每个子系统的构造。我们在 12 个工作日内,将整个任务分为四个阶段。第一阶段为数据检测层搭建阶段,主要进行 JY901 和 STM32 之间的信息交互;第二阶段进行数据传输层,主要从 STM32 的 SD 卡中读取相关信息,第三阶段为数据传输层,即使用 Matlab 进行初步数据处理,得到我们希望得到的数据;第四阶段为数据统计阶段。
i. 数据检测层:
数据检测层使用 STM32 读取 JY901 测量得到的 6 轴加速度/角度数据(加速度 3、角度 3、磁场 3,但是在我们的实验中没有用到最后 3 轴数据),并将读取得到的数据存入到 SD 卡中。整体的思路整体的下位机(STM32)程序构建如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/5/ce6a200eb7d98514aaffed6a8723527c.writebug)
其中,有几点需要说明:
1. 变量 count 表示采样点数。例如,count=1024,表示我们将在 SD 卡中存储 1024 个数据。
2. 程序设定默认的采样间隔为 200ms,可通过修改采样程序的延时时间来调整采样率,但需要注意 JY901 默认回传速率为 10Hz,如果采样间隔太短会读取到异常数据。(采样频率是一个大坑。。。其导致的异常数据,让我们 debug 了很久)
3. Count 和采样频率(fs)共同决定了整体的程序运行时间。LED1 亮表示开始采样。LED1 灭同时,LED0 闪烁,表示采样结束,可以插拔 SD 卡进行数据读取。理论程序运行总时长 = count*1/fs
4. 读取到数据转化为物理量后保存到字符串数组中再输出到文本文件中,这里需要用一个变量来表示得到的字符串长度防止字符串数组中未存储数据的区域在写入文本时产生乱码,这里读取到的加速度数据实际上是重力加速度 g 的倍数,且 Z 轴默认初始有 1 个 g 的加速度。
5.进行文本读写前后需要打开和关闭串口来进行数据传输。这是为了防止在写入文件的时候,程序因为串口传信的原因进入中断,导致写数据错误。
ii. 数据传输层:
数据传输层其实只是使用 SD 卡存储相关的数据。但是因为 SD 卡的存储方面出了比较多的 bug,因此单独列出来进行说明。首先,先说明 JY901 的解包函数。因为我们知道,在串口通信的过程当中,为了辨别传送数据的有效性,我们需要从缓冲区中读取到数据头。
1. 读取 JY901 数据
即 JY901 发送的数据首先存入到缓冲区中,通过判断头两个数据来分析是否读取到正确数据以及读取到的数据类型再存入到设定好的结构体。在我们的代码中,我们只需要加速度和角度数据。数据头为 0x51,即为加速度数据,数据头为 0x52,即为角度数据。具体的读取步骤如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/5/4abc484d4b4f18dd3d11378d8e9df4fa.writebug)
读取到数据头之后,我们就可以根据 JY901 数据读取到的数据转换为实际物理量。以加速度为例,加速度输出的步骤如下:
![](https://www.writebug.com/myres/static/uploads/2022/1/5/19bd6b3f379029fff5b8bfeda27bf397.writebug)
整体步骤,即从缓冲区中一个字节一个字节读取数据,先读取到桢头 0x55,就说明接下来会传输数据。再读取到数据头,即继续向下读取具体的加速度/角度数据,最后暂存在内存当中,准备存储到 SD 卡。
2.存储到 SD 卡
我们的 SD 卡使用的是 FatFs 文件系统。Fat file system 是一种专门为小型嵌入式系统所设计的文件储存方式。我们现在在一些 U 盘中还能看到类似的文件系统(不过 U 盘用的一般都是 exFAT,比较高端)。而我们的 SD 卡也就是使用这种文件系统。SD 卡的存储系统主要包括初始化、挂载、格式化、写入几个部分。如下为 SD 卡在进入文件系统写入之前的初始化过程:
![](https://www.writebug.com/myres/static/uploads/2022/1/5/adecb7eb799b30106d81222c080262e5.writebug)
在 STM32 当中,SD 卡的读写主要通过 FatFS 的库函数来完成。在我们的 project 中,用到的几种库函数如下:
| f_open | Open/Create a file |
| ------- | ------------------------------------ |
| F_close | Close an open file |
| F_read | Read data from the file |
| F_write | Write data to the file |
| F_lseek | Move read/write pointer, Expand size |
我们做的,就是从 STM32 的内存区读取之前写入的和 JY901 有关的变量,然后存入 SD 卡中。在这期间,遇到了很多奇怪的问题(例如写到一半切断电源会导致数据缺失,在写程序过程当中会出现文件乱码,在创建字符串 string 中如果有空字符在写入的时候也会出现乱码等等)。这一部分在技术报告中有所体现,这里也就不赘述了。
iii. 数据处理层
我们需要做的任务主要有 2 个。一是通过测量得到的向机加速度和加速度旋转角计算得到世界坐标系下的加速度,即用于计算和地平线的绝对加速度;二是通过处理得到的绝对速度,通过数字信号处理(DSP)的频域积分方法,得到绝对位移曲线。
1. 坐标转换
测得的加速度是以 jy901 为参考系的加速度,我们需要把三轴加速度分别变换到大地坐标系,这样在静止的时候只有 z 轴加速度为 g,x、y 轴加速度为 0,消除了倾斜带来的测量误差。如图所示为一最简单的坐标转换。
![](h
没有合适的资源?快使用搜索试试~ 我知道了~
基于STM32 的波浪测量系统
共339个文件
c:64个
h:52个
o:32个
需积分: 5 0 下载量 10 浏览量
2024-06-23
10:11:39
上传
评论
收藏 13.61MB ZIP 举报
温馨提示
嵌入式stm32f103项目实例 通过 JY901 和 STM32 进行波浪相关数据的计算。主要包括波高、波向、周期这三个方面的波浪属性。为了得到这个结果,我们首先需要通过 JY901 获得单片机随波浪运动过程当中的三轴加速度、三个方向的旋转角度,以计算得到波浪的位移曲线;再通过位移曲线,通过概率统计,得到波浪的周期和 1/3 大波波高。然后,通过旋转角度的概率分布,计算得到波向的最大可能方向
资源推荐
资源详情
资源评论
收起资源包目录
基于STM32 的波浪测量系统 (339个子文件)
FATFS.uvguix.Administrator 69KB
FATFS.axf 803KB
keilkilll.bat 372B
feature_tests.bin 8KB
CMakeDetermineCompilerABI_C.bin 4KB
CMakeDetermineCompilerABI_CXX.bin 4KB
cc936.c 697KB
cc949.c 546KB
cc950.c 433KB
cc932.c 240KB
ff.c 148KB
stm32f10x_tim.c 104KB
lcd.c 80KB
sdio_sdcard.c 60KB
stm32f10x_flash.c 59KB
stm32f10x_rcc.c 49KB
stm32f10x_adc.c 45KB
stm32f10x_i2c.c 43KB
stm32f10x_can.c 43KB
stm32f10x_usart.c 36KB
system_stm32f10x.c 35KB
stm32f10x_fsmc.c 34KB
ccsbcs.c 29KB
stm32f10x_spi.c 29KB
stm32f10x_dma.c 28KB
stm32f10x_sdio.c 27KB
stm32f10x_gpio.c 22KB
CMakeCCompilerId.c 19KB
stm32f10x_dac.c 18KB
main.c 17KB
core_cm3.c 16KB
usmart.c 15KB
stm32f10x_cec.c 11KB
usmart_str.c 11KB
app4.c 10KB
w25qxx.c 9KB
stm32f10x_pwr.c 8KB
stm32f10x_rtc.c 8KB
stm32f10x_bkp.c 8KB
delay.c 7KB
delay.c 7KB
fattester.c 7KB
misc.c 7KB
stm32f10x_exti.c 7KB
diskio.c 6KB
fattester.c 6KB
stm32f10x_wwdg.c 5KB
stm32f10x_it.c 5KB
malloc.c 5KB
mycc936.c 5KB
stm32f10x_dbgmcu.c 5KB
usart.c 5KB
stm32f10x_iwdg.c 5KB
syscall.c 4KB
mycc936.c 4KB
usart.c 4KB
app3.c 4KB
exfuns.c 4KB
spi.c 3KB
stm32f10x_crc.c 3KB
usmart_config.c 3KB
key.c 2KB
app2.c 2KB
led.c 1KB
app1.c 1020B
sys.c 839B
sys.c 839B
feature_tests.c 728B
unicode.c 386B
test.c 0B
FATFS_V3.cbp 32KB
cmake.check_cache 85B
DependInfo.cmake 17KB
Makefile.cmake 11KB
CMakeCXXCompiler.cmake 5KB
cmake_clean.cmake 3KB
CMakeCCompiler.cmake 2KB
cmake_install.cmake 1KB
CMakeDirectoryInformation.cmake 776B
CMakeSystem.cmake 362B
CMakeCXXCompilerId.cpp 18KB
main.crf 389KB
sdio_sdcard.crf 379KB
fattester.crf 378KB
lcd.crf 375KB
usmart_config.crf 371KB
stm32f10x_tim.crf 362KB
exfuns.crf 362KB
diskio.crf 359KB
usmart.crf 352KB
w25qxx.crf 351KB
stm32f10x_rcc.crf 348KB
stm32f10x_usart.crf 346KB
stm32f10x_fsmc.crf 346KB
usart.crf 346KB
usmart_str.crf 345KB
stm32f10x_sdio.crf 345KB
stm32f10x_spi.crf 345KB
stm32f10x_gpio.crf 344KB
stm32f10x_dma.crf 344KB
共 339 条
- 1
- 2
- 3
- 4
资源评论
fengbeely
- 粉丝: 947
- 资源: 70
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功