查看: 739|回复: 0

【MCXC444分享】如何读取传感器数据

[复制链接]
  • TA的每日心情
    擦汗
    2024-11-7 09:48
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    35

    主题

    83

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1267
    最后登录
    2025-9-17
    发表于 2024-11-5 11:01:58 | 显示全部楼层 |阅读模式
    本帖最后由 北方. 于 2024-11-5 12:38 编辑

    1. 传感器数据采集方法和应用
    一个好的工程应用开发,通常都需要采集外部的控制输入。在现在具有智能化的项目,通常都会需要采集各种传感器的数据,而不能简单用GPIO的输入输入进行数据采集。传感器的种类繁多,原理多样,适用多种场景。
    MCXC444EVB适应这样的需求,板载一个动态传感器,提供了这样的评测功能。
    2. FXLS8974CF动态传感器
      这是一款紧凑型3轴MEMS加速度传感器,适用于需要超低功率运动唤醒功能工业和医疗物联网应用。该部件支持高性能和低功耗两种工作模式,可提供最大的灵活性,以满足各种独特用例的分辨率和功率需求。这个是检测x-y-z三个维度的加速度值,来获得运动控制的方式。 Capture.PNG
    具体测量是用加速度G作为单位,一个g=9.8m/s2,经过鉴定可以设置为±2 g / ±4 g / ±8 g / ±16 g,计量精度12位,输出速率0.78 Hz至3200 Hz。这个精度可以用在飞行控制和独轮车的运动控制等。这个传感器还是一个低功耗传感器,可以在非常低的频率下运行,起到长时间的运行。
    Capture.PNG
    这个传感器里面已经内置了一个放大器和采样器,直接完成了传感器数据捕捉和模数变换,对外直接输入采样后的数据就可以智能取样了。接口是I²C,高达1 MHz,或者SPI为4 MHz。
    3. MCXC444EVB的控制逻辑
    根据一个模拟程序bubble,演示把这个开发板作为一个状态控制器进行对应输出的演示,状态输出用UART接口。
    首先配置I2C接口
    1. #include "fsl_common.h"
    2. #include "fsl_gpio.h"
    3. #include "fsl_port.h"
    4. #define BOARD_TIMER_BASEADDR       TPM0
    5. #define BOARD_FIRST_TIMER_CHANNEL  4U
    6. #define BOARD_SECOND_TIMER_CHANNEL 5U
    7. #define BOARD_TIMER_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_McgIrc48MClk)
    8. #define TIMER_CLOCK_MODE         1U
    9. #define I2C_BAUDRATE 100000U
    10. #define I2C_RELEASE_SDA_PORT  PORTE
    11. #define I2C_RELEASE_SCL_PORT  PORTE
    12. #define I2C_RELEASE_SDA_GPIO  GPIOE
    13. #define I2C_RELEASE_SDA_PIN   25U
    14. #define I2C_RELEASE_SCL_GPIO  GPIOE
    15. #define I2C_RELEASE_SCL_PIN   24U
    16. #define I2C_RELEASE_BUS_COUNT 100U
    17. #define ANGLE_LOWER_BOUND 5U
    18. void BOARD_I2C_ReleaseBus(void);
    19. const uint8_t g_accel_address = 0x18U;
    复制代码
    在main程序中启动i2c
    1. BOARD_InitPins();
    2.     BOARD_InitBootClocks();
    3.     BOARD_I2C_ReleaseBus();
    4.     BOARD_I2C_ConfigurePins();
    5.     BOARD_InitDebugConsole();
    6. /* I2C initialize */
    7.     BOARD_Accel_I2C_Init();
    8.     /* Configure the I2C function */
    9.     config.I2C_SendFunc    = BOARD_Accel_I2C_Send;
    10.     config.I2C_ReceiveFunc = BOARD_Accel_I2C_Receive;
    11.     config.slaveAddress    = g_accel_address;
    复制代码
    随后启动传感器,也就是用i2c输出启动控制命令,就可以开始在循环中,实现实时跟踪数据,并累积得出开发板的倾斜角度,随时输出
    1.     while (1)
    2.     {
    3.         /* Get new accelerometer data. */
    4.         if (FXLS_ReadAccelData(&fxlsHandle, &accelData) != kStatus_Success)
    5.         {
    6.             return -1;
    7.         }

    8.         /* Convert raw data to angle (normalize to 0-90 degrees). No negative angles. */
    9.         xAngle = (int16_t)floor((double)accelData.accelX * (double)dataScale * 90 / 2048);
    10.         if (xAngle < 0)
    11.         {
    12.             xAngle *= -1;
    13.         }

    14.         yAngle = (int16_t)floor((double)accelData.accelY * (double)dataScale * 90 / 2048);
    15.         if (yAngle < 0)
    16.         {
    17.             yAngle *= -1;
    18.         }
    19.         /* Update duty cycle to turn on LEDs when angles ~ 90 */
    20.         if (xAngle > ANGLE_UPPER_BOUND)
    21.         {
    22.             xDuty = 100;
    23.         }
    24.         if (yAngle > ANGLE_UPPER_BOUND)
    25.         {
    26.             yDuty = 100;
    27.         }
    28.         /* Update duty cycle to turn off LEDs when angles ~ 0 */
    29.         if (xAngle < ANGLE_LOWER_BOUND)
    30.         {
    31.             xDuty = 0;
    32.         }
    33.         if (yAngle < ANGLE_LOWER_BOUND)
    34.         {
    35.             yDuty = 0;
    36.         }

    37.         Board_UpdatePwm(xDuty, yDuty);

    38.         /* Print out the angle data. */
    39.         PRINTF("x= %2d y = %2d\r\n", xAngle, yAngle);
    40.     }
    复制代码
    代码编译
    Capture.PNG

    下载后运行,可以在putty的串口通讯中读取。
    Capture.PNG

    4 小结
    这个范例说明了使用I2c读取传感器数据方法和过程,这个可以在控制循环中起到读取数据的作用。



    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-19 06:56 , Processed in 0.079471 second(s), 20 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表