当前位置: 首页 > news >正文

24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)

前言

        只要搞懂 M0 的代码结构和 CCS 的图形化配置方法,代码移植就会变的很简单。因为本次电赛的需要,正好陀螺仪部分代码的移植是我完成的。(末尾附全部代码)

一、JY60 陀螺仪

        JY60特点

        1.模块集成高精度的陀螺仪、加速度计,采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法,能够快速求解出模块当前的实时运动姿态。

        2.采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。

        3.模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.2°,稳定性极高,性能甚至优于某些专业的倾角仪。

        因为此次主要使用的是航向角,下面是航向角的参数:

 

二、syscfg 配置

        我使用的是串口来接收陀螺仪数据,下面是串口的配置。

三、串口接收部分代码

        其他代码都直接复制就行,只有串口部分代码需要修改。

        UART2.c

// #include "misc.h"
#include "wit_c_sdk.h"
#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "UART2.h"
#include "stdint.h"// // 初始化 UART 引脚和多路复用
// void InitUARTPins(void) {
//     DL_GPIO_setDirection(GPIO_UART_BT_RX_PORT, GPIO_UART_BT_RX_PIN, DL_GPIO_INPUT);
//     DL_GPIO_setDirection(GPIO_UART_BT_TX_PORT, GPIO_UART_BT_TX_PIN, DL_GPIO_OUTPUT);
//     DL_GPIO_setIOMUX(GPIO_UART_BT_RX_PORT, GPIO_UART_BT_RX_PIN, GPIO_UART_BT_IOMUX_RX_FUNC);
//     DL_GPIO_setIOMUX(GPIO_UART_BT_TX_PORT, GPIO_UART_BT_TX_PIN, GPIO_UART_BT_IOMUX_TX_FUNC);
// }void Usart2Init(unsigned int uiBaud) {// 配置 UART 引脚和多路复用// InitUARTPins();// // 初始化 UART// DL_UART_init(UART_BT_INST, uiBaud, DL_UART_PARITY_NONE, DL_UART_STOPBITS_ONE, DL_UART_DATABITS_8);// 使能 UART 接收中断// DL_UART_enableInterrupt(UART_BT_INST, DL_UART_MAIN_IIDX_RX);// 使能 UART 中断NVIC_EnableIRQ(UART_BT_INST_INT_IRQN);
}void UART_BT_INST_IRQHandler(void) {uint8_t Res;// 检查是否有接收中断if (DL_UART_getPendingInterrupt(UART_BT_INST) == DL_UART_MAIN_IIDX_RX) {Res = DL_UART_receiveData(UART_BT_INST);WitSerialDataIn(Res);
//         DL_UART_clearPendingInterrupt(UART_BT_INST, DL_UART_MAIN_IIDX_RX);}
}void Uart2Send(unsigned char *p_data, unsigned int uiSize) {for (unsigned int i = 0; i < uiSize; i++) {DL_UART_transmitDataBlocking(UART_BT_INST, p_data[i]);}
}

四、其他部分代码

        这里主要说名一下 gryo.c 中的获取陀螺仪值的代码。其中 gryo_get() 是获取陀螺仪值。其中fAcc[3], fGyro[3], fAngle[3]分别代表三向加速度,三向角速度与三向角度。

        gryo.c

