huchunlei 发表于 2020-4-8 20:33:10

无源湿度传感器(基于RFID)的实现方案求指导

去年年底接了一个 无源温湿度传感器 的项目,结果没想到遇到疫情,耽误了很久, 最近开始弄了,发现存在太多问题,发出来,看看谁了解,指点一下。

项目要实现的功能是:在一个被测容器(非金属)内壁 放置一个 RFID智能传感器,需要的时候,使用读卡器在容器外面读取这个智能传感器,获取湿度,并通过4G上传至服务器。

我的项目规划,硬件部分主要分3块:1)RFID智能传感器2)读卡器3)人机操作界面和通信板

RFID智能传感器准备采用的方案是:使用单片机RF430FRL152H + 温湿度传感器SHTC3 来实现

读卡器部分准备使用现成的读卡器芯片来实现,比如PN5180,在加一片STM32转换成 串口或者485

人机操作界面和通信板 准备采用STM32+TFT+4G模块来实现

现在的问题是:RFID 部分,调不出来。 买了一块 RF430FRL152H 开发板(上面有温度传感器),使用 TI的DEMO版读卡器,可以读取,但是通信协议未知, 所以我买了 成品的读卡器,完全无法识别传感器,RF430FRL152H 说支持15693协议,读卡器使用 15693协议无法识别传感器, 不知道是哪里的问题了。

不知道有人用过 RF430FRL152H 没有? 指导一下,或者有没有更好的方案 实现 无源的湿度传感器?    或者我把 RFID智能传感器 和 读卡器 部分外包出来, 不知道谁有兴趣做?

wanggoals 发表于 2020-4-8 20:48:33

1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单的,找个单片机发送125K载波,模拟搭个简易接收通道回单片机解码,容器内用个低功耗单片机模拟IC卡,顺便把温湿度采集了。
2、其实你需要的也许只是无线感应供电+短距离无线通讯。

hhxb 发表于 2020-4-8 21:07:10

你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless connectivity and IoT applications”,里面一个应用跟你的要求一样的,用的一样的芯片和读卡器

tage 发表于 2020-4-8 21:35:50

你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。

huchunlei 发表于 2020-4-9 01:12:38

wanggoals 发表于 2020-4-8 20:48
1、如果没有要求必须标准射频卡协议,你可以自己做个简单点的自定义协议,125K载波实现起来应该是比较简单 ...

这个方案考虑过,但是毕竟对射频不太熟悉,更别提还要自己做射频模拟部分了,也缺少相应的仪表。 同时自己实现起来感觉集成度不高,传感器做起来可能比较大, 后来就选了带NFC的单片机

huchunlei 发表于 2020-4-9 01:13:44

hhxb 发表于 2020-4-8 21:07
你看下这篇文章“Sustainable production of highly conductive multilayer graphene ink for wireless con ...

看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。

huchunlei 发表于 2020-4-9 01:20:22

本帖最后由 huchunlei 于 2020-4-9 01:22 编辑

tage 发表于 2020-4-8 21:35
你试验的时候开发板上是不是没装电池?你开发板上面安装电池你在用读卡器试验一下。 ...

装了电池也是一样的, 也是读不出来。TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本上也是 寻卡、选卡、配置传感器、读取。   

但是我买的成品读卡器,寻卡阶段就是失败,更别提后续的操作了。 TI的 TRF7970A 装不装电池,都能寻卡成功。

难道是我的读卡器不兼容这个传感器? 能帮我看下吗?读卡器支持的15693的卡如下,选那个都读不到。而且把传感器开发板放到读卡器上面后,测开发板各处电压都是对的。


感觉您用过这个开发板,能推荐一款能兼容的读卡器吗?

hhxb 发表于 2020-4-9 08:54:43

huchunlei 发表于 2020-4-9 01:13
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。 ...

这是文章里用的matlab程序,我朋友写的,读卡器用TRF7970,测试可以使用, 你试试吧。

Supplementary Note 2: Temperature monitoring system program.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Kewen Pan
%TRF7970A EVM testing program for tag2
%6/May/2016
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc;%Clear
i=1;
j=0;
buffer=zeros(1,50);
delay_time=0.01;

