51uwb.cn

 找回密码
 立即注册
查看: 8987|回复: 13
打印 上一主题 下一主题

UWB DWM1000 开源项目框架 之 温度采集

[复制链接]

73

主题

249

帖子

7064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7064
跳转到指定楼层
楼主
发表于 2019-12-24 21:57:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文链接:cnblogs.com/tuzhuke/p/12077671.html
在之前博文开源一套uwb 框架,后面几篇博文会基于这个开源框架进行简单开发。 让uwb使用者更清楚了解基于这个basecode 开发工作。
这里所做内容是,采集dwm1000 温度,并发送到另一个节点,另一个节点通过串口打印,也就是这里是一个远程采集温度的工程。当然可以使用主控stm32 采集任何传感器,按照本文思路将数据打包发送到另外一个节点。
1 在tx_main.c增加温度采集函数,并做验证。
温度采集函数
  1. uint16 BPhero_UWB_Get_Temperature(void)
  2. {
  3.     uint16 register_result;
  4.     uint16  Temperature = 0;
  5.     /* Note on Temperature: the temperature value needs to be converted to give the real temperature
  6.      * the formula is: 1.13 * reading - 113.0
  7.      * Note on Voltage: the voltage value needs to be converted to give the real voltage
  8.      * the formula is: 0.0057 * reading + 2.3
  9.      * input parameters:
  10.      * @param fastSPI - set to 1 if SPI rate > than 3MHz is used
  11.      *
  12.      * output parameters
  13.      *
  14.      * returns  (temp_raw<<8)|(vbat_raw)
  15.      */
  16.     register_result = dwt_readtempvbat(1);
  17.     //Temperature = (((register_result&0xFF00)>>8)*1.13 - 113)*100;
  18.     return (register_result>>8);
  19. }
复制代码
在tx_main 函数读取温度信息,验证可以正确采集到温度信息。tx_main 验证代码如下:
  1. int tx_main(void)
  2. {
  3.     bphero_setcallbacks(Tx_Simple_Rx_Callback);<br>    char temp_result[5];
  4.     int temp = 0 ;
  5.     /* Infinite loop */
  6.     dwt_enableframefilter(DWT_FF_DATA_EN);
  7.     dwt_rxenable(0);
  8.     while(1)
  9.     {
  10.        // BPhero_Distance_Measure_Specail_TAG();

  11.             Delay_us(10000);//5ms
  12.             Delay_us(10000);//5ms
  13.                  
  14.             temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
  15.             temp_result[0] = (temp/100)+0x30;
  16.             temp_result[1] = (temp%100/10)+0x30;
  17.             temp_result[2] = (temp%10)+0x30;

  18.             temp_result[3]='\n';temp_result[4]='\0';
  19.             USART1DispFun(temp_result);
  20.     }
  21. }
复制代码
 主要是读取温度,并将温度百十个位分开并发送到串口显示。 tx_main 函数相对之前basecode,除了读取温度函数以外,在while(1) Enable RX,在while(1)内注释掉发送代码,这样做主要是,rx 功耗较大,可以明显看到温度变化。实际后面会回复原样。
编译下载后,串口收到温度信息:
可以看到使能接收的时候,dwm1000的文档可以稳定在53度左右,使用热风枪加热,温度会更高。
2 以上测试已经完成,开始修改tx_main,将发送的数据放到tx_message中。
A  tx_main函数恢复原样,里面只保留调用发送函数,与basecode一致
  1. int tx_main(void)
  2. {
  3.     bphero_setcallbacks(Tx_Simple_Rx_Callback);
  4.     while(1)
  5.     {
  6.       BPhero_Distance_Measure_Specail_TAG();   
  7.     }
  8. }
