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

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

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

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

在GD32F310G-START開(kāi)發(fā)板上讀取三軸加速度計(jì)

冬至配餃子 ? 來(lái)源:兆易創(chuàng)新GD32 MCU ? 作者:煙花易冷 ? 2022-09-23 17:58 ? 次閱讀

我拿到的開(kāi)發(fā)板實(shí)際板載的 MCUGD32F310G8,QFN28pin 封裝,基于 ARM CORTEX M4 內(nèi)核,主頻 72MHz, 芯片內(nèi)置 64KB flash,8KB SRAM, 兩路 I2C 外設(shè)。

整體概述

首先感謝極術(shù)社區(qū)給我試用GD32開(kāi)發(fā)板的機(jī)會(huì),讓我體驗(yàn)一下近幾年國(guó)產(chǎn)MCU開(kāi)發(fā)體驗(yàn)。該芯片是基于arm cortex-M4內(nèi)核,主頻72Mhz,flash 64k,ram 8k,以及豐富的外設(shè)。

本次試用是一個(gè)讀取三軸加速度計(jì)的實(shí)驗(yàn),主要使用的是硬件iic

硬件連接

傳感器介紹

SC7A20 是一款高精度 12bit 數(shù)字三軸加速度傳感器芯片,內(nèi)置功能 更豐富,功耗更低,體積更小,測(cè)量更精確。

芯片通過(guò) IC2/SPI 接口與 MCU 通信,加速度測(cè)量數(shù)據(jù)以中斷方式或 查詢方式獲取。INT1和INT2中斷管腳提供多種內(nèi)部自動(dòng)檢測(cè)的中斷信號(hào), 適應(yīng)多種運(yùn)動(dòng)檢測(cè)場(chǎng)合,中斷源包括 6D/4D 方向檢測(cè)中斷信號(hào)、自由落體 檢測(cè)中斷信號(hào)、睡眠和喚醒檢測(cè)中斷信號(hào)、單擊和雙擊檢測(cè)中斷信號(hào)。

芯片內(nèi)置高精度校準(zhǔn)模塊,對(duì)傳感器的失調(diào)誤差和增益誤差進(jìn)行精確補(bǔ)償。 ±2G、±4G、±8G 和±16G 四種可調(diào)整的全量程測(cè)量范圍,靈活測(cè)量外 部加速度,輸出數(shù)據(jù)率 1HZ 和 400HZ 間可選。

軟件功能

該軟件主要使用了GD32開(kāi)發(fā)板的硬件iic,外部中斷以及串口,這三部分功能,串口的配置在其他文章的當(dāng)中已經(jīng)有敘述,本文只主要介紹iic和外部中斷的使用.

硬件iic

初始化gpio
poYBAGMtgqCAENdTAADYMDp2gJQ927.png

配置硬件iic

pYYBAGMtgrKANlA0AACpU0eW9Ys853.png

根據(jù)廠商提供的庫(kù)函數(shù)(具體參考gd32f3x0_i2c.c文件),我們可以很容易的初始化iic。剩下的就是對(duì)傳感器進(jìn)行配置了,該傳感器需要配置寄存器較多,廠商直接提供了一份demo程序,只需要適配讀取寫入的接口就可以很快的使用了。

pYYBAGMtgsiAZ6_LAADBYOow3zU754.png

我需要做的就是把iic的讀取和寫入進(jìn)行適配適配函數(shù)如下:

