基于维特智能的运动手环设计hal库

笔者前段时间想做一个运动手环,发现mpu6050还是稍微缺了点精度用起来虽然蛮多开源但是数据有点慢。想了想去淘宝找了一圈国产的mpu就看到了维特的jy系列。

一、设计灵感

之前看很多运动手环都有类似的功能,但是针对个别运动好像还是缺了点,个人认为针对某些运动其实可以做一个专门的纠正手环,笔者这里想到了篮球(姬霓太美)于是就开始动手去找资料了。发现国内基本没有这种东西。

不过我们首先还是先看看维他他家的官网的产品概述

产品概述

  • 该产品是基于MEMS技术的高性能三维运动姿态测量系统。它包含三轴陀螺仪、三轴加速度计。通过集成各种高性能传感器和运用自主研发的姿态动力学核心算法引擎,结合高动态卡尔曼滤波融合算法,为客户提供高精度、高动态、实时补偿的三轴姿态角度,通过对各类数据的灵活选择配置,满足不同的应用场景。
  • 领先的基于 Kalman 滤波原理并具有自主知识产权的传感器融合算法,可以实时提供高达 200Hz 更新率的数据,从而满足各种高精度的应用需求,实现准确的动作捕捉和姿态估计。
  • 拥有国内领先的高精度转台设备仪器,产品内部集成自主研发的高精度校准和标定算法,提高产品的测量精度。
  • 同时提供用户所需要的各种上位机、使用说明、开发手册、开发代码,使得针对各类需求的研发产品特点时间降至最低。
  • 产品特点
  • ​模块集成高精度的陀螺仪、加速度计,采用高性能的微处理器和先进的动力学解算与卡尔曼动态滤波算法,能够快速求解出模块当前的实时运动姿态。
  • 采用先进的数字滤波技术,能有效降低测量噪声,提高测量精度。
  • 模块内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态, 姿态测量精度 0.2度 ,稳定性极高,性能甚至优于某些专业的倾角仪。
  • 模块内部自带电压稳定电路,工作电压3.3~5V,引脚电平兼容3.3V/5V的嵌入式系统,连接方便。
  • 支持串口和IIC两种数字接口。方便用户选择最佳的连接方式。串口速率4800bps~230400bps可调,IIC接口支持全速400K速率。
  • 最高200Hz数据输出速率。输出内容可以任意选择,输出速率0.2~200Hz可调节。
  • 保留4路扩展端口,可以分别配置为模拟输入,数字输入,数字输出等功能。
  • 具备GPS连接能力。可接受符合NMEA-0183标准的串口GPS数据,形成GPS-IMU组合导航单元。
  • 采用邮票孔镀金工艺,可嵌入用户的PCB板中。
  • 4层PCB板工艺,更薄、更小、更可靠。

可以发现功能还是满齐全的也挺高端(看起来)

使用方法还是一般的串口使用方法,不过笔者这里之前移植了iic的索性就用iic的接口去跑数据了。

二、设计步骤

1.模块的调试

代码如下(主任务):

int main(void)
{ 
    int i;
    angle = fangle[0];
    angle_2 = fangle[1];
    angle_3 = fangle[2];

    HAL_Init();                        //初始化HAL库    
    Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M
    delay_init(72);                   //初始化延时函数
    LED_Init();                        //初始化LED    
    IIC_Init();                        //初始化IIC
    KEY_Init();                     //初始化按键
    LCD_Init();                     //初始化lcd显示屏    
    uart_init(115200);                 //串口初始化为115200(串口数据调试)
    uart3_init(115200);             //串口3初始化为115200
    ESP8266_Init();                 //初始化esp8266
    open_UI();                      //开机界面

    WitInit(WIT_PROTOCOL_I2C, 0x50);
    WitI2cFuncRegister(IICwriteBytes, IICreadBytes);
    WitRegisterCallBack(CopeSensorData);
    WitDelayMsRegister(Delayms);
    AutoScanSensor();
    /* 无限循环 */
    while(1)
    {
        WitReadReg(AX, 12);
        delay_ms(20);
        CmdProcess();
        if(s_cDataUpdate)
        {
            for(i = 0; i < 3; i++)
            {
                fangle[i] = sReg[Roll+i] / 32768.0f * 180.0f;   //角度 
            }
            if(s_cDataUpdate & ANGLE_UPDATE)
            {
                s_cDataUpdate &= ~ANGLE_UPDATE;
                LCD_ShowNum(24,16,fangle[0],3,16);
                LCD_ShowFloatNum1(56,16,fangle[0],2,0xffff,0x0000,16);
                LCD_ShowNum(24,34,fangle[1],3,16);
                LCD_ShowFloatNum1(56,34,fangle[1],2,0xffff,0x0000,16);
                LCD_ShowNum(24,54,fangle[2],3,16);
                LCD_ShowFloatNum1(56,54,fangle[2],2,0xffff,0x0000,16);
                delay_ms(10);
            }
            ESP8266_SendData(angle,angle_2,angle_3);//发送数据
            delay_ms(10);
        }
    }
}