dev_name = 'Silicon Labs CP210x USB to UART Bridge';
[~,res]=system('wmic path Win32_SerialPort');
ind = strfind(res,dev_name);
if (~isempty(ind))
    port_name = res(ind(1)+length(dev_name)+2:ind(1)+length(dev_name)+5);   
    fprintf('COM-port is %s\n',port_name);
    try
         
      s = serial(port_name);
      set(s,'BaudRate', 111700,'DataBits',8,'StopBits',1,'Parity','none','FlowControl','none','terminator','ETX' );
      
      s.ReadAsyncMode='continuous';
      s.Timeout=0.02
      s.InputBufferSize = 1024;
      
      s.OutputBufferSize = 1024;
      
      fopen(s);
      fprintf('%s is opened\n',port_name);
    catch err
      fprintf('%s\n%s\n',err.identifier,err.message);
    end
else
    fprintf('COM-port is not find\n');
end


fprintf(port_name);
fprintf(' serial port open success!');
pause(1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%s.status   %Serial port status check
%instrfind%Specification
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0108000304FF0000');%find evm broad
data=fscanf(s);
if strcmp(data(1),'T');
    fprintf('found TRF7970A\r');
   % pause(delay_time);
else
    fprintf('cannot found TRF7970A\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010A0003041001210000');%register write request1
data=fscanf(s);
if strcmp(data(1),'R');
    fprintf('register1 write success\r');
   % pause(delay_time);
else
    fprintf('register write error1\r');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','010C00030410002101000000');%register write request2
data=fscanf(s);
if strcmp(data(1),'R');
    fprintf('register2 write success\r');
%pause(delay_time);
else
    fprintf('register write error2\r');
end   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0109000304F0000000');%AGC Toggle
data=fscanf(s);
if strcmp(data(1),'A');
    fprintf('AGC toggle success\r');
%pause(delay_time);
else
    fprintf('AGC Toggle error\r');
end   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fprintf(s,'%s','0109000304F1FF0000');%AM PM Toggle
data=fscanf(s);
if strcmp(data(1),'A');
    fprintf('AM PM Toggle success\r');
%   pause(delay_time);
else
    fprintf('AM PM Toggle error\r');
end
while 1
   
    while 1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      set(s,'terminator','ETX' );
      fprintf(s,'%s','010B000304140401000000');%ISO15693 Inventory Request
      data=fscanf(s);
      if length(data)<35;
            fprintf('ISO15693 Inventory Request error\r');
      else
            fprintf('ISO15693 Inventory Request success\r');
            %   pause(delay_time);
            fprintf(data);
            break;
      end   
    end
%%%%%%%%%%%%%%%%%Basic configuration success%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%Write functional register%%%%%%%%%%%%%%%%%%%%
      fprintf(s,'%s','010F00030418402100010203800000');%Reg 00
      data=fscanf(s);
      d=data(17);
      if strcmp(data(17),']');
         fprintf('Reset failed\r');
         fprintf('Tag disconnected\r');
         %buffer=zeros(1,50);
         break;
      end   

    fprintf(s,'%s','010F00030418402100010203000000');%Reg 00
    data=fscanf(s);
    if strcmp(data(1),'R');
      fprintf('Reg00\r');
      fprintf(data,'\r');
    %    pause(delay_time);
      fprintf(data);
    else
      fprintf('Write reg 00 failed\r');
    end   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    fprintf(s,'%s','010F00030418402101010100400000');%Reg01
    data=fscanf(s);
    if strcmp(data(1),'R');
      fprintf('Reg01\r');
      fprintf(data,'\r');
    %   pause(delay_time);
      fprintf(data);
    else
      fprintf('Write reg 01 failed\r');
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    fprintf(s,'%s','010F00030418402102000000000000');%Reg02
    data=fscanf(s);
    if strcmp(data(1),'R');
      fprintf('Reg02\r');
      fprintf(data,'\r');
    %   pause(delay_time);
      fprintf(data);
    else
      fprintf('Write reg 02 failed\r');
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    fprintf(s,'%s','010F00030418402103000000000000');%Reg03
    data=fscanf(s);
    if strcmp(data(1),'R');
      fprintf('Reg03\r');
      fprintf(data,'\r');
    %   pause(delay_time);
      fprintf(data);
    else
      fprintf('Write reg 03 failed\r');
    end
   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    fprintf(s,'%s','010F00030418402104191919190000');%Reg04
    data=fscanf(s);
    if strcmp(data(1),'R');
      fprintf('Reg04\r');
      fprintf(data,'\r');
    %    pause(delay_time);
      fprintf(data);
    else
      fprintf('Write reg 04 failed\r');
    end
%%%%%%%%%%%%%%%%%%%%%%%Config finished%%%%%%%%%%%%%%%%%%%%%
   while 1
       set(s,'terminator',']' );
%%%%%%%%%%%%%%%%%%%%%%Start sample%%%%%%%%%%%%%%%%%%%%%%%%

   
      fprintf(s,'%s','010F00030418402100010203000000');%Reg 00
      data=fscanf(s);
         if strcmp(data(17),']');
                fprintf('Write reg 00 failed\r');
               fprintf('Tag disconnected\r');
               %buffer=zeros(1,50);
                break;
            end   
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%Start reading%%%%%%%%%%%%%%%%%%%%%%%%
    fprintf(s,'%s','010B000304180020120000');%Read reg 0x12
    data=fscanf(s);
   if strcmp(data(19),']');
         fprintf('Read reg 0x12 failed\r');
            fprintf('Tag disconnected\r');
            
         break;
   end   

   if strcmp(data(18),'z');
         fprintf('Read reg 0x12 failed\r');
            fprintf('Tag disconnected\r');
            
         break;
   end   
   
   Stand_res=;
   Sensor_res=;

    Resistance=(hex2dec(Sensor_res)/hex2dec(Stand_res))*100;%cal sensor R
    Temp=-1.27*Resistance+203;%exp curve fitting
   if (Temp>=0)&&(Temp<=50)
    buffer=;%left shift 1 bit
    buffer(50)=Temp;%push in
    plot(buffer,'Linewidth',3);
    set(gca, 'FontWeight', 'bold', 'FontName','Calibri','FontSize',14)
    title('Graphene Based Yarn Temperature Sensor');
    ylabel('Temperature');
    xlabel('Time');
    grid on;
    drawnow;
    pause(0.5);
   %else
         
   end
end

end
fclose(s);
delete(s);
clear s
%close all;

hhxb 发表于 2020-4-9 08:59:05

huchunlei 发表于 2020-4-9 01:13
看到了,谢谢。 里面确实提到了我用的那款单片机, 其他部件不一样。也没有更多的信息。 ...

这个程序使能内部恒流源,使用内置AD进行采样,获取传感器电阻再上传回Matlab画图,你用的湿度传感器数字通讯应该简单的多。

tage 发表于 2020-4-9 10:02:46

huchunlei 发表于 2020-4-9 01:20
装了电池也是一样的, 也是读不出来。TI官网的DEMO读卡器,用的是 TRF7970A,我看了他那个代码, 基本 ...

我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为什么我也不知道了,但我建议你买其他大牌的读卡器试验下,因为有些读卡器程序的协议是删减过的,并不完全。所以有可能不兼容。

huchunlei 发表于 2020-4-9 22:33:02

hhxb 发表于 2020-4-9 08:54
这是文章里用的matlab程序,我朋友写的,读卡器用TRF7970,测试可以使用, 你试试吧。

Supplementary No ...

非常感谢, 看来得努力补一下这方面的知识了。 {:lol:}

huchunlei 发表于 2020-4-9 22:34:21

tage 发表于 2020-4-9 10:02
我没用过这款开发板,但我用430的单片机,低功耗设计是电子设计中的一类,做好并不容易,你的问题具体为 ...

谢谢, 目前已经决定 使用 TRF7970A 来做读卡器了。

EMC菜鸟 发表于 2020-4-9 22:47:34

楼主这个无源传感器,是无需供电、还是电池都不需要?

yaya001 发表于 2020-4-9 23:46:29

RF430FRL152H好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。

yaya001 发表于 2020-4-9 23:48:03

EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?

可以不用电池,电是从场里取出来的,而且还可以不光给152供电,还可以对外围设备供电的,但功耗有限制。

huchunlei 发表于 2020-4-10 10:57:48

EMC菜鸟 发表于 2020-4-9 22:47
楼主这个无源传感器,是无需供电、还是电池都不需要?

准备做成像 RFID 标签一样, 不带电池, 完全靠射频 供电和通信。

huchunlei 发表于 2020-4-10 10:59:05

yaya001 发表于 2020-4-9 23:46
RF430FRL152H好像有两种模式的,不过之前也是用TRF7970A读的。
太久了,记不清。
后来项目停了。 ...

是的, RF430FRL152H 有两种模式, 就是因为第一次接触这样的单片机,而且也是第一次做 RFID 类似的技术,所以觉得上手特别慢。

饭桶 发表于 2020-4-10 11:03:07

给楼主的建议,你这个所需的功率略大了,而且还有容器的厚壁,参照RFID不如参照无线充电的标准弄。

clesun 发表于 2020-4-10 19:37:12

有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g

huchunlei 发表于 2020-4-10 20:50:27

clesun 发表于 2020-4-10 19:37
有超高频无缘温湿度传感器,你贴到容器内,外部用读写器读,串口送到4g

哪里有卖的? 有没有渠道? 之前找了很久没有找到,只找到单纯测量温度的。 有一种NFC温湿度记录仪,但是需要电池才能工作。

RAMILE 发表于 2020-4-10 22:38:03

我刚巧做过这东西,不过是个显示用的,功耗肯定比湿度传感器大多了,还要用手机NFC驱动

用的复旦微的 NFC通道芯片,加上大电容储能,MSP430G2203做主控

again 发表于 2020-4-10 23:03:28

RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的

huchunlei 发表于 2020-4-11 23:47:04

again 发表于 2020-4-10 23:03
RF Micron (2018年公司更名为Axzon),无源无线,深圳南频国内代理,温度标签我们在用国产的 ...

谢谢提供信息,用您给的公司名作为关键字,在网上确实能搜索到一些信息, 我想办法联系一下看看 {:handshake:}

1031881482 发表于 2022-7-4 18:16:00

请问你这个RF430无源方案可出售吗?有酬

huchunlei 发表于 2022-7-8 10:38:59

1031881482 发表于 2022-7-4 18:16
请问你这个RF430无源方案可出售吗?有酬
(引用自24楼)

你是什么场景下要用?如果仅是测量温度, TI官网有个现成的Demo, PCB和程序什么的都有。

lyping1987 发表于 2022-7-9 10:05:50

无源RFID ,距离能做到多少呢?

huchunlei 发表于 2022-7-9 15:14:16

lyping1987 发表于 2022-7-9 10:05
无源RFID ,距离能做到多少呢?
(引用自26楼)

我这个当时把读取器天线做的稍微大了一些, 实测无遮挡距离7-8cm左右。跟需求不是太满足,之前需求本想做到15-20cm。

1031881482 发表于 2022-7-10 15:14:19

我需要测量外界的电阻值

1031881482 发表于 2022-7-10 15:19:13

huchunlei 发表于 2022-7-8 10:38
你是什么场景下要用?如果仅是测量温度, TI官网有个现成的Demo, PCB和程序什么的都有。 ...
(引用自25楼)

根据官网的手册,配套的RTF7970读写器已经买不到了,想咨询下有什么代替方案。需求是测量自己外接的电阻传感器。

huchunlei 发表于 2022-7-11 15:27:18

本帖最后由 huchunlei 于 2022-7-11 15:30 编辑

1031881482 发表于 2022-7-10 15:19
根据官网的手册,配套的RTF7970读写器已经买不到了,想咨询下有什么代替方案。需求是测量自己外接的电阻 ...
(引用自29楼)

你这个应用,跟TI官方的 “Battery-Less NFC_RFID Temperature Sensing Patch”比较类似。
官方这个测量温度的应用,其实也是测量外部的一个电阻阻值实现的,我把PDF传上来。


至于TRF7970 实际就是个读写器,读写器跟无线传感器的通信是基于 NFC的, 如果你能找到其他型号的兼容芯片,或者手机的NFC应该也是可以实现的。 这个项目后期停了, 我没继续深入了。

1031881482 发表于 2022-7-11 22:04:19

huchunlei 发表于 2022-7-11 15:27
你这个应用,跟TI官方的 “Battery-Less NFC_RFID Temperature Sensing Patch”比较类似。
官方这个测量 ...
(引用自30楼)

大佬能分享下RF430发送数据的ccs程序吗,官网例程有很多问题

1031881482 发表于 2022-7-17 14:43:05

你好,请问一下之前你使用的那款RF430NFC芯片是否自带ROM,无需额外编程直接通过手机APP就可以读取外接传感器的数据?谢谢
页: [1]
查看完整版本: 无源湿度传感器(基于RFID)的实现方案求指导