void I2C_LeaderWrite(uint16_t followerAddress, , uint8_t targetAddress, uint8_t *txBuff,
                     uint8_t numBytes) {
    /* wait until I2C bus is idle */
    while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY))
        ;
    /* send a start condition to I2C bus */
    i2c_start_on_bus(I2C0);
    /* wait until SBSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND))
        ;
    /* send slave address to I2C bus */
    i2c_master_addressing(I2C0, followerAddress, I2C_TRANSMITTER);
    /* wait until ADDSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
        ;
    /* clear ADDSEND bit */
    i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
    /* wait until the transmit data buffer is empty */
    while (!i2c_flag_get(I2C0, I2C_FLAG_TBE))
        ;

    for (i = 0; i < numBytes; i++) {
        /* data transmission */
        i2c_data_transmit(I2C0, txBuff[i]);
        /* wait until the TBE bit is set */
        while (!i2c_flag_get(I2C0, I2C_FLAG_TBE))
            ;
    }
    /* send a stop condition to I2C bus */
    i2c_stop_on_bus(I2C0);
    /* wait until stop condition generate */
    while (I2C_CTL0(I2C0) & 0x0200)
        ;
}
void I2C_LeaderRead(uint16_t followerAddress, uint8_t targetAddress, uint8_t *rxBuff,
                    uint8_t numBytes) {
    /* wait until I2C bus is idle */
    while (i2c_flag_get(I2C0, I2C_FLAG_I2CBSY))
        ;

    /* send a start condition to I2C bus */
    i2c_start_on_bus(I2C0);

    /* wait until SBSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND))
        ;

    /* send slave address to I2C bus */
    i2c_master_addressing(I2C0, followerAddress, I2C_TRANSMITTER);

    /* wait until ADDSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
        ;

    /* clear the ADDSEND bit */
    i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);

    /* wait until the transmit data buffer is empty */
    while (SET != i2c_flag_get(I2C0, I2C_FLAG_TBE))
        ;

    /* enable I2C0*/
    i2c_enable(I2C0);

    /* send the EEPROM's internal address to write to */
    i2c_data_transmit(I2C0, targetAddress);

    /* wait until BTC bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_BTC))
        ;

    /* send a start condition to I2C bus */
    i2c_start_on_bus(I2C0);

    /* wait until SBSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_SBSEND))
        ;

    /* send slave address to I2C bus */
    i2c_master_addressing(I2C0, followerAddress, I2C_RECEIVER);

    /* wait until ADDSEND bit is set */
    while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND))
        ;

    /* clear the ADDSEND bit */
    i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);

    /* while there is data to be read */
    for (int i = 0; i < numBytes; i++) {
        /* code */

        /* read a data from I2C_DATA */
        rxBuff[i++] = i2c_data_receive(I2C0);
        /* send a stop condition */
        i2c_stop_on_bus(I2C0);
    }

    /* wait until the stop condition is finished */
    while (I2C_CTL0(I2C0) & 0x0200)
        ;

    /* enable acknowledge */
    i2c_ack_config(I2C0, I2C_ACK_ENABLE);

    i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);
}

然后把這兩個(gè)函數(shù)適配:

poYBAGMtgtqAJ3rOAAB9FKfsQfM576.png

然后對(duì)傳感器進(jìn)行設(shè)置

poYBAGMtgvyAM0GkAADiuobSYW4011.png

外部中斷

使用外部中斷可以使用用于喚醒mcu,這對(duì)設(shè)計(jì)低功耗的產(chǎn)品很有意義,當(dāng)傳感器超過(guò)設(shè)定的閾值的時(shí)候,那么就會(huì)產(chǎn)生一個(gè)中斷來(lái)通知mcu,需要進(jìn)一步的處理數(shù)據(jù),外部中斷的配置如下所示:

void exit_wakeup_interrupt_config(void)
{
     /* configure the priority group */
    nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);

    /* enable the key wakeup clock */
    rcu_periph_clock_enable(RCU_GPIOA);
    rcu_periph_clock_enable(RCU_CFGCMP);

    /* configure button pin as input */
    gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);

    /* enable and set key wakeup EXTI interrupt to the higher priority */
    nvic_irq_enable(EXTI0_1_IRQn, 2U, 0U);

    /* connect key wakeup EXTI line to key GPIO pin */
    syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);

    /* configure key wakeup EXTI line */
    exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
    exti_interrupt_flag_clear(EXTI_0);
}

數(shù)據(jù)處理

由于我們使用的是三軸傳感器,對(duì)于姿態(tài)位置的計(jì)算并不是很精確,因此,此處只用簡(jiǎn)單角度計(jì)算,傾角的計(jì)算原理如下

poYBAGMtgxqAX2ZzAADMRlEI1A4650.png


pYYBAGMtgymATucYAAAfnX5F69k016.png


