教你i.MX RT1052的开源AutoQuad飞控

发布者:星光闪耀最新更新时间:2024-06-25 来源: elecfans关键字:i  MX  RT1052  开源 手机看文章 扫描二维码
随时随地手机看文章

【背景描述】

AutoQuad是德国的一款老牌开源飞控(硬件闭源),其旨在提供稳定、动态飞行和自动驾驶功能的飞控控制器


由于AutoQuad硬件闭源的特性,国内的玩家很少,但AutoQuad 的ukf算法“独步天下”,绝对是一绝,我对其垂涎已久。15年时我自己做出了Autoquad的M4版本硬件(基于stm32f405rgt6),可以运行官方源码。


17年时我将Autoquad移植到mdk环境下并且将其rtos替换为RT-Thread。后续玩这个玩了蛮久时间,这个版本的AutoQuad有一个问题:由于UKF算法占用了很多cpu资源使得整个系统cpu占用率太高,再者就是片内ram资源捉襟见肘。


对于这个版本的AutoQuad目前有挺多模友想继续深入的开发,比如网名为“我的世界观”的网友想将L1自适应控制算法加入到其中,但这个L1自适应算法也是极耗费cpu资源的。在这个背景下我开始着手AutoQuad在imx-rt1052上的实现,以期留出足够的资源给大家来给模友们深入开发,同时我也借机熟悉下RT-Thread的3.x版本。


另外参加这个作品征集活动只是这个项目的开始,我后续会将成果放在github,欢迎大家一起来加入这个项目,继续延续AutoQuad的传奇。


【所用物料】

主控:

iMX-RT1052DVL6B

传感器:

ICM20602、SPL06、HMC5983

编译环境:

WIN10、MDK5.25

RT-Thread 版本:

3.0.4

实物图:

硬件板子目前基于野火1052 mini开发板,传感器是从马家买的现成模块,采用飞线的形式固定在开发板上(后期会重新设计一款小的适合飞控的板子)


主控+传感器


全部的连接都使用飞线(感谢火哥不杀之恩)


为了上盖能盖的下,将底板上的usb座和网络接口座去掉了(感谢火哥不杀之恩)


勉强能扣好

【硬件设计】

系统框图


硬件设计解析

A、传感器部分:

各个传感器接到IMX-RT1052的SPI3上,进行分时操作。

B、SBUS输入

由于SBUS信号是一个反向电平的串口信号,这里使用一个三级管搭了一个简单的反向电路,从而将信号正确到接入到处理器的串口输入端。

C、PWM 信号输出

用于控制ESC的PWM信号,使用主控上PWM1和PWM2中的AB通道,这里3的意思是使用submode3。

D、GPS

GPS模块是一个独立的单元,通过串口接到主控的串口5上,上图中的原理图是我早期时候设计的基于Ublox M8N的GPS模块,这里刚好用到。

【软件设计】

软件设计流程

整个AutoQuad源码是一个较大的系统,我这里抽丝剥茧,将其中的主脉络流程贴出来:


关键代码解析

此版和之前在stm32f405上的版本最大的区别在于加速度+陀螺仪传感器、磁力计、高度计的数据读取上。原版直接使用spi进行驱动,这个版本我使用了RT-Thread的SPI设备驱动框架来进行数据读取。

这里将加速度传感器&陀螺仪驱动源码列出来,进行一个简单解析:

1、将总线设备挂到总线上(配置CS引脚)

rt1050_spi_bus_attach_device('spi3', 'spi32', 64);

此段代码表示将icm20602作为spi3上的第三个设备和spi总线进行关联,并使用 GPIO_AD_B1_05 作为其cs引脚(其中64代表 GPIO_AD_B1_05 ,即icm20602的cs引脚是 GPIO_AD_B1_05 )。

2、配置SPI总线相关参数

struct rt_spi_configuration cfg; cfg.data_width = 8; cfg.mode = RT_SPI_MODE_0 | RT_SPI_MSB; /* SPI Compatible: Mode 0 and Mode 3 */ cfg.max_hz = MPU6000_SPI_BAUD; /* 1M */ rt_spi_configure(spi_acc_gyro_device->rt_spi_device, &cfg);

3、对总线的互斥操作

为保证多个设备对spi3的互斥使用,需要对icm20602加入互斥锁操作:

static void sensor_lock(struct spi_acc_gyro_device * sensor_device) { rt_mutex_take(sensor_device->lock, RT_WAITING_FOREVER); } static void sensor_unlock(struct spi_acc_gyro_device * sensor_device) { rt_mutex_release(sensor_device->lock); }

4、寄存器的读写操作