float fAcc[3], fGyro[3], fAngle[3];void gryo_get(){int i;//if(s_cDataUpdate)//{for(i = 0; i < 3; i++){fAcc[i] = sReg[AX+i] / 32768.0f * 16.0f;fGyro[i] = sReg[GX+i] / 32768.0f * 2000.0f;fAngle[i] = sReg[Roll+i] / 32768.0f * 180.0f;}// 	fAcc[0]=fAcc[0]+sin(fAngle[1]*(M_PI/180));//     fAcc[1]=fAcc[1]-sin(fAngle[0]*(M_PI/180));// printf("gyro:%.3f %.3f %.3f\r\n", fGyro[0], fGyro[1], fGyro[2]);// 应用低通滤波器
//			for (i = 0; i < 2; i++) // 这里只对X和Y轴进行滤波
//			{
//				fAccFiltered[i] = alpha * fAcc[i] + (1 - alpha) * fAccFiltered[i];
//				fAcc[i]=fAccFiltered[i];
//			}
//			if(s_cDataUpdate & ACC_UPDATE)
//			{
//				//printf("acc:X%.3f Y%.3f Z%.3f\r\n", fAcc[0], fAcc[1], fAcc[2]);
//				printf("acc:X%.3f Y%.3f\r\n", fAcc[0], fAcc[1]);//				s_cDataUpdate &= ~ACC_UPDATE;
//			}
//			if(s_cDataUpdate & GYRO_UPDATE)
//			{
//				printf("gyro:%.3f %.3f %.3f\r\n", fGyro[0], fGyro[1], fGyro[2]);
//				s_cDataUpdate &= ~GYRO_UPDATE;
//			}
//			if(s_cDataUpdate & ANGLE_UPDATE)
//			{
//				printf("angle:Y:%.3f X:%.3f Z:%.3f\r\n", fAngle[0], fAngle[1], fAngle[2]);
//			//	printf("angle:Y:%.3f\r\n", fAngle[0]);
//				s_cDataUpdate &= ~ANGLE_UPDATE;
//			}
//			if(s_cDataUpdate & MAG_UPDATE)
//			{
//				printf("mag:%d %d %d\r\n", sReg[HX], sReg[HY], sReg[HZ]);
//				s_cDataUpdate &= ~MAG_UPDATE;
//			}//}}

        主函数调用代码:

#include "ti_msp_dl_config.h"
#include "stdio.h"
#include "string.h"
#include "UART2.h"
#include "wit_c_sdk.h"
#include "gryo.h"
#include "delay.h"int main(void)
{SYSCFG_DL_init();//整体初始化NVIC_ClearPendingIRQ(UART_0_INST_INT_IRQN);//串口打印初始化NVIC_EnableIRQ(UART_0_INST_INT_IRQN);Usart2Init(UART_BT_BAUD_RATE);// Usart2Init(9600);WitInit(WIT_PROTOCOL_NORMAL, 0x50);WitSerialWriteRegister(SensorUartSend);WitRegisterCallBack(SensorDataUpdata);WitDelayMsRegister(Delayms);//AutoScanSensor();printf("nihao\r\n");while (1){// printf("begining\r\n");delay_ms(10);gryo_get();}
}

相关文章:

24年电赛——自动行驶小车(H题)基于 CCS Theia -陀螺仪 JY60 代码移植到 MSPM0G3507(附代码)

前言 只要搞懂 M0 的代码结构和 CCS 的图形化配置方法&#xff0c;代码移植就会变的很简单。因为本次电赛的需要&#xff0c;正好陀螺仪部分代码的移植是我完成的。&#xff08;末尾附全部代码&#xff09; 一、JY60 陀螺仪 JY60特点 1.模块集成高精度的陀螺仪、加速度计&…...

数组的增删查查改

1、增 1.Cpp #include <iostream> using namespace std; #include "add.h"int main() {//初始化数组int arr[5];//前四个元素为1&#xff0c;2&#xff0c;3&#xff0c;4for (int i 0; i < 4; i){arr[i] i1;}//数组第5个赋值为100arr[4] 100;for (int…...

设计模式——动态代理

设计模式——动态代理 动态代理的基本概念动态代理的实现步骤总结 在Java中&#xff0c;动态代理是一种强大的机制&#xff0c;它允许在运行时创建一个代理对象&#xff0c;这个代理对象可以代表另一个实际对象&#xff0c;它允许你在不直接操作原始对象的情况下&#xff0c;通…...

vue(element-ui组件) 的this.$notify的具体使用

getNotify() {this.noClose();let message "";message this.itemData.map((ele) > {const text "任务" ele.title "新增" ele.num "条言论";return this.$createElement("el-tooltip",{props: {content: text,pla…...

c++ - 模拟实现set、map

文章目录 前言一、set模拟实现二、map模拟实现 前言 在C标准库中&#xff0c;std::set 和 std::map都是非常常用的容器&#xff0c;它们提供了基于键值对的存储和快速查找能力。然而&#xff0c;关于它们的底层实现&#xff0c;C标准并没有强制规定具体的数据结构&#xff0c;只…...

计算机网络-PIM协议基础概念

一、PIM基础概念 组播网络回顾&#xff1a; 组播网络从网络结构上大体可以分为三个部分&#xff1a; 源端网络&#xff1a;将组播源产生的组播数据发送至组播网络。 组播转发网络&#xff1a;形成无环的组播转发路径&#xff0c;该转发路径也被称为组播分发树&#xff08;Multi…...

优化PyCharm:让IDE响应速度飞起来

优化PyCharm&#xff1a;让IDE响应速度飞起来 PyCharm&#xff0c;作为一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;在提供丰富功能的同时&#xff0c;有时也会出现响应慢的问题。这不仅影响开发效率&#xff0c;还可能打击开发者的积极性。本文将详细…...

对象转化为String,String转化为对象

title: 对象转化为string&#xff0c;string转化为对象 date: 2024-08-02 11:50:40 tags: javascript const obj { uname:haha, age:18,gender:女} //将对象转换成string JSON.stringify(obj) //取成一个对象&#xff0c;将字符串传化为对象 JSON.parse(obj)常用领域在localst…...

SolverLearner:提升大模型在高度归纳推理的复杂任务性能,使其能够在较少的人为干预下自主学习和适应

SolverLearner&#xff1a;提升大模型在高度归纳推理的复杂任务性能&#xff0c;使其能够在较少的人为干预下自主学习和适应 提出背景归纳推理&#xff08;Inductive Reasoning&#xff09;演绎推理&#xff08;Deductive Reasoning&#xff09;反事实推理&#xff08;Counterf…...

PHP智能问诊导诊平台-计算机毕业设计源码75056

摘 要 智能问诊导诊平台作为一种智能化医疗服务工具&#xff0c;利用PHP语言开发&#xff0c;旨在为用户提供便捷的在线问诊和导诊服务。该平台集成了智能算法和医疗数据&#xff0c;实现了智能化的病情诊断和治疗建议&#xff0c;帮助用户更快速地获取医疗信息和建议。用户可…...

数据结构初阶(c语言)-排序算法

数据结构初阶我们需要了解掌握的几种排序算法(除了直接选择排序&#xff0c;这个原因我们后面介绍的时候会解释)如下&#xff1a; 其中的堆排序与冒泡排序我们在之前的文章中已经详细介绍过并对堆排序进行了一定的复杂度分析&#xff0c;所以这里我们不再过多介绍。 一&#x…...

网络云相册实现--nodejs后端+vue3前端

目录 主页面 功能简介 系统简介 api 数据库表结构 代码目录 运行命令 主要代码 server apis.js encry.js mysql.js upload.js client3 index.js 完整代码 主页面 功能简介 多用户系统&#xff0c;用户可以在系统中注册、登录及管理自己的账号、相册及照片。 每…...

【JS】Object.defineProperty与Proxy

一、Object.defineProperty 这里只是简单描述&#xff0c;具体请看另一篇文章&#xff1a;Object.defineProperty。 Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的功能强大的方法。它可以精确地控制属性的行为&#xff0c;如是否可枚举、可配置、可写等。…...

《计算机网络》(第8版)第8章 互联网上的音频/视频服务 复习笔记

第 8 章 互联网上的音频/视频服务 一、概述 1 多媒体信息的特点 多媒体信息&#xff08;包括声音和图像信息&#xff09;最主要的两个特点如下&#xff1a; &#xff08;1&#xff09;多媒体信息的信息量往往很大&#xff1b; &#xff08;2&#xff09;在传输多媒体数据时&a…...

linux进程控制——进程替换——exec函数接口

前言&#xff1a; 本节内容进入linux进程控制板块的最后一个知识点——进程替换。 通过本板块的学习&#xff0c; 我们了解了进程的基本控制方法——进程创建&#xff0c; 进程退出&#xff0c; 进程终止&#xff0c; 进程替换。 进程控制章节和上一节进程概念板块都是在谈进程…...

Apache解析漏洞~CVE-2017-15715漏洞分析

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执行不同的指令。比如如下配置文件&#xff1a; AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type &#xff0c;值为 text/html &#xff1b;给 …...

Xilinx管脚验证流程及常见问题

1 流程 1.1 新建I/O Planning Project I/O Planning Project中可以不需要RTL的top层.v代码&#xff0c;仅图形化界面即可配置管脚约束XDC文件的生成&#xff1a; Create I/O Ports&#xff1a; 导出XDC文件和自动生成的top_interface.v文件&#xff1a; 1.2 新建test Project …...

格雷厄姆的《聪明的投资者》被誉为“投资圣经”

本杰明格雷厄姆的《聪明的投资者》&#xff08;The Intelligent Investor: A Book of Practical Counsel&#xff09;是投资领域的一部经典之作&#xff0c;被誉为“投资圣经”。以下是对该书的详细解析&#xff1a; 一、书籍基本信息 书名&#xff1a;《聪明的投资者》&…...

TypeScript声明文件

TypeScript声明文件 在JavaScript的生态系统中&#xff0c;随着项目的复杂度和规模不断增加&#xff0c;开发者对于类型安全和代码质量的追求也日益增长。TypeScript&#xff0c;作为JavaScript的一个超集&#xff0c;通过添加静态类型检查和ES6等新特性支持&#xff0c;极大地…...

.NET_WPF_使用Livecharts数据绑定图表

相关概念 LiveCharts 是一个开源的图表库&#xff0c;适用于多种 .NET 平台&#xff0c;包括 WPF、UWP、WinForms 等。LiveCharts 通过数据绑定与 MVVM 模式兼容&#xff0c;使得视图模型可以直接控制图表的显示&#xff0c;无需直接操作 UI 元素。这使得代码更加模块化&#x…...

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…...

XCTF-web-easyupload

试了试php&#xff0c;php7&#xff0c;pht&#xff0c;phtml等&#xff0c;都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接&#xff0c;得到flag...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...