A. sensordonotblock是干什么的
先区分 SOC 和 MCU:
MCU:Micro Control Unit,微控制单元,如 STM32 单片机。
SOC:System on Chip,芯片上可以跑 linux、android 等系统。
Sensorhub:智能传感集线器,是一种基于低功耗 MCU 和轻量级 RTOS 操作系统之上的软硬件结合的解决方案,其主要功能是连接并处理来自各种传感器设备的数据。诞生之初的目的主要是为了解决在移动设备端的功耗问题。比如希望手机主控休眠的时候,依旧可以获取数据,MCU 的耗电比 SOC 小多了。
在 CPU 休眠的情况下,实现对传感器的实时控制,从而达到降低功耗的功能。
将不同类型 Sensor 的数据进行融合,实现多种 sensor 数据结合才能实现的功能。
多种物理 sensor 的数据,可以根据需要,拆解或融合成虚拟 sensor,来满足功能需求。
Sensor Hub 可以执行以下操作:
手势识别:感测人的手势,如:翻转手机,敲打手机,摇晃手机,拿起手机等手势。可实现案例:翻转静音,拒接电话,摇晃切换背景图片以及拿起接听电话等功能。
设备状态识别:感测设备的状态,如:手机面朝上/朝下,手机在桌子上,还是在口袋里,还是在人手里。可实现案例:手机在口袋里时,自动将来电铃声放至最大;而在桌子上的时候,调至静音震动模式。
用户状态识别:感测用户的状态,如:跑步,走路,站立,坐下等。实现功能:在走路/跑步时,自动打开记步功能,而站立和坐下后,暂停相关功能。
用户交通行为判断:感测用户乘坐交通时的状态,如:开车,坐火车,坐电梯等。实现功能:在开车状态,自动蓝牙连接;而在火车上接电话,开启消噪功能。
物理传感器
在嵌入式移动设备中,比如智能手机,智能穿戴,家用医疗设备和其他一些智能硬件设备,所用到的物理传感器一般都是 MEMS 传感器即微机电系统(Microelectro Mechanical System)传感器。和传统的传感器相比,MEMS 传感器体积更小,重量轻,成本低,功耗低,可靠性高,易于集成开发等优势。
目前,MEMS传感器主要有加速度计(Accelerometer),磁力计(Magnetometer),陀螺仪(Gyroscope),光感计(Ambient light sensor),接近光(Proximity),气压计(Barometer/pressure),湿度计(Humidometer)等等,按类型可以分为环境类传感器,运动类传感器,健康类传感器。
1、加速度传感器
加速计(Accelerometer)也叫重力传感器,是可以感知任意方向上的加速度(重力加速度则只是地表垂直方向加速度),加速计通过测量组件在某个轴向的受力情况来得到结果,表现形式为轴向的加速度大小和方向(X,Y,Z)。其原理是根据传感器内部的振动结构,由于外界加速度会影响到内部结构的振动特性,来测量到物体的加速度。加速度计的用途很多,只要跟智能硬件(比如手机)运动相关的几乎都与加速度计有关(计步、手机的姿态测量、相关的游戏等等) 。
2、陀螺仪传感器
陀螺仪,在传感器内部有个三轴的陀螺。陀螺仪的工作原理是通过测量三维坐标系内陀螺转子的垂直轴与设备之间的夹角,然后来计算角速度,从而可以由夹角和角速度来判别物体在三维空间的运动状态。陀螺仪的用途也非常多,比如数码照相防抖,以及配合加速度计(有的还有磁传感器或者GPS等)形成的融合传感器来完成更高级的功能(如惯性导航)。
3、磁力计传感器
磁力计(Magnetic)也叫地磁计、磁感器,可用于测试磁场强度和方向,磁力计的原理跟指南针原理类似,可以测量出当前设备与东南西北四个方向上的夹角。
4、环境光感传感器
环境光传感器可以感知周围光线强度。例如,在手机、笔记本、平板电脑等移动应用中,可以根据外界的亮度来实现自动调节背光亮度等,从而降低产品的功耗。
5、接近光传感器
接近光传感器用于检测红外信号,其主要检测的是外部的红外线LED的信号。这个LED向外发出红外线,当有物体接近传感器的上方时,进入红外线的发射区域,有些红外线会被发射回传感器。现在还有基于激光的接近光传感器,比如ToF sensor等,可以测距范围在2-4米左右。
6、气压计传感器
气压计主要是由一个真空盒式气压传感器,靠气压导致真空盒形变,上下两块电容板距离改变,电容改变来测量大气压值。
7、湿度计传感器
主要原理是把空气中的温湿度通过一定检测装置,测量到温湿度后,按一定的规律变换成电信号或其他所需形式的信息输出,从而来检测出当时的温度值。
8、紫外线传感器
紫外线传感器(UV)是利用光敏元件将紫外线信号转换为电信号的传感器。
9、PM2.5传感器
PM2.5激光传感器是一款通用细微颗粒物浓度传感器,采用激光散射原理。即令激光照射在空气中的悬浮颗粒物上产生散射,同时在某一特定角度用探测器接收散射光,产生的光电流经放大后,得到电信号与颗粒物的对应曲线,经过一系列算法得出单位体积内不同粒径的颗粒物质量。从而获得空气中单 位体积内PM2.5的质量数据。PM2.5传感器主要用于嵌入各种细微颗粒物浓度相关的仪器仪表、环境改善设备,如空气净化器。
智能传感器硬件框架
根据不同的终端设备和业务场景需求,当前的传感器硬件框架主要可以分为三种,MCU内置型,MCU外置型和MCU独立型。
1、MCU内置型
2、MCU外置型
3、MCU独立型
这种硬件方案主要是用于各种智能硬件设备,比如智能手环,扫地机器人等等。
sensor 供应商
Accelerometer 加速度传感器:主要的供应商有 ST,Bosch,Freescale,ADI,美新等。
Gyro Sensor 角速度传感器:主要的供应商有 Invensesne,ST,Bosch,Panasonic 等。
Geomagnetic 地磁传感器:主要的供应商有 AKM,Yamaha,ST,QST,爱盛等。
Barometer 气压传感器:Bosch,Sensata,Infineon,Denso 等。
eg:
指纹识别:AS608、ATK-301
气压计:bosch_bmp180、bmp280、bmp380
温湿度传感器:DHT11
温度传感器:DS18B20
粉尘传感器:GP2Y
红外识别:HC-SR501
磁场传感器:HMC5883L
姿态传感器(六轴):MPU6050
手势识别:PAJ7620
激光测距:VL53L0X
LDR光敏传感器
三合一光传感器:AP3216C
激光测距:VL53L0X
光流:PMW3901
角度传感器:IMU901
加速度陀螺仪二合一:lsm6dsm、lsm6ds3、lsm6dso、lis2hh12、lis3dh、icm20600、icm20608、icm20645、icm40605、bmi160、bmi2xy
光传感器/接近传感器二合一:vc36658、tmd2750、tcs3701、bu27030、cm36558
磁力计:akm09918、mmc5603
sar 传感器:sx9310、ax1050
一般 sensor 供应商都会提供驱动,大家在 MCU 或 SOC 预留好 I2C 和 SPI 接口即可。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。
展开剩余内容
打开APP阅读全文并永久保存
更多类似文章
猜你喜欢
类似文章
陀螺仪、加速计和磁力计
智能手机的传感器,你用过几个?
陀螺仪、加速计、磁力计等传感器汇总
HMC5883L磁力计常见问题解答
解析8大行业中智能传感器是如何运作的
Android 中支持的几种传感器(加速度、陀螺仪、亮度、地磁、方向、压力、近程、温度) - Sean Guo的android开发日志---android,iphone,flash
更多类似文章 >>
生活服务
首页万象文化人生生活健康
教育职场理财娱乐艺术上网
留言交流回顶部
联系我们
触屏版| 下载APP
京ICP证090625号 京ICP备05038915号
京网文[2019]6000-697号 京公网安备 11010502030377号
关注公众号
保存2
生成长图
B. linux驱动编写过程中遇到的几个问题及解决
1、显示错误:unknown field 'ioctl' specified in initializer
解决办法,查看内核include/linux/fs.h文件,发现里边定义的struct file_operations中没有ioctl,这里我们用.unlocked_ioctl取代,形参去掉 struct inode*。
2、在应用程序中,将ioctl替换为unlocked_ioctl后,会出现以下错误:undefined reference to `unlocked_ioctl'。因为系统调用ioctl是没有改变的,还是原来的系统调用接口,只是系统调用的实现中,ioctl()变成了unlocked_ioctl,在应用层你根本不用关注内核中的这些实现上的改变,你只需要按照系统调用的用法用就可以了。所以把应用程序里的unlocked_ioctl改为ioctl,编译,OK,通过。
3、驱动编译完成,在开发板上insmod,出现以下错误:
WARNING: at lib/kobject.c:595 kobject_put+0x50/0x64()
kobject: '扑' (cbc60a00): is not initialized, yet kobject_put() is being called.
---[ end trace da227214a82491b9 ]---
insmod: cannot insert 'led_dev.ko': Cannot allocate memory
原来是忘了写内存申请的代码,添加kmalloc和memset。
4、再次insmod,出现下列错误代码:
Unable to handle kernel paging request at virtual address 7f008820
pgd = cbc70000
[7f008820] *pgd=00000000
Internal error: Oops: 5 [#1]
Moles linked in: led_dev(+)
CPU: 0 Tainted: G W (3.0.1 #439)
PC is at led_init+0xa8/0x108 [led_dev]
LR is at kobj_map+0x144/0x154
pc : [<bf0020a8>] lr : [<c0246e70>] psr: 60000013
sp : cbc6bf10 ip : cbc6beb0 fp : cbc6bf24
r10: 00000000 r9 : bf002000 r8 : cbc6a000
r7 : 00000000 r6 : bf0002bc r5 : 00000000 r4 : 00000000
r3 : 00000000 r2 : 00000000 r1 : 7f008000 r0 : 00000000
Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
Control: 00c5387d Table: 5bc70008 DAC: 00000015
Process insmod (pid: 112, stack limit = 0xcbc6a268)
Stack: (0xcbc6bf10 to 0xcbc6c000)
bf00: 00000000 c07463c0 cbc6bf7c cbc6bf28
bf20: c00343c8 bf00200c cbc6bf64 cbc6bf38 c0073e24 00000000 00000000 00000000
bf40: 00000000 0000ef52 000d5bf9 bf0002bc 00000000 0000ef52 000d5bf9 bf0002bc
bf60: 00000000 c0034ce8 cbc6a000 00000000 cbc6bfa4 cbc6bf80 c0085960 c0034398
bf80: c00e8738 c00e8610 402004a8 000dfcf8 00000000 00000080 00000000 cbc6bfa8
bfa0: c0034b40 c00858e0 402004a8 000dfcf8 00b5d038 0000ef52 000d5bf9 ffff5f01
bfc0: 402004a8 000dfcf8 00000000 00000080 00000069 00000001 be9c2e64 be9c2e68
bfe0: be9c2e68 be9c2b14 00021cfc 402c1d74 60000010 00b5d038 5fffe821 5fffec21
[<bf0020a8>] (led_init+0xa8/0x108 [led_dev]) from [<c00343c8>] (do_one_initcall+0x3c/0x188)
[<c00343c8>] (do_one_initcall+0x3c/0x188) from [<c0085960>] (sys_init_mole+0x8c/0x1a4)
[<c0085960>] (sys_init_mole+0x8c/0x1a4) from [<c0034b40>] (ret_fast_syscall+0x0/0x30)
Code: e59f0060 eb52980e ea00000b e59f1058 (e5910820)
---[ end trace da227214a82491b9 ]---
Segmentation fault
最后是各种网络,各种谷歌,参考别人的驱动,发现它们的开发板硬件地址并不是自己写的头文件,而是调用mach中已经定义好的头文件,好吧,寻找相应开发板,相应端口的地址头文件,在驱动文件中添加以下头文件:
#include <mach/map.h>
#include <mach/regs-gpio.h>
#include <mach/gpio-bank-m.h>
Ok,打完收工,开发板,测试。运行无阻。完成。
5、在做到DS18B20温度测试模块驱动的时候,看到网上的代码有些函数可以直接对引脚的功能进行设置,比如:s3c2410_gpio_cfgpin(DQ_PIN, DQ_PIN_OUTP); 但是对应于我的s3c6410的开发板就不知道用什么函数了,网上找了半天,发现以上函数是在#include <plat/gpio-cfg.h>中,6410中对应的函数为:extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to);
6、最近学习移植linux内核,移植了新的linux内核以及挂载了新的NFS之后, 重新测试led驱动,发现安装模块以后,运行测试程序会出现以下错误:
-/bin/sh: ./main: not found(main为主机上编译好的测试程序)
原因:
编译busybox的时候选择了静态编译:
Build Options->
Build BusyBox as a static binary (no shared libs)
Build with Large File Support (for accessing file>2GB)
如果选择 Build BusyBox as a static binary (no shared libs) 方式进行编译时,所需的库已经与程序静态地链接在一起,这些程序不需要额外的库就可以单独运行,但是自己编写的程序在文件系统上运行必须采用静态编译,否则会报诸如:bin/sh: main :not found的错误。
静态编译如:
arm-linux-gcc –static main.c –o main
7.按照普通方法安装配置tftp,并且关闭了防火墙,但是在开发板上tftp主机,总会报错:
tftp: server error: (0) Permission denied
解决办法:
修改文件 /etc/sysconfig/selinux,设定其中的
SELINUX=disabled
然后重启电脑即可
C. 单片机开发板有哪些,初学者学习哪个好
这个不具体说哪个好了,跟你将选择板子的方法和原则:
我用的是吴鉴鹰的,视频讲解的好,另外与人解答,对于你自己,你自己看看自己需求。
资源介绍
1、一个CH340的USB转UART芯片,实现USB下载程序,为无串口的笔记本电脑提供下载方便。
2、板子上电源入口有一个自恢复保险丝,可以有效的保护您的电脑主板和开发板。加上这个保险,作为初学的你,即使不小心短路了,也不会烧主板和单片机。
3、板子自带单片机,一个STC89C52RC,有8K的程序空间和512字节的数据空间.
4、板子上共有18个LED小灯,其中一个是USB电源指示灯,插上电源就亮。还有一个是单片机电源指示灯。
5、板子上共有8个数码管,可以用来做数码管的简单秒表实验,计算器功能,显示温度时间等等。
6、板子上配有一个数字旋转编码器,可以通过旋转完成数据的加、减以及作为确认按键使用。
7、板子上配套一个DS1302实时时钟芯片,可以用来做实时时钟实验,弄懂电子表的工作原理。
8、板子上配一个24C02的EEPROM芯片,用来保存掉电后不准丢失的重要数据,用来学习IIC通信实验。
9、板子上配有一个PCF8591,这个芯片集成了AD和DA,可以用来通过AD来进行电压采集实验,通过DA来产生方波、三角波、正弦波信号。
10、板子上集成1602液晶屏,可以用来学习液晶显示,做温度显示实验,秒表显示实验等。
11、板子上共集成有21个按键,其中1个单片机复位按键,16个矩阵按键。分为0到F共16按键,还有四个独立式按键,通过与门74HC08将按下信息送给单片机中断口。
12、板子上有一个无源蜂鸣器,可以用来做音乐输出实验让你充分了解生日贺卡的工作原理。
13、板子上集成一个DS18B20温度传感器,用来学习实现数字温度计。
14、板子上集成一个红外接收管,用来学习红外通信的原理。
15、板子上共4个74HC595芯片,用来驱动16个LED,8个数码管,74HC595在工控领域的显示很常用,可以节约大量的IO口资源,为实现一个复杂系统化工作打下基础。
16、板子布局布线,包括电容电阻放置,是由资深工程师完成,充分考虑了EMC干扰等问题,是您今后产品设计的一个良好的参考对象。