tuzhuke 发表于 2019-12-24 21:57:47

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

原文链接:cnblogs.com/tuzhuke/p/12077671.html在之前博文开源一套uwb 框架,后面几篇博文会基于这个开源框架进行简单开发。 让uwb使用者更清楚了解基于这个basecode 开发工作。这里所做内容是,采集dwm1000 温度,并发送到另一个节点,另一个节点通过串口打印,也就是这里是一个远程采集温度的工程。当然可以使用主控stm32 采集任何传感器,按照本文思路将数据打包发送到另外一个节点。1 在tx_main.c增加温度采集函数,并做验证。温度采集函数uint16 BPhero_UWB_Get_Temperature(void)
{
    uint16 register_result;
    uint16Temperature = 0;
    /* Note on Temperature: the temperature value needs to be converted to give the real temperature
   * the formula is: 1.13 * reading - 113.0
   * Note on Voltage: the voltage value needs to be converted to give the real voltage
   * the formula is: 0.0057 * reading + 2.3
   * input parameters:
   * @param fastSPI - set to 1 if SPI rate > than 3MHz is used
   *
   * output parameters
   *
   * returns(temp_raw<<8)|(vbat_raw)
   */
    register_result = dwt_readtempvbat(1);
    //Temperature = (((register_result&0xFF00)>>8)*1.13 - 113)*100;
    return (register_result>>8);
}在tx_main 函数读取温度信息,验证可以正确采集到温度信息。tx_main 验证代码如下:int tx_main(void)
{
    bphero_setcallbacks(Tx_Simple_Rx_Callback);<br>    char temp_result;
    int temp = 0 ;
    /* Infinite loop */
    dwt_enableframefilter(DWT_FF_DATA_EN);
    dwt_rxenable(0);
    while(1)
    {
       // BPhero_Distance_Measure_Specail_TAG();

            Delay_us(10000);//5ms
            Delay_us(10000);//5ms
               
            temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
            temp_result = (temp/100)+0x30;
            temp_result = (temp%100/10)+0x30;
            temp_result = (temp%10)+0x30;

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

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

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

      temp_result = msg_f->messageData;
      temp_result = msg_f->messageData;
      temp_result = msg_f->messageData;
      temp_result = '\n';
      temp_result = '\0';
      temp_result = 1; 其中temp_result 为接收成功标志位,当接收成功后将其置位1,while(1)中根据这个,将temp_result 打印出来while (1)
    {
      if(temp_result ==1)
      {
            USART1DispFun(temp_result);
            temp_result = 0;
      }
    }

lkdsp 发表于 2020-3-1 23:21:31

楼主没有再继续做下去了吗?

tuzhuke 发表于 2020-3-2 10:56:36

lkdsp 发表于 2020-3-1 23:21
楼主没有再继续做下去了吗?

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

13911759801 发表于 2020-4-23 13:34:32

期待楼主更新。。

huaohui 发表于 2020-4-26 10:54:37

期待楼主更新。。

szmcumcu 发表于 2021-9-29 08:52:21

期待楼主,赞一个

xapimcb 发表于 2022-2-24 15:10:09


分享学习,不错

lukkulluk 发表于 2022-3-4 15:51:18

谢谢楼主分享

qb123 发表于 2022-4-25 11:10:35

谢谢楼主分享

MX_2013 发表于 2023-10-8 18:11:21

这是把DW1000芯片作为普通射频通信模组使用对吗?类似2.4g蓝牙芯片,通过无线传输数据
页: [1] 2
查看完整版本: UWB DWM1000 开源项目框架 之 温度采集