智能车常用的上下位机:匿名上位机 V7,TFMiniPlus 激光雷达测距

简介: 智能车常用的上下位机:匿名上位机 V7,TFMiniPlus 激光雷达测距

上下位机设置:匿名上位机 V7,TFMiniPlus 激光雷达测距

匿名上位机V7通信协议

#include <string.h>

#define BYTE0(dwTemp)       (*( (char *)(&dwTemp)    ))   /* !< uint32_t 数据拆分 byte0 */
#define BYTE1(dwTemp)       (*( (char *)(&dwTemp) + 1))   /* !< uint32_t 数据拆分 byte1 */
#define BYTE2(dwTemp)       (*( (char *)(&dwTemp) + 2))   /* !< uint32_t 数据拆分 byte2 */
#define BYTE3(dwTemp)       (*( (char *)(&dwTemp) + 3))   /* !< uint32_t 数据拆分 byte3 */

#define USERDATALEN 2                         // 数据长度

uint8_t waveform[6 + USERDATALEN] = {0};     // 数据帧缓存

/*
 * @name:       void Wireless_Send(void)
 * @notion:     V7
 */
void Wireless_Send(void)
{
    uint8_t waveform[6 + UserDataLen] = {0};    // 数据帧缓存
    uint8_t _cnt = 0;

    memset(waveform, 0, sizeof(waveform));

    waveform[_cnt++] = 0xAA;                    // 帧头
    waveform[_cnt++] = 0xFF;                    // 目标地址
    waveform[_cnt++] = 0xF1;                    // 功能码ID
//    waveform[_cnt++] = sizeof(waveform) - 6;      // 有效数据长度
//    waveform[_cnt++] = UserDataLen;
    waveform[_cnt++] = 0;

    int16_t UserData_1 = (int16_t)(Mortor1.Speed_Read);

    //数据区使用小端模式, 低字节在前。
    waveform[_cnt++] = BYTE0(UserData_1);       // 数据内容
    waveform[_cnt++] = BYTE1(UserData_1);

    waveform[3] = _cnt - 4;                     // 写入有效数据字节数

    uint8_t sumcheck = 0;                           // 和校验SC
    uint8_t addcheck = 0;                       // 附加校验AC
    for(uint8_t i = 0; i < waveform[3] + 4; i++) {
      sumcheck += waveform[i];                  // 从帧头开始, 一直到 data 区结束, 对每一字节进行累加操作, 只取低8位
      addcheck += sumcheck;                     // 计算和校验时, 每进行一字节的加法运算, 同时进行一次 sumcheck 的累加操作, 只取低8位
    }
    waveform[_cnt++] = sumcheck;
    waveform[_cnt++] = addcheck;

    // 串口发送数据
    seekfree_wireless_send_buff(waveform, sizeof(waveform)); 
//    HAL_UART_Transmit(&huart1, (uint8_t*)waveform, _cnt, 2);
}
  • 定义USERDATALEN为要发送的数据长度。比如要发送一个int16就是两位,以此类推叠加。
  • 需要在匿名上位机高级收码 - 点击右侧绿色的竖条 - 展开用户帧F1 - 设置数据类型,依次设置要发送的发送的几个数据的数据类型。记得勾选使能F1帧
  • 浮点数可以数值放大100倍转化成int16处理,提高传输效率

`waveform[_cnt++] = BYTE0(float * 100.000f);
waveform[_cnt++] = BYTE1(float * 100.000f);`

然后在匿名上位机高级收码 - 点击右侧绿色的竖条 - 展开用户帧F1再把数据缩放设为1.0E+2,这样即可显示原始的浮点数据

  • 逐飞无线串口一次发送数据最好不要超过30字节。要是单片机有额外的io建议开启无线串口的控流引脚
  • 双击匿名上位机波形显示右侧的实时值数字,可以在波形上显示具体数值

TFMiniPlus 激光雷达测距接收协议

#define TFMINI_DATA_Len     9
#define TFMINT_DATA_HEAD    (0x59)

