【情人節選帽子】TCS34725顏色感測器和Python圖形介面編程(STM32 HAL庫)
截圖
描述:
l STM32 HAL庫編程
l 使用模擬IIC通訊,方便程式移植
l Python介面編寫,蘑菇頭的帽子是什麼顏色
l STM32 HAL庫串口通訊
l Python介面使用Pygame
影片演示地址://www.bilibili.com/video/BV1Sv411a7qq
一、 基礎認識
l 工作電壓:3.3~5V
l 檢測距離:3~10mm
l 通訊方式:IIC,可達400kbit/s
l 採集參數:紅色,綠色,藍色(RGB),光照強度
l 可屏蔽中斷,可屏蔽的上下限值中斷
l 低功耗,等待狀態65uA,休眠狀態25uA
l 可編程採集等待時間,2.4ms~614ms
l TCS34725彩色感測器有著廣泛的應用,包括RGB LED背光控制、固態照明、 健康產品、工業過程式控制制和醫療診斷設備等;
引腳定義
光譜分布
二、 系統狀態
內部狀態機提供RGBC的系統控制和設備的電源管理特性。通電時,內部開機複位會初始化設備,使其處於低功耗睡眠狀態。當在IIC匯流排上檢測到一個開始訊號時,設備轉換到空閑狀態,在那裡它檢查啟用暫存器(Ox00) PON位。禁用PON後,設備會返回休眠狀態以節省電量。否則,設備將一直處於空閑狀態,直到AEN使能RGBC功能。一旦啟用,設備將依次執行等待和RGBC狀態,如圖16所示。在完成並返回空閑狀態時,只要PON和AEN保持啟用狀態,設備將自動開始一個新的WaitRGBC周期。
l Sleep — 低功耗睡眠狀態
l IdIe — 空閑狀態
l Wait and RGBC — 工作狀態(等待和RGBC狀態)
RGBC操作
TCS3472光數字轉換器包含一個3×4光電二極體陣列,集成光電二極體電流、數據暫存器、狀態機和IIC介面的四個模數轉換器(ADC), 3 × 4光電二極體陣列由紅濾光、綠濾光、藍濾光和透明(未濾光)光電二極體組成。此外,光電二極體被塗上ir阻擋濾波器。四個積分adc同時將放大的光電二極體電流轉換為16位數字值。在完成一個轉換周期後,結果被轉移到數據暫存器,數據暫存器是雙緩衝的,以確保數據的完整性。所有的內部定時以及低功耗等待狀態都由狀態機控制。
TCS3472的數據通訊是通過一個快速,高達400khz,兩線PC串列匯流排完成的。工業標準1PC匯流排簡化了與微控制器和嵌入式處理器的直接連接。
除了IIC匯流排, TCS3472提供了一個單獨的中斷訊號輸出。當中斷被啟用,並且超過了用戶定義的閾值時, active-low中斷將被保持,直到控制器將其清除為止。這個中斷特性通過消除對TCS3472的輪詢,簡化並提高了系統軟體的效率。用戶可以定義上中斷閾值和下中斷閾值,並應用中斷持久過濾器。中斷持久過濾器允許用戶在生成中斷之前定義必要的連續超出閾值事件的數量。中斷輸出是開路漏極,因此可以與其他設備連接。
l 模組包含RGBC增益控制器(AGAIN)和4個集成的RGBC光電二極體數模轉換器(ADC)
l 轉換時間(ATIME)影響RGBC讀取的解析度和靈敏度
l 4個通道整合約時發生,轉換周期完成後,結果將轉移到顏色數據暫存器
l 傳輸採用雙快取,以保證數據在傳輸期間不讀取無效數據,讀取完成數據後才會觸發下一次數據讀取和轉移
l 可屏蔽的高低閾值中斷引腳
三、編程準備
(一) 通訊時序
這是一個標準的IIC通訊時序
l 寫命令暫存器時序:開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—寫命令暫存器地址—等待從機ACK—寫數據—等待從機ACK–……–停止訊號
l 讀命令暫存器時序:開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—寫命令暫存器地址—等待從機ACK—開始訊號—寫7位IIC地址—寫1位讀寫標識—等待從機ACK—等待從機數據—寫應答ACK—等待從機數據—寫應答ACK–……–停止訊號
(二) 晶片的IIC地址
從時序可以看出,這是7位地址,所以有:
寫地址:0x29<<1
讀地址:(0x29<<1)|0x01
(三) 暫存器(命令)發送
CMD
發送命令最高位必須為1
TYPE:
發送類型:
00,重複位元組協議,也就是讀取數據時將一直讀取當前暫存器的數據
01,自動遞增協議,讀取數據時會自動遞增暫存器
10,不使用,保留
11,與SF同時使用
ADDR:
暫存器(命令)地址
暫存器地址描述
通常命令暫存器的頭部為:0x80
所以暫存器地址應該是:0x80|Address
(四)暫存器數據分析
0x00啟動暫存器
東提示:我們不使用中斷,所以不用配置中斷相關暫存器,PON寫1後要等待至少2.4ms再開啟AEN。PON是振蕩器開啟,AEN是RGBC轉換開啟
0x01 RGBC轉換時間
RGBC Count = (256 − ATIME) × 1024
0x0f 增益控制
控制暫存器為模擬塊提供8位雜項控制。這些位通常控制增益設置和/或二極體選擇等功能。
0x12 設備ID
ID暫存器提供零件號的值。ID暫存器是只讀暫存器。
東提示:通常讀取ID用來判斷與晶片是否通訊成功
0x13 狀態暫存器
狀態暫存器提供設備的內部狀態。
這個暫存器是只讀的。
東提示:通常讀取AVALID的值,如果是1的話表示RGBC轉換完成,就可以讀取RGBC的數據
0x14 – 0x1B RGBC通道數據暫存器
Clear、red、green、blue為16位數據。為了確保數據被正確讀取,一個兩位元組的read IIC事務應該在命令暫存器中設置一個讀字協議位。通過這個操作,當讀低位位元組暫存器時,高位8位被存儲到陰影暫存器中,然後再讀高位位元組。高位暫存器將讀取正確的值,即使是額外的值ADC集成周期結束於讀取低位暫存器和高位暫存器之間。
四、 程式實現
(一) 硬體介紹
模組原理圖
IIC的兩條通訊線一定要做上拉,所以初始化配置IO為:
SCL:上拉,推挽輸出
SDA:上拉輸入
接線:
(二) CubeMX配置
IO配置
串口配置
(三) Python介面編程
參考:
Python 遊戲之旅(Pygame)
//www.cnblogs.com/dongxiaodong/p/10015451.html
編程思路:
- 介面初始化
- 串口收到數據
- RGB三色數據提取
- 顏色更改與顯示
演示影片://www.bilibili.com/video/BV1Sv411a7qq
原文地址://www.cnblogs.com/dongxiaodong/p/14402521.html