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

標題: 基于stm32l452+rt-thread 的adxl355驅動 [打印本頁]

作者: lgm470895    時間: 2026-4-30 14:37
標題: 基于stm32l452+rt-thread 的adxl355驅動
基于stm32l452+rt-thread 的adxl355驅動,附件是源碼

  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.     // 合并數據: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.     // 符號擴展到 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字節:地址響應 + TEMP2 + TEMP1
  51.     int16_t temp_raw;

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

  53.     // 發送寄存器地址(TEMP2,左移一位 + 讀位),然后讀取2字節數據
  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位有效數據
  56.     // 符號擴展(如果最高位為1)
  57.     if (temp_raw & 0x800) temp_raw |= 0xF000;

  58.     // 正確轉換: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. }
復制代碼

adxl355.zip (3.29 KB, 下載次數: 0)

作者: joyb    時間: 2026-5-3 09:22
ADXL355是美國ADI公司推出的一款低噪聲、低漂移、低功耗的三軸MEMS加速度計,具備數字輸出和優異的長期穩定性,廣泛應用于精密測量領域‌。‌‌‌

產品概述與關鍵特性
ADXL355是其模擬輸出版本ADXL354的數字輸出型號,兩者共同構成了一個高性能加速度計系列。其核心優勢在于為‌精密應用提供了極高的測量穩定性,同時極大減少了校準工作量‌。具體特性包括:‌‌‌

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

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




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1