Benewake(北醒) TF02-Pro雷达串口波特率设置错误 通过逻辑分析仪计算雷达波特率及恢复的方法

本文介绍了由于更改波特率导致的通讯异常情况,表现为乱码数据。通过逻辑分析仪采集波形,计算出实际波特率约为520291,并使用该波特率在串口助手中恢复正常通讯。内容包括异常波形分析、波特率计算、数据解析及恢复出厂配置的指令发送。
摘要由CSDN通过智能技术生成

问题描述

由于更改波特率指令错误导致通讯异常,输出全是乱码的情况,现象如下,
不管什么更换常用的波特率都无法看到使用说明书描述0x59,0x59的帧头

乱码数据图片
在这里插入图片描述
正常数据图片
在这里插入图片描述

分析

给雷达上电,并使用逻辑分析仪采集波形数据
这次测试使用的是Kingst LA1010
在这里插入图片描述

采集异常波形

如图:
在这里插入图片描述

  • 自动检测波特率为625000,从数据上看解析并不对,所以真实波特率差异较大(如下图)

异常图在这里插入图片描述

正常图 0x59开头
在这里插入图片描述

  • 根据一个BYTE的时间计算大概波特率
    北醒默认雷达通讯协议为8N1,也就是1个起始位+8个数据位+1个停止位,停止位时间非固定不好计算,所以计算9个BIT的时间
    注:单独测一个BIT偏差较大,如果在比较快的波特率下,误差太大,容易出现计算错误的情况
    帧头0x59模拟波形如下图
    在这里插入图片描述
    测量实际测试的时间
    在这里插入图片描述
    如上图实际测量9个BIT时间为17.3us
    1个BIT时间为 17.3us/9bit ≈ 1.922us/bit
    计算波特率 1S/1.922us/bit = 1*10^6us/1.922us/bit ≈ 520291bit
    大概波特率为520291 导入刚才的逻辑分析仪解析一下数据(关闭自动检测波特率)
    如图:更改后解析已经变正常的0x59
    在这里插入图片描述

恢复

如果使用串口助手尝试使用自定义的波特率可以实现的话建议使用串口助手
在这里插入图片描述

使用TTL-USB接电脑使用串口助手可能会出现没有自定义波特率以及波特率设定后无法正常启用的情况以及以上所得波特率可能并不是非常准确,有可能存在误差
或者使用Arduino开发板更改,此次使用硬件串口,不建议使用软串口,问题较多。

全部例程如下:

typedef struct {
  int distance;
  int strength;
  int temp;
  boolean receiveComplete;
} TF;
TF Lidar = {0, 0, 0, false};

u8 cmd[8] = {0x5A, 0x04, 0x10, 0x6E, 0x5A, 0x04, 0x11, 0x6F};  //恢复出厂配置指令

void getLidarData(TF* lidar) 
{
  static char i = 0;
  char j = 0;
  int checksum = 0;
  static int rx[9];
  if (Serial.available()) 
  {
    rx[i] = Serial.read();
    if (rx[0] != 0x59) 
    {
      i = 0;
    } 
    else if (i == 1 && rx[1] != 0x59) {
      i = 0;
    } 
    else if (i == 8) 
    {
      for (j = 0; j < 8; j++) 
      {
        checksum += rx[j];
      }
      if (rx[8] == (checksum % 256)) 
      {
          lidar->distance = rx[2] + rx[3] * 256;
          lidar->strength = rx[4] + rx[5] * 256;
          lidar->temp = (rx[6] + rx[7] * 256) / 8 - 256;
          lidar->receiveComplete = true;
      }
      i = 0;
    } 
    else 
    {
      i++;
    }
  }
}/*首先将雷达输出的9位数据按顺序存放入‘rx[]’数组中,随后计算输出的距离、信号强度、温度*/

u8 cmd[8] = {0x5A, 0x04, 0x10, 0x6E, 0x5A, 0x04, 0x11, 0x6F};  //恢复出厂配置指令
void setup() {
  long int foc = 510000;
  long int i = 0;
  for(i=0;i<100000;i++)
  {
    foc++;
    Serial.begin(foc);
    Serial.write(cmd,8);
  }
 
  Serial.begin(115200);
  Serial.print("END!!!!!");
}

void loop() 
{
  
  getLidarData(&Lidar);
  if (Lidar.receiveComplete) 
  {
    Lidar.receiveComplete = false;
    Serial.print("Distance: ");
    Serial.print(Lidar.distance);
    Serial.print("cm\t");
    Serial.print("Strength: ");
    Serial.print(Lidar.strength);
    Serial.print("\t");
    Serial.print("Temp: ");
    Serial.println(Lidar.temp);
  }
}

以下是通过轮询的方式直接给雷达发送恢复出厂配置的指令,选一个比较可靠的范围进行轮询。

u8 cmd[8] = {0x5A, 0x04, 0x10, 0x6E, 0x5A, 0x04, 0x11, 0x6F};  //恢复出厂配置指令
void setup() {
  long int foc = 510000;
  long int i = 0;
  for(i=0;i<100000;i++)
  {
    foc++;
    Serial.begin(foc);
    Serial.write(cmd,8);
  }
 
  Serial.begin(115200);
  Serial.print("END!!!!!");
}

开启测试隔一分钟左右出现以下正常读取数据,说明恢复成功 在这里插入图片描述
附录
北醒常用波特率及对应配置指令如下
9600 [5A 08 06 80 25 00 00 00]
19200 [5A 08 06 00 4B 00 00 00]
38400 [5A 08 06 00 96 00 00 00]
57600 [5A 08 06 00 E1 00 00 00]
115200 [5A 08 06 00 C2 01 00 00]
230400 [5A 08 06 00 84 03 00 00]
460800 [5A 08 06 00 08 07 00 00]
921600 [5A 08 06 00 10 0E 00 00]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值