【情人節選帽子】TCS34725顏色傳感器和Python圖形界面編程(STM32 HAL庫)

截圖 

 

描述:

l  STM32 HAL庫編程

l  使用模擬IIC通信,方便程序移植

l  Python界面編寫,蘑菇頭的帽子是什麼顏色

l  STM32 HAL庫串口通信

l  Python界面使用Pygame

 

視頻演示地址:https://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)

https://www.cnblogs.com/dongxiaodong/p/10015451.html

 

編程思路:

  1. 界面初始化
  2. 串口收到數據
  3. RGB三色數據提取
  4. 顏色更改與顯示

 


 

 

演示視頻:https://www.bilibili.com/video/BV1Sv411a7qq

 

原文地址:https://www.cnblogs.com/dongxiaodong/p/14402521.html

 

 


 

五、 我的微信

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章