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干擾等問題,是您今後產品設計的一個良好的參考對象。