导航

MakeRadar 学院—— Sense2GoL 开发套件编程指南

概述

本编程指南主要介绍了Sense2GoL 开发套件的设置要求和基本编程知识:

  1. 安装必要软件并搭建集成开发环境 (IDE) 以完成操作环境设置
  2. 从一个简单的程序开始,在 Sense2GoL 开发套件上制作一个 LED 灯闪烁程序。
  3. 在 Sense2GoL 开发套件上读取原始数据
  4. 按时间帧采集原始数据。
  5. 运行第一个应用程序:
    • 开门器

1、搭建开发环境

根据自己偏爱的集成开发环境 (IDE) 接口,可以选择多种方法搭建开发环境。我们为您提供了最常见集成开发环境 (IDE) 的使用说明。

只需要简单两步就可以准备好驱动代码。

  1. 安装 Segger J-Link 仿真器软件
  2. 搭建集成开发环境 (IDE)

1.1 安装Segger J-Link仿真器软件

为了能在 Sense2GoL 开发套件上使用和编程控制英飞凌 XMC 微处理器,必须在您的个人电脑上安装SEGGER J-Link仿真器软件。请按此链接安装适用于您的操作系统的“J-Link 软件及文件包”

1.2 搭建集成开发环境 (IDE)

为了在Sense2GoL 开发套件上编程,建议选择以下两种集成开发环境 (IDE)软件:

  • Arduino IDE 软件
  • PlatformIO 软件(推荐)
    开发创建带函数库的复杂编程,建议选择这种集成开发环境 (IDE),它的结构有利于开发工作。
    Sense2GoL 开发套件基础编程,Arduino IDE软件绝对适用。

1.2.1 Arduino IDE 软件

如果还没有安装 ArduinoIDE 软件,请点击这里下载并安装。

之后,必须把英飞凌微处理器开发板添加到 ArduinoIDE 软件软件上。
打开ArduinoIDE 找到文件>首选项

在打开的“首选项”窗口粘贴以下 URL 地址到“附加开发板管理 URLs”输入区域。  https://github.com/Infineon/Assets/releases/download/current/package_infineon_index.json 

安装开发板方法,请按导航“工具>开发板>开发板 管理……",然后查找 XMC。便会找到安装微处理器开发板文件的选项。点击“安装”将开发板添加到 ArduinoIDE 软件。

最后,安装成功后,必须从“工具>开发板”中的开发板清单中选择 ”XMC1300 Sense2GoL”

1.2.2 PlatformIO 软件(推荐)

这里下载并安装 PlatformIO 软件。

打开 PlatformIO 软件,创建一个新项目,并在工程向导中选择 ”XMC1300 Sense2GoL (Infineon)” 开发板。

生成的 ”platform.ini” 文件应如下所示:

