完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
数据的接收
dwt_setrxtimeout(0); //接收器允许接收的超时时间 dwt_rxenable(0); //立即打开接收器 while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))) { };//检测数据是否接收到数据 dwt_read32bitreg();//读取32位寄存器的值 数据的发送 dwt_writetxdata(sizeof(tx_final_msg), tx_final_msg, 0); //将数据写入DW1000写入TX缓冲区 dwt_writetxfctrl(sizeof(tx_final_msg), 0); //用于配置TX帧控制寄存器 dwt_starttx(DWT_START_TX_DELAYED | DWT_RESPONSE_EXPECTED ); //用来启动数据帧的传输, /*parameter*/ //DWT_START_TX_DELAYED 延时发送数据 此函数用来设置延迟时间dwt_setdelayedtrxtime() //DWT_START_TX_IMMEDIATE 立即发送数据 //DWT_RESPONSE_EXPECTED 发送成功,进入接收响应消息的时间 dwt_setrxaftertxdelay() while (!((status_reg = dwt_read32bitreg(SYS_STATUS_ID)) & (SYS_STATUS_RXFCG | SYS_STATUS_ALL_RX_ERR))) { }; dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_ALL_RX_ERR); //对DW1000寄存器,进行数据的写入,清除相应的标志位。 时间获取和计算 DW1000配置(stm32) 1.相关引脚和spi初始化。 2.DW1000_RSTn引脚,进行低电平到模拟输入。 3.spi速率降低,不能超过3Mh。 4.DW1000初始化. 5.恢复spi速率. 6.DW1000相关寄存器配置. //设置天线延时 7.dwt_setrxantennadelay(RX_ANT_DLY); dwt_settxantennadelay(TX_ANT_DLY); 计算时间(TWR算法) TAG | T1 | | T4 | | T5 | NODE | T2 | | T3 | | T6 | 1.标签发送数据 T1 2.基站接收到数据 T2(并计算T2的时间) 延时一段时间发送 T3消息 3.标签接收到数据 读取T1发送的时间和此时接收到的时间T4,并把这两个数据,还有发送时间T5传入到final包中,发送final包 4.基站接收final包。 poll_rx_ts = get_rx_timestamp_u64(); // T2 resp_tx_ts = get_tx_timestamp_u64();//T3 final_rx_ts = get_rx_timestamp_u64();//T6 /* Get timestamps embedded in the final message. */ final_msg_get_ts(&rx_buffer[FINAL_MSG_POLL_TX_TS_IDX], &poll_tx_ts);//T1 final_msg_get_ts(&rx_buffer[FINAL_MSG_RESP_RX_TS_IDX], &resp_rx_ts);//T4 final_msg_get_ts(&rx_buffer[FINAL_MSG_FINAL_TX_TS_IDX], &final_tx_ts);//T5 /* Compute time of flight. 32-bit subtractions give correct answers even if clock has wrapped. See NOTE 10 below. */ poll_rx_ts_32 = (uint32)poll_rx_ts; resp_tx_ts_32 = (uint32)resp_tx_ts; final_rx_ts_32 = (uint32)final_rx_ts; Ra = (double)(resp_rx_ts - poll_tx_ts); Rb = (double)(final_rx_ts_32 - resp_tx_ts_32); Da = (double)(final_tx_ts - resp_rx_ts); Db = (double)(resp_tx_ts_32 - poll_rx_ts_32); tof_dtu = (int64)((Ra * Rb - Da * Db) / (Ra + Rb + Da + Db)); tof = tof_dtu * DWT_TIME_UNITS; distance = tof * SPEED_OF_LIGHT; distance = distance - dwt_getrangebias(config.chan,(float)distance, config.prf);//距离减去矫正系数 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1101浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1856浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 19:49 , Processed in 1.086280 second(s), Total 79, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号