色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你i.MX RT1052的開源AutoQuad飛控

lPCU_elecfans ? 來源:未知 ? 作者:李倩 ? 2018-08-03 10:08 ? 次閱讀

【背景描述】

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文件系統。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 傳感器
    +關注

    關注

    2550

    文章

    51035

    瀏覽量

    753078
  • 開發板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97375
  • 自動駕駛
    +關注

    關注

    784

    文章

    13784

    瀏覽量

    166391

原文標題:一文教你i.MX RT1052的開源AutoQuad飛控——周四RTOS專欄

文章出處:【微信號:elecfans,微信公眾號:電子發燒友網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    凌嵌入式推出i.MX RT1052跨界開發板

    `2018年8月23日凌嵌入式最新發布基于NXP i.MX RT1052處理器的核心板FET1052-C與開發板套件OK1052-C,核心
    發表于 08-31 15:12

    求野火I.MX RT1052上手指南?

    那位大神有沒有野火 I.MX RT1052 上手指南啊?
    發表于 04-02 06:24

    求正點原子號令者I.MX RT1052的上手指南?

    誰能介紹一下I.MX RT1052 號令者呢?有沒有正點原子 I.MX RT1052 號令者上手指南 啊?
    發表于 04-02 06:26

    恩智浦i.MX RTxxx系列MCU的特性

    芯片i.MX RT1052,主頻高達600MHz,直接引爆眾多MCU開發者的神經。如今i.MX RT發布已近三年,陸續推出了9款型號,細心的你會發生其實際上已經衍生為兩大陣營,分別是C
    發表于 11-04 07:08

    【資料】基于RT-Thread的四軸控項目匯總

    RT1052開源AutoQuadAutoQuad是德國的一款老牌開源
    發表于 03-28 15:24

    如何使用Pendrive通過USB更新i.MX RT1052 EVK上的外部閃存固件?

    尋找為使用外部閃存的 i.MX RT1052 (EVK) 更新固件的解決方案。新文件將在筆式驅動器中可用,該驅動器將連接到 EVK 上的 USB 主機端口。請幫助/建議任何現成的示例代碼來實現這一點。
    發表于 04-11 06:40

    I.MX RT1052代碼執行在哪里?

    試用的開發板里有了I.MX RT1052 但是看I.MX RT1052有代碼與數據的SPI Flash,還有SRAM,還有片上的TCM 代碼可以執行在TCM上么?還是在SRAM上運行。
    發表于 11-09 06:49

    i.MX RT1052的FLex通過FLI_ SPI(4-wire) 接口訪問FPGA時,如何取消中間的閑置部分?

    我使用i.MX RT1052的FLex。 當通過 FLI_ SPI(4-wire) 接口訪問 FPGA時, ARM 發送的寫數據顯示在下圖中。 我如何取消中間的閑置部分( 沒有時鐘) ? 或者如何將
    發表于 11-13 06:04

    i.MX RT1052芯片的核心板,性能和代碼詳細資料概述

    i.MX RT1052i.MX RT系列芯片,是由 NXP 半導體公司推出的跨界處理器芯片,該系列下又包
    的頭像 發表于 06-10 10:55 ?2.5w次閱讀

    野火電子基于RT-Thread的i.MX RT1052 EVK Pro板卡特點介紹

    RT-Thread合作伙伴野火電子攜RT-Thread Inside板卡i.MX RT1052 EVK Pro參展NXP技術日,現場展示了多個基于R
    的頭像 發表于 07-16 09:44 ?9067次閱讀

    i.MX RT1052對視頻應用的支持

    Cortex-M7處理器的核心本質為微控制器,卻擁有高達600MHz的主頻,高密度的512KB TCM SRAM和16MB的高速SDRAM,超快的實時響應,超強處理性能賦予了RT1052視頻編解碼
    發表于 09-22 07:03 ?452次閱讀

    i.MX RT開發筆記-08 | i.MX RT1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    系列文章目錄i.MX RT開發筆記-01 | 初識 i.MX RT1062 跨界MCUi.MX RT
    發表于 12-01 13:51 ?2次下載
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>開發筆記-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中斷向量控制器NVIC(按鍵中斷檢測)

    RT-Thread文檔_野火 I.MX RT1052上手指南

    RT-Thread文檔_野火 I.MX RT1052 上手指南
    發表于 02-22 18:25 ?2次下載
    <b class='flag-5'>RT</b>-Thread文檔_野火 <b class='flag-5'>I.MX</b> <b class='flag-5'>RT1052</b>上手指南

    RT-Thread文檔_正點原子 I.MX RT1052號令者上手指南

    RT-Thread文檔_正點原子 I.MX RT1052 號令者上手指南
    發表于 02-22 18:26 ?3次下載
    <b class='flag-5'>RT</b>-Thread文檔_正點原子 <b class='flag-5'>I.MX</b> <b class='flag-5'>RT1052</b>號令者上手指南

    i.MX RT的FlexRAM配置問題

    i.MX RT的FlexRAM配置問題
    的頭像 發表于 10-24 15:46 ?805次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問題
    主站蜘蛛池模板: 亚洲国产综合人成综合网站00| 轻点慢点1V2啊高H抽插| 久久精品国产午夜伦班片| 黑丝女仆恋上我| 久久内在线视频精品mp4| 欧美506070| 少妇精品无码一区二区三区 | 色多多污污在线播放免费| 色呦呦导航| 亚洲精品免费视频| 越南美女内射BBWXZ| jealousvue成熟40岁| 国产成人精品视频播放| 护士日本ⅹxxx丰满hd| 久青草国产97香蕉在线视频| 嫩草欧美曰韩国产大片| 上课失禁丨vk| 野花日本韩国视频免费高清观看| 99福利在线| 国产伦精品一区二区三区免费观看| 接吻吃胸摸下面啪啪教程| 魔乳 堕乳漫画acg产卵| 涩涩999| 野花韩国高清完整版在线| a亚洲在线观看不卡高清| 国产精品v片在线观看不卡| 久久精品日本免费线| 日本不卡一二三| 亚洲欧美成人综合| gogogo免费视频观看| 国产在线观看成人| 欧美美女论坛| 亚洲理论片在线中文字幕| china野外18:19| 湖南电台在线收听| 秋霞网站一级一片| 一级做a爰片久久免费| 穿着丝袜被男生强行啪啪| 久久精品国产清白在天天线| 日韩高清毛片| 做a爱片的全过程|