预计的pcb大小,和这个屏幕应该差不多。

2.数据校准

代码如下(示例):

fangle[i] = sReg[Roll+i] / 32768.0f * 180.0f;   //角度 用的串口输出来看了一下数据的准确性,还是比较满意的


总结

这么个小东西前前后后调试了两周,也做了点功能的拓展,传输数据到云端服务器去分析啊什么的,感觉还是挺有意思的,ui也自己设计了一个挺好玩的,接口我也有保留后续可能会开发更多功能吧,看起来优化的地方还有很多缩小体积啊减少电池的体积啊屏幕的排线集成啊什么的。

后续有机会会把这个东西开源出来让大家伙拓展功能,至于什么时候就要看我有没有时间了(笑哭)

感兴趣关注我一手吧,需要源代码的话留个邮箱,笔者看到的话会发的(关注关注关注),主要是度盘容易炸。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 智能车底层程序HAL(Hardware Abstraction Layer)库,是一种软件库,用于提供操作系统(或其他软件层)与硬件之间的抽象接口,使上层软件可以简化与硬件的交互操作。 智能车底层程序HAL库的主要作用有以下几个方面: 1. 硬件抽象:HAL库可以对底层硬件进行抽象,将底层硬件的功能、接口、寄存器等进行封装。这样,上层软件只需通过调用HAL库提供的接口来访问硬件,不需要关心具体硬件细节,从而简化软件开发和维护的工作。 2. 平台无关性:由于HAL库对底层硬件进行了抽象封装,上层软件可以在不同的硬件平台上进行移植和运行。只需替换底层HAL库,上层软件的逻辑部分就可以在不同的硬件平台上复用,提高了软件的可移植性和可扩展性。 3. 功能扩展:HAL库提供了一系列丰富的功能接口,可以方便地实现一些常用的硬件操作,如IO口控制、通信接口(如UART、SPI、I2C等)的读写,传感器数据采集等。这些功能接口可以大大简化开发者的工作,加快软件开发的速度。 4. 性能优化:HAL库可以通过对硬件的深入了解,对底层硬件进行优化,提高软件的性能和响应速度。比如,通过对硬件资源的合理分配和使用,可以降低系统的功耗和延迟,提高系统的稳定性和可靠性。 总之,智能车底层程序HAL库是一种用于提供软硬件交互抽象接口的软件库,通过对底层硬件的封装,简化了软件开发的工作,提高了软件的可移植性和可扩展性,并且可以优化系统的性能和响应速度。 ### 回答2: 智能车底层程序HAL库是指硬件抽象层(Hardware Abstraction Layer),它是一种软件抽象层,用于为智能车提供对底层硬件的访问和控制。 智能车的底层程序HAL库是被放在操作系统下的一层中间件,它的作用是屏蔽硬件的差异性,为上层应用程序提供统一的接口。HAL库可以让开发者更加方便地编写智能车应用程序,无需了解底层硬件的具体细节,只需要调用HAL库提供的接口即可实现对硬件的访问和控制。 HAL库通常包含了对于各类硬件的驱动程序,比如传感器、摄像头、电机等等。开发者可以通过调用这些驱动程序来操作硬件,实现各种功能,比如检测环境、感知周围的物体、进行路径规划和导航等等。HAL库还提供了一些基本的操作接口,如读取传感器数据、控制电机转动等,方便开发者进行底层编程。 通过使用HAL库,开发者可以避免重复编写底层代码,节省开发时间和精力。同时,由于使用了HAL库,应用程序的可移植性和兼容性也大大提高,可以方便地在不同硬件平台上运行。 总之,智能车底层程序HAL库的存在使得开发者能够更加方便地对底层硬件进行访问和控制,简化了开发过程,提高了应用程序的可移植性和兼容性,加快了智能车的开发速度。 ### 回答3: 智能车的底层程序HAL库是一个硬件抽象层,全称为Hardware Abstraction Layer,它起到了桥梁的作用,连接了硬件和软件之间的通信和交互。 智能车底层程序HAL库通过封装底层硬件的底层接口,提供了一系列的API函数供上层应用程序调用,使得上层应用程序可以方便地访问和操作底层硬件设备。HAL库主要包括了对车辆传感器、执行器、通信设备等硬件的驱动程序,以及对硬件设备进行初始化、配置和控制的功能。 智能车底层程序HAL库设计和实现需要考虑多种因素,包括硬件平台的不同、硬件接口的差异、底层驱动程序的可移植性等。HAL库需要提供一致的接口和一致的功能,使得上层应用程序可以在不同的硬件平台上运行,并且无需修改代码。 HAL库设计还需要考虑到性能和稳定性的因素。底层驱动程序的效率和稳定性对整个智能车系统的运行非常重要,因此HAL库需要经过充分的优化和测试,以保证底层硬件的高效运行和可靠性。 总之,智能车底层程序HAL库是一个关键的组成部分,它提供了对底层硬件的抽象和封装,为上层应用程序提供了方便、高效的访问和操作方式。HAL库设计和实现需要考虑到硬件平台的差异和性能需求,以及底层驱动程序的可移植性和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值