uint16_t TFmin_Dist = 0;    // 距离信息 单位 cm
uint16_t TFmin_Strength = 0;// 信号强度 小于 100 或等于 65535 时, Dist的测量值被认为不可信输出置0
uint16_t TFmin_Temp = 0;    // 表征芯片内部温度值 摄氏度 = Temp / 8 - 256

uint8_t TFminiPlus_buf[TFMINI_DATA_Len] = {0};  // 暂存数据帧
uint8_t TFminiPlus_num = 0;                     // 暂存本字节数据编码
uint8_t TFminiPlus_flag = 0;                    // 接收数据标志位 1-成功;2-帧头错误;3-SC校验错误

/*
 * @name:       void TFminiPlus_Proc2(uint8_t date)
 * @function:   TFminiPlus单字节接收方式
 * @example:    TFminiPlus_Proc2(rx_receive);
 */
void TFminiPlus_Proc2(uint8_t data)
{
    uint8_t i = 0;
    uint8_t checksum = 0;

    if (TFminiPlus_num == 0 && data == TFMINT_DATA_HEAD) {                      // 校验并记录帧头
        TFminiPlus_buf[0] = TFMINT_DATA_HEAD;
        TFminiPlus_num = 1;
    } else if (TFminiPlus_num == 1 && data == TFMINT_DATA_HEAD) {               // 校验并记录帧头
        TFminiPlus_buf[1] = TFMINT_DATA_HEAD;
        TFminiPlus_num = 2;
    } else if (TFminiPlus_num >= 2 && TFminiPlus_num <= (TFMINI_DATA_Len - 2)) {
        TFminiPlus_buf[TFminiPlus_num] = data;
        TFminiPlus_num++;
    } else if (TFminiPlus_num == (TFMINI_DATA_Len - 1)) {
        for (i = 0; i < (TFMINI_DATA_Len - 1); i++) {
            checksum += TFminiPlus_buf[i];                                      // 从帧头开始到数据区结束, 做checksum校验
        }

        if (checksum == data) {                                                 // 校验Checksum
            //数据为小端模式, 低字节在前保存在数据帧的低地址中
            TFmin_Dist = TFminiPlus_buf[2] | (TFminiPlus_buf[3] << 8);
            TFmin_Strength = TFminiPlus_buf[4] | (TFminiPlus_buf[5] << 8);
            TFmin_Temp = TFminiPlus_buf[6] | (TFminiPlus_buf[7] << 8);
            TFminiPlus_flag = 1;
        } else {
            TFminiPlus_flag = 3;
        }

        TFminiPlus_num = 0;
    } else {
        TFminiPlus_flag = 2;
        TFminiPlus_num = 0;
    }
}

/*
 * @name:       void TFminiPlus_GetOnce(void)
 * @function:   TFminiPlus单次触发指令
 * @notion:     将输出帧率设置为0后, 才可使用单次触发指令
 */
void TFminiPlus_GetOnce(void)
{
    uint8_t TFminiPlus_cmd[4] = {0};    // 暂存命令帧
//    memset(TFminiPlus_cmd, 0, sizeof(TFminiPlus_cmd));

    TFminiPlus_cmd[0] = 0x5A;            //指令帧帧头
    TFminiPlus_cmd[1] = 0x04;            //指令帧总长度
    TFminiPlus_cmd[2] = 0x04;            //ID
    TFminiPlus_cmd[3] = 0x62;            //Data

    uart_putbuff(UART_3, TFminiPlus_cmd, sizeof(TFminiPlus_cmd)); //串口发送指令
}
  • 使用的是TFMiniPlus的串口标准数据输出格式,没有用I2C和字符串数据格式(Pix Mode)
  • 没有用沁恒的串口接收DMA,用的简易的单字节接收方式