现在就可以开始编码、编译、上传和监控了。来熟悉一下这个操作过程!(需要帮助点击这里

     

2.2让 LED 灯闪烁

然后,必须反复打开和关闭  LED1  灯。
可以借助  loop()  程序:

 利用 digitalWrite(LED1, HIGH)  打开 LED 灯,利用  delay(500)  延时半秒后继续执行操作。

2.3 观察处在闪烁状态的 LED 灯

把代码上传到Sense2GoL开发套件上并观察处在闪烁状态的LED灯。

恭喜!您可以与开发板进行互动了。

3、读取原始数据

虽然闪烁的 LED 看起来很棒,但这根本没什么用。下面将通过Sense2GoL 开发套件读取一些原始数据,这样就能实现更多有趣的功能。

需要以下三个步骤:

  1. 设置开发板
  2. 读取数据
  3. 把数据发送到个人电脑上

     

3.1 设置开发板

  setup()  方法要求,在读取原始数据并发送到个人电脑前,需要先做两件事。

3.1.1开启串行端口

首先,需要初始化一个串行端口连接,以便建立 XMC 和个人电脑之间的通信通道。

方法如下:

通过 Serial.begin(BAUDRATE)  打开一个串行连接并设定波特率实现数据传输。波特率必须与开发板个人电脑相互匹配。这个范例中, Sense2GoL 开发套件的波特率是   38400  
 

3.1.2打开雷达芯片

接下来,为了使用开发板上雷达芯片BGT24LTR11,必须先通过   BGT_ON  引脚给它供电(   BGT_ON  —— 参考这里)。
由于这个控制开关是低电平触发,需要先关闭   BGT_ON 引脚以便给 BGT 芯片供电。

方法如下:

 

注意:使用外部开发板操作

Sense2GoL开发套件也可以通过外部开发板进行数据采集和信号处理。
使用外部开发板操作的更多信息参见:Sense2GoL 开发套件页面.。
请注意,如果使用外部开发板控制Sense2GoL 开发套件,上述步骤略有不同。

将上述代码上传到开发板上 XMC 后,为了给 BGT 芯片供电,您必须将  VCCIN  (5v电源)和  GND (接地)连接到开发板相应的引脚上。

 现在,可以将模拟引脚  IF_I_HG   IF_Q_HG  连接到您自己的开发板对应的模拟输入接口上,然后,就可以开始测试了。

3.2 读取数据

接下来,用  loop()  方法读取取原始数据。雷达芯片的原始数据可以从  CH_I  CH_Q 引脚(参见这里)探测到放大的模拟信号。

现在所要做的只是简单地读取那些引脚信号,并通过串行端口通信发送到个人电脑,这样,个人电脑上就会出现串行端口控制台界面。

过程如下:

 analogRead(PIN可以从规定的模拟引脚读取原始数据。  analogRead(PIN  Serial.println(PIN)   编程语句可以把读取的原始数据发送到串行端口通信线路。

整个代码如下所示:

3.3接收数据

如果把编译代码上传给 Sense2GoL 开发板,它将读取原始数据并将其发送到串行端口连接。在电脑上打开串行监控器(如 ArduinoIDE 软件或 PlatfromIO 软件),就可以看到上传的数据。

接受的数据如下所示:

当在天线前面移动开发板或一些物体时,应该可以看到数据在变化。

恭喜!您可以从雷达传感器读取原始数据了。

4. 时间帧采样

注意

我们现在将进一步深入学习C/C++ 语言编程!
如果不熟悉指针、函数或 Arduino 语言的概念,请仔细阅读 Arduino 语言参考资料

进一步分析,即实现应用程序,有必要考虑时间帧采集的同相正交 [ (IQ) ] 数据。因此,用固定的采样频率从多个点采集数据并存储到缓存区。
然后分析经缓存的同相正交 (IQ) 数据。

4.1创建同相正交 (IQ) 数据缓存区

为了存储来自两个模拟输入引脚的同相正交 (IQ) 数据,需要声明两个整数组。在这种情况下,可以称为   bufferI   用于存放同相 [ I(t) ] 数据和   bufferQ  用于正交 [ Q(t) ] 数据。

为了容易更改同相正交 [ IQ(t) ] 数据采集点数,定义一个宏  SAMPLES  用于规定缓存区的大小同时也决定了采集数据点数。

4.2 多个采样点

现在我们有两个同相 (I) 和正交 (Q) 数据缓存区和正交(Q),这样就可以获取同相正交 (IQ) 数据信号了。
要做到这一点, 两个输入信号按照固定的  SAMPLING_RATE 采样频率采样。
因此,读取这两个模拟输入引脚并等待  SAMPLING_TIME_US  微秒,然后再次读取。重复此过程,直到缓存区满了为止。
因此,我们声明一个函数接收两个缓存区的指针,并能识别声明的函数。
这将产生以下函数:

现在就会有两个填满数据的缓存区,可以为这些缓存区规定一些支持函数以便进一步处理使用。
首先,定义一个函数,返回一个缓存区的均值。
接着,为了进行调试,需要实现一个打印函数,该函数显示一个缓冲器的内容。

4.3 均值计算

一个非常有用填满缓存区的均值计算。均值可以用来建立一个敏感阈值或傅里叶转换的预处理。
因此,需要声明一个带有指针和缓存区长度的函数,这个缓存区需要分析并返回相应的均值。
 

4.4 输出缓存区内容

出于调试原因,非常需要有一个显示整个缓存区内容的函数。通过用.csv (逗号分隔值)文件格式输出缓存区内容, 这些传送的数值很容易用数据评估软件查看(如:Python scripts, Matlab scripts, Excel)。因此,要创建一个带有指针和缓存区长度的函数,并将其输出到串行监控器,每个值用分号隔开。

4.5测试时间帧采样

至此,所有函数和缓存区已经完成创建,可以开始测试了。要做到这一点,先要用   loop()  方法读取128个采样数据并将缓存区内容和相应的平均值的输出到串行端口监控器。每隔5秒进行1次采样。
可以从清单部分: L1. 测试时间帧采样找到完整的 scetch 。

5. 应用:开门器

开门器是一种典型的雷达传感器应用。目的是检测离开或接近的人或物体来实现自动开门或关门。
因此,只需要用信号处理算法简单地分析原始数据时间信号。

5.1信号处理

正如 #MakeRadar 学院雷达理论知识培训课程所述,通过确定相位中的超前信号,就可以检测到运动方向。如果运动方向靠近雷达,同相 [ I(t) ] 信号就会超过正交 [ Q(t) ] 信号,反之,远离雷达,正交 [ Q(t) ] 信号就会超过同相 [ I(t) ] 信号。

图 5.1:随时间变化,对离开物体进行同相正交 [ (IQ) ] 数据采样(左图),对接近物体进行同相正交 [ (IQ) ] 数据采样(右图)。

现在要确定哪个信号位置靠前。从图 5.1可以看到,物体远离雷达传感器时,在相位中正交 [ Q(t) ] 信号明显超过了同相 [ I(t) ] 信号,反之亦然。

因此,信号处理代码已经确定。

超前/落后信号指示器

这样做的一种方法是,考虑位于同相 [ I(t) ] 信号拐点(图 5.1 (红色数据线))处的正交 [ Q(t) ] 信号边缘(图 5.1 (蓝色数据线)) 。根据边缘的方向,分别指示出超前/落后的信号。

正交 (Q) 信号边缘\ 同相 (I)-信号拐点 最低                       最高                 
上升沿 远离 靠近
下降沿 靠近 远离

根据同相正交 [ IQ(t) ] 信号帧持续时间,可以观察到的多个拐点的边缘。根据不同拐点,递增/递减指示器,考虑时间帧平均方向。

灵敏度

雷达前方的小移动可以忽略,我们只能考虑同相正交 [ IQ(t) ] 信号均值灵敏度范围外的拐点(图 5.1 (黑色部分))。因此,只有高振幅的同相 [ I(t) ] 信号有用。

5.1应用

既然已经讨论了信号处理背后的思路,现在可以开始运行开门器了。
原始数据采集的初步工作,我们只实现了一个进退函数,该函数用于决定缓存区同相正交 [ IQ(t) ] 数据中运动方向。
接下来,就可以用   OUTPUT  方法实现开门器功能。

先从方向探测开始!

函数的返回值应该是运动的方向,而 “1” 表明靠近运动和 “-1” 表示远离运动。由 “0” 表示无运动。基本确定,两个同相正交 [ IQ(t) ] 信号缓存区必须经过分析然后传送给函数。
信号处理部分已经解释了如下函数:

把它应用到开门器吧!

因为我们只实现了一个“虚拟”开门器,只需要将门的反应输送到串行端口监测器。
有人或物体靠近门时门应该自动打开,反之亦然。所以我们利用  loop()  方法实现这个功能。

可以从清单部分: L2. 应用:开门器找到完整的 scetch 。

章节

清单

下面有对应章节完整程序代码!

L1. 测试时间帧采样

L2. 应用:开门器