esp32读写QAM7981加速度芯片驱动

QMA I2C驱动

基本配置

esp-idf 是最新的分支

开发板型号为esp32c3

代码链接

doincli/QMA_I2C: esp32读写QAM7981加速度芯片驱动 (github.com)

重要参数

I2C_MASTER_SCL_IO    //i2c时钟引脚
    
I2C_MASTER_SDA_IO    //i2c数据引脚
    
QMA7981_ADDR    	//QMA7981地址
    
QMA7981_DXM_ADDR    //X轴寄存器地址

QMA7981_MODE_ADDR   //模式地址 设置成活动状态 以及两种相关的通信速率

QMA7981_RANGE_ADDR   //量程地址   设置不同的量程  可以有5种不同的情况

QMA7981_MODE_100K_cmd      //模式命令  设置成活动状态 速率100k
    
QMA7981_RAG_2g_cmd      //量程命令  设置成2g的量程 

重要函数

esp_err_t i2c_master_init(void);  //I2c初始化函数

esp_err_t QMA7981_setMode(uint8_t cmd) //模式设置函数 里面是模式命令

esp_err_t QMA7981_setAcc(uint8_t cmd)  //量程设置函数 里面是量程命令    
    
float QMA7981_read_DXM();   //读取X轴加速度    

float QMA7981_read_DYM();   //读取Y轴加速度   

float QMA7981_read_DZM();   //读取Z轴加速度   

esp_err_t QMA7981_register_write_byte(uint8_t reg_addr, uint8_t cmd); //I2C写入命令函数

esp_err_t QMA7981_register_read(uint8_t reg_addr, uint8_t *data, size_t len);//i2c从特定寄存器读取数据函数

测试流程

首先初始化i2c ,然后设置相关模型以及量程

ESP_ERROR_CHECK(i2c_master_init());

ESP_ERROR_CHECK(QMA7981_setMode(QMA7981_MODE_100K_cmd));//设置为active模式
ESP_ERROR_CHECK(QMA7981_setAcc(QMA7981_RAG_2g_cmd));

然后读取 X,Y,Z三个轴的加速度

float X_AXIS_A;
float Y_AXIS_A;
float Z_AXIS_A;
X_AXIS_A = QMA7981_read_DXM() ;
Y_AXIS_A = QMA7981_read_DYM() ;
Z_AXIS_A = QMA7981_read_DZM() ;

测试代码如下

void app_main(void)
{

    float X_AXIS_A;
    float Y_AXIS_A;
    float Z_AXIS_A;

    ESP_ERROR_CHECK(i2c_master_init());

    ESP_ERROR_CHECK(QMA7981_setMode(QMA7981_MODE_100K_cmd));	//设置为active模式
    ESP_ERROR_CHECK(QMA7981_setAcc(QMA7981_RAG_2g_cmd));

    while(1)
    {	   
        X_AXIS_A = QMA7981_read_DXM() ;
        Y_AXIS_A = QMA7981_read_DYM() ;
        Z_AXIS_A = QMA7981_read_DZM() ;
        printf("X_A = %.3f g, Y_A = %.3f g, Z_A = %.3f g. \n", X_AXIS_A, Y_AXIS_A, Z_AXIS_A);
        printf("\n");
        vTaskDelay(1000 / portTICK_PERIOD_MS);
    }
}

测试结果

image-20230717171450479

posted @ 2023-07-18 01:32  快乐气氛组阿宇  阅读(122)  评论(0编辑  收藏  举报