【UWB定位】 - DWM1000模块调试简单心得 - 2

UWB定位 - DWM1000模块调试简单心得 - 1 上一篇搭建了下软硬件的基础环境,这篇开始记录调试需要注意的地方或者”坑”。先以一基站一标签来进行。

1、将我们的模块连接后上电。注意这里DWM1000模块(也就是stm32开发板)一定要使用独立电源(5v / 1.5A ↑↑↑)单独供电,如果你用USB to TTL或者电脑的USB接口给stm32开发板供电(dwm10003.3V与stm32引脚3.3连接)后续多半会出现数据大幅度波动(波动单位为米级别!!!),亦或是基站与标签通信时直接断开。博主调试的时候遇到过查了不少资料,据说dwm1000模块峰值电流可以达到1A,建议基站采用电源5v/1.5A以上单独供电给stm32开发板。标签可以采用移动电源供电,当然这不代表这标签会省电,功耗关键还是在于程序控制(包括算法的不同耗电量也根不同,目前最省电最理想的测距算法还是TDOA 。对于定位来说我们的TWR 也就是TOA 也可以实现功能,但当我们的项目工程需要多标签多基站时,还是需要TDOA的方式来进行。TWR 定位方式当多个标签的时候会遇到事件轮询排队的情况,当然这都是后续的,可以自己根据需要选择,目前咱们先调试官方的模块代码

2、基站部分代码调试

        打开我们的标签项目project,其实现在直接分别编译-烧录-运行 到我们的开发板 ,然后基站的stm32开发板外接一个usb to TTL (程序内串口已经初始化,具体初始化在port.c 文件中,主程序部分点进入peripherals_init()即可看见,波特率默认115200)。

      为了方便我们串口调试,打开port.c文件加入我们自己的串口打印函数

void USART_putc(char c)//向串口输出字符
{
	//while(!(USART2->SR & 0x00000040));
	//USART_SendData(USART2,c);
	/* e.g. write a character to the USART */
	USART_SendData(USART1, c);

	/* Loop until the end of transmission */
	while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)	;
}


void USART_putstr(const char *s)//向串口输出字符串
{
	int i;
	for(i=0; s[i]!=0; i++)
	{
		USART_putc(s[i]);
	}
}

 

记得在port.h里声明

void USART_putc(char c);
void USART_putstr(const char *s);

 

 

可以将代码中显示屏部分的代码直接去掉,在输出显示数据部分加入我们的串口打印字符串函数

 

 

sprintf(dist_str, "DIST: %3.2f m", distance);
USART_putstr(dist_str);
USART_putc('\n');

基站、标签上电,或许你就可以看到串口输出的DIST: xx m 。

 

如果没有,不要着急。先检查代码和硬件接线部分,确保没有问题后,那就是我们程序的发送和接收延时需要修改(依据个人模块合理修改,如果没有通信成功 可将延时倍数增大,调整部分如下截图)这里的延时是标签与基站发送接收对方数据的延时。

以下是我的个人调整(如还是不行继续加大,基站与标签延时部分代码 都需要加大,并不是只改基站部分的,注意!!):

下一篇传送门:UWB定位 - DWM1000模块调试简单心得 - 3

  • 23
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 72
    评论
评论 72
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值