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

news2024/9/22 7:25:46

前言

        只要搞懂 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();
        
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1972408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APACHE安装与应用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

24澳中博览会|2025非洲水协年会暨展览|2025山西水展

2024澳中博览会 2025非洲水协年会暨展览 2025年山西国际水展暨水利工程设计与施工、水处理技术设备、泵管阀、智慧水务及环保展 承办单位&#xff1a;山西泽嘉国际展览有限公司 上海泽嘉展览服务有限公司 战略合作伙伴 &#xff1a; 美国迈阿密水展 欧 洲 海 水 脱 盐 淡 化…

SD原班人马发布FLUX.1:打开AI绘画新世界

​ Black Forest Labs 旗下产品 AI 绘画工具如雨后春笋般涌现&#xff0c;让我们对创作的理解不断刷新。就在大家以为已经见识了 AI 绘画的天花板时&#xff0c;FLUX.1 出现了&#xff01;这款由 Black Forest Labs 推出的 AI 绘画工具&#xff0c;不仅在性能上远超竞品&#x…

不好用你打我!2024你必须要会的AI神器

这篇文章&#xff0c;除了干货就是干货~ 今天给大家介绍一款2024年你必须要掌握的AI神器。 我可以肯定的说他是目前市面上第一款在这个领域出现的AI工具。 现在的AI工具&#xff0c;可以用来生成文字、图片、视频甚至音乐&#xff0c; 但是你听说过直接用AI生成APP的吗&…

【Spring】Spring框架的概念,以及Spring框架的简单使用。

目录 1. 概念 2. Spring的体系结构介绍&#xff08;了解&#xff09; 3. Spring框架的使用 3.1 环境准备 3.2 代码编写 1. 概念 总的来说就是一句话&#xff0c;Spring框架是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;编程的容…

Spring Boot+MyBatis+MySQL如何实现读写分离

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 背景 读写分离是数据库架构中的一种优化策略&#xff0c;它将读操作&#xff08;查询&#xff09;和写操作&#xff08;更新、插入、删除&#xff09;分开处理&#xff0c;通常通过将读请求和写请求分别发送…

2024年全国青少年信息素养大赛总决赛日赛程表

2024全国青少年信息素养大赛赛程表分赛场&#xff08;浙江传媒学院桐乡校区、桐乡技师学院&#xff09;日期地点时间赛项16日传媒学院8:00-9:00检录 9:00-10:30开赛图形化编程挑战赛&#xff08;小学1-3年级&#xff09;A组12:00-13:00检录 13:00-14:30开赛图形化编程挑战赛&am…

最新版Baby Audio Bundle,win和mac,持续更新,长期有效

一。Baby Audio Bundle.2024.07.WiN&MAC Baby Audio让您的混音听起来比以往任何时候都更大&#xff0c;更好&#xff0c;更有活力。这个捆绑包有七个独特的插件&#xff0c;涵盖了从延迟和混响效果&#xff08;Spaced Out&#xff09;到低保真声音&#xff08;Super VHS&am…

MySQL(8.0)数据库安装和初始化以及管理

1.MySQL下载安装和初始化 1.下载安装包 下载地址&#xff1a;https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.33-1.el7.x86_64.rpm-bundle.tar 2.解压…

手把手使用 SVG + CSS 实现渐变进度环效果

效果 轨道 使用 svg 画个轨道 <svg viewBox"0 0 100 100"><circle cx"50" cy"50" r"40" fill"none" stroke-width"10" stroke"#333"></circle></svg>简单的说&#xff0c;就是…

shell脚本(自动化安装各种服务)

1、自动化配置DNS服务 [rootelemestatic ~]# vim dns.sh [rootelemestatic ~]# bash dns.sh 客户端测试&#xff1a; yum -y install bind-utils echo "nameserevr 192.168.8.161" > /etc/resolv.conf nslookup www.a.com 2、自动化配置rsync服务 [rootele…

如何用Python删除电脑中的重复文件?

在生活中&#xff0c;我们经常会遇到电脑中文件重复的情况。 在文件较少的情况下&#xff0c;这类情况还比较容易处理&#xff0c;最不济就是一个个手动对比删除&#xff1b; 而在重复文件很多的时候&#xff0c;我们很难保证把重复文件全部删完。 这里给大家带来了一个便捷…

《计算机组成原理》(第3版)第2章 计算机的发展及应用 复习笔记

第2章 计算机的发展及应用 一、计算机的产生和发展 &#xff08;一&#xff09;第一代电子管计算机 1943年&#xff0c;美国国防部批准了建造一台用电子管组成的电子数字积分机和计算机&#xff08;Electronic Numerica1 Integrator And Computer&#xff0c;ENIAC&#xff…

2024年06月 Scratch 图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共10题,共30分) 第1题 运行下列程序,输入单词“PLAY”,最后角色说?( ) A:LY4AP B:AP4LY C:YA4PL D:PL4AY 答案:B 根据程序分析可知,首先获取单词字符数,然后奇数位的字母放在字符数左侧,偶数位…

基于STM32的嵌入式深度学习系统教程

目录 引言环境准备嵌入式深度学习系统基础代码实现&#xff1a;实现嵌入式深度学习系统 数据采集与预处理深度学习模型训练与优化模型部署与推理实时数据处理与反馈应用场景&#xff1a;智能物联网设备常见问题与解决方案收尾与总结 引言 随着深度学习在各种应用中的广泛采用…

HBuilder在uni-admin实现unicloud-map中poi管理

文章目录 新建uni-admin项目下载并导入插件申请地图key并配置&#xff08;本人使用的腾讯地图&#xff09;配置WebServiceAPI配置HBuilder中Web配置 启动项目进行菜单管理 新建uni-admin项目 新建项目时选择uni-admin模板 下载并导入插件 在unicloud介绍页面https://doc.dc…

GraphGNSSLib的RTKLIB——gnss_preprocessor.node的理解

gnss_preprocessor部分的理解&#xff0c;这是简单的几张流程图截图&#xff0c;自己的分析总结pdf在资源里&#xff0c;免费的&#xff0c;如果不占用大家资源可以下载&#xff0c;交流 整体的逻辑详见资源 &#xff0c;我承诺这是自己系统分析RTKLIB后&#xff0c;进行的…

苹果iOS开发中的网络数据任务API:URLSession入门实战

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 URLSession 是 iOS 开发中的一个 API&#xff0c;用于执行网络数据任务&#xff0c;如 HTTP 请求、文件下载和上传等。URLSession 提供了一种高…

射频工程师主要是干什么?

在硬件从业者中&#xff0c;有一部分从业者是专门负责射频&#xff0c;天线&#xff0c;基站信号相关工作内容的&#xff0c;他们也被称为射频工程师。并且相比与普通的硬件工程师&#xff0c;硬件测试工程师&#xff0c;专门做射频部分的射频工程师&#xff0c;相同年限下薪资…

LLM:混合精度量化概述

浮点数在计算机中的存储方式由符号位&#xff08;sign&#xff09;、指数位&#xff08;exponent&#xff09;和小数位&#xff08;fraction&#xff0c;也称为尾数、mantissa&#xff09;组成。以下是对这些部分的详细说明&#xff1a; 符号位&#xff08;Sign Bit&#xff09…