传感器应用 开发 传感器技术的应用及未来发展趋势
传感器技术的应用及未来发展趋势
传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
传感器的特点包括:微型化、数字化、智能化、多功能化、系统化、网络化。它是实现自动检测和自动控制的首要环节。
传感器工作原理传感器一般由敏感元件、转换元件、变换电路、辅助电源四部分构成,如下图所示。其中,敏感元件直接接收测量,用于输出被测量有关的物理量信号,敏感元件主要包括热敏、光敏、湿敏、气敏、力敏、声敏、磁敏、色敏、味敏、放射性敏感等十大类;转换元件用于将敏感元件输出的物理量信号转换为电信号;
变换电路用于将转换元件输出电信号进行放大、调制等处理;辅助电源用于为系统(主要是敏感元件和转换元件)提供能量。
传感器应用传感器在手机中的应用:重力传感器,在极品飞车、天天跑酷等游戏中有着近乎完美的体现;加速度传感器,例如手机的摇一摇功能就是对手机的加速度进行感应;光线传感器,例如手机的自动调光功能;距离传感器,例如接电话时手机离开耳朵屏幕变亮,手机贴近耳朵屏幕变黑。手机中的传感器数不胜数,很多功能都是利用传感器来实现的,在此小编就不一一列举了。
除手机外,传感器在日常生活中也有着广泛的应用,常见的如:自动门,通过对人体红外微波的传感来控制其开关状态;烟雾报警器,通过对烟雾浓度的传感来实现报警的目的;电子秤,通过力学传感来测量人或其他物品的重量;水位报警,温度报警、湿度报警等也都利用的是传感器来完成其功能。
传感器技术未来发展将会有哪些趋势呢?下面我们来看看:
1、开发新式传感器
新式传感器,大致应包含:①选用新原理;②添补传感器空白;③仿生传感器等诸方面。它们之间是互相联络的。传感器的作业机理是根据各种效应和规律,由此启示大家进一步探究具有新效应的灵敏功用资料,并以此研发出具有新原理的新式物性型传感器材,这是开展高功用、多功用、低成本和小型化传感器的主要途径。构造型传感器开展得较早,现在日趋老练。构造型传感器,通常说它的构造杂乱,体积偏大,报价偏高。物性型传感器大致与之相反,具有不少诱人的长处,加之曩昔开展也不行。世界各国都在物性型传感器方面投入很多人力、物力加强研究,从而使它变成一个值得注意的开展意向。其中运用量子力学诸效应研发的低活络阈传感器,用来检查弱小的信号,是开展新意向之一。
2、集成化、多功用化、智能化
传感器集成化包含两种界说,一是同一功用的多元件并排化,行将同一类型的单个传感元件用集成技能在同一平面上摆放起来,排成1维的为线性传感器,CCD图象传感器就归于这种状况。集成化的另一个界说是多功用一体化,行将传感器与放大、运算以及温度抵偿等环节一体化,组装成一个器材。
跟着集成化技能的开展,各类混合集成和单片集成式压力传感器相继呈现,有的已经变成产品。集成化压力传感器有压阻式、电容式、等类型,其中压阻式集成化传感器开展快、使用广。
传感器的多功用化也是其开展方向之一。所谓多功用化的典型实例,美国某大学传感器研究开展基地研发的单片硅多维力传感器能够一起丈量3个线速度、3个离心加速度(角速度)和3个角加速度。主要元件是由4个准确规划安装在一个基板上的悬臂梁构成的单片硅构造,9个准确布置在各个悬臂梁上的压阻灵敏元件。多功用化不只能够降低出产成本,减小体积,并且能够有效的前进传感器的稳定性、可靠性等功用指标。
把多个功用不一样的传感元件集成在一起,除可一起进行多种参数的丈量外,还可对这些参数的丈量成果进行归纳处理和评估,可反映出被测体系的全体状况。由上还能够看出,集成化对固态传感器带来了很多新的时机,一起它也是多功用化的根底。
传感器与微处理机相结合,使之不只具有检查功用,还具有信息处理、逻辑判别、自确诊、以及“思想”等人工智能,就称之为传感器的智能化。借助于半导体集成化技能把传感器有些与信号预处理电路、输入输出接口、微处理器等制造在同一块芯片上,即变成大规模集成智能传感器。能够说智能传感器是传感器技能与大规模集成电路技能相结合的产品,它的实现将取决于传感技能与半导体集成化技能水平的前进与开展。这类传感器具有多能、高功用、体积小、适合大批量出产和运用方便等长处,能够肯定地说,是传感器主要的方向之一。
3、新资料开发
传感器资料是传感器技能的主要根底,是传感器技能晋级的主要支持。跟着资料科学的前进,传感器技能日臻老练,其品种不断增加,除了早期运用的半导体资料、陶瓷资料以外,光导纤维以及超导资料的开发,为传感器的开展供给了物质根底。例如,根据以硅为基体的很多半导体资料易于微型化、集成化、多功用化、智能化,以及半导体光热探测器具有活络度高、精度高、非触摸性等特色,开展红外传感器、激光传感器、光纤传感器等现代传感器;在灵敏资猜中,陶瓷资料、有机资料开展很快,可选用不一样的配方混合质料,在精细分配化学成分的根底上,通过高精度成型烧结,得到对某一种或某几种气体具有辨认功用的灵敏资料,用于制成新式气体传感器。此外,高分子有机灵敏资料,是近几年大家极为重视的具有使用潜力的新式灵敏资料,可制成热敏、光敏、气敏、湿敏、力敏、离子敏和生物敏等传感器。传感器技能的不断开展,也促进了更新式资料的开发,如纳米资料等。美国NRC公司已开发出纳米ZrO2气体传感器,操控机动车辆尾气的排放,对净化环境作用极好,使用远景对比广阔。因为选用纳米资料制造的传感器,具有庞大的界面,能供给很多的气体通道,并且导通电阻很小,有利于传感器向微型化开展,跟着科学技能的不断前进将有更多的新式资料诞生。
4、新技能的选用
在开展新式传感器中,离不开新技能的选用。新技能的意义规模很广,这儿主要指与开展新式传感器联络格外亲近的微细加工技能。该技能又称微机械加工技能,是这些年跟着集成电路技能开展起来的,它是离子束、电子束、分子束、激光束和化学刻蚀等用于微电子加工的技能,现在已不断增加地用于传感器范畴,例如溅射、蒸镀、等离子体刻蚀、化学气体淀积(CVD)、外延、扩散、腐蚀、光刻等,迄今已有很多选用上述技能制成的传感器的国内外报导。
5、智能资料
智能资料是指规划和操控资料的物理、化学、机械、电学等参数,研发出生物体资料所具有的特性或许优于生物体资料功用的人工资料。有人以为,具有下述功用的资料可称之为智能资料:具有对环境的判别可自适应功用;具有自确诊功用;具有自修正功用;具有自增强功用(或称时基功用)。
生物体资料的最突出特色是具有时基功用,因此这种传感器特性是微分型的,它对变分有些对比灵敏。反之,长时间处于某一环境并习惯了此环境,则活络度降低。通常说来,它能适应环境调理其活络度。除了生物体资料外,最有目共睹的智能资料是形状回忆合金、形状回忆陶瓷和形状回忆聚合物。智能资料的探究作业刚刚开始,信任不久的将来会有很大的开展。
随着物联网技术推进,对传感器技术提出了新的要求,产品正在向MEMS工艺技术,无线数据传输网络技术,新材料、纳米、薄膜(含SOI)、陶瓷技术,光纤技术;激光技术,复合传感器技术,多学科交叉的融合技术方向发展。
米尔ST-MYD-YA15XC开发板传感器应用实例开发笔记
1. 概述
Sense HAT (B)是树莓派设计的传感器扩展板,板载了九轴运动传感器 ICM-20948,
其中包括 3 轴陀螺仪、3 轴加速度计、3 轴磁力计和数字运动处理器,是世界上功率最低
的 9 轴运动跟踪设备,非常适合智能手机、平板电脑、可穿戴传感器和物联网应用。除此
还板载了气压计和温湿度传感器等,I2C 接口通信,支持外接更多传感器。
本文主要讲述 ICM-20948 的调试步骤,以供用户参考。 2. 硬件资源
Typec Debug 线 1 根
MYD-15XC-T 开发板
树莓派接口 Sense HAT (B)模块 1 个
5V 适配器 1 个
3. 软件资源
Linux 5.4.31
STM32CubeIDE 1.5.0
LInux 虚拟机
米尔提供的 SDK
4. 环境准备
预先安装好 CubeIDE 等开发软件并搭建好 Linux 虚拟机环境,具体环境搭建请参考米
尔的软件开发手册《MYD-YA15XC-T_Linux 软件开发指南》。
5. 操作步骤
5.1. 硬件介绍与设置
5.1.1.硬件介绍
关于树莓派接口 Sense HAT (B)模块的硬件参数介绍与设置请参考微雪官网:
https://www.waveshare.net/wiki/Sense_HAT_(B)
注意:ICM20948 内部有电子罗盘 AK09916。读取加速度和陀螺仪的是需要对 ICM20948
的从地址操作,而读取磁力计需要对 AK09916 地址进行操作。ICM20948 根据引脚
AD0/SD0 的接线方式地址也不一样,接地时地址位 0x68,接高电平时位 0x69;而磁力计
的地址为固定 0x0C。
5.1.2.接线与设置
直接接到 MYD-YA15XC-T 的 J15 接口,如下图所示:
图 5-1. 连接与配置
5.2. CubeMX 配置
设置时钟为 209M,如下图只需要在红色框输入 209M,按“Enter”,会自动设置时
钟参数:
图 5-1.时钟设置
由于该模块通讯接口使用的是 I2C,所以还需要设置 I2C 外设:
图 5-2.I2C 设置
接着使能 Debug 串口,用来打印传感器的数据:
图 5-3.Debug 串口
5.3. 软件设计
由 5.2 节生成代码之后,在工程目录新建“ICM20948”目录,用来存放 ICM20948
的配置代码和驱动代码(微雪官网有该模块驱动源码,用户可以直接移植节省时间):
图 5-4.工程目录结构
配置寄存器和磁力计寄存器,在 ICM20948/ICM20948/ICM20948.c 文件中:
extern void invmsICM20948Init(void)
{
/* user bank 0 register */
DEV_I2C_WriteByte( REG_ADD_REG_BANK_SEL, REG_VAL_REG_BANK_0);
/*0x01:auto select available clock ,full gyroscope performance*/
DEV_I2C_WriteByte( REG_ADD_PWR_MIGMT_1, REG_VAL_ALL_RGE_RESET);
DEV_Delay_ms(10);
DEV_I2C_WriteByte( REG_ADD_PWR_MIGMT_1, REG_VAL_RUN_MODE);
/* user bank 2 register */
DEV_I2C_WriteByte( REG_ADD_REG_BANK_SEL, REG_VAL_REG_BANK_2);
/*Gyro sample rate divider 1.1 kHz/(1+GYRO_SMPLRT_DIV[7:0])=*/
DEV_I2C_WriteByte( REG_ADD_GYRO_SMPLRT_DIV, 0x07);
/*0x01:Enable gyro DLPF 1000DPS*/
DEV_I2C_WriteByte( REG_ADD_GYRO_CONFIG_1, REG_VAL_BIT_GYRO_DLPCFG_6 | REG_VAL_BIT_GYRO_FS_1000DPS |
REG_VAL_BIT_GYRO_DLPF);
/*0x11:LSB for ACCEL sample rate div 1.125 kHz/(1+ACCEL_SMPLRT_DIV[11:0])*
/
DEV_I2C_WriteByte( REG_ADD_ACCEL_SMPLRT_DIV_2, 0x07);
/*0x14: ACCEL_CONFIG 2g DLPF*/
DEV_I2C_WriteByte( REG_ADD_ACCEL_CONFIG, REG_VAL_BIT_ACCEL_DLPCFG_6 | REG_VAL_BIT_ACCEL_FS_2g | REG_V
AL_BIT_ACCEL_DLPF);
/* user bank 0 register */
DEV_I2C_WriteByte( REG_ADD_REG_BANK_SEL, REG_VAL_REG_BANK_0);
DEV_Delay_ms(100);
/* offset 静止时测得的数据*/
invmsICM20948GyroOffset();
/*设置磁力计地址,使能读*/
invmsICM20948MagCheck();
invmsICM20948WriteSecondary( I2C_ADD_ICM20948_AK09916|I2C_ADD_ICM20
948_AK09916_WRITE,REG_ADD_MAG_CNTL2, REG_VAL_MAG_MODE_20HZ);
return;
}
ICM20948 传感器四元数算法设计,在 ICM20948/IMU/IMU.c 文件中:
/**
* @brief Updata attitude and heading
* @param ax: accelerometer X
* @param ay: accelerometer Y
* @param az: accelerometer Z
* @param gx: gyroscopes X
* @param gy: gyroscopes Y
* @param gz: gyroscopes Z
* @param mx: magnetometer X
* @param my: magnetometer Y
* @param mz: magnetometer Z
* @retval None
*/
void IMU_AHRSupdate(float gx, float gy, float gz, float ax, float ay, float az, float m
x, float my, float mz)
{
float norm;
float hx, hy, hz, bx, bz;
float vx, vy, vz, wx, wy, wz;
float exInt = 0.0, eyInt = 0.0, ezInt = 0.0;
float ex, ey, ez, halfT = 0.024f;
/*四元数相关运算,旋转矩阵*/
float q0q0 = q0 * q0;
float q0q1 = q0 * q1;
float q0q2 = q0 * q2;
float q0q3 = q0 * q3;
float q1q1 = q1 * q1;
float q1q2 = q1 * q2;
float q1q3 = q1 * q3;
float q2q2 = q2 * q2;
float q2q3 = q2 * q3;
float q3q3 = q3 * q3;
/*将加速度计测量值转化为三维单位向量(归一化)*/
norm = invSqrt(ax * ax + ay * ay + az * az);
ax = ax * norm;
ay = ay * norm;
az = az * norm;
/*将磁传感器测量值转化为三维单位向量(归一化)*/
norm = invSqrt(mx * mx + my * my + mz * mz);
mx = mx * norm;
my = my * norm;
mz = mz * norm;
/*hx,hy,hz 是地理坐标系下的磁传感器值,可以有机体坐标系下的 mx,my,
mz 左乘旋转矩阵得到*/
hx = 2 * mx * (0.5f - q2q2 - q3q3) + 2 * my * (q1q2 - q0q3) + 2 * mz * (q1q
3 + q0q2);
hy = 2 * mx * (q1q2 + q0q3) + 2 * my * (0.5f - q1q1 - q3q3) + 2 * mz * (q2q
3 - q0q1);
hz = 2 * mx * (q1q3 - q0q2) + 2 * my * (q2q3 + q0q1) + 2 * mz * (0.5f - q1q
1 - q2q2);
bx = sqrt((hx * hx) + (hy * hy));
bz = hz;
/*用四元数表示三轴重力分量 vx,vy,vz,根据此地理坐标系下的重力加速度值,右乘旋转
矩阵即可得到此时机体坐标系下的重力加速度估计值*/
// estimated direction of gravity and flux (v and w)
vx = 2 * (q1q3 - q0q2);
vy = 2 * (q0q1 + q2q3);
vz = q0q0 - q1q1 - q2q2 + q3q3;
wx = 2 * bx * (0.5 - q2q2 - q3q3) + 2 * bz * (q1q3 - q0q2);
wy = 2 * bx * (q1q2 - q0q3) + 2 * bz * (q0q1 + q2q3);
wz = 2 * bx * (q0q2 + q1q3) + 2 * bz * (0.5 - q1q1 - q2q2);
/*根据上面所求的值求陀螺仪积分误差值,
向量间的误差 ex,ey,ez 是用向量积(外积、叉乘)表示,
该误差向量仍位于机体坐标系中
*/
// error is sum of cross product between reference direction of fields and di
rection measured by sensors
ex = (ay * vz - az * vy) + (my * wz - mz * wy);
ey = (az * vx - ax * vz) + (mz * wx - mx * wz);
ez = (ax * vy - ay * vx) + (mx * wy - my * wx);
/*利用所得的误差值修正陀螺仪的测量值,使用 PI 算法进行控制
式中,参数 Ki、Kp 用来控制修正陀螺仪误差速度
得到新的陀螺仪值 gx、gy、gz
*/
if(ex != 0.0f && ey != 0.0f && ez != 0.0f)
{
exInt = exInt + ex * Ki * halfT;
eyInt = eyInt + ey * Ki * halfT;
ezInt = ezInt + ez * Ki * halfT;
gx = gx + Kp * ex + exInt;
gy = gy + Kp * ey + eyInt;
gz = gz + Kp * ez + ezInt;
}
/*利用修正后的陀螺仪值 gx、gy、gz 更新四元数*/
q0 = q0 + (-q1 * gx - q2 * gy - q3 * gz) * halfT;
q1 = q1 + (q0 * gx + q2 * gz - q3 * gy) * halfT;
q2 = q2 + (q0 * gy - q1 * gz + q3 * gx) * halfT;
q3 = q3 + (q0 * gz + q1 * gy - q2 * gx) * halfT;
/*将更新后的四元数转化为三维单位向量(归一化)*/
norm = invSqrt(q0 * q0 + q1 * q1 + q2 * q2 + q3 * q3);
q0 = q0 * norm;
q1 = q1 * norm;
q2 = q2 * norm;
q3 = q3 * norm;
}
陀螺仪、加速度、磁力计、欧拉角读写,在 ICM20948/invMotionSensor.c 文件中:
extern void invMSAccelRead(int16_t* ps16AccelX, int16_t* ps16AccelY, int16_t* ps
16AccelZ)
{
if( (genCurrentSensorType != INVMS_EN_SENSOR_TYPY_MAX) &&
(ps16AccelX != NULL) &&
(ps16AccelY != NULL) &&
(ps16AccelZ != NULL) )
{
gsstSensorList[genCurrentSensorType].pFunAccelRead(ps16AccelX, ps16Acce
lY, ps16AccelZ);
}
return;
}
extern void invMSGyroRead(int16_t* ps16GyroX, int16_t* ps16GyroY, int16_t* ps16
GyroZ)
{
if( (genCurrentSensorType != INVMS_EN_SENSOR_TYPY_MAX) &&
(ps16GyroX != NULL) &&
(ps16GyroY != NULL) &&
(ps16GyroZ != NULL) )
{
gsstSensorList[genCurrentSensorType].pFunGyroRead(ps16GyroX, ps16GyroY, ps16GyroZ);
}
return;
}
extern void invMSMagRead(int16_t* ps16MagnX, int16_t* ps16MagnY, int16_t* ps
16MagnZ)
{
if( (genCurrentSensorType != INVMS_EN_SENSOR_TYPY_MAX) &&
(ps16MagnX != NULL) &&
(ps16MagnY != NULL) &&
(ps16MagnZ != NULL) )
{
gsstSensorList[genCurrentSensorType].pFunMagRead(ps16MagnX, ps16Mag
nY, ps16MagnZ);
}
return;
}
/**
* @brief Get Yaw Pitch Roll
* @param None
* @retval None
*/
void IMU_GetYawPitchRoll(float *Angles)
{
IMU_GetQuater();
Angles[1] = asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; // pitch
Angles[2] = atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 5
7.3; // roll
Angles[0] = atan2(-2 * q1 * q2 - 2 * q0 * q3, 2 * q2 * q2 + 2 * q3 * q3 - 1) *
57.3;
}
在主函数中,不停的调用读写函数,对数据进行处理然后打印:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
IMU_GetYawPitchRoll(angles);
printf("\r\n /-------------------------------------------------------------/ \r\n
");
printf("\r\n Roll: %.2f Pitch: %.2f Yaw: %.2f \r\n",angles[2],angles[1],an
gles[0]);
printf("\r\n Acceleration: X: %d Y: %d Z: %d \r\n",accel[0],accel[1],acc
el[2]);
printf("\r\n Gyroscope: X: %d Y: %d Z: %d \r\n",gyro[0],gyro[1],gyro
[2]);
printf("\r\n Magnetic: X: %d Y: %d Z: %d \r\n",magn[0],magn[1],magn
[2]);
DEV_Delay_ms(500);
}
/* USER CODE END 3 */
}
delay = 0;
}
if(SUCCESS == over_flag){
5.4. 测试
5.4.1.量产模式启动 m4 固件
启动开发板,并启动 m4 固件,如下:
root@myir-ya151c-t-4e512d:~# cp ICM20948_CM4.elf /lib/firmware/
root@myir-ya151c-t-4e512d:~# echo ICM20948_CM4.elf > /sys/class/remoteproc
/remoteproc0/firmware
root@myir-ya151c-t-4e512d:~# echo start > /sys/class/remoteproc/remoteproc0/
state
[ 74.763629] remoteproc remoteproc0: powering up m4
[ 74.772761] remoteproc remoteproc0: Booting fw image ICM20948_CM4.elf, siz
e 2649856
[ 74.784968] remoteproc remoteproc0: header-less resource table
[ 74.789341] remoteproc remoteproc0: no resource table found for this firmware
[ 74.800724] remoteproc remoteproc0: header-less resource table
[ 74.807706] remoteproc remoteproc0: remote processor m4 is now up
5.4.2. 信息接收
打开 sscom,可以看到串口能打印 ICM20948 采集到的数据,如下图所示:
图 5-2.数据接收
相关问答
传感网 应用开发 初级证书含金量?含金量还行。现在类似于开发证书的含金量都没那么大了,因为现在很多企业看中的是个人能力,也就是快速上手,不断学习,理解能力强,沟通顺畅含金量还行。现在...
传感器 包含在集成 开发 工具中吗?传感器不包含在集成开发工具中。集成开发环境(IDE,IntegratedDevelopmentEnvironment)是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、...
micro bit 开发 板如何连 传感器 模块?要连接传感器模块到micro:bit开发板,需要使用引脚连接线将传感器模块的信号线连接到micro:bit的GPIO引脚上。首先,确定传感器模块的信号线对应的GPIO引脚,在m...
汽车研发未来的方向是什么?第二阶段的网联化已经进入加温阶段,在这个阶段里如果想要找到什么机遇,也许可以从系统兼容、软件开发和系统与用户数据管理等方面作为切入点;现阶段是各大车...
嵌入式技术与 应用 前景怎么样?什么是嵌入式技术在了解应用场景之前,先要明确,什么是嵌入式。嵌入式其实就是控制电子,机械等部件完成所需要功能的软硬件系统。它主要包含软件技术开发,...什...
传感器 一般属于物联网哪个层级?物联网架构按层级来划分可分为3个层级:感知层、网络层、应用层。以下将对它们在物联网系统中扮演的的角色及作用进行阐述。首先底层是用来感知数据的感知层...
ARM 开发 板如何获取与其相连的 传感器 上的数据?温度传感器不用驱动,里面有些好的tem0就是,打开这个文件直接操作就行。温度传感器不用驱动,里面有些好的tem0就是,打开这个文件直接操作就行。
进口omni全向相机 传感器 解决方案?我们可以提供一种全方位的解决方案,通过使用omni全向相机传感器来捕捉完整的360度环境,并将数据传输到处理单元。该解决方案可以实现实时的环境感知和跟踪,适...
机器人概念股龙头有哪些机器人概念股票龙头一览- 汇财吧专业问答[回答]1、机器人概念的龙头肯定是:“机器人”(300024)了2、给你一张图,所有机器人概念股如下:祝:好!机器人概念一共有78家上市公司,其中13家机器人概念上...
麻烦问一下,齐全的西门子 传感器 企业,西门子 传感器 好不好??[回答]哈哈,这个问题太难说了,因为传感器太小了,不像计算机这么大型复杂的东西,那样的话人们会就清楚的记录它的历史了,传感器太简单了,你说一个温度计叫...