Служба гарячої лінії
Посібник користувача для демонстраційної плати цифрової інфрачервоної термобатареї SL-W-TRS-5.5Dx
SLKOR це високотехнологічне підприємство, яке об’єднує дизайн, розробку, виробництво та продаж електронних продуктів. Він надає клієнтам надійні продукти та відповідні технічні послуги. Бренд "SLKOR" поступово перетворився на всесвітньо відомий, пропонуючи продукти та рішення більш ніж 10,000 XNUMX клієнтів у всьому світі.
Прагнучи надати клієнтам повний спектр додаткових продуктів, SLKOR випустила серію посібників користувача для демонстраційних плат цифрових інфрачервоних термобатарей безконтактного вимірювання температури.
1.1 Ім'я: Посібник користувача для SLKOR Демонстраційна дошка для безконтактного вимірювання температури на цифровій інфрачервоній термобатареї
Програми 1.2: Розумні переносні пристрої, смартфони, промисловий моніторинг температури, безконтактне вимірювання температури поверхні людського тіла, інтелектуальне вимірювання температури та контроль та інші малогабаритні пристрої для вимірювання температури на короткій відстані.
1.3 Демонстраційна плата серії SL-W-TRS-5.5Dx:
Використовується для оцінки та тестування різних типів датчиків. Результати вимірювання відображатимуться на екрані та можуть бути надруковані в програмному забезпеченні для налагодження послідовного порту на ПК через USB-порт. Опис кнопки: Ліва кнопка призначена для скидання, а права кнопка може керувати запуском і паузою програми.
2. Апаратна конструкція серії SL-W-TRS-5.5Dx
Виводи мікросхеми містять джерело живлення та шину I2C, загалом 4 контакти. Допустимий діапазон напруги живлення 2.3 - 3.6В. Сам датчик має дуже низьке енергоспоживання. Досить конденсатора 0.1 мкФ між землею джерела живлення. Якщо датчик знаходиться відносно далеко від джерела живлення, можна розглянути додатковий конденсатор 10 мкФ для забезпечення стабільного живлення та зменшення шуму.
3. Опис демонстраційної плати серії SL-W-TRS-5.5Dx
3.1 Демо-плата живиться від роз’єму Type-C, а напруга живлення демонстраційної плати становить 5 В. Під час використання підключіть демонстраційну плату до ПК через Type-C, а потім ви зможете переглянути результати на екрані. Якщо вам потрібно відображати дані через послідовний порт, вам потрібно встановити програму драйвера WCH CH340, а потім використовувати програмне забезпечення для налагодження послідовного порту для роботи. Параметри зв’язку через послідовний порт такі: Швидкість передачі даних: 9600, біти даних: 8, стопові біти: 1, без перевірки парності.
3.2 Відображення на екрані демонстраційної плати зверху вниз виглядає наступним чином: температура навколишнього середовища (tamb), вихідна напруга датчика (vtp_cor), температура об’єкта (поверхні) (tobj) і температура тіла людини (tbdy). Одиницею наведених вище значень температури є °С, а одиницею напруги є мкВ. Серед них перші три значення є оригінальними виходами пристрою. Значення температури тіла розраховується на основі початкових значень за допомогою алгоритму нашої компанії і є лише довідковим. Користувачі можуть обробляти дані за допомогою власних алгоритмів температури тіла відповідно до своїх потреб.
Ефект відображення послідовного порту
2. Приклад програми демонстраційної плати серії SL-W-TRS-5.5Dx
////////////////////////////////////////////////// ////////////////////////////////////////////////// //
// main.c
//////
#define ДЛЯ_КЛІЄНТА
#ifdef ДЛЯ_КЛІЄНТА
#include "drv_uart.h"
#include "drv_i2c.h"
#include "drv_key.h"
#include "oled/oled.h"
#include "trs55d.h"
зовнішній недійсний оновлення SystemCoreClock(недійсний);
extern void delay_ms(int cnt);
int main (недійсний)
{
ключ uint8_t;
uint8_t run = 0x01;
ОновленняСистемногоЯдраГодинника();
якщо (SysTick_Config(SystemCoreClock / 1000))
поки (1);
uartInit();
drv_i2c_init();
drv_key_init();
OLED_Init();
OLED_Refresh();
OLED_Clear();
OLED_ShowString(8,0,"Tamb:",16,1);
OLED_ShowString(8,16,"Vtp:",16,1);
OLED_ShowChinese(8,32,0,16,1);
OLED_ShowChinese(24,32,2,16,1);
OLED_ShowChinese(40,32,3,16,1);
OLED_ShowChinese(8,48,1,16,1);
OLED_ShowChinese(24,48,2,16,1);
OLED_ShowChinese(40,48,3,16,1);
OLED_Refresh();
uartSendString("SL-W-Демо-програма TRS-5.5Dx");
while(1) {
ключ = drv_key_read();
while(drv_key_read());
якщо (ключ) {
біг = (біг)?0:1;
}
якщо (запустити) {
TRS55D_read();
OLED_Refresh();
}
delay_ms(20);
}
}
////////////////////////////////////////////////// ////////////////////////////////////////////////// //
//trs55d.h
//////
#ifndef _TRS55D_H_
#define _TRS55D_H_
#включати
#define TRS55D_NORMAL_Tobj_MSB_R 0x10
#define TRS55D_NORMAL_Tobj_CSB_R 0x11
#define TRS55D_NORMAL_Tobj_LSB_R 0x12
#define TRS55D_NORMAL_TEMP_MSB_R 0x16
#define TRS55D_NORMAL_TEMP_CSB_R 0x17
#define TRS55D_NORMAL_TEMP_LSB_R 0x18
#define TRS55D_NORMAL_DATA1_MSB_R 0x19
#define TRS55D_NORMAL_DATA1_CSB_R 0x1A
#define TRS55D_NORMAL_DATA1_LSB_R 0x1B
#define TRS55D_NORMAL_DATA2_MSB_R 0x1C
#define TRS55D_NORMAL_DATA2_CSB_R 0x1D
#define TRS55D_NORMAL_DATA2_LSB_R 0x1E
#define TRS55D_RAW_DATA1_MSB_R 0x22
#define TRS55D_RAW_DATA1_CSB_R 0x23
#define TRS55D_RAW_DATA1_LSB_R 0x24
#define TRS55D_RAW_DATA2_MSB_R 0x25
#define TRS55D_RAW_DATA2_CSB_R 0x26
#define TRS55D_RAW_DATA2_LSB_R 0x27
#define TRS55D_RAW_TEMP_MSB_R 0x28
#define TRS55D_RAW_TEMP_CSB_R 0x29
#define TRS55D_RAW_TEMP_LSB_R 0x2A
#define ADDR_TRS55D 0xFE //(0x7F << 1)
#define _STATUS_DRDY_ 0x01 void TRS55D_read(void);
#endif
////////////////////////////////////////////////// ////////////////////////////////////////////////// //
// trs55d.c
//////
#включати
#include "drv_i2c.h"
#include "trs55d.h"
#include "body_temp.h"
extern 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);
extern 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 ret;
uint8_t ackflag;
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
drv_i2c_writebyte(addr_reg);
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPRD);
for(i = 0; i < count; i ++) { ackflag = (i < (count-1)) ? 1:0; баф[я]
= drv_i2c_readbyte(ackflag);
}
drv_i2c_stop();
повернення ret;
}
void TRS55D_IIC_Write(uint8_t addr_dev, uint8_t addr_reg, uint8_t *buf, uint16_t count)
{
uint16_t i = 0;
drv_i2c_start();
drv_i2c_select_dev(addr_dev,DRV_I2C_OPWR);
drv_i2c_writebyte(addr_reg);
для (i = 0; i < кількість; i ++)
{ drv_i2c_writebyte(buf[i]);
}
drv_i2c_stop();
}
об'єднання typedef{
int16_t i16;
uint16_t u16;
struct {
uint8_t u8l;
uint8_t u8h;
}un;
}uu16_t;
об'єднання typedef{
int32_t i32;
struct {
uint8_t u8b0;
uint8_t u8b1;
uint8_t u8b2;
uint8_t u8b3;
}un;
}uu32_t;
static char buffer [264];
uu32_t tobj, tamb_cal;
uu32_t vtp_cor;
float vtp_uv_f = 0.0;
float vtp_cor_f = 0.0;
float tambf = 0.0; float tobjf = 0.0;
float tbdyf = 0.0;
void TRS55D_read(void)
{
uint8_t rbuf[4];
uint8_t raddr,rdat;
uint8_t waddr = 0x0, wdat = 0x0;
int timeout=0;
waddr = 0x30;
wdat = 0x09;
TRS55D_IIC_Write(ADDR_TRS55D, waddr, &wdat,1);
//запуск перетворення delay_ms(100);
// чекати завершення перетворення
raddr = 0x03;
робити {
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
} while(((rdat == 0xFF) || (!(rdat & 0x30))) && timeout++ < 200);
raddr = 0x02;
робити {
TRS55D_IIC_Read (ADDR_TRS55D, raddr, &rdat,1);
} while(((rdat == 0xFF) || (!(rdat & 0x0B))) && timeout++ < 200);
// значення напруги після калібрування
raddr = TRS55D_NORMAL_DATA1_MSB_R;
TRS55D_IIC_Read (ADDR_TRS55D, raddr,&rbuf[0],3);
vtp_cor.un.u8b2 = rbuf[0];
vtp_cor.un.u8b1 = rbuf[1];
vtp_cor.un.u8b0 =rbuf[2];
if (vtp_cor.un.u8b2 & 0x80) { vtp_cor.un.u8b3 = 0xFF;
} ще {
vtp_cor.un.u8b3 = 0x00;
// vtp після виправлення
}
vtp_cor_f = (float)vtp_cor.i32/524288.0;
vtp_cor_f *= 1000;
// значення температури навколишнього середовища після калібрування
raddr = 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
float 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); // Tbdy
}


粤公网安备44030002007346号