在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

教你i.MX RT1052的開(kāi)源AutoQuad飛控

lPCU_elecfans ? 來(lái)源:未知 ? 作者:李倩 ? 2018-08-03 10:08 ? 次閱讀

【背景描述】

AutoQuad是德國(guó)的一款老牌開(kāi)源飛控(硬件閉源),其旨在提供穩(wěn)定、動(dòng)態(tài)飛行和自動(dòng)駕駛功能的飛控控制器

由于AutoQuad硬件閉源的特性,國(guó)內(nèi)的玩家很少,但AutoQuad 的ukf算法“獨(dú)步天下”,絕對(duì)是一絕,我對(duì)其垂涎已久。15年時(shí)我自己做出了Autoquad的M4版本硬件(基于stm32f405rgt6),可以運(yùn)行官方源碼。

17年時(shí)我將Autoquad移植到mdk環(huán)境下并且將其rtos替換為RT-Thread。后續(xù)玩這個(gè)玩了蠻久時(shí)間,這個(gè)版本的AutoQuad有一個(gè)問(wèn)題:由于UKF算法占用了很多cpu資源使得整個(gè)系統(tǒng)cpu占用率太高,再者就是片內(nèi)ram資源捉襟見(jiàn)肘。

對(duì)于這個(gè)版本的AutoQuad目前有挺多模友想繼續(xù)深入的開(kāi)發(fā),比如網(wǎng)名為“我的世界觀”的網(wǎng)友想將L1自適應(yīng)控制算法加入到其中,但這個(gè)L1自適應(yīng)算法也是極耗費(fèi)cpu資源的。在這個(gè)背景下我開(kāi)始著手AutoQuad在imx-rt1052上的實(shí)現(xiàn),以期留出足夠的資源給大家來(lái)給模友們深入開(kāi)發(fā),同時(shí)我也借機(jī)熟悉下RT-Thread的3.x版本。

另外參加這個(gè)作品征集活動(dòng)只是這個(gè)項(xiàng)目的開(kāi)始,我后續(xù)會(huì)將成果放在github,歡迎大家一起來(lái)加入這個(gè)項(xiàng)目,繼續(xù)延續(xù)AutoQuad的傳奇。

【所用物料】

主控:

iMX-RT1052DVL6B

傳感器

ICM20602、SPL06、HMC5983

編譯環(huán)境:

WIN10、MDK5.25

RT-Thread 版本:

3.0.4

實(shí)物圖:

硬件板子目前基于野火1052 mini開(kāi)發(fā)板,傳感器是從馬家買(mǎi)的現(xiàn)成模塊,采用飛線的形式固定在開(kāi)發(fā)板上(后期會(huì)重新設(shè)計(jì)一款小的適合飛控的板子)

主控+傳感器

全部的連接都使用飛線(感謝火哥不殺之恩)

為了上蓋能蓋的下,將底板上的usb座和網(wǎng)絡(luò)接口座去掉了(感謝火哥不殺之恩)

勉強(qiáng)能扣好

【硬件設(shè)計(jì)】

系統(tǒng)框圖

硬件設(shè)計(jì)解析

A、傳感器部分:

各個(gè)傳感器接到IMX-RT1052的SPI3上,進(jìn)行分時(shí)操作。

B、SBUS輸入

由于SBUS信號(hào)是一個(gè)反向電平的串口信號(hào),這里使用一個(gè)三級(jí)管搭了一個(gè)簡(jiǎn)單的反向電路,從而將信號(hào)正確到接入到處理器的串口輸入端。

C、PWM 信號(hào)輸出

用于控制ESC的PWM信號(hào),使用主控上PWM1和PWM2中的AB通道,這里3的意思是使用submode3。

D、GPS

GPS模塊是一個(gè)獨(dú)立的單元,通過(guò)串口接到主控的串口5上,上圖中的原理圖是我早期時(shí)候設(shè)計(jì)的基于Ublox M8N的GPS模塊,這里剛好用到。

