MLX90363怎么读取数据

介绍

MLX90363是一款多功能,通用的,非接触式的三维霍尔传感器;能够保证在汽车、工业、医疗和消费类中的测量线性位移,角度旋转和3D位置检测。
MLX90363可以完成各种通用的,灵活设计的应用开发。通过内部的微处理器,MLX90363可以实现串行通讯(SPI)。应用的设计范围是没有限制的,只取决于设计者的想象力。无论是3维,旋转角度还是线性位移,都可以通过在客户端微处理器中的嵌入式软件实现。所有在芯片内部的原始信号和处理信号都可以通过串行口来通讯。这样外部嵌入式的微处理器就可以直接读到Bx,By和Bz的信息。从芯片内的温度传感器和内部诊断功能中读到数据也能以数字的方式来传输。编程也是以同样的方式实现。
MLX90363特点和优势
三轴™磁强计(BX,BY,BZ)
鲁棒位置传感的芯片信号处理
高速串行接口(SPI兼容 - 全双工)
增强自我诊断功能
5V和3V的应用程序兼容
14位输出分辨率
48位身份证号码
单芯片 - SO8封装符合RoHS
双芯片(全冗余) - 采用TSSOP16封装符合RoHS
关键点:14位输出精度,高速串行接口,供电电压5V或者3.3V

1。硬件电路

SPI接口连到MCU处理器
在这里插入图片描述

2.软件读取传感器数值

查看官方数据手册
在这里插入图片描述
读取角度经过两步:

  1. 主机发送GET1到从机,从机返回主机NOP指令请求
  2. 主机接着发给从机NOP指令,从机返回GET1数据
    再看上面数据手册GET1指令,GET1指令每次发送一次需要500ms,请求去转换数据耗时65ms,所以读取数据一次耗时要大于565ms,主函数中使用定时器定时大于565ms循环读数据
    GET1指令 00 00 FF FF 00 00 13 EA
    在这里插入图片描述
    NOP(空)指令 00 00 AA AA 00 00 D0 AB
    在这里插入图片描述
    关于读出来角度数据处理方法:
    看官方数据手册,角度存在LSB(最低位)里,每次读8位数据,传感器精度是14位,读前两位数据为一个角度,单位是360度/2的14次方
    在这里插入图片描述
    完整代码如下:
 const float f32_lsb_to_dec_degrees = 0.02197;//·Ö±æÂÊ 360/2^14 = 0.02197

    //issue GET1 message
    u8_spi_write_buffer[0] = 0x00;
    u8_spi_write_buffer[1] = 0x00;
    u8_spi_write_buffer[2] = 0xFF;
    u8_spi_write_buffer[3] = 0xFF;
    u8_spi_write_buffer[4] = 0x00;
    u8_spi_write_buffer[5] = 0x00;
    u8_spi_write_buffer[6] = 0x13;
    u8_spi_write_buffer[7] = 0xEA;

     ChipSelctEnable();
    for (i = 0; i < 8; i++)
    {
        u8_spi_read_buffer[i] = SPI_SendByte(SPI_SOURCE, u8_spi_write_buffer[i]);
    }
    ChipSelctDisable();

    SysTick_Delay_Ms(1);//ÑÓʱ1ms

    //issue NOP message
    u8_spi_write_buffer[0] = 0x00;
    u8_spi_write_buffer[1] = 0x00;
    u8_spi_write_buffer[2] = 0xAA;
    u8_spi_write_buffer[3] = 0xAA;
    u8_spi_write_buffer[4] = 0x00;
    u8_spi_write_buffer[5] = 0x00;
    u8_spi_write_buffer[6] = 0xD0;
    u8_spi_write_buffer[7] = 0xAB;

    ChipSelctEnable();
    for (i = 0; i < 8; i++)
    {
        u8_spi_read_buffer[i] = SPI_SendByte(SPI_SOURCE, u8_spi_write_buffer[i]);
    }
    ChipSelctDisable();

    //Extract and convert the angle to degrees
    //remove error bits and shift to high byte
		/*********************/
    u16_angle_lsb = (u8_spi_read_buffer[1] & 0x3F) << 8;//¸ß6λ

    //add LSB of angle
    u16_angle_lsb = u16_angle_lsb + u8_spi_read_buffer[0];//¸ß6λ+ µÍ8λ
		/***************/

    //convert to decimal degrees
    f32_angle_degrees = u16_angle_lsb * f32_lsb_to_dec_degrees;
    
  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MLX90363是一款三轴磁力计传感器,其可以通过SPI接口传输数据。SPI是一种串行通信协议,它使用四条线(时钟线、数据输入线、数据输出线和片选线)来传输数据。以下是MLX90363通过SPI接口传输数据的示例代码: ```c #include <SPI.h> // Define SPI pins const int CS_PIN = 10; // Chip select pin const int CLK_PIN = 13; // Clock pin const int MOSI_PIN = 11; // MOSI (Master Out Slave In) pin const int MISO_PIN = 12; // MISO (Master In Slave Out) pin void setup() { // Initialize SPI communication SPI.begin(); // Set SPI pins as outputs pinMode(CS_PIN, OUTPUT); pinMode(CLK_PIN, OUTPUT); pinMode(MOSI_PIN, OUTPUT); pinMode(MISO_PIN, INPUT); // Set chip select pin high to disable the sensor digitalWrite(CS_PIN, HIGH); } void loop() { // Select the sensor digitalWrite(CS_PIN, LOW); // Send a command to read the X-axis data SPI.transfer(0x80); // Command byte SPI.transfer(0x00); // Address byte SPI.transfer(0x00); // Dummy byte // Read the data byte data1 = SPI.transfer(0x00); // MSB of data byte data2 = SPI.transfer(0x00); // LSB of data // Deselect the sensor digitalWrite(CS_PIN, HIGH); // Combine the data bytes into a signed integer int xData = (data1 << 8) | data2; if (xData > 32767) { xData -= 65536; } // Print the X-axis data Serial.print("X-axis data: "); Serial.println(xData); // Wait for a moment before reading again delay(100); } ``` 在上述代码中,首先使用SPI.begin()函数初始化SPI通信,并将芯片选择引脚、时钟引脚、MOSI引脚和MISO引脚设置为输出或输入。然后,在loop()函数中,选择传感器并向其发送一个命令来读取X轴数据。通过SPI.transfer()函数发送命令和地址字节,并通过SPI.transfer()函数读取数据。最后,将读取的数据字节合并成有符号整数,并打印到串行监视器上。 需要注意的是,MLX90363的数据格式是16位有符号整数,其中高8位是MSB,低8位是LSB。如果数据的最高位为1,则表示该数据为负数,需要将其转换为有符号整数。在上述代码中,可以通过将数据左移8位并使用OR运算符将其与低8位数据合并,将两个字节合并成一个16位整数。如果该整数大于32767,则表示它是一个负数,需要减去65536以获得有符号整数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值