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

前言

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

一、JY60 陀螺仪

JY60特点

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

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

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

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

二、syscfg 配置

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

三、串口接收部分代码

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

UART2.c

cs 复制代码
// #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

cs 复制代码
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;
//			}
		//}

}

主函数调用代码:

cs 复制代码
#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();
        
	}
}
相关推荐
懒惰的bit2 小时前
基础网络安全知识
学习·web安全·1024程序员节
小于小于大橙子2 小时前
视觉SLAM数学基础
人工智能·数码相机·自动化·自动驾驶·几何学
2401_858286113 小时前
L7.【LeetCode笔记】相交链表
笔记·leetcode·链表
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-3.4.2.Okex行情交易数据
人工智能·python·机器学习·数据挖掘
封步宇AIGC4 小时前
量化交易系统开发-实时行情自动化交易-2.技术栈
人工智能·python·机器学习·数据挖掘
Natural_yz4 小时前
大数据学习09之Hive基础
大数据·hive·学习
龙中舞王4 小时前
Unity学习笔记(2):场景绘制
笔记·学习·unity
陌上阳光4 小时前
动手学深度学习68 Transformer
人工智能·深度学习·transformer
Natural_yz4 小时前
大数据学习10之Hive高级
大数据·hive·学习
OpenI启智社区4 小时前
共筑开源技术新篇章 | 2024 CCF中国开源大会盛大开幕
人工智能·开源·ccf中国开源大会·大湾区