【軟件設(shè)計(jì)】

軟件設(shè)計(jì)流程

整個(gè)AutoQuad源碼是一個(gè)較大的系統(tǒng),我這里抽絲剝繭,將其中的主脈絡(luò)流程貼出來(lái):

關(guān)鍵代碼解析

此版和之前在stm32f405上的版本最大的區(qū)別在于加速度+陀螺儀傳感器、磁力計(jì)、高度計(jì)的數(shù)據(jù)讀取上。原版直接使用spi進(jìn)行驅(qū)動(dòng),這個(gè)版本我使用了RT-Thread的SPI設(shè)備驅(qū)動(dòng)框架來(lái)進(jìn)行數(shù)據(jù)讀取。

這里將加速度傳感器&陀螺儀驅(qū)動(dòng)源碼列出來(lái),進(jìn)行一個(gè)簡(jiǎn)單解析:

1、將總線設(shè)備掛到總線上(配置CS引腳)

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

此段代碼表示將icm20602作為spi3上的第三個(gè)設(shè)備和spi總線進(jìn)行關(guān)聯(lián),并使用 GPIO_AD_B1_05 作為其cs引腳(其中64代表 GPIO_AD_B1_05 ,即icm20602的cs引腳是 GPIO_AD_B1_05 )。

2、配置SPI總線相關(guān)參數(shù)

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、對(duì)總線的互斥操作

為保證多個(gè)設(shè)備對(duì)spi3的互斥使用,需要對(duì)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、寄存器的讀寫(xiě)操作

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、讀取加速度和陀螺儀數(shù)據(jù)

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; }

因?yàn)?icm20602_read_buffer 函數(shù)內(nèi)部已經(jīng)加入了互斥,所以讀取時(shí)不再需要互斥操作。

RT-Thread 使用情況

1、動(dòng)態(tài)內(nèi)存管理;

2、GPIO設(shè)備驅(qū)動(dòng)架構(gòu);

3、RTC設(shè)備驅(qū)動(dòng)架構(gòu);

4、SPI設(shè)備驅(qū)動(dòng)架構(gòu);

5、SDIO設(shè)備驅(qū)動(dòng)架構(gòu);

6、串口設(shè)備驅(qū)動(dòng)架構(gòu);

7、MSH命令行;

8、FatFs文件系統(tǒng)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 傳感器
    +關(guān)注

    關(guān)注

    2553

    文章

    51461

    瀏覽量

    756933
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5130

    瀏覽量

    98326
  • 自動(dòng)駕駛
    +關(guān)注

    關(guān)注

    785

    文章

    13944

    瀏覽量

    167097

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