static void icm20602_write_reg(uint8_t reg, uint8_t value) { uint8_t send_buffer[2]; send_buffer[0] = reg&0x7f; send_buffer[1] = value; rt_spi_send(spi_acc_gyro_device->rt_spi_device, send_buffer, 2); } static uint8_t icm20602_read_reg(uint8_t reg) { uint8_t rxBuf[2]; uint8_t txBuf[2]; txBuf[0] = reg|0x80; rt_spi_send_then_recv(spi_acc_gyro_device->rt_spi_device, txBuf, 1, rxBuf, 2); return rxBuf[0]; } static uint8_t icm20602_read_buffer(uint8_t reg, uint8_t *buffer, uint16_t len) { uint8_t txBuf[2]; uint8_t rxBuf[20]; sensor_lock(spi_acc_gyro_device); txBuf[0] = reg|0x80; rt_spi_send_then_recv(spi_acc_gyro_device->rt_spi_device, txBuf, 1, rxBuf, len); rt_memcpy(buffer, rxBuf, len); sensor_unlock(spi_acc_gyro_device); return 0; }

5、读取加速度和陀螺仪数据

static uint8_t icm20602_get_accel(int16_t *accel, int16_t *temp) { uint8_t buf[10]; icm20602_read_buffer(ICM20_ACCEL_XOUT_H,buf,8); accel[0] = ((int16_t)buf[0]<<8) + buf[1];    accel[1] = ((int16_t)buf[2]<<8) + buf[3];    accel[2] = ((int16_t)buf[4]<<8) + buf[5];    *temp     = ((int16_t)buf[6]<<8) + buf[7];    //ICM_TRACE('acc0=%d, acc1=%d, acc2=%d ',accel[0],accel[1],accel[2]);    return 0; } static uint8_t icm20602_get_gyro(int16_t *gyro) {    uint8_t buf[8];    icm20602_read_buffer(ICM20_GYRO_XOUT_H,buf,8);    gyro[0] = (buf[0]<<8) + buf[1];    gyro[1] = (buf[2]<<8) + buf[3];    gyro[2] = (buf[4]<<8) + buf[5];    // ICM_TRACE('gyro0=%d, gyro1=%d, gyro2=%d ',gyro[0],gyro[1],gyro[2]);    return 0; }

因为 icm20602_read_buffer 函数内部已经加入了互斥,所以读取时不再需要互斥操作。

RT-Thread 使用情况

1、动态内存管理;

2、GPIO设备驱动架构;

3、RTC设备驱动架构;

4、SPI设备驱动架构;

5、SDIO设备驱动架构;

6、串口设备驱动架构;

7、MSH命令行;

8、FatFs文件系统。


关键字:i  MX  RT1052  开源 引用地址:教你i.MX RT1052的开源AutoQuad飞控

上一篇:关于多路步进电机控制系统的设计方案分析
下一篇:CAN总线波特率的自适应算法设计方案

推荐阅读最新更新时间:2024-11-21 16:14

宝马i8 Roadster新车预计明年上市
    不在沉默中爆发就在沉默中灭亡,用这句话来写bmw最恰当不过了。轿车方面,2013除了新的5系外,只有专供全国的一系三厢撑个场面,上市多年临近换代,SUV方面,除了新的X1在2013出台并国产后,X3、X5也与三系遇到一样的遭遇。   bmw憋着劲儿把这些车放在今年后半年和明年,将会在2018年底前推出五种轿车、五种SUV,共计十种新车,下面小编给大家一个一个介绍:   宝马i8 Roadster:据美国媒体motor1 7月3日报道,宝马官方首次对外发布全新i8 Roadster敞篷车的预告片。新车预计明年上市,最快可能于今年9月的法兰克福车展亮相。i8 Roadster敞篷车是一款插电式混动敞篷车。视频中除车顶以
[汽车电子]
【51单片机快速入门指南】2.5:并行I/O扩展与8255A
Windows 10 20H2 Proteus 8 Frofessional v8.9 SP2 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《单片机基础》(第3版) —— 李广弟 朱月秀 冷祖祁编著 单片机I/O扩展基础知识 使用单片机本身的I/O (Input/Output)口,可以实现一些简单的数据输入/输出传送,例如,开关状态的输入,发光二极管的驱动输出等。但是对于复杂的I/O操作,必须有接口电路的协调与控制才能进行。所以I/O扩展的主要内容是接口问题。 I/O接口电路的功能 在单片机系统中,
[单片机]
【51单片机快速入门指南】2.5:并行<font color='red'>I</font>/O扩展与8255A
MSP430F249硬件I2C查询法读写AT24C02
/****************************************************************** ** ** File : I2C.c | Master Read Write | ** Version : 1.0 ** Description: I2C 查询法读写24C02 ** Author : LightWu ** Date : 2013-4-26
[单片机]
MSP430F249硬件<font color='red'>I</font>2C查询法读写AT24C02
瑞萨对话Arduino:开源硬件正获得企业级青睐
Arduino 的用户群不断多元化,已不止业余爱好者,越来越多的企业级应用正在采用 瑞萨电子 1000 万美元的投资使 Arduino 能够推出 Uno R4,它将处理元件从 8 位提升到 32 位,性能大幅提升 这一进步加速了 Arduino 在企业级的应用普及 瑞萨电子合作伙伴证明 Arduino 不仅仅适合周末 DIY 爱好者 瑞萨电子最近与 Arduino 首席执行官 Fabio Violante 进行了座谈,讨论了开源开发环境如何随着用户群的扩大而不断发展。 此次谈话发生在瑞萨电子向 Arduino 投资 1000 万美元(3200 万美元 B 轮融资的一部分)一年多之后。 这项投资还使 Arduino
[嵌入式]
瑞萨对话Arduino:<font color='red'>开源</font>硬件正获得企业级青睐
AD推出I突破性MEMS传感器ADIS16355
  与因特网相似,全球定位系统(GPS)卫星导航正成为人们日常生活各个方面都离不开的一项泛在技术。在生死危急关头,GPS不仅可以使紧急救护车发现最快的响应路线路径;而且GPS可以使海上考古学家直奔研究船只目标搜寻船只残骸;此外,GPS还可以引导农场主确定在哪里安置设备,从而确保其庄稼种植量达到最大。ADI推出一种新的惯性传感方案,该方案可以为卡车车队、农业装备、商用飞机与小型飞机、舰艇、坦克以及其他依靠 GPS卫星导航保持精确位置信息的交通工具中的GPS信号损失或感应信号奇异性进行补偿。         由于采用ADI公司的iMEMS运动信号处理技术, ADIS16355惯性测量装置(IMU)允许工业设计人员首次在系统中
[传感器]
新款vivo X21i现身 配联发科P60+虹膜识别
凭借着出众的设计和成像,vivo X21自发布后广受好评,在3000元档位的销售成绩优势明显。近期有消息显示,vivo计划推出一款X21的衍生机型vivo X21i,搭载联发科Helio P60处理器,并新增了虹膜识别技术,价格预计比已经发布的骁龙660版更便宜,以求进一步抢占市场。   根据Geekbench给出的数据,vivo X21i将搭载联发科P60处理器,搭配6GB内存,预装Android 8.1.0系统,单核成绩1499,多核成绩5777,与骁龙660版的vivo X21基本处于同一水平。   参数上看,联发科Helio P60由台积电12nm工艺打造,拥有4颗A73核心和4颗A53核心, 最高主频2.0GHz,相比
[手机便携]
蓝魔数码发布i系列英特尔芯平板
2013年9月12日,中国北京—— 蓝魔数码发布了蓝魔i系列英特尔芯智慧平板电脑,该系列包含i8、i9、i10、i12四款产品。这是继2012年底的蓝魔W32之后,蓝魔数码再一次推出搭载英特尔芯片的平板电脑。主频高达2.0GHz的英特尔双核凌动Z2580(研发代号:Clover Trail+)平台为蓝魔i系列平板注入了兼具极速性能与超长续航表现的强大动力。来自蓝魔、英特尔、渠道、媒体和蓝魔粉丝等百余位嘉宾参与了本次发布会,共同领略了蓝魔全新i系列智慧平板的独特魅力。 比亚迪联合创始人、蓝魔数码科技有限公司董事夏佐全出席发布会并致辞。他表示:“作为国内领军的个人消费数码企业之一,蓝魔一直致力于为消费者打造最值得拥有的消费电子
[手机便携]
串行总线节省I/O管脚
    SPI总线接口        串行外设接口(SPI)在主机和一个或多个从属设备间利用同步串行通讯提供了基本的通讯。主机发起所有与从属设备通讯的要求,并提供控制传输速率的时钟信号。SPI并未提供高级的协议,所以在主机(如微控制器)与外设(如ADC或编码解码器)间的通讯,并不需要时间进行内部管理。由于缺少协议,SPI芯片厂商就要提出自己的位与字节管理方案。最简单的SPI接口要求三条信号线路(时钟、主机输入与从属设备输出、主机输出与从属设备输入)与接地。 SPI通讯每次是一个字节,但从属设备接收数据时缺少自动应答,而且,通讯不能对特定的SPI芯片寻址,因此每个SPI从属设备必须提供一个活动低态(active-low)
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved