• 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

  • 相关阅读:
    合并表已经转化对象的操作
    终于也有自己的博客园一角了,权当新人报到帖了
    常见软件滤波器总结
    按键设计总结
    关于goto语句
    Delphi XE2 Default Keyboard Shortcuts
    Delphi XE2 IDE Classic Keyboard Shortcuts
    Delphi实现静态变量
    datasnap传输流/文件问题
    查询条件的封装(小结)
  • 原文地址:https://www.cnblogs.com/tuzhuke/p/12077671.html
Copyright © 2020-2023  润新知