亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 308|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于stm32l452+rt-thread 的adxl355驅(qū)動(dòng)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1170629 發(fā)表于 2026-4-30 14:37 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
基于stm32l452+rt-thread 的adxl355驅(qū)動(dòng),附件是源碼

  1. #include "bsp_adxl355.h"


  2. static struct rt_spi_device *adxl355_spi = RT_NULL;
  3. static uint8_t adxl355_inited = 0;

  4. // Hardware Pin Configuration
  5. #define ADXL355_CS_GPIO_PORT    GPIOD
  6. #define ADXL355_CS_GPIO_PIN     GPIO_PIN_0

  7. /* SPI Read/Write with NULL pointer protection */
  8. static rt_err_t adxl355_write_reg(uint8_t reg, uint8_t val)
  9. {
  10.     if (!adxl355_spi) return RT_ERROR;
  11.     uint8_t tx_buf[2] = {(reg<<1) | 0x00, val};
  12.     return rt_spi_transfer(adxl355_spi, tx_buf, RT_NULL, 2);
  13. }

  14. static uint8_t adxl355_read_reg(uint8_t reg)
  15. {
  16.     if (!adxl355_spi) return 0xFF;
  17.     uint8_t tx_buf[2] = {(reg<<1) | 0x1, 0xFF};
  18.     uint8_t rx_buf[2] = {0};
  19.     rt_spi_transfer(adxl355_spi, tx_buf, rx_buf, 2);
  20.     return rx_buf[1];
  21. }

  22. /* Public Functions */
  23. rt_bool_t adxl355_data_ready(void)
  24. {
  25.     return (adxl355_read_reg(ADXL355_REG_STATUS) & ADXL355_STATUS_DATA_RDY) ? RT_TRUE : RT_FALSE;
  26. }

  27. void adxl355_read_accel(accel_data_t *data)
  28. {
  29.     uint8_t tx[10] = { (ADXL355_REG_XDATA3<<1) | 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
  30.     uint8_t rx[10] = {0};
  31.     int32_t x, y, z;

  32.     if (adxl355_data_ready() == RT_FALSE) {
  33.         rt_kprintf("adxl355 not ready\n");
  34.     }

  35.     rt_spi_transfer(adxl355_spi, tx, rx, 10);

  36.     // 合并數(shù)據(jù):rx[1]是高8位,rx[2]是中8位,rx[3]是低4位(有效位)
  37.     x = ((int32_t)rx[1] << 12) | ((int32_t)rx[2] << 4) | (rx[3] >> 4);
  38.     y = ((int32_t)rx[4] << 12) | ((int32_t)rx[5] << 4) | (rx[6] >> 4);
  39.     z = ((int32_t)rx[7] << 12) | ((int32_t)rx[8] << 4) | (rx[9] >> 4);

  40.     // 符號(hào)擴(kuò)展到 32 位
  41.     if (x & 0x80000) x |= 0xFFF00000;
  42.     if (y & 0x80000) y |= 0xFFF00000;
  43.     if (z & 0x80000) z |= 0xFFF00000;

  44.     data->x = (float)x * ADXL355_SCALE_8G;   // SCALE_8G = 8.0f / 524288.0f
  45.     data->y = (float)y * ADXL355_SCALE_8G;
  46.     data->z = (float)z * ADXL355_SCALE_8G;
  47. }

  48. void adxl355_read_temp(temp_data_t *data)
  49. {
  50.     uint8_t buf[3] = {0};  // 3字節(jié):地址響應(yīng) + TEMP2 + TEMP1
  51.     int16_t temp_raw;

  52.     if (!adxl355_inited || !data) return;

  53.     // 發(fā)送寄存器地址(TEMP2,左移一位 + 讀位),然后讀取2字節(jié)數(shù)據(jù)
  54.     rt_spi_transfer(adxl355_spi, (uint8_t[]){(ADXL355_REG_TEMP2<<1) | 0x01}, buf, 3);
  55.     temp_raw = ((int16_t)buf[1] << 4) | (buf[2] >> 4);  // 12位有效數(shù)據(jù)
  56.     // 符號(hào)擴(kuò)展(如果最高位為1)
  57.     if (temp_raw & 0x800) temp_raw |= 0xF000;

  58.     // 正確轉(zhuǎn)換:25°C + 原始值 * 0.065 °C/LSB
  59.     data->temp = 25.0f + (float)temp_raw * 0.065f;
  60. }

  61. /* Initialization (SPI Mode0, 100kHz, Auto CS) */
  62. rt_err_t adxl355_init(void)
  63. {
  64.     rt_err_t ret;

  65.     if (adxl355_inited) return RT_EOK;

  66.     // Attach SPI device
  67.     ret = rt_hw_spi_device_attach(
  68.         ADXL355_SPI_BUS_NAME,
  69.         ADXL355_SPI_DEVICE_NAME,
  70.         ADXL355_CS_GPIO_PORT,
  71.         ADXL355_CS_GPIO_PIN
  72.     );
  73.     if (ret != RT_EOK)
  74.     {
  75.         rt_kprintf("[ADXL355] SPI device attach failed! Check SPI2 configuration\n");
  76.         return ret;
  77.     }

  78.     // Find SPI device
  79.     adxl355_spi = (struct rt_spi_device *)rt_device_find(ADXL355_SPI_DEVICE_NAME);
  80.     if (!adxl355_spi)
  81.     {
  82.         rt_kprintf("[ADXL355] SPI device find failed!\n");
  83.         return RT_ERROR;
  84.     }

  85.     // SPI Configuration (ADXL355 official: Mode0, 100kHz)
  86.     struct rt_spi_configuration cfg = {
  87.         .mode       = RT_SPI_MASTER | RT_SPI_MODE_0 | RT_SPI_MSB,
  88.         .data_width = 8,
  89.         .max_hz     = 5 * 1000 *1000,
  90.     };
  91.     rt_spi_configure(adxl355_spi, &cfg);

  92.     // Soft reset ADXL355
  93.     adxl355_write_reg(ADXL355_REG_RESET, 0x52);
  94.     rt_thread_mdelay(100);

  95.     // Read chip ID
  96.     uint8_t devid  = adxl355_read_reg(ADXL355_REG_DEVID_AD);
  97.     uint8_t partid = adxl355_read_reg(ADXL355_REG_PARTID);
  98.     rt_kprintf("[ADXL355] DEVID:0x%02X, PARTID:0x%02X\n", devid, partid);

  99.     if (devid != 0xAD || partid != 0xED)
  100.     {
  101.         rt_kprintf("[ADXL355] Communication failed! Check wiring\n");
  102.         return RT_ERROR;
  103.     }

  104.     // Configure sensor
  105.     adxl355_write_reg(ADXL355_REG_RANGE, ADXL355_RANGE_8G);
  106.     adxl355_write_reg(ADXL355_REG_POWER_CTL, ADXL355_MODE_MEASUREMENT);
  107.     rt_thread_mdelay(50);

  108.     adxl355_inited = 1;
  109.     rt_kprintf("[ADXL355] Initialization succeeded!\n");

  110.     return RT_EOK;
  111. }

  112. /* Test function */
  113. void adxl355_test(void)
  114. {
  115.     accel_data_t accel;
  116.     temp_data_t temp;

  117.     if (adxl355_init() != RT_EOK)
  118.     {
  119.         rt_kprintf("[ADXL355] Init failed!\n");
  120.         return;
  121.     }

  122.     while (1)
  123.     {
  124.         if (adxl355_data_ready())
  125.         {
  126.             adxl355_read_accel(&accel);
  127.             adxl355_read_temperature(&temp);
  128.             rt_kprintf("X:%.4f g | Y:%.4f g | Z:%.4f g | Temp:%.1f C\n",
  129.                        accel.x, accel.y, accel.z, temp.temp);
  130.         }
  131.         rt_thread_mdelay(200);
  132.     }
  133. }
復(fù)制代碼

adxl355.zip (3.29 KB, 下載次數(shù): 0)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1064915 發(fā)表于 2026-5-3 09:22 | 只看該作者
ADXL355是美國(guó)ADI公司推出的一款低噪聲、低漂移、低功耗的三軸MEMS加速度計(jì),具備數(shù)字輸出和優(yōu)異的長(zhǎng)期穩(wěn)定性,廣泛應(yīng)用于精密測(cè)量領(lǐng)域‌。‌‌‌

產(chǎn)品概述與關(guān)鍵特性
ADXL355是其模擬輸出版本ADXL354的數(shù)字輸出型號(hào),兩者共同構(gòu)成了一個(gè)高性能加速度計(jì)系列。其核心優(yōu)勢(shì)在于為‌精密應(yīng)用提供了極高的測(cè)量穩(wěn)定性,同時(shí)極大減少了校準(zhǔn)工作量‌。具體特性包括:‌‌‌

‌卓越的穩(wěn)定性與低噪聲‌:采用‌氣密封裝‌,保證了出色的長(zhǎng)期穩(wěn)定性。所有軸的‌0g失調(diào)漂移最大值僅為0.15 mg/°C‌,‌噪聲密度低至22.5μg/√Hz‌。與消費(fèi)級(jí)加速度計(jì)相比,其噪聲和偏置漂移引起的傾斜誤差顯著降低,在25°C恒溫條件下,補(bǔ)償后的傾斜精度可達(dá)‌0.005°‌。
‌靈活的測(cè)量范圍與數(shù)字接口‌:支持‌±2g、±4g和±8g三種可選的測(cè)量范圍‌。提供‌數(shù)字SPI和I2C接口‌,并集成‌20位ADC‌、可編程數(shù)字濾波器以及數(shù)據(jù)插值程序,便于系統(tǒng)集成和同步采樣。
‌低功耗與寬工作范圍‌:在測(cè)量模式下功耗為‌200μA‌,待機(jī)模式下僅為‌21μA‌,非常適合電池供電的無線傳感節(jié)點(diǎn)。工作溫度范圍為‌-40°C至+125°C‌,供電電壓(使用內(nèi)部穩(wěn)壓器)為‌2.25V至3.6V‌。‌‌‌
主要應(yīng)用領(lǐng)域
得益于上述特性,ADXL355在多個(gè)需要高精度慣性測(cè)量的領(lǐng)域發(fā)揮著關(guān)鍵作用:

‌慣性測(cè)量單元(IMU)與姿態(tài)航向參考系統(tǒng)(AHRS)‌:其低噪聲和低漂移特性,使其在無人機(jī)、機(jī)器人等平臺(tái)的定向和導(dǎo)航系統(tǒng)中表現(xiàn)優(yōu)異,即使在惡劣環(huán)境下也能實(shí)現(xiàn)最小的傾斜誤差。
‌結(jié)構(gòu)健康監(jiān)測(cè)(SHM)與狀態(tài)監(jiān)控‌:低噪聲使其能夠進(jìn)行高分辨率振動(dòng)測(cè)量,適用于‌風(fēng)輪機(jī)塔監(jiān)控‌、橋梁、建筑等結(jié)構(gòu)的早期缺陷檢測(cè)。
‌傾斜傳感與平臺(tái)穩(wěn)定‌:優(yōu)異的直流穩(wěn)定性和溫度重復(fù)性,使其成為傾角儀和平臺(tái)穩(wěn)定系統(tǒng)的理想選擇。
‌地震成像與機(jī)器人‌:同樣適用于需要精密運(yùn)動(dòng)捕捉和振動(dòng)分析的應(yīng)用場(chǎng)景。‌‌‌
獲取與參考資源
您可以訪問ADI公司官方網(wǎng)站查看ADXL355的完整數(shù)據(jù)手冊(cè)、用戶手冊(cè)等詳細(xì)資料(www.analog.com/cn/products/adxl355.html)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表