本帖最后由 两只袜子 于 2020-11-13 14:33 编辑
每天一个X-NUCLEO-IKS01A3开发板的传感器MicroPython驱动移植,今天完成了LSM6DSO陀螺仪的驱动,也是最后一个驱动程序,下一步预备开始将这些驱动移植到MakeCode,这样以后大家也可以在MakeCode上用图形化方式使用它们了。
LSM6DSO可以看成是一颗芯片里面封装了两个传感器,控制的时候加速度和角速度也是分别控制的,所以LSM6DSO的体积也比其它几个传感器都要大一些(其它几个传感器都是2x2mm,LSM6DSO是2.5x3mm)。
从寄存器上看,LSM6DSO和LIS2DW12类似,分为控制寄存器、状态寄存器、输出寄存器、中断寄存器、事件寄存器、FIFO寄存器等。传感器的功能非常多,也很复杂,可以编写出适合不同应用的多种驱动。不过为了简化使用,并保持和其它驱动一致的风格,这次的驱动只包含了基本的参数设置、数据读取等功能,没有包含中断、事件、FIFO等,在需要时大家可以自行添加。
下面是LSM6DSO的部分寄存器列表,LSM6DSO的寄存器非常多,仅列表就占用了3页。不过对于基本功能,只需要用到其中一小部分寄存器。
LSM6DSO最基本的使用方法是先设置LSM6DSO_CTRL1_XL和LSM6DSO_CTRL2_G寄存器,将ODR从0修改为合适的数值,就可以开始读取数据了。和X-NUCLEO-IKS01A3开发板上其它传感器不同,LSM6DSO没有oneshot或者single模式,如果要降低功耗或进入休眠,需要将传感器的ODR设置为0。因为加速度和角速度是分别控制的,所以需要分别设置两个寄存器的ODR。
LSM6DSO的加速度传感器可以设置±2g、±4g、±8g、±16g四种量程,而角速度可以设置125、250、500、1000、2000dps五种量程,可以按需灵活选择。LSM6DSO的输出结果是16位的,传感器的灵敏度非常高,可以将它的输出和其它类似传感器比较就清楚了。
可能是为了做温度补偿,LSM6DSO内部同样带有一个温度传感器,使用方法和LIS2DW12是相同的。
另外值得注意的是,LSM6DSO也支持最新的I3C接口标准,这部分的驱动等以后有机会补上。
|