計(jì)算代碼如下:

#define DEG_TO_RAD(x) ((x) * 0.01745329252)
#define RAD_TO_DEG(x) ((x) * 57.2957795131)
void angle_calculation() {
    double pitch, roll, paw;
    pitch = atan(xyz_mg[X] / sqrt(pow(xyz_mg[Y], 2) + pow(xyz_mg[Z], 2)));
    roll = atan(xyz_mg[Y] / sqrt(pow(xyz_mg[X], 2) + pow(xyz_mg[Z], 2)));
    paw = atan(sqrt(pow(xyz_mg[X], 2) + pow(xyz_mg[Y], 2)) / xyz_mg[Z]);

    printf("[RAD]pitch:%.2f | roll:%.2f | paw:%.2f rn", pitch, roll, paw);
    printf("[DEG]pitch:%.2f° | roll:%.2f° | paw:%.2f° rn", RAD_TO_DEG(pitch), RAD_TO_DEG(roll),
           RAD_TO_DEG(paw));
}



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17312

    瀏覽量

    352205
  • 三軸加速度計(jì)
    +關(guān)注

    關(guān)注

    1

    文章

    29

    瀏覽量

    13370
  • SRAM控制器
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    5909
  • GD32F3
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3859
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于加速度計(jì)的評(píng)估的設(shè)計(jì)演示

    加速度計(jì)是任何需要響應(yīng)運(yùn)動(dòng)或設(shè)備方向的便攜式或非固定式設(shè)備的關(guān)鍵部件 - 不僅僅是游戲控制器和手機(jī),還包括工業(yè)機(jī)器人和過(guò)程控制機(jī)械。僅從其數(shù)據(jù)表中選擇加速度計(jì)是不夠的;你需要在實(shí)踐中評(píng)估它的表現(xiàn)。本文將介紹飛思卡爾和德州儀器公司的兩款基于
    的頭像 發(fā)表于 03-07 08:18 ?4655次閱讀

    加速度計(jì)加速度計(jì)的使用區(qū)別?

    有個(gè)問(wèn)題請(qǐng)教一下:靜態(tài)測(cè)量的情況下,兩加速度計(jì)測(cè)得X、Y
    發(fā)表于 12-29 06:06

    請(qǐng)問(wèn)兩加速度計(jì)加速度計(jì)的使用區(qū)別是什么?

    有個(gè)問(wèn)題請(qǐng)教一下:靜態(tài)測(cè)量的情況下,兩加速度計(jì)測(cè)得X、Y
    發(fā)表于 08-08 09:12

    加速度計(jì)的技術(shù)規(guī)格詳解

    與封裝的對(duì)齊精度控制約1°以內(nèi)。(正交)對(duì)齊誤差:多器件之間的角度與理想角位移(通常為90°)的偏差(參加圖2)。 ADI加速度計(jì)單片硅
    發(fā)表于 10-18 10:47

    2476-100加速度計(jì)

    `SDI的高級(jí)型號(hào)2470和2476高性能MEMS可變電容式加速度計(jì)堅(jiān)固耐用,即插即用適用于各種苛刻要求的測(cè)量設(shè)備應(yīng)用程序。兩種型號(hào)的性能均優(yōu)于零至中頻應(yīng)用中使用的溫度經(jīng)歷大的或
    發(fā)表于 05-27 19:18

    2460-010加速度計(jì)

    的噪聲和長(zhǎng)期穩(wěn)定性是絕對(duì)要求。2460包含3英尺長(zhǎng)的集成電纜,并且操作與2466相同,它具有一個(gè)連接器,可輕松定制電纜的長(zhǎng)度和位置。每個(gè)SDI
    發(fā)表于 05-28 14:41

    基于流行的ADXL335模擬加速度計(jì)

    。下圖描述了 Arduino 的哪些引腳應(yīng)連接到加速度計(jì)的引腳:使用 Arduino 進(jìn)行測(cè)試,示例程序如下所示。使用這個(gè)程序,我們
    發(fā)表于 06-22 09:05

    ADXL345 MEMS加速度計(jì)開(kāi)發(fā)板的設(shè)置和使用方法

    ADXL345 MEMS加速度計(jì)開(kāi)發(fā)板。由ADI公司的Nitzan Gadish說(shuō)明如何設(shè)置和使用ADXL345開(kāi)發(fā)板。該能夠捕捉3
    的頭像 發(fā)表于 07-16 06:06 ?5048次閱讀

    digilentPmodACL加速度計(jì)介紹

    PmodACL是一個(gè)數(shù)字加速度計(jì)模塊,可為主板提供相應(yīng)的輸入。
    的頭像 發(fā)表于 12-02 11:23 ?2300次閱讀
    digilentPmodACL<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>介紹

    UG-242:加速度計(jì)評(píng)估

    UG-242:加速度計(jì)評(píng)估
    發(fā)表于 03-19 13:26 ?11次下載
    UG-242:<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>評(píng)估<b class='flag-5'>板</b>

    ADXL311EB:雙加速度計(jì)評(píng)估

    ADXL311EB:雙加速度計(jì)評(píng)估
    發(fā)表于 04-26 15:39 ?2次下載
    ADXL311EB:雙<b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>評(píng)估<b class='flag-5'>板</b>

    EVAL-ADXL325Z:加速度計(jì)評(píng)估

    EVAL-ADXL325Z:加速度計(jì)評(píng)估
    發(fā)表于 05-13 11:29 ?11次下載
    EVAL-ADXL325Z:<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>評(píng)估<b class='flag-5'>板</b>

    EVAL-ADXL335Z:加速度計(jì)評(píng)估

    EVAL-ADXL335Z:加速度計(jì)評(píng)估
    發(fā)表于 05-14 16:26 ?2次下載
    EVAL-ADXL335Z:<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>評(píng)估<b class='flag-5'>板</b>

    EVAL-ADXL327Z:加速度計(jì)評(píng)估

    EVAL-ADXL327Z:加速度計(jì)評(píng)估
    發(fā)表于 05-24 12:31 ?5次下載
    EVAL-ADXL327Z:<b class='flag-5'>三</b><b class='flag-5'>軸</b><b class='flag-5'>加速度計(jì)</b>評(píng)估<b class='flag-5'>板</b>

    加速度計(jì)、陀螺儀和磁力計(jì)的應(yīng)用原理

    加速度計(jì)是一種慣性傳感器,能夠測(cè)量物體的比力,即去掉重力后的整體加速度或者單位質(zhì)量作用的非引力。當(dāng)
    的頭像 發(fā)表于 10-09 15:43 ?7688次閱讀
    主站蜘蛛池模板: 十九禁啊啪射视频在线观看 | 曰曰夜夜在线影院视| 亚洲精品国产SUV| 亚洲偷自拍精品视频在线观看| 亚洲人成网站在线观看90影院| 影音先锋av男人资源| 337p啪啪人体大胆| www精品一区二区三区四区| 成人在线视频网站| 国产精品成人不卡在线观看| 国内精品乱码卡一卡2卡三卡新区| 幻女FREE性俄罗斯学生| 乐乐亚洲精品综合影院| 秋霞午夜鲁丝片午夜精品久| 我的美女奴隶| 精品无码国产污污污免费网站2| 久久精品视频3| 男人一进一出桶女人视频| 人妻熟妇乱又伦精品视频中文字幕| 双腿被绑成M型调教PLAY照片| 亚洲免费无码中文在线亚洲在| 3D漫画H精品啪啪无码| 大胸女晃奶动态图| 黄色三级视频在线观看| 暖暖的高清视频在线观看免费中文| 十九岁韩国电影在线观看| 一本道综合久久免费| WRITEAS塞红酒瓶| 国产又色又爽又刺激在线播放| 两百磅美女| 色小姐电影qvod播放| 亚洲永久免费视频| XXX国产麻豆HD| 狠狠色香婷婷久久亚洲精品| 女张腿男人桶羞羞漫画| 小小水蜜桃视频高清在线播放| 2018三级网站免费观看| 国产精品99re6热在线播放| 久久亚洲黄色| 手机在线观看无码日韩视频| 影音先锋av丝袜天堂|