当前位置: 首页 > 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…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

FastAPI 教程:从入门到实践

FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于构建 API&#xff0c;支持 Python 3.6。它基于标准 Python 类型提示&#xff0c;易于学习且功能强大。以下是一个完整的 FastAPI 入门教程&#xff0c;涵盖从环境搭建到创建并运行一个简单的…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...