复制代码
B 在发送message 中把温度信息打包进去 
  1. void BPhero_Distance_Measure_Specail_TAG(void)
  2. {
  3.     int temp = 0 ;
  4.     // dest address  = SHORT_ADDR+1,only for test!!
  5.     msg_f_send.destAddr[0] =(SHORT_ADDR+1) &0xFF;
  6.     msg_f_send.destAddr[1] =  ((SHORT_ADDR+1)>>8) &0xFF;

  7.     /* Write all timestamps in the final message. See NOTE 10 below. */
  8.     final_msg_set_ts(&msg_f_send.messageData[FIRST_TX],  tx_node[(SHORT_ADDR+1) &0xFF].tx_ts[0] );
  9.     final_msg_set_ts(&msg_f_send.messageData[FIRST_RX],  tx_node[(SHORT_ADDR+1) &0xFF].rx_ts[0] );

  10.     msg_f_send.seqNum = distance_seqnum;
  11.     msg_f_send.messageData[0]='D';
  12.     msg_f_send.messageData[1]=(SHORT_ADDR+1) &0xFF;
  13.      
  14.     temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
  15.     msg_f_send.messageData[2]=(temp/100)+0x30;
  16.     msg_f_send.messageData[3]=(temp%100/10)+0x30;
  17.     msg_f_send.messageData[4]=(temp%10)+0x30;
复制代码
可以看到与之前basecode 相比,在messageData[2'3'4] 把温度信息打包了,只需要在rx阶段,同样读取messageData[2'3'4] 即可。
注意 psduLength 这个长度,不要小于要发送的数据长度,不然会收不全数据。
  1. dwt_writetxdata(psduLength, (uint8 *)&msg_f_send, 0) ;
复制代码
C rx_main.c 读取同样读取messageData[2'3'4]
  1. switch(msg_f->messageData[0])
  2. {
  3.     case 'D'://distance
  4.         msg_f_send.messageData[0]='d';
  5.         msg_f_send.messageData[1]=msg_f->messageData[1];

  6.         temp_result[0] = msg_f->messageData[2];
  7.         temp_result[1] = msg_f->messageData[3];
  8.         temp_result[2] = msg_f->messageData[4];
  9.         temp_result[3] = '\n';
  10.         temp_result[4] = '\0';
  11.         temp_result[5] = 1; 
复制代码
其中temp_result[5] 为接收成功标志位,当接收成功后将其置位1,while(1)中根据这个,将temp_result 打印出来
  1. while (1)
  2.     {
  3.         if(temp_result[5] ==1)
  4.         {
  5.             USART1DispFun(temp_result);
  6.             temp_result[5] = 0;
  7.         }
  8.     }
复制代码


回复

使用道具 举报

0

主题

5

帖子

9

积分

新手上路

Rank: 1

积分
9
沙发
发表于 2020-3-1 23:21:31 | 只看该作者
楼主没有再继续做下去了吗?
回复

使用道具 举报

73

主题

249

帖子

7064

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7064
板凳
 楼主| 发表于 2020-3-2 10:56:36 | 只看该作者
lkdsp 发表于 2020-3-1 23:21
楼主没有再继续做下去了吗?

下一步是依据这个帖子
http://51uwb.cn/forum.php?mod=vi ... &extra=page%3D1
做测距。
4月左右,会依据这个框架出TDOA开源,感谢关注
回复

使用道具 举报

0

主题

5

帖子

7

积分

新手上路

Rank: 1

积分
7
地板
发表于 2020-4-23 13:34:32 | 只看该作者
期待楼主更新。。
回复

使用道具 举报

0

主题

13

帖子

26

积分

新手上路

Rank: 1

积分
26
5#
发表于 2020-4-26 10:54:37 | 只看该作者
期待楼主更新。。
回复

使用道具 举报

0

主题

45

帖子

48

积分

新手上路

Rank: 1

积分
48
6#
发表于 2021-9-29 08:52:21 | 只看该作者
期待楼主,赞一个
回复

使用道具 举报

0

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
7#
发表于 2022-2-24 15:10:09 | 只看该作者

分享学习,不错
回复

使用道具 举报

0

主题

12

帖子

18

积分

新手上路

Rank: 1

积分
18
8#
发表于 2022-3-4 15:51:18 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

0

主题

8

帖子

18

积分

新手上路

Rank: 1

积分
18
9#
发表于 2022-4-25 11:10:35 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

0

主题

12

帖子

34

积分

官方会员

Rank: 8Rank: 8

积分
34
10#
发表于 2023-10-8 18:11:21 | 只看该作者
这是把DW1000芯片作为普通射频通信模组使用对吗?类似2.4g蓝牙芯片,通过无线传输数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-11-22 10:03 , Processed in 0.041815 second(s), 5 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表