文章出處:【微信號(hào):elecfans,微信公眾號(hào):電子發(fā)燒友網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    凌嵌入式推出i.MX RT1052跨界開(kāi)發(fā)板

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

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

    那位大神有沒(méi)有野火 I.MX RT1052 上手指南啊?
    發(fā)表于 04-02 06:24

    求正點(diǎn)原子號(hào)令者I.MX RT1052的上手指南?

    誰(shuí)能介紹一下I.MX RT1052 號(hào)令者呢?有沒(méi)有正點(diǎn)原子 I.MX RT1052 號(hào)令者上手指南 啊?
    發(fā)表于 04-02 06:26

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

    芯片i.MX RT1052,主頻高達(dá)600MHz,直接引爆眾多MCU開(kāi)發(fā)者的神經(jīng)。如今i.MX RT發(fā)布已近三年,陸續(xù)推出了9款型號(hào),細(xì)心的你會(huì)發(fā)生其實(shí)際上已經(jīng)衍生為兩大陣營(yíng),分別是C
    發(fā)表于 11-04 07:08

    【資料】基于RT-Thread的四軸控項(xiàng)目匯總

    RT1052開(kāi)源AutoQuadAutoQuad是德國(guó)的一款老牌開(kāi)源
    發(fā)表于 03-28 15:24

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

    尋找為使用外部閃存的 i.MX RT1052 (EVK) 更新固件的解決方案。新文件將在筆式驅(qū)動(dòng)器中可用,該驅(qū)動(dòng)器將連接到 EVK 上的 USB 主機(jī)端口。請(qǐng)幫助/建議任何現(xiàn)成的示例代碼來(lái)實(shí)現(xiàn)這一點(diǎn)。
    發(fā)表于 04-11 06:40

    I.MX RT1052代碼執(zhí)行在哪里?

    試用的開(kāi)發(fā)板里有了I.MX RT1052 但是看I.MX RT1052有代碼與數(shù)據(jù)的SPI Flash,還有SRAM,還有片上的TCM 代碼可以執(zhí)行在TCM上么?還是在SRAM上運(yùn)行。
    發(fā)表于 11-09 06:49

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

    我使用i.MX RT1052的FLex。 當(dāng)通過(guò) FLI_ SPI(4-wire) 接口訪問(wèn) FPGA時(shí), ARM 發(fā)送的寫(xiě)數(shù)據(jù)顯示在下圖中。 我如何取消中間的閑置部分( 沒(méi)有時(shí)鐘) ? 或者如何將
    發(fā)表于 11-13 06:04

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

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

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

    RT-Thread合作伙伴野火電子攜RT-Thread Inside板卡i.MX RT1052 EVK Pro參展NXP技術(shù)日,現(xiàn)場(chǎng)展示了多個(gè)基于R
    的頭像 發(fā)表于 07-16 09:44 ?9145次閱讀

    i.MX RT1052對(duì)視頻應(yīng)用的支持

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

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

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

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

    RT-Thread文檔_野火 I.MX RT1052 上手指南
    發(fā)表于 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文檔_正點(diǎn)原子 I.MX RT1052號(hào)令者上手指南

    RT-Thread文檔_正點(diǎn)原子 I.MX RT1052 號(hào)令者上手指南
    發(fā)表于 02-22 18:26 ?5次下載
    <b class='flag-5'>RT</b>-Thread文檔_正點(diǎn)原子 <b class='flag-5'>I.MX</b> <b class='flag-5'>RT1052</b>號(hào)令者上手指南

    i.MX RT的FlexRAM配置問(wèn)題

    i.MX RT的FlexRAM配置問(wèn)題
    的頭像 發(fā)表于 10-24 15:46 ?870次閱讀
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置問(wèn)題
    主站蜘蛛池模板: 国内精品久久久久久久久蜜桃 | 夜夜骑狠狠干 | 天天色天天操综合网 | 国产一区二区三区免费大片天美 | 色综合天天综合网国产国产人 | 五月婷花 | aaa亚洲| 国产成人a毛片 | 欧美性性性性性ⅹxxbbbb | 在线免费看高清视频大全 | 欧美xxxx极品流血 | 亚洲专区一区 | 清冷双性被cao的合不拢腿 | 宅男666在线永久免费观看 | 天天操伊人 | 男女性gif抽搐出入 男女性高爱潮免费的国产 男女性高爱麻豆 | 波多野结衣在线观看一区二区三区 | 色偷偷中文字幕 | 女人张开腿给男人桶爽免费 | 黄视频免费 | 免费午夜影片在线观看影院 | 精品久久久久久久久久 | 天堂网免费| 夜夜偷影视 | 午夜伦理在线观看 | 在线免费观看视频你懂的 | 99 久久99久久精品免观看 | 2019天天操 | 国产精品亚洲精品日韩动图 | 色噜噜狠狠色综合久 | 四虎在线最新地址公告 | 又粗又爽又色男女乱淫播放男女 | 永久黄网站色视频免费 | 四虎免费永久观看 | 国内精品视频免费观看 | 老子影院午夜精品欧美视频 | 全黄h全肉边做边吃奶在线观看 | 亚洲视频福利 | 中文字幕v视界影院 | 一级黄色毛片免费看 | 一区二区中文字幕 |