サービスホットライン
SL-W-TRS-5.5Dx デジタル赤外線サーモパイル デモ ボードのユーザー マニュアル
SLKOR は、電子製品の設計、開発、生産、販売を一体化したハイテク企業です。お客様に信頼性の高い製品とそれに応じた技術サービスを提供しています。ブランド「SLKOR「は徐々に国際的に有名な企業へと成長し、世界中の10,000社を超える顧客に製品とソリューションを提供しています。
お客様に幅広い補完製品をご提供できるよう努める中で、 SLKOR デジタル赤外線サーモパイル非接触温度測定アプリケーション設計のデモボード用のユーザーマニュアルシリーズをリリースしました。
1.1名前: ユーザーマニュアル SLKOR デジタル赤外線サーモパイル非接触温度測定アプリケーション設計デモボード
1.2アプリケーション: スマートウェアラブルデバイス、スマートフォン、産業用温度監視、非接触人体表面温度測定、インテリジェント温度感知および制御、およびその他の短距離温度測定用の小型デバイス。
1.3 SL-W-TRS-5.5Dxシリーズデモボード:
さまざまなタイプのセンサーの評価とテストに使用されます。測定結果は画面に表示され、USB からシリアル ポート経由で PC のシリアル ポート デバッグ ソフトウェアに印刷できます。ボタンの説明: 左のボタンはリセット用で、右のボタンはプログラムの開始と一時停止を制御できます。
2. SL-W-TRS-5.5Dxシリーズのハードウェア設計
チップピンには電源とI2Cバスが含まれ、合計4ピンです。電源電圧の許容範囲は2.3〜3.6Vです。センサー自体の消費電力は非常に低く、電源グランド間の0.1uFコンデンサで十分です。センサーが電源部から比較的遠い場合は、安定した電源を確保し、ノイズを減らすために、10uFコンデンサを追加で検討できます。
3. SL-W-TRS-5.5Dxシリーズデモボードの説明
3.1 デモボードは Type-C ソケットから電源を供給され、デモボードの電源電圧は 5V です。使用時には、デモボードを Type-C 経由で PC に接続すると、画面に結果が表示されます。シリアルポート経由でデータを表示する必要がある場合は、WCH CH340 ドライバープログラムをインストールしてから、シリアルポートデバッグソフトウェアを使用して操作する必要があります。シリアルポートの通信設定は次のとおりです。ボーレート: 9600、データビット: 8、ストップビット: 1、パリティチェックなし。
3.2 デモボードの画面表示は上から下に向かって、周囲温度(tamb)、センサー出力電圧(vtp_cor)、物体(表面)温度(tobj)、人体温度(tbdy)です。上記の温度値の単位は°C、電圧の単位はμVです。このうち、最初のXNUMXつの値はデバイスの元の出力です。体温値は、当社のアルゴリズムを使用して元の値に基づいて計算されており、参考値です。ユーザーは、必要に応じて独自の体温アルゴリズムを使用してデータを処理できます。
シリアルポートの表示効果
2。 SL-W-TRS-5.5Dxシリーズのデモボードプログラム例
//////////////////////////////////////////////// //////////////////////////////////////////////// //
// メイン.c
//////
#FOR_CUSTOMER を定義します
#ifdef FOR_CUSTOMER
#include "drv_uart.h"
#include "drv_i2c.h"
#include "drv_key.h"
#include "oled/oled.h"
#include "trs55d.h"
外部 void SystemCoreClockupdate(void);
外部void delay_ms(int cnt);
int main(void)
{
uint8_t キー;
uint8_t 実行 = 0x01;
システムコアクロック更新();
SysTick_Config(SystemCoreClock / 1000)の場合
一方で(1);
uartInit();
drv_i2c_init();
drv_key_init();
OLED_Init();
OLED_リフレッシュ();
OLED_クリア();
OLED_ShowString(8,0,"Tamb:",16,1);
OLED_ShowString(8,16,"Vtp:",16,1);
OLED_Show Chinese(8,32,0,16,1);
OLED_Show Chinese(24,32,2,16,1);
OLED_Show Chinese(40,32,3,16,1);
OLED_Show Chinese(8,48,1,16,1);
OLED_Show Chinese(24,48,2,16,1);
OLED_Show Chinese(40,48,3,16,1);
OLED_リフレッシュ();
uartSendString("SL-W-TRS-5.5Dx デモプログラム ");
(1) の間 {
キー = drv_key_read();
drv_key_read() が呼び出される間、
if (キー) {
実行 = (実行)?0:1;
}
if (実行) {
TRS55D_読み取り();
OLED_リフレッシュ();
}
遅延_ms(20);
}
}
//////////////////////////////////////////////// //////////////////////////////////////////////// //
//trs55d.h
//////
#ifndef _TRS55D_H_
#define _TRS55D_H_
#include
#TRS55D_NORMAL_Tobj_MSB_R 0x10 を定義します
#TRS55D_NORMAL_Tobj_CSB_R 0x11 を定義します
#TRS55D_NORMAL_Tobj_LSB_R 0x12 を定義します
#TRS55D_NORMAL_TEMP_MSB_R 0x16 を定義します
#TRS55D_NORMAL_TEMP_CSB_R 0x17 を定義します
#TRS55D_NORMAL_TEMP_LSB_R 0x18 を定義します
#TRS55D_NORMAL_DATA1_MSB_R 0x19 を定義します
#TRS55D_NORMAL_DATA1_CSB_R 0x1A を定義します
#TRS55D_NORMAL_DATA1_LSB_R 0x1B を定義します
#TRS55D_NORMAL_DATA2_MSB_R 0x1C を定義します
#TRS55D_NORMAL_DATA2_CSB_R 0x1D を定義します
#TRS55D_NORMAL_DATA2_LSB_R 0x1E を定義します
#TRS55D_RAW_DATA1_MSB_R 0x22 を定義します
#TRS55D_RAW_DATA1_CSB_R 0x23 を定義します
#TRS55D_RAW_DATA1_LSB_R 0x24 を定義します
#TRS55D_RAW_DATA2_MSB_R 0x25 を定義します
#TRS55D_RAW_DATA2_CSB_R 0x26 を定義します
#TRS55D_RAW_DATA2_LSB_R 0x27 を定義します
#TRS55D_RAW_TEMP_MSB_R 0x28 を定義します
#TRS55D_RAW_TEMP_CSB_R 0x29 を定義します
#TRS55D_RAW_TEMP_LSB_R 0x2A を定義します
#ADDR_TRS55D 0xFE を定義します //(0x7F << 1)
#define _STATUS_DRDY_ 0x01 void TRS55D_read(void);
#endif
//////////////////////////////////////////////// //////////////////////////////////////////////// //
// trs55d.c
//////
#include
#include "drv_i2c.h"
#include "trs55d.h"
#include "body_temp.h"
外部 uint8_t uartSendString(const char* buf);
extern void OLED_ShowString(uint8_t x、uint8_t y、const char *chr、uint8_t size1、uint8_t mode);
外部void OLED_ShowBNum(uint8_t x,uint8_t y,float num,uint8_t len,
uint8_t サイズ2、uint8_t モード); uint8_t TRS55D_IIC_Read(uint8_t addr_dev、uint8_t addr_reg、
uint8_t *buf、uint16_t カウント)
{
uint8_t 戻り値:
uint8_t 確認フラグ;
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(アドレスdev、DRV_I2C_OPWR);
drv_i2c_writebyte(アドレスレジスタ);
drv_i2c_start();
drv_i2c_select_dev(アドレスdev、DRV_I2C_OPRD);
for(i = 0; i < count; i ++) { ackflag = (i < (count-1)) ? 1:0; buf[i]
= drv_i2c_readbyte(ackフラグ);
}
drv_i2c_stop();
ret を返します。
}
void TRS55D_IIC_Write(uint8_t addr_dev、uint8_t addr_reg、uint8_t *buf、uint16_t カウント)
{
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(アドレスdev、DRV_I2C_OPWR);
drv_i2c_writebyte(アドレスレジスタ);
(i = 0; i < count; i ++) の場合
drv_i2c_writebyte(buf[i]);
}
drv_i2c_stop();
}
typedef 共用体{
int16_t i16;
u16_t u16; 整数。
構造体 {
uint8_t u8l;
uint8_t u8h;
}国連;
}uu16_t;
typedef 共用体{
int32_t i32;
構造体 {
uint8_t u8b0;
uint8_t u8b1;
uint8_t u8b2;
uint8_t u8b3;
}国連;
}uu32_t;
静的charバッファ[264];
uu32_t tobj、tamb_cal;
uu32_t vtp_cor;
浮動小数点vtp_uv_f = 0.0;
浮動小数点vtp_cor_f = 0.0;
浮動小数点数 tambf = 0.0; 浮動小数点数 tobjf = 0.0;
浮動小数点tbdyf = 0.0;
void TRS55D_read(void)
{
uint8_t rbuf[4];
uint8_t raddr、rdat;
uint8_t waddr = 0x0、wdat = 0x0;
タイムアウト=0;
ワッドアドレス = 0x30;
WDAT = 0x09;
TRS55D_IIC_Write(ADDR_TRS55D、waddr、&wdat、1);
//変換開始delay_ms(100);
// 変換が完了するまで待機
ラッド = 0x03;
する
TRS55D_IIC_読み取り (ADDR_TRS55D、raddr、&rdat、1);
} while(((rdat == 0xFF) || (!(rdat & 0x30))) && timeout++ < 200);
ラッド = 0x02;
する
TRS55D_IIC_読み取り (ADDR_TRS55D、raddr、&rdat、1);
} while(((rdat == 0xFF) || (!(rdat & 0x0B))) && タイムアウト++ < 200);
// キャリブレーション後の電圧値
ラジアン = TRS55D_NORMAL_DATA1_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D, raddr,&rbuf[0],3);
rbuf[8] をオーバーライドします。
rbuf[8] をオーバーライドします。
vtp_cor.un.u8b0 =rbuf[2];
vtp_cor.un.u8b2 と 0x80 の場合 { vtp_cor.un.u8b3 = 0xFF;
}そうしないと {
u8b3 = 0x00; です。
// 修正後のvtp
}
vtp_cor_f = (float)vtp_cor.i32/524288.0;
1000 を超えると、
// キャリブレーション後の周囲温度値
ラジアン = TRS55D_NORMAL_TEMP_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
tamb_cal.un.u8b2 = rbuf[0];
tamb_cal.un.u8b1 =rbuf[1];
tamb_cal.un.u8b0 =rbuf[2];
tambf = (float)tamb_cal.i32 / 16384.0; // 周囲温度
// キャリブレーション後の物体(表面)温度
raddr = TRS55D_NORMAL_Tobj_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D,raddr,&rbuf[0],3);
tobj.un.u8b2 = rbuf[0]; tobj.un.u8b1 = rbuf[1];
tobj.un.u8b0 =rbuf[2]; tobjf = (float)tobj.i32 / 16384.0;
// 物体(表面)温度
// 体温を取得
tbdyf = get_body_temp(tambf,tobjf); // 体の温度を取得
// uart に表示 sprintf(buffer, "tamb = %.2f, vtp_cor = %.2f, tobj = %.2f, tbdy = %.2f ", tambf, vtp_cor_f, tobjf, tbdyf); uartSendString(buffer);
// OLED に表示する
浮動小数点vals[4] = {tambf、vtp_cor_f、tobjf、tbdyf+0.05};
OLED_ShowBNum (64, 0, vals[0], 4, 16, 1); // タンブ
OLED_ShowBNum (48, 16, vals[1], 6, 16, 1); // vtp
OLED_ShowString(112,16, "uv",16, 1);
OLED_ShowBNum (64, 32, vals[2], 4, 16, 1); // Tobj
OLED_ShowBNum (64, 48, vals[3], 4, 16, 1); // 未定
}




粤公网安备44030002007346号