您当前的位置: 首页 >  嵌入式

正点原子

暂无认证

  • 1浏览

    0关注

    382博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【正点原子Linux连载】第二十三章 ICM20608 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2

正点原子 发布时间:2022-07-19 11:11:43 ,浏览量:1

1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 3)全套实验源码+手册+视频下载地址:http://www.openedv.com/thread-300792-1-1.html 4)对正点原子Linux感兴趣的同学可以加群讨论:935446741

第二十三章 ICM20608

本章是ICM20608实验,与上一章类似,都是获取传感器的数据,ICM20608是一款六轴MEMS传感器,包括三轴加速度和三轴陀螺仪。因为与上一章类似,故本章只提供获取ICM20608的接口,不再重复设计界面程序。 更多ICM20608的信息请看【正点原子】I.MX6U用户快速体验V1.x.pdf的第3.21小节。

23.1 资源简介

在正点原子I.MX6ULL ALPHA开发板底板上有一个6轴MEMS传感器,也就是在底板上晶振旁边的传感器,采用的是spi接口。(注意:I.MX6ULL MINI开发板没有这个传器)。下图为I.MX6ULL ALPHA开发板的6轴MEMS传感器原理图。 在这里插入图片描述

开发板底板实物图。

在这里插入图片描述

23.2 应用接口

本实验提供ICM20608的Qt访问出厂系统ICM20608驱动设备文件/dev/icm20608的接口。接口类Icm20608根据【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.x.pdf第六十二章 Linux SPI 驱动实验编写,想要理解原理请看【正点原子】I.MX6U 嵌入式Linux驱动开发指南,第六十二章,已经写得很详细。对于Qt访问底层驱动接口,我们需要对驱动有一点了解,否则学习起来是比较难的!建议读者全方面学习一下正点原子的I.MX6U配套教程。 源码路径为Qt/3/09_spi_icm20608_sensor。 “icm20608.h”,头文件如下。

   /******************************************************************
    Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved.
    * @projectName   sensor
    * @brief         icm20608.h
    * @author        Deng Zhimao
    * @email         1252699831@qq.com
    * @net            www.openedv.com
    * @date           2020-07-10
    *******************************************************************/
1   #ifndef ICM20608_H
2   #define ICM20608_H
3 
4   #include 
5   #include 
6 
7   class Icm20608 : public QObject
8   {
9       Q_OBJECT
10
11  public:
12      explicit Icm20608(QObject *parent = 0);
13      ~Icm20608();
14
15      Q_INVOKABLE void setCapture(bool str);
16
17  private:
18      QTimer *timer;
19      QString gxdata;
20      QString gydata;
21      QString gzdata;
22      QString axdata;
23      QString aydata;
24      QString azdata;
25      QString tempdata;
26
27      QString gxData();
28      QString gyData();
29      QString gzData();
30      QString axData();
31      QString ayData();
32      QString azData();
33      QString tempData();
34
35      void icm20608ReadData();
36
37      Q_PROPERTY(QString gxData READ gxData NOTIFY icm20608DataChanged)
38      Q_PROPERTY(QString gyData READ gyData NOTIFY icm20608DataChanged)
39      Q_PROPERTY(QString gzData READ gzData NOTIFY icm20608DataChanged)
40      Q_PROPERTY(QString axData READ axData NOTIFY icm20608DataChanged)
41      Q_PROPERTY(QString ayData READ ayData NOTIFY icm20608DataChanged)
42      Q_PROPERTY(QString azData READ azData NOTIFY icm20608DataChanged)
43      Q_PROPERTY(QString tempData READ tempData NOTIFY icm20608DataChanged)
44
45  public slots:
46      void timer_timeout();
47
48
49  signals:
50      void icm20608DataChanged();
51  };
52
53  #endif // ICM20608_H

“icm20608.h”,源文件如下。

    /******************************************************************
    Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved.
    * @projectName   sensor
    * @brief         icm20608.cpp
    * @author        Deng Zhimao
    * @email         1252699831@qq.com
    * @net            www.openedv.com
    * @date           2020-07-10
    *******************************************************************/
1   #include "icm20608.h"
2   #include 
3   #include 
4   #include 
5   #include 
6   #include 
7   #include 
8   #include 
9  
10  Icm20608::Icm20608(QObject *parent) : QObject (parent)
11  {
12      timer = new QTimer();
13  #if __arm__
14      system("insmod /home/root/driver/icm20608/icm20608.ko");
15  #endif
16      connect(timer,SIGNAL(timeout()),this,SLOT(timer_timeout()));
17  }
18 
19  Icm20608::~Icm20608()
20  {
21 
22  }
23 
24  void Icm20608::icm20608ReadData()
25  {
26      int fd;
27      char const *filename = "/dev/icm20608";
28      signed int databuf[7];
29      unsigned char data[14];
30      signed int gyro_x_adc, gyro_y_adc, gyro_z_adc;
31      signed int accel_x_adc, accel_y_adc, accel_z_adc;
32      signed int temp_adc;
33 
34      float gyro_x_act, gyro_y_act, gyro_z_act;
35      float accel_x_act, accel_y_act, accel_z_act;
36      float temp_act;
37 
38      int ret = 0;
39 
40      fd = open(filename, O_RDWR);
41      if(fd start(500);
123     else
124         timer->stop();
125 }
关注
打赏
1665308814
查看更多评论
立即登录/注册

微信扫码登录

0.0432s