目录
相关文章
|
1月前
|
传感器 监控 物联网
基于STM32+微波雷达设计的非接触式睡眠监控系统
本项目开发一种非接触式的睡眠监控系统,该系统利用先进的60GHz毫米波雷达技术和STM32微控制器,实现了对人体在睡眠过程中的存在感知、运动感知以及生理指标如呼吸频率、心率的实时监测。系统能够自动评估睡眠质量,并在用户睡眠周期结束时提供睡眠评分。为了确保用户能够在任何地点了解自己的睡眠状况,系统集成了Wi-Fi模块,可以将收集到的数据上传至华为云物联网平台,并通过专门设计的移动应用程序供用户远程访问。此外,系统还具备超阈值报警功能,当检测到异常的生理指标时会发出警报提醒。本地1.44寸TFT LCD显示屏用于实时显示监测到的信息,包括生理指标和环境数据。为了全面监测用户的健康状况,系统还加入了
188 0
基于STM32+微波雷达设计的非接触式睡眠监控系统
|
存储 传感器 数据采集
GPS/GPRS车载定位系统智能终端设计μC/OS-Ⅱ调度液晶显示汽车行驶记录仪电路
GPS/GPRS车载定位系统智能终端设计μC/OS-Ⅱ调度液晶显示汽车行驶记录仪电路
117 0
|
传感器 存储
多功能手持VH501TC采集仪连接传感器与读数
振弦与温度传感器 振弦传感器和温度传感器(NTC)均为无源传感,不需要连接电源线。 根据前述“设备组成和接口定义” 用对应颜色的鳄鱼夹分别连接振弦传感器线圈和温度传感器两端即可。传感器连接后,屏幕自动显示实时的测量结果。一般情况下,设备配套传感测线为一根 4 芯线,红黑线连接振弦线圈,另外两根连接温度传感器。
多功能手持VH501TC采集仪连接传感器与读数
|
传感器 存储
河北稳控科技多功能手持读数仪VH501TC混合信号采集仪快速测量传感器
便携式手持设备面板的设计与其他工业设备的主要区别在于具有便携性和可操作性。通过人机进行操作能够对手握区域、外部接口区域、显示和操作区域进行接触,同时,手持检测设备的外观设计还要能够与人体结构相契合,达到手持的舒适度等。如手持振弦VH501TC,在工程监测振弦传感器时就很方便快捷,连接上传感器,立即读取到数据,每个测点检测时就能快速及时处理。下面看看如何连接传感器的规则。
河北稳控科技多功能手持读数仪VH501TC混合信号采集仪快速测量传感器
|
传感器
手持读数仪如何使用简单说明
开机 在关机状态,长按【电源】 按键,屏幕显示开机画面, 当听到蜂鸣器提示音后即可松开按键,设备自动完成参数加载和系统自检进入工作首页。
手持读数仪如何使用简单说明
|
存储 算法 API
基于单片机的无线语音遥控智能车设计
基于单片机的无线语音遥控智能车设计
235 0
基于单片机的无线语音遥控智能车设计
|
传感器
手持采集仪对振弦传感器的激励方法和电压设置
VH501TC 提供多种振弦传感器激励方法,以最大限度兼容所有厂家和型号的振弦传感器。 振弦传感器激励方法参数位于实时数据窗口右侧,共有 5 种方法可选,分别用MODTH0~MODTH4 表示。
手持采集仪对振弦传感器的激励方法和电压设置
|
传感器
多功能手持VH501TC采集仪如何设置振弦传感器的激励方法和激励电压
激励电压数据在屏幕上显示为 xxx/xxx 的形式,其中前面的数字表示实际的激励电压,后面的数字表示激励电压源电压 VSEN。 高压脉冲激励和低压扫频激励方法所使用的电源均来自于 VSEN,相对来说,使用比较高的 VSEN 时能得到更好的传感器信号,但有些传感器必须使用比较低的 VSEN 电压才会得到稳定的频率数据。
多功能手持VH501TC采集仪如何设置振弦传感器的激励方法和激励电压
|
传感器 存储 物联网
手持VH501TC多功能混合传感器信号采集读数仪各接口说明
传感器接口须使用设备专门配备的测线,一端为 DB9 或者航空插头,另一端为用颜色区分的多个鳄鱼夹,线(鳄鱼夹)颜色和功能定义详见前述“设备组成和接口定义” 。
手持VH501TC多功能混合传感器信号采集读数仪各接口说明
|
传感器 编解码 网络协议
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)
619 0
基于STM32设计的智能插座+人体感应灯(ESP8266+人体感应+手机APP)