zoukankan      html  css  js  c++  java
  • UWB DWM1000 开源项目框架 之 温度采集

    在之前博文开源一套uwb 框架,后面几篇博文会基于这个开源框架进行简单开发。 让uwb使用者更清楚了解基于这个basecode 开发工作。

    这里所做内容是,采集dwm1000 温度,并发送到另一个节点,另一个节点通过串口打印,也就是这里是一个远程采集温度的工程。当然可以使用主控stm32 采集任何传感器,按照本文思路将数据打包发送到另外一个节点。

    1 在tx_main.c增加温度采集函数,并做验证。

    温度采集函数

    uint16 BPhero_UWB_Get_Temperature(void)
    {
        uint16 register_result;
        uint16  Temperature = 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);
    char temp_result[5]; 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[0] = (temp/100)+0x30; temp_result[1] = (temp%100/10)+0x30; temp_result[2] = (temp%10)+0x30; temp_result[3]=' ';temp_result[4]=''; USART1DispFun(temp_result); } }

     主要是读取温度,并将温度百十个位分开并发送到串口显示。 tx_main 函数相对之前basecode,除了读取温度函数以外,在while(1) Enable RX,在while(1)内注释掉发送代码,这样做主要是,rx 功耗较大,可以明显看到温度变化。实际后面会回复原样。

    编译下载后,串口收到温度信息:

    可以看到使能接收的时候,dwm1000的文档可以稳定在53度左右,使用热风枪加热,温度会更高。

    2 以上测试已经完成,开始修改tx_main,将发送的数据放到tx_message中。

    A  tx_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[0] =(SHORT_ADDR+1) &0xFF;
        msg_f_send.destAddr[1] =  ((SHORT_ADDR+1)>>8) &0xFF;
    
        /* Write all timestamps in the final message. See NOTE 10 below. */
        final_msg_set_ts(&msg_f_send.messageData[FIRST_TX],  tx_node[(SHORT_ADDR+1) &0xFF].tx_ts[0] );
        final_msg_set_ts(&msg_f_send.messageData[FIRST_RX],  tx_node[(SHORT_ADDR+1) &0xFF].rx_ts[0] );
    
        msg_f_send.seqNum = distance_seqnum;
        msg_f_send.messageData[0]='D';
        msg_f_send.messageData[1]=(SHORT_ADDR+1) &0xFF;
    	
        temp = (BPhero_UWB_Get_Temperature()*1.13 - 113);
        msg_f_send.messageData[2]=(temp/100)+0x30;
        msg_f_send.messageData[3]=(temp%100/10)+0x30;
        msg_f_send.messageData[4]=(temp%10)+0x30;

    可以看到与之前basecode 相比,在messageData[2'3'4] 把温度信息打包了,只需要在rx阶段,同样读取messageData[2'3'4] 即可。

    注意 psduLength 这个长度,不要小于要发送的数据长度,不然会收不全数据。

     dwt_writetxdata(psduLength, (uint8 *)&msg_f_send, 0) ; 
    

    C rx_main.c 读取同样读取messageData[2'3'4] 

                switch(msg_f->messageData[0])
                {
                    case 'D'://distance
                        msg_f_send.messageData[0]='d';
                        msg_f_send.messageData[1]=msg_f->messageData[1];
    
                        temp_result[0] = msg_f->messageData[2];
                        temp_result[1] = msg_f->messageData[3];
                        temp_result[2] = msg_f->messageData[4];
                        temp_result[3] = '
    ';
                        temp_result[4] = '';
                        temp_result[5] = 1;  

    其中temp_result[5] 为接收成功标志位,当接收成功后将其置位1,while(1)中根据这个,将temp_result 打印出来

    while (1)
        {
            if(temp_result[5] ==1)
            {
                USART1DispFun(temp_result);
                temp_result[5] = 0;
            }
        }

    到此,本文完

    代码开源网址:www.51uwb.cn

  • 相关阅读:
    LeetCode Count of Range Sum
    LeetCode 158. Read N Characters Given Read4 II
    LeetCode 157. Read N Characters Given Read4
    LeetCode 317. Shortest Distance from All Buildings
    LeetCode Smallest Rectangle Enclosing Black Pixels
    LeetCode 315. Count of Smaller Numbers After Self
    LeetCode 332. Reconstruct Itinerary
    LeetCode 310. Minimum Height Trees
    LeetCode 163. Missing Ranges
    LeetCode Verify Preorder Serialization of a Binary Tree
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/12077671.html
Copyright © 2011-2022 走看看