91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

【瑞薩RA × Zephyr評測】SSD1306顯示MPU6050加速度計讀數(shù)

楓雪天 ? 來源:楓雪天 ? 2026-01-10 10:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

SSD1306 顯示 MPU6050 加速度計讀數(shù)功能評測


硬件環(huán)境

  • 主控芯片 : Renesas FPB-RA6E2
  • 外設(shè)模塊 :
  • 連接方式 :
    • SSD1306 : SCK=P111, MOSI=P109, D/C=P110, CS=P301, RES=P208(SPI 通信
    • MPU6050 : SDA=P411, SCL=P410(通過 SCI0 實現(xiàn) I2C 通信)

1. 功能描述

本項目實現(xiàn)了通過 SSD1306 OLED 屏幕實時顯示 MPU6050 加速度計的三軸(X、Y、Z)讀數(shù)。程序運行時,F(xiàn)PB-RA6E2 主控芯片通過 I2C 總線從 MPU6050 獲取加速度數(shù)據(jù),并通過 SPI 接口將數(shù)據(jù)渲染到 SSD1306 屏幕上。整個流程以固定時間間隔刷新屏幕內(nèi)容,確保數(shù)據(jù)顯示的實時性與穩(wěn)定性。


2. 軟件配置

2.1 Device Tree Overlay (fpb_ra6e2.overlay)

設(shè)備樹文件中定義了 SSD1306 和 MPU6050 的硬件資源綁定:

  • SSD1306 配置 :
    • 使用 SPI0 接口,設(shè)置屏幕分辨率為 128x64。
    • 定義了關(guān)鍵引腳:CS(片選)、D/C(數(shù)據(jù)/命令切換)、RES(復(fù)位)。
    • 開啟 SPI 外設(shè)并指定最大頻率為 4MHz
  • MPU6050 配置 :
    • 使用 SCI0 模塊作為 I2C 控制器,設(shè)置通信速率為 100kHz
    • 定義了傳感器地址 0x68,并配置采樣率分頻器(smplrt-div)和量程參數(shù)(gyro-fsaccel-fs)。

2.2 Kconfig 配置 (prj.conf)

啟用必要的驅(qū)動支持:

CONFIG_I2C=y
CONFIG_SENSOR=y
CONFIG_MPU6050_TRIGGER_NONE=y
CONFIG_CBPRINTF_FP_SUPPORT=y

CONFIG_STDOUT_CONSOLE=y

CONFIG_HEAP_MEM_POOL_SIZE=16384

CONFIG_DISPLAY=y

CONFIG_LOG=y

CONFIG_CFB_LOG_LEVEL_DBG=y
CONFIG_CHARACTER_FRAMEBUFFER=y

CONFIG_GPIO=y
CONFIG_SPI=y

CONFIG_DISPLAY=y
CONFIG_SSD1306=y
CONFIG_SSD1306_DEFAULT_CONTRAST=128

3. 核心邏輯分析

3.1 主程序(main.c)

#include < zephyr/kernel.h >
#include < zephyr/device.h >
#include < zephyr/drivers/display.h >
#include < zephyr/display/cfb.h >
#include < zephyr/drivers/sensor.h >
#include < stdio.h >
#include < zephyr/logging/log.h >

LOG_MODULE_REGISTER(main, LOG_LEVEL_INF);

int main(void)
{
    /* 1. 獲取顯示設(shè)備 (自動根據(jù) chosen 節(jié)點找到 ssd1306_spi) */
    const struct device *display = DEVICE_DT_GET(DT_CHOSEN(zephyr_display));
    const struct device *mpu6050 = DEVICE_DT_GET_ONE(invensense_mpu6050);

    if (!device_is_ready(display)) {
        LOG_ERR("Display not ready! Check SPI wiring.");
        return 0;
    }

    if (!device_is_ready(mpu6050)) {
        LOG_ERR("MPU6050 device not ready");
        return 0;
    }

    /* 2. 初始化顯示 */
    display_blanking_off(display);
    cfb_framebuffer_init(display);
    cfb_framebuffer_set_font(display, 0);
    cfb_framebuffer_invert(display);

    struct sensor_value accel[3];
    char buf[64];

    while (1) {
        // 獲取加速度數(shù)據(jù)
        if (sensor_sample_fetch(mpu6050) == 0) {
            if (sensor_channel_get(mpu6050, SENSOR_CHAN_ACCEL_XYZ, accel) == 0) {
                // 清屏并顯示數(shù)據(jù)
                cfb_framebuffer_clear(display, false);
                cfb_print(display, "MPU6050_ACC", 0, 0);
                
                // 格式化并顯示X軸加速度
                snprintf(buf, sizeof(buf), "X: %.2f", sensor_value_to_double(&accel[0]));
                cfb_print(display, buf, 0, 16);
                
                // 格式化并顯示Y軸加速度
                snprintf(buf, sizeof(buf), "Y: %.2f", sensor_value_to_double(&accel[1]));
                cfb_print(display, buf, 0, 32);
                
                // 格式化并顯示Z軸加速度
                snprintf(buf, sizeof(buf), "Z: %.2f", sensor_value_to_double(&accel[2]));
                cfb_print(display, buf, 0, 48);
                
                cfb_framebuffer_finalize(display);
            }
        }
        
        k_sleep(K_MSEC(200)); // 每0.2秒刷新一次
    }
    return 0;
}

3.2 初始化階段

  1. 獲取設(shè)備句柄 :
    • 使用 DEVICE_DT_GET 宏分別獲取 SSD1306 和 MPU6050 的設(shè)備實例。
    • 檢查設(shè)備是否就緒,若失敗則記錄錯誤日志并退出。
  2. 初始化顯示模塊 :
    • 調(diào)用 cfb_framebuffer_init 初始化幀緩沖區(qū)。
    • 設(shè)置字體樣式并啟用反色模式以提升顯示效果。
  3. 傳感器配置 :
    • 設(shè)置 MPU6050 的采樣率分頻器為 249,對應(yīng)輸出頻率為 4Hz。
    • 配置加速度計量程為 ±2g,陀螺儀量程為 ±250°/s。

3.3 運行時邏輯

主循環(huán)中實現(xiàn)以下操作:

  1. 數(shù)據(jù)采集 :
    • 調(diào)用 sensor_sample_fetch 獲取 MPU6050 的最新數(shù)據(jù)。
    • 使用 sensor_channel_get 提取加速度計的三軸讀數(shù)。
  2. 屏幕更新 :
    • 清除幀緩沖區(qū)內(nèi)容。
    • 格式化加速度數(shù)據(jù)并逐行渲染到屏幕,包括標題和 X/Y/Z 軸的具體數(shù)值。
  3. 定時刷新 :
    • 每隔 200ms 執(zhí)行一次屏幕更新,確保數(shù)據(jù)顯示流暢且不占用過多 CPU 資源。

3.4 關(guān)鍵 API 使用

  • 設(shè)備初始化與狀態(tài)檢查 :
const struct device *display = DEVICE_DT_GET(DT_CHOSEN(zephyr_display));
if (!device_is_ready(display)) {
    LOG_ERR("Display not ready!");
    return;
}
  • 傳感器數(shù)據(jù)讀取 :
sensor_sample_fetch(mpu6050);
sensor_channel_get(mpu6050, SENSOR_CHAN_ACCEL_XYZ, accel);
  • 屏幕內(nèi)容渲染 :
cfb_framebuffer_clear(display, false);
cfb_print(display, "MPU6050_ACC", 0, 0);
snprintf(buf, sizeof(buf), "X: %.2f", sensor_value_to_double(&accel[0]));
cfb_print(display, buf, 0, 16);

4. 實驗現(xiàn)象與數(shù)據(jù)分析

4.1 屏幕顯示內(nèi)容

SSD1306 屏幕上應(yīng)顯示如下信息:

MPU6050_ACC
X: 0.12
Y: -0.05
Z: 9.78
  • 標題 : 固定顯示 MPU6050_ACC,表明當前顯示的是加速度計數(shù)據(jù)。
  • 數(shù)值 : 動態(tài)更新 X、Y、Z 軸的加速度值,單位為 m/s2。

4.2 數(shù)據(jù)變化規(guī)律

  • 靜止狀態(tài) : Z 軸接近重力加速度(約 9.8m/s2),X 和 Y 軸接近零。
  • 動態(tài)測試 : 移動開發(fā)板時,各軸數(shù)值會隨方向和加速度變化而波動,驗證了 MPU6050 的正常工作。

4.3 刷新頻率

屏幕每 200ms 更新一次,保證了數(shù)據(jù)的實時性,同時避免了因頻繁刷新導致的視覺閃爍問題。


5. 測評總結(jié)

本項目成功展示了如何利用 SSD1306 屏幕和 MPU6050 傳感器在 Zephyr RTOS 下實現(xiàn)加速度計數(shù)據(jù)的實時顯示。代碼結(jié)構(gòu)清晰,充分利用了 Zephyr 的設(shè)備驅(qū)動框架和傳感器接口,適合嵌入式開發(fā)者學習和參考。通過本實驗,用戶可以直觀地觀察 MPU6050 的加速度數(shù)據(jù)變化,進一步驗證了硬件連接的正確性和軟件邏輯的可靠性。

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

    關(guān)注

    6076

    文章

    45492

    瀏覽量

    670174
  • 加速度計
    +關(guān)注

    關(guān)注

    6

    文章

    812

    瀏覽量

    48152
  • Zephyr
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    6579
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何通過I2C將加速度計MPU6050型連接到ESP8266?

    有沒有人通過 I2C 將加速度計MPU6050型連接到ESP8266? 我想讀取寄存器who_am_i,但我無法從從機獲取 ACK 信號
    發(fā)表于 07-22 06:18

    MPU6050

    MPU6050,三軸加速度計與飛機,倒立擺配合使用
    發(fā)表于 08-09 17:21

    關(guān)于陀螺儀和加速度計的選擇問題

    最近突發(fā)奇想,想做一個雙輪的平衡車,打算搗鼓一個加強版的城市版類型的。關(guān)于車體傾斜角度的測量,大部分的方案都是采用加速度計+陀螺儀+卡爾曼濾波,對于這方面的硬件不太了解,有的人用MPU6050
    發(fā)表于 11-27 16:38

    加速度計測量3軸的位移?

    能用mpu6050 加速度計測量3軸的位移么?漂移大么?求做過的大俠知道一二?或給推薦一種測試位移的辦法。應(yīng)用場合為:實時測試人的手的運動軌跡。
    發(fā)表于 01-11 08:51

    加速度計讀數(shù)問題

    你好, 我正在使用帶有STM(stm32l432kb)控制器的STM加速度計(LIS2DE12)。從加速度計獲取讀數(shù)時,它會持續(xù)提供隨機值。即使它在穩(wěn)定的位置顯示虛假價值。在某些方面
    發(fā)表于 04-03 13:15

    讀取MPU6050加速度計和角速度計方向經(jīng)常發(fā)生變化

    最近讀取MPU6050加速度計和角速度計,但是這倆的方向經(jīng)常發(fā)生變化,是角速度計脈沖方向變化?。?!請大神幫忙看看為啥?跪求?。?!unsigned char rs;uint8_t
    發(fā)表于 04-11 06:36

    1527J-010加速度計

    。 每個單元均隨附文檔顯示殘差,熱傳感器模型,加速模型,偏差,比例因子,線性,操作電流和頻率響應(yīng)。2466-200加速度計2466-400加速度計2470-002
    發(fā)表于 05-28 15:04

    1521L-200加速度計

    `1521型是一款低成本通用集成MEMS加速度計,適用于零至中頻需要極低噪聲和可靠長期穩(wěn)定性的工業(yè)應(yīng)用。每個微型密封密封封裝結(jié)合了MEMS電容式感應(yīng)元件和包含感應(yīng)器的定制集成電路放大器和差分輸出級
    發(fā)表于 05-28 15:08

    如何去讀取MPU6050加速度計和陀螺儀的原始數(shù)據(jù)呢

    MPU6050是什么?如何去讀取MPU6050加速度計和陀螺儀的原始數(shù)據(jù)呢?
    發(fā)表于 12-15 06:03

    STM32 MPU6050平衡車的相關(guān)資料推薦

    目錄GY-521MPU6050 介紹陀螺儀加速度計陀螺儀和加速度計的關(guān)系,姿態(tài)解算融合的原理硬件從機地址部分參考STM32—驅(qū)動六軸MPU6050輸出歐拉角GY-521
    發(fā)表于 02-10 07:45

    mpu6050顯示加速度計和陀螺儀的10位原始數(shù)據(jù) 51單片機源碼下載

    mpu6050讀取加速度與角度
    發(fā)表于 04-12 14:40 ?10次下載
    <b class='flag-5'>mpu6050</b><b class='flag-5'>顯示</b><b class='flag-5'>加速度計</b>和陀螺儀的10位原始數(shù)據(jù) 51單片機源碼下載

    使用陀螺加速度計MPU6050的六軸模塊的資料說明免費下載

    此六軸模塊采用高精度的陀螺加速度計 MPU6050,通過處理器讀取 MPU650 的測量數(shù)據(jù)然后通過串口輸出,免去了用戶自己去開發(fā)MPU6050 復(fù)雜的 I2C 協(xié)議,同時精心的 PC
    發(fā)表于 11-27 08:00 ?28次下載
    使用陀螺<b class='flag-5'>加速度計</b><b class='flag-5'>MPU6050</b>的六軸模塊的資料說明免費下載

    MEMS加速度計的概念,MEMS加速度計的原理

    MEMS加速度計的概念 加速度計是一種慣性傳感器,能夠測量物體的加速力。加速力就是當物體在加速過程受到的力,就比如地球引力。
    發(fā)表于 06-01 11:28 ?5143次閱讀

    靈動微MPU6050應(yīng)用源代碼

      MPU6050是一種常見的六軸加速度計陀螺儀傳感器,可以用于測量物體的加速度和角速度。該傳感器內(nèi)置了三軸加速度計和三軸陀螺儀,可以通過I
    發(fā)表于 10-20 16:31 ?1次下載
    靈動微<b class='flag-5'>MPU6050</b>應(yīng)用源代碼

    mpu6050mpu6500哪個性能好

    MPU6050MPU6500都是InvenSense公司生產(chǎn)的高性能六軸陀螺儀和加速度計傳感器。它們被廣泛應(yīng)用于各種領(lǐng)域,如移動設(shè)備、虛擬現(xiàn)實、機器人、汽車等。雖然它們之間有一些區(qū)別,但是無法簡單
    的頭像 發(fā)表于 12-21 16:54 ?1.7w次閱讀