1. 简介
1.1 NXP杯赛车的全新控制选项
NXP Cup 汽车开发套件通常基于 NXP 的Freedom KL25Z 板进行电机控制和图像评估。然而,赛车的控制可以通过多种 NXP 解决方案来完成。
本文将介绍基于S32K144EVB 板的解决方案以及基于 MATLAB/Simulink基于模型的设计工具箱的 S32K编程方法。此外,NXP 提供的另一个工具 - FreeMASTER - 将用于实时调试应用程序。
由于 S32K144 引脚排列与默认的 Landzo 板引脚排列不兼容,因此构建了一个额外的板来将引脚路由到所需的目的地。教程中提供了有关引脚映射的完整详细信息。
本文以教程的形式详细介绍了所有步骤并提供了所有源代码,以便人们使用该解决方案。然而,控制应用程序做得非常简单 - 这是故意的 - 并且只使用 10% 的速度来证明这个概念。
表 1.Freedom KL25Z 对比S32K144功能 | ||||||||||||||||||||
|
1.2 资源
2.硬件设置
按照开发套件所示组装所有硬件模块后,汽车将如下图所示。值得一提的是,为了将 S32K144 EVB 连接至系统板,我们创建了一个 S32K 适配器板。
图 1. 硬件设置 |
2.1 硬件模块
图 2 总结了此应用的硬件模块以及 S32K144 MCU 外设与这些模块的通信方式。如需了解有关电机控制的更多信息,请参阅第3.4.4章和3.4.5.要了解如何使用 Freemaster 软件调试应用程序,请参阅第4章,其中提供了详细的描述。对于摄像机信息收集也给出了类似的指示。第3.4.1和3.4.2章提供为了让汽车“看见”而需要进行的操作的特写图像。
| 图2.系统框图 |
2.2 硬件验证步骤
连接好所有硬件模块后,将USB线连接到PC。将 USB 电缆的另一端连接到 FRDM-KEA 上 J7 处的 mini-B 端口。通过 USB 供电时,LED D2 和 D3 应亮起绿色,如下图所示。此外,一旦识别出 S32K144 板,它应该会作为大容量存储设备出现在您的电脑中,名称为 EVB-S32K144。
| |
图 3. 用于验证设置是否正确的 LED |
3.基于模型的设计应用
3.1 应用描述
基于模型的设计方法包括一种基于块的可视化编程方式。一个块实现特定的功能,例如将两个数字相加。对于专为 S32K14x 系列开发的 NXP 基于模型的设计工具箱,一个块实现了 MCU 外设的功能,例如打开电路板上的绿色 LED。每个块都有不同的功能,对于复杂的应用程序,应该一起使用多个组件,以便它们可以为所提出的问题提供最佳解决方案。例如,如果您想每 10 秒切换一次绿色 LED,您将在设计中添加一个新块,该块可以计数这 10 秒,然后在计数结束时触发一个动作,即切换 LED。应根据您的应用系统模型建立块之间的连接。在构建模型时,块背后实现它们之间的连接逻辑的代码会自动生成并下载到嵌入式目标上。这样做肯定可以消除代码错误,并实现更快的设计过程。
要使用基于模型的 S32K 设计工具箱,应在您正在使用的 PC 上安装 MATLAB 编程平台。确保您遵守以下链接(基于模型的设计工具箱)上可以找到的所有系统要求。按照安装和配置步骤中的安装步骤,现在您就可以开发自己的基于模型的设计应用程序了。
3.2 应用方案
Simulink 模型生成的代码下载到 S32K144 MCU 上。下图说明了此应用程序的硬件和软件之间的映射:
图 4. 硬件到软件的映射 |
应用程序通过 S32K144 MCU 的外设功能控制硬件组件。该板通过转接板连接到其他硬件模块。在NXP Cup 开发套件链接中,有关于如何在系统板和驱动板上连接摄像头、伺服和电机模块的信息。这样,软件生成的信号就会传输到需要配置和控制的模块(摄像头、伺服、电机)。
图5. 应用方案 |
打开Simulink模型,会显示如图6所示的结构。这些功能被分组到不同的区域,每个区域包含对其内部计算内容的简短描述。如前所述,它们之间存在着块和连接。根据摄像头提供的图像,控制汽车的转向和速度。有关每个子系统如何工作的更多详细信息将在以下章节中提供。
图 6.Simulink顶层系统 |
3.3 应用逻辑
应用程序逻辑由下面的框图描述。来自相机的信号被转换,并且数据存储在数组中。根据数组的元素(汽车前方图像的描述),算法将计算出汽车需要转向多少前轮。这以信号的占空比值来表示,该信号将直接传输到伺服模块。恒定速度,即汽车最大可达速度的 10%,它还作为控制两个后置电机的信号的占空比给出。
图7. 应用程序逻辑图 |
3.4 Simulink 模型组件
3.4.1 相机配置
摄像头模块在项目中具有重要意义,因为它用于扫描和处理汽车前方的轨迹。首先,对于应用的主要目的:控制汽车并保持其在所需方向上的位置,应配置摄像头模块以便它能够正确接收模拟信号。摄像机接收到模拟信号后,应用程序会将其转换为 128 个数字值,并据此做出控制决策。由于线扫描相机模块由 128 像素的线性传感器阵列和可调节镜头组成,因此转换有 128 个数字值。按照数据表的规定,对于相机模块配置,必须生成两个信号,一个时钟和一个串行输入(CLK 和 SI)。
| 图 8. 相机配置波形 |
为了验证此模块的功能,您应该打开 FreeMaster 并检查相机是否正常工作。打开 .pmp文件并观察记录器上conv变量的变化。在相机前放一张白纸,然后移动一个物体到它前面。每当相机发现深色时,其图形演变就会呈现出容易观察到的下降,如下图所示(蓝色图形)。
| |
图 9. 暗物体造成的凹陷 |
CLK信号
对于 CLK 信号的生成,使用 FTM (FlexTimer) 块。该模块生成一个 PWM 信号,其占空比作为输入( DTC - 占空比相机)。占空比必须为数据表中指定的 0.5 (50%)。然后PWM信号通过S32K144板传递到摄像头模块的相应引脚。检查Landzo_car 引脚到 S32K144EVB文件的映射和连接。
时钟信号的频率是根据数据表中规定的值范围来选择的。(fclock 在 5 至 2000 kHz 之间)。
| |
图 10.生成 CLK 信号 |
配置 FTM 块时,以下块参数将可用:
| |
图 11。FTM 块参数 |
FTM 功能有 4 个不同的模块,每个模块有 8 个成对分组的通道(每个通道可以选择一个输出引脚)。在检查了 Landzo_car 引脚与 S32K144EVB 文件中摄像头 CLK 对应引脚后,需要选择 FTM 模块及其引脚对(FTM0_CH1 表示该引脚连接到 FTM0 模块,引脚对 0-1)。还应该提到的是,在本应用程序的硬件设置中,相机模块连接到系统板的 CCD1 接口上。另有一个线性接口CCD2可供用户使用,具体使用方法见开发套件的说明。信号的频率也可以从频率设置组框中的编辑框中设置。根据数据表设置初始占空比值为 0.5。
每对通道有两种操作模式,可以从对选择旁边的弹出框中进行选择。这些模式被称为独立和互补。让我们对它们做一个简短的描述。
通过在互补模式下设置通道 n,通道 n+1 的输出将是通道 n 输出的反转,并且该模块将只有一个输入。在独立模式下,通道具有独立的输出,每个输出取决于该通道输入的占空比(在这种情况下,块有 2 个输入)。摄像头的CLK信号传输到硬件模块的单个引脚,因此不需要配置两个通道。只需一个即可输出所需的波形(在互补模式下,只会设置一对中的第一个通道;例如:通道 0、通道 2、通道 4、通道 6)。这就是为什么在这种情况下选择补充选项。输入将是 50% 的占空比,CLK 信号将在此基础上生成。通道 7 现在将是通道 6 的反向,但在下图中可以观察到通道 7 没有输出信号的引脚,因为当前应用中不需要反向的 CLK 信号。
| |
图 12. FTM 输出信号 |
SI信号
SI 信号的周期必须为 129 个 CLK 周期提供足够的时间,因为时序需要(数据表)。需要 129 个 CLK 周期来获取摄像机接收到的模拟信号的 128 个样本。为了满足正常运行模式的所有指定条件,根据需要创建 CLK 和 SI 波形的算法使用两个周期性中断定时器 (PIT) 块。
| 图 13。PIT块 |
中断表示由硬件或软件传输到处理器的信号,指示需要立即关注的重要事件。处理器通过暂停其当前活动、保存其状态并执行称为中断处理程序的函数来处理该事件,以此来响应该信号。中断是暂时的,中断处理程序完成后,处理器将恢复其正常活动。
PIT 块用于在计数器每次超时时触发中断处理程序执行。链接到 PIT 块的函数调用子系统代表中断处理程序内部的操作。中断处理程序将每隔 Period(us) 触发一次。对于第一个 PIT,它将每 20000us 触发一次,对于第二个 PIT,它将每 100us 触发一次。这意味着每次计数器达到块配置参数中指定的值时,就会触发函数调用子系统,执行其中的操作并重新初始化计数器。
| 图 14。PIT块参数 |
PIT功能有4个通道,它们基于独立的计数器实现。通道 0 不可供用户使用,因为它配置为在模型配置参数中指定的每个时间段触发整个模型的执行。
块参数中的最后一个复选框用于在应用程序初始化后立即启动计数器,而无需等待其他事件。
考虑到上述所有信息,按要求创建波形的时间涉及以下操作:
图 15。100us中断内的操作 |
图 16.相机配置时间 |
为此使用了一个 GPIO(通用输入/输出)块,它的作用是将给定的值作为输入发送到所选引脚,该引脚可以从块配置参数中的下拉菜单中选择。
| 图 17。将 SI 信号设置为低 |
图 18. GPIO 块参数 |
图 19。20ms 中断内的操作 |
3.4.2相机读数
配置完相机模块(按规定生成SI和CLK信号)后,即可开始数据采集。相机给出的信号被转换成数字值并存储在数组中。转换意味着使用 ADC(模数转换器)功能。考虑到这一点,应该将 ADC 的配置块添加到 Simulink 模型中。
| |
图 20。ADC配置块 |
S32K144的ADC有两个模块(ADC0、ADC1),每个模块最多有16个外部模拟输入通道,转换分辨率高达12位。摄像头模块连接到系统板的CCD 1线性接口。Landzo_car pins to S32K144EVB文件指定接收模拟信号的摄像头模块引脚为ADC1_CH10,因此应配置ADC 1模块。选择12位转换分辨率来提高采样数据的准确性。
模拟到数字的转换应该每 100us 发生一次,如时间部分所述,因为需要获取输入信号的 128 个样本(每次 C 变量增加时,都应在转换数组中存储一个值)。
图 21。转换开始 |
考虑到上一段中提到的事实,每次触发 PIT 块的子系统时,就会开始转换(使用 ADC 启动块),并且如果 C < 128,则采样数据将存储到数组中,该数组将包含做出伺服控制决策依据的信息。变量C是数组元素的索引,每个转换结果代表一个元素的值。按照该算法,创建了 Y 数组,它将在下一章中使用,其中描述了根据汽车前方轨道图像计算汽车应转向多少的算法。为了将值放入数组,使用赋值块。
| 图 22. 将转换值存储到 Y 数组 |
3.4.3摄像头转向算法
该算法提出了一种基本方法并使用了 if-else 逻辑。在进行简短描述之前,应该提到几件事。
对转换后的值 (Y) 的数组进行迭代。如果发现暗值(“最大白色”和当前元素的值之间的差大于阈值),则计算占空比以确定前轮应该向右转多少或向左转多少。如果在数组的前半部分发现暗值,则汽车应该向右转,如果在另一半部分发现暗值,则汽车应该向左转。但是相机从右到左拍摄图像,因此转动方向是相反的(如果在数组的前半部分发现暗值则向左,如果在数组的第二半部分发现暗值则向右)。
确定转向方式(左转或右转)后,将根据找到暗值的数组索引按比例计算 DTS。如果在数组的开头或结尾发现了代表深色的值,则意味着需要避开的东西并不正好在汽车前面,而是在汽车的一侧,因此小角度的转向应该是有效的,以使汽车保持在跑道上。另一方面,如果在数组中间发现较小的值,则应计算更大的转向角度,以确保避免深色和汽车偏离轨道。
| 图 23。用于计算DTS的Matlab函数 |
3.4.4设置伺服
然后将 DTS 传递到另一个 FTM_PWM_Config 块以生成控制伺服所需的信号。
| |
图 24。用于控制伺服的FTM块
|
为此,应使用以下参数配置该块,这些参数具有与第 3.4.1 章中提到的含义相同的含义:
| |
图 25。FTM 块参数 |
根据 S32K 适配器板的硬件连接和当前设置,仅使用一个伺服电机,这是文件中提到的 STEERINGPWM1,其中包含 Landzo 汽车引脚和 S32K144 板之间的映射。该模块分配的外设是FTM0_CH1,这意味着应该从配置参数中选择模块0以及0-1对通道。为了控制伺服器,只需要一个信号,因此不需要使用2个通道。这里可以使用互补模式,就像在相机 CLK 信号配置中一样,但这样做只能配置通道 0,而应用程序需要通道 1。通过选择独立模式,占空比输入将可用于该对的两个通道,并且由于只需要通道 1 来控制该模块,因此将为另一个通道提供等于 0 的输入。考虑到电机结构的特殊性,频率设置为 50Hz,并将占空比设置为 0.03(车轮不转向)作为初始值。
| |
| 图 26。FTM输出信号 |
3.4.5设置电机
对于两个后置电机,也适用同样的原理。占空比 (DT) 默认配置为 0.1 值,这将导致汽车以其最大速度的 10% 沿轨道移动。
控制电机的PWM信号频率为5000Hz。该值在原理图中所提到的电机驱动器数据表中指定的范围内。
| |
图 27。用于控制牵引电机的 FTM 模块 |
对于单个电机的控制,需要两个信号。电机驱动板的原理图表明,每个电机的控制使用了两个集成电路(BTN7960)。它们形成一个 H 桥,如下图所示。
| |
图 28。H桥 |
为了使电机旋转,电机连接点之间的电位差必须不为0。可以观察到每个集成电路都需要一个输入信号。向电路提供输入信号的引脚与 FTM 块的输出通道相对应。我们以第一个后置电机为例。它由 FTM 配置块控制,该块在以下通道上输出。
| |
图 29。FTM输出信号 |
通过将 FTM 配置块通道的通道 3 设置并保持为 0,等于 0 的输入将作为 IN 引脚上的输入传输到其中一个 BTN 模块(例如,传输到右边的模块)。这将触发右下方晶体管像闭合开关一样起作用。其上方的晶体管将保持断开状态,因此 OUT 点的电压将为 0V。通道 2 对应于另一个集成电路,该集成电路将在 IN 引脚上接收正输入(图片左侧)。现在,左上方的晶体管将像一个闭合的开关一样工作,而下面的晶体管将保持打开状态,从而使 OUT 点的电位表示正值(取决于作为 FTM 块输入的占空比)。因此,就会产生电位差,电机就会开始旋转。
3.4.6配置块
除此之外,该模型还需要一个配置块,用于配置目标MCU、编译器、系统时钟频率等。所有模型都需要一个配置块,因为它可以确保与目标的通信。
| 图 30。模型配置块 |
可以从块参数窗口的 MCU 选项卡中选择操作频率。对于此模型,它设置为 80Hz。还可以从 MCU 选项卡设置电路板型号、SRAM 和时钟频率。
| 图 31。配置块 MCU 选项卡 |
如果您想更改编译器和优化级别,请单击“构建工具链”选项卡并查看下图中显示的可用选项。从此选项卡中,您还可以选择模型的目标内存,可以是 FLASH 或 SRAM。
| |
图 32。配置块构建工具链选项卡 |
该应用程序通过 OpenSDA 下载到目标上。OpenSDA 是一个开放标准串行和调试适配器。它桥接 USB 主机和嵌入式目标处理器之间的串行和调试通信。确保选中“构建后下载代码”选项,以便查看应用程序在目标上运行的情况。
| |
图 33。配置块目标连接选项卡 |
有关此模型中使用的块的更多信息,请右键单击它们并选择菜单中的“帮助”选项。
4.如何使用FreeMaster调试应用程序
为了使用 FreeMaster 调试和管理来自应用程序的信息,必须在 Simulink 模型中使用 FreeMaster 配置块。
图 34。FreeMaster 配置块 |
区块参数配置如下图所示:
| 图 35。FreeMaster 配置块参数 |
接口字段指定应用程序和 FreeMaster 之间的通信接口。本例中选择了 LPUART1,因为它直接连接到 OpenSDA。OpenSDA 是一个开放标准串行和调试适配器。它桥接 USB 主机和嵌入式目标处理器之间的串行和调试通信。波特率表示应用程序和 FreeMaster 之间的数据传输速度,以 kbps 为单位。接收数据引脚和发送数据引脚应始终配置为 PTC6 或 PTC7(用于 LPUART1 接口),因为这些引脚连接到 OpenSDA 接收和发送引脚,如 HMI 映射中所指定。
图 36。OpenSDA 至 LPUART1 连接 |
通过单击“显示高级选项”复选框,可以使用多种设置,并且它们的功能都在帮助文件中指定,单击“块参数”选项卡中的“帮助”按钮后将打开该文件。
需要观察随时间变化的变量必须声明为 Volatile。已经添加到 FreeMaster 项目的变量是使用数据存储内存块声明的。
| |
图 37. 全局变量 |
可以从“块参数”选项卡中选择“易失性”选项。双击数据存储内存块后,单击信号属性选项卡,然后在代码生成组框中将存储类选项设置为易失性(自定义),如下图所示。
| 图 38。数据存储内存块参数 |
为了在每次触发子系统时调用 FreeMaster 数据采集,应在计算要记录的变量的子系统中添加一个 FreeMaster Recorder Call 块。因此,在子系统中放置了一个记录器块,该记录器块在 100us 时触发,用于记录 C 和 conv 变量的演变。
| 图 39。FreeMaster 录音电话 |
要检查 FreeMASTER 的功能,请打开 .pmp与 Simulink 模型同名的文件,然后单击红色的 STOP 按钮,以初始化与 S32K144 评估板的通信。
图 40。启动/停止 FreeMaster 通信 |
如果出现错误,请单击“项目”菜单并打开“选项”窗口。确保端口值与 S32K144 连接的端口值相同(您可以在设备管理器窗口中检查评估板的 COM 号)。还要确保速度与 FreeMaster 配置块的波特率相同。
| |
图 41。FreeMaster 通信设置 |
单击 MAP Files 选项卡并确保默认符号文件是 .elf从构建 Simulink 模型时创建的文件夹中获取文件。它应该被称为(your_model_name.elf)。
| |
图 42。FreeMaster .elf文件 |
一旦连接建立并且应用程序运行,您将观察到变量监视中的变量值如何变化。
单击窗口左侧的记录器选项,即可查看变量的图形演变。
您可以通过右键单击变量监视区域并选择监视属性选项来从监视中添加或删除变量。
右键单击录音机也将提供属性选项。使用它来选择您想要显示的变量和许多其他选项。
| |
图 43。FreeMaster 录音机属性 |
5. 自主智能汽车演示及改进建议
5.1 Demo
如果您想确保在将汽车实际驶上赛道之前一切都按预期运行,您可以使用 FreeMaster 工具来可视化项目变量的演变。考虑到每个设置都是按照指定进行的,以下是您应该看到的内容。
图 44。变量监视 |
两个后置电机的占空比以及摄像机 CLK 信号的占空比应始终具有恒定值(分别为 0.1 和 0.5)。DTS 的值应在 0.023 和 0.04 之间变化,如“摄像机转向算法”一章中所述。C 变量必须每 100us 增加一次,每 20ms 重置一次,这意味着当它达到 200 时,应该将其设置回 0。也可以使用记录器选项以图形方式观察这种演变。Conv变量和Y数组表示转换结果,conv图形演变的所有底部表示汽车视野中存在深色。
当前内容附有汽车沿赛道行驶一圈的演示视频。
5.2 改进领域
所提出的应用程序使用基本的 if-else 算法来根据汽车前方的轨道计算前轮的转向。在所提出的解决方案中,证明了可以使用 S32K144 板和基于模型的设计方法来控制车辆并使其保持在路径上的概念。通过开发一种控制汽车速度(目前速度处于恒定值)的方法,可以实现单圈时间的重大改进。为了获得恩智浦杯最快的自动驾驶汽车,可以设计和实施许多其他硬件和软件解决方案。
| NXP CUP - 线路跟随器,配备基于模型的设计工具箱,适用于 S32K 微处理器 | ||
Hi, [email protected]
感谢您对本文的反馈:smileyhappy:
当然,请随时向我询问有关该主题的任何问题。
此致,
Irina