SC7A20 三轴微机械数字加速度计

2023-10-24 14:50

本文主要是介绍SC7A20 三轴微机械数字加速度计,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SC7A20 ±2G/±4G/±8G/±16G三轴微机械数字加速度计

一直没找到简单好用的SC7A20驱动库,索性自己写了一个,采用IIC接口读取数据,需要注意网上查到的芯片地址都不对,应该是0x18,可以看我下面用逻辑分板仪抓取到的数据据包,只有0X18才反回ACK.
在这里插入图片描述

另一点是芯片输出是2进制补码形式,负数需要转换成原码.

软件 IDE

PlatformIO

硬件连接

在这里插入图片描述

EPS23主控
IIC SDA-----21
IIC SCK-----22

测试数据

量程±2g,12bit精度,无外力仅重力时1g=1023个测量值,1=1mg
在这里插入图片描述

#ifndef _SC7A20_H
#define _SC7A20_H
#include "Wire.h"
#include "Arduino.h"#define SC7A20_I2C_ADDR		    0x18//Reg Table
#define WHO_AM_I_REG			0x0F#define CTRL_REG1			    0x20
#define CTRL_REG2			  	0x21
#define CTRL_REG3			  	0x22
#define ADDR_STATUS_REG         0x27
#define OUT_X_L_REG				0x28
#define OUT_X_H_REG				0x29
#define OUT_Y_L_REG				0x2A
#define OUT_Y_H_REG				0x2B
#define OUT_Z_L_REG				0x2C
#define OUT_Z_H_REG				0x2D// For CHIP_ID_REG
#define CHIP_ID					0x11class SC7A20_Class
{
public:int accel_X;int accel_Y;int accel_Z;bool begin( uint8_t address=SC7A20_I2C_ADDR, TwoWire &wirePort=Wire);void measure(void);private:uint8_t _address;TwoWire *_i2cPort;void IIC_Write_Byte(uint8_t reg,uint8_t data);void IIC_Read_Byte(uint8_t reg,uint8_t* buf,int lenght);bool IsExist();int16_t _12bitComplement(uint8_t msb,uint8_t lsb);
};
#endif
#include "SC7A20.h"bool SC7A20_Class::begin( uint8_t address, TwoWire &wirePort)
{_address = address;_i2cPort = &wirePort;_i2cPort->begin();if(!IsExist())return false;IIC_Write_Byte(CTRL_REG1,0x27); //正常模式 10HZreturn true;
}void SC7A20_Class::IIC_Write_Byte(uint8_t reg,uint8_t data)
{_i2cPort->beginTransmission(_address);_i2cPort->write(reg);_i2cPort->write(data);_i2cPort->endTransmission();
}void SC7A20_Class::IIC_Read_Byte(uint8_t reg,uint8_t* buf,int lenght)
{uint8_t i=0;_i2cPort->beginTransmission(_address);reg |= 0x80; //turn auto-increment bit on_i2cPort->write(reg);_i2cPort->endTransmission(false);_i2cPort->requestFrom(_address, lenght);while (_i2cPort->available() && i<lenght){*buf= _i2cPort->read();buf++;i++;}
}bool SC7A20_Class::IsExist()
{uint8_t config; IIC_Read_Byte(WHO_AM_I_REG,&config,1);if (config == CHIP_ID) return true;else return false;
}
int16_t SC7A20_Class::_12bitComplement(uint8_t msb,uint8_t lsb)
{int16_t temp;temp=msb<<8|lsb;temp=temp>>4;   //只有高12位有效temp=temp & 0x0fff;if(temp&0x0800) //负数 补码==>原码{temp=temp&0x07ff; //屏弊最高位      temp=~temp;temp=temp+1;temp=temp&0x07ff;temp=-temp;       //还原最高位}	return temp;
}void SC7A20_Class::measure(void)
{uint8_t buff[6];IIC_Read_Byte(0x28,buff,6);accel_X=_12bitComplement(buff[1],buff[0]); accel_Y=_12bitComplement(buff[3],buff[2]); accel_Z=_12bitComplement(buff[5],buff[4]); 
}
#include <Arduino.h>
#include "SC7A20.h"SC7A20_Class SC7A20;void setup() 
{Serial.begin(9600);if(!SC7A20.begin()){	while (1);}
}void loop() 
{  SC7A20.measure();Serial.printf("X:%d Y:%d Z:%d\r\n",SC7A20.accel_X,SC7A20.accel_Y,SC7A20.accel_Z);delay(1000);
}

这篇关于SC7A20 三轴微机械数字加速度计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/275928

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测

有关机械硬盘的基础知识

1,机械硬盘的品牌   目前市场中常见的笔记本电脑的机械硬盘品牌主要有希捷、西部数据、三星等。   2,机械硬盘的容量   硬盘容量,即硬盘所能存储的最大数据量。虽然笔记本电脑硬盘的容量会因单位密度的提升而增加,不过和台式电脑的大容量比起来,笔记本电脑硬盘的容量仍然落后许多。笔记本电脑的硬盘除了对磁盘有体积较小和数量较少的要求之外,对功耗、耐用程度、抗震性及成本等的考虑,也让笔记

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

Oracle 数据库中 字符型字段 按数字排序

由于需要维护表里面的值,id主键是字符串型,保存的都是数字,每次都要看好久,才知道新增id,用哪个数字; 遇到了一个主键排序的问题。字符型的主键,保存的都是数字,数据导过来以后发现数据排序都是乱的,就想着按数字规则排序。 但发现to_number总是报错,就想着里面应该是有字符存在。后来使用了正则关系式,问题解决。 以下是正则关系式的两种用法,记录下来: 方法一: select * fr