51uwb.cn

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

咨询bp50的代码问题

[复制链接]

2

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
跳转到指定楼层
楼主
发表于 2021-5-29 17:35:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
bp50的定位代码我看不太懂,我想知道如下问题
(1)哪些代码可以控制UWB模块发射和接受信号
(2)基站接收到标签的信号后,过一段时间会向标签发送信号,基站等待的时间是自动的还是靠代码控制
(3)哪些代码是将基站1和基站2的距离信息发送到基站0中
(4)上位机的哪些代码实现根据距离计算实际位置
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
沙发
发表于 2021-5-30 08:20:51 | 只看该作者
(1)哪些代码可以控制UWB模块发射和接受信号
UWB发送和接收信号都是通过调用deca提供的API实现的,不论哪个版本的代码都是一样的
A. 发送信号,步骤为将数据写入到UWB寄存器中,告知发送offset,启动发送,等待发送完毕
  1.     dwt_writetxdata(sizeof(angle_msg), angle_msg, 0);
  2.     dwt_writetxfctrl(sizeof(angle_msg), 0);

  3.     /* Start transmission, indicating that a response is expected so that reception is enabled automatically after the frame is sent and the delay
  4.      * set by dwt_setrxaftertxdelay() has elapsed. */
  5.     dwt_starttx(DWT_START_TX_IMMEDIATE );
  6.     while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS))
  7.     { };
复制代码

B. 接收信号,在BP50中一般会先设置接收超时,0表示一直等。然后调用dwt_rxenable 启动发送。
  1.         dwt_setrxtimeout(0);
  2.         /* Activate reception immediately. */
  3.         dwt_rxenable(0);
复制代码


(2)基站接收到标签的信号后,过一段时间会向标签发送信号,基站等待的时间是自动的还是靠代码控制
你说的这个时间,需要手动控制,尽量收到信号立马发出去,这样可以减少误差。
可以参考博文:cnblogs.com/tuzhuke/p/9948520.html

(3)哪些代码是将基站1和基站2的距离信息发送到基站0中
基站收到final 信息后,会在基站端解算距离,然后把距离汇总给标签,具体代码如下
  1.                         Da = (double)(final_tx_ts - resp_rx_ts);
  2.                         Db = (double)(resp_tx_ts_32 - poll_rx_ts_32);
  3.                         tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db));

  4.                         tof = tof_dtu * DWT_TIME_UNITS;
  5.                         distance = tof * SPEED_OF_LIGHT;
  6.                         distance = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);
  7.                      
  8.                         int temp = (int)(distance*100);
  9.                         distance_msg[10] = temp/100;
  10.                         distance_msg[11] = temp%100;  
  11.                         distance_msg[12] = anthor_index;

  12.                         distance_msg[ALL_MSG_SN_IDX] = frame_seq_nb;
  13.                         distance_msg[ALL_MSG_TAG_IDX] = tag_index;
  14.                         dwt_writetxdata(sizeof(distance_msg), distance_msg, 0);
  15.                         dwt_writetxfctrl(sizeof(distance_msg), 0);
复制代码

(4)上位机的哪些代码实现根据距离计算实际位置
上位机部分,目前有个帖子会梳理上位机流程,可以参考:
http://51uwb.cn/forum.php?mod=viewthread&tid=355&extra=page%3D1
回复

使用道具 举报

2

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
板凳
 楼主| 发表于 2021-5-30 08:59:14 | 只看该作者
蓝点无限 发表于 2021-5-30 08:20
(1)哪些代码可以控制UWB模块发射和接受信号
UWB发送和接收信号都是通过调用deca提供的API实现的,不论哪 ...

谢谢,我还想问问一开始工作时的对stm32单片机和uwb的初始化的代码是哪一部分
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
地板
发表于 2021-5-30 16:28:41 | 只看该作者
大兴兴cx 发表于 2021-5-30 08:59
谢谢,我还想问问一开始工作时的对stm32单片机和uwb的初始化的代码是哪一部分

stm32 的初始化,主要是peripherals_init(); 这个函数完成的
  1. void peripherals_init (void)
  2. {
  3.     RCC_APB2PeriphClockCmd(
  4.         RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
  5.         RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD |
  6.         RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,
  7.         ENABLE);
  8.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);/*JTAG-DP   SW-DP  Enable PB4 */
  9.     /* Enable SPI1 clock */
  10.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);

  11.     gpio_init();
  12.     systick_init();
  13.     spi_peripheral_init();
  14.     OLED_Init();         
  15.     OLED_Clear()    ;

  16.     usartinit();
  17.     LED_TEST();
  18. }
复制代码


UWB 部分的初始化基本都是如下代码实现
  1.     reset_DW1000(); /* Target specific drive of RSTn line into DW1000 low for a period. */

  2.     spi_set_rate_low();
  3.     if(dwt_initialise(DWT_LOADUCODE) == -1)
  4.     {
  5.         printf("dwm1000 init fail!\r\n");
  6.         OLED_ShowString(0,0,"INIT FAIL");
  7.         while (1)
  8.         {
  9.             STM_EVAL_LEDOn(LED1);
  10.             deca_sleep(100);
  11.             STM_EVAL_LEDOff(LED1);
  12.             deca_sleep(100);
  13.         }
  14.     }
  15.     spi_set_rate_high();

  16.     /* Configure DW1000. See NOTE 6 below. */
  17.     dwt_configure(&config);
  18.     dwt_setleds(1);
  19.     /* Apply default antenna delay value. See NOTE 1 below. */
  20.     dwt_setrxantennadelay(RX_ANT_DLY);
  21.     dwt_settxantennadelay(TX_ANT_DLY);
复制代码
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
5#
发表于 2021-5-30 16:37:02 | 只看该作者
大兴兴cx 发表于 2021-5-30 08:59
谢谢,我还想问问一开始工作时的对stm32单片机和uwb的初始化的代码是哪一部分



我们技术人员加班录制了一个BP50 代码说明,可以参考
回复

使用道具 举报

2

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
6#
 楼主| 发表于 2021-5-31 13:17:01 | 只看该作者
蓝点无限 发表于 2021-5-30 16:37
https://www.bilibili.com/video/BV1244y1r7HQ/

我们技术人员加班录制了一个BP50 代码说明,可以参考

谢谢技术人员,解了我的燃眉之急
回复

使用道具 举报

35

主题

1053

帖子

4531

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4531
7#
发表于 2021-5-31 14:24:02 | 只看该作者
大兴兴cx 发表于 2021-5-31 13:17
谢谢技术人员,解了我的燃眉之急

:
回复

使用道具 举报

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

本版积分规则

bphero Inc.  

GMT+8, 2024-11-23 15:43 , Processed in 0.018962 second(s), 4 queries , File On.

Powered by Discuz! X3.3

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

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