永磁同步电机的磁场定向控制

目录

概述

通过系统仿真验证行为

探索模型架构

生成用于集成到嵌入式应用程序的控制器 C 代码

指定控制器模型的参考行为

创建 PIL 实现

准备用于 PIL 测试的控制器模型

测试生成的代码的行为和执行时间

结论


        此示例说明从电机控制算法生成 C 代码并验证其编译行为和执行时间的基本工作流和关键 API。使用处理器在环 (PIL) 仿真来确保 C 代码在集成到与电机硬件对接的嵌入式软件时按预期执行。虽然该工作流使用针对特定处理器的电机控制应用程序,但您可以将该工作流应用于另一个应用程序或处理器。

如图所示:

        该示例使用永磁同步电机的磁场定向控制算法。该控制方法在混合动力汽车、机械制造和工业自动化领域的电机驱动系统中很常见。

概述

        在此示例中,将从一种控制算法模型生成和验证 C 代码,您可以将此代码集成到与电机硬件对接所需的其他嵌入式软件。

        使用一种仿真环境来对闭环电机控制系统的行为进行建模和验证。设定控制系统行为后,从控制器模型生成 C 代码。在检查代码后,通过使用处理器在环 (PIL) 测试来评估其功能性行为和执行时间。

如图所示:

        为便于进行 PIL 测试,请选择测试信号来运行控制器模型并建立参考输出。查看一个针对 Texas Instruments™ F28335 处理器的 PIL 实现示例,该处理器通过串行连接与开发计算机上的 Simulink® 通信。可以基于此示例针对您自己的处理器创建一个 PIL 实现。要测量执行时间并根据仿真参考输出验证在嵌入式处理器上的代码的执行行为,请在 PIL 模式下运行控制器模型。

        在嵌入式处理器的最终实现中,您将所生成的控制器 C 代码与其他嵌入式软件(例如与电机硬件对接所需的外设和中断)进行集成。

注释

  • Simscape™ Electrical™ 是“通过系统仿真验证行为”一节中的系统仿真所必需的。对其他任务而言,它不是必需的。

  • Texas Instruments F28335 PIL 实现是一种可应用于其他处理器的参考方法。但如果您要直接使用此实现,则需要 Texas Instruments 提供的其他支持文件、编译器和工具。有关详细信息,请参阅此示例中的“创建 PIL 实现和向 Simulink 注册”。该参考 PIL 实现不需要 Embedded Coder® 的 Texas Instruments C2000™ 嵌入式目标功能,但鼓励 C2000 用户使用附加功能资源管理器安装 Texas Instruments C2000 支持包。

通过系统仿真验证行为

        在本节中,在闭环系统仿真中验证控制器。

        系统模型测试平台包括测试输入、嵌入式处理器、电力电子元件和电机硬件以及可视化。可以使用系统模型来运行控制器并探索其预期行为。可以使用以下命令来执行模型并绘制记录的信号。

open_system('PMSMSystem');
out_system = sim('PMSMSystem');
pmsmfoc_plotsignals(out_system.logsout);

如图所示:

        绘图显示电机在 motor_on 信号为真 (true) 之前一直处于静止状态。然后,电机以开环方式开始旋转,直到编码器的索引脉冲指示检测到已知位置。然后,控制器会转换到闭环操作,并且电机达到稳态速度。

探索模型架构

        本节探讨模型架构,包括如何设定数据、如何从测试平台对控制器分区以及如何调度控制器。此架构便于进行系统仿真、算法代码生成和 PIL 测试。

        数据定义文件会创建仿真和代码生成所需的 MATLAB® 数据。系统测试平台模型的 PreLoadFcn 回调会自动运行数据定义文件。

edit('pmsmfoc_data.m')

        在系统测试平台模型中,会将嵌入式处理器建模为外设和控制器软件的组合。

open_system('PMSMSystem/Embedded Processor');

如图所示:

        控制器软件在单独的模型中指定。在该模型中,Mode_Scheduler 子系统使用 Stateflow® 来调度 Motor_Control 算法的不同操作模式。

open_system('PMSMController');

如图所示:

        在 Motor_Control 子系统中,传感器信号转换为工程单位并传递给核心控制器算法。控制器算法会计算电压。然后,电压将转换为驱动信号。

open_system('PMSMController/Motor_Control');

如图所示:

        磁场定向控制器起主要控制作用。该控制器用低速率外环控制速度,用高速率内环控制电流。

open_system('PMSMController/Motor_Control/Field_Oriented_Controller');

如图所示:

        速度控制器外环以电流控制循环时间的倍数执行。可以查看指定这些采样时间的 MATLAB 变量:

fprintf('High rate sample time = %f seconds\n', ctrlConst.TsHi)
fprintf('Low rate sample time  = %f seconds\n', ctrlConst.TsLo)
High rate sample time = 0.000040 seconds
Low rate sample time  = 0.005000 seconds

        请注意,控制器算法中的最高速率为 25 kHz。

fprintf('High rate frequency = %5.0f Hz\n', 1/ctrlConst.TsHi)High rate frequency = 25000 Hz

生成用于集成到嵌入式应用程序的控制器 C 代码

        在本节中,生成并目视检查控制器的 C 代码函数。

        为便于集成,将控制器模型配置为单任务模式,以便可以使用一个函数调用来调用生成的代码。此函数可处理较低和较高的速率。所生成的控制器函数必须以高速采样时间执行。

        函数原型在模型配置参数中指定,输入和输出端口作为参数传递。可以查看控制器算法的函数设定。

mdlFcn = RTW.getFunctionSpecification('PMSMController');
disp(mdlFcn.getPreview('init'))
disp(mdlFcn.getPreview('step'))
Controller_Init ( )
error = Controller ( motor_on, command_type, current_request, * sensors, * pwm_compare )

        通过在生成的代码中使用全局结构体,可以访问磁场定向控制器的比例增益和积分增益。全局结构体在数据定义文件中指定。

disp(ctrlParams.Value)
disp(ctrlParams.CoderInfo)Current_P: 10Current_I: 10000Velocity_P: 0.0050Velocity_I: 0.0150Position_P: 0.1000Position_I: 0.6000StartupAcceleration: 1StartupCurrent: 0.2000RampToStopVelocity: 20AdcZeroOffsetDriverUnits: 2.2522e+03AdcDriverUnitsToAmps: 0.0049EncoderToMechanicalZeroOffsetRads: 0PmsmPolePairs: 4Simulink.CoderInfoStorageClass: 'ExportedGlobal'Identifier: ''Alignment: -1

        从模型生成 C 代码。

slbuild('PMSMController');
### Starting build procedure for: PMSMController
### Successful completion of build procedure for: PMSMControllerBuild SummaryTop model targets built:Model           Action                        Rebuild Reason                                    
================================================================================================
PMSMController  Code generated and compiled.  Code generation information file does not exist.  1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 29.573s

        使用生成的报告检查生成的 C 代码文件,并验证生成了正确的单步函数和初始化函数。还要验证参数结构体是作为全局变量创建的。

指定控制器模型的参考行为

        在本节中,指定测试输入和参考输出,以帮助验证 PIL 测试期间的行为和探查执行时间。

        制作控制器模型的一个本地副本,并加载一组在控制器内运行不同模式的测试输入信号。配置控制器模型以将记录的信号连接到输入端口。然后执行控制器模型,并将输出端口信号记录到工作区。

        指定参考行为和测试环境的控制器模型的配置参数将按如下所述进行更改。指定控制器模型设计和生成生产代码的模块和参数不会更改。但是,为避免修改安装的控制器模型的任何部分,请保存模型并将其名称更改为 PMSMControllerLocal.slx。

save_system('PMSMController','PMSMControllerLocal.slx')
close_system('PMSMSystem',0);
close_system('PMSMController',0);

如图所示:

        要探查执行时间,请选择一组将在控制器中执行关注路径的测试输入。获取这些测试输入和参考输出的一种方法是从系统仿真模型中记录它们。

in.motor_on      = out_system.logsout.getElement('motor_on').Values;
in.command_type  = out_system.logsout.getElement('command_type').Values;
in.command_value = out_system.logsout.getElement('command_value').Values;
in.sensors       = out_system.logsout.getElement('sensors').Values;
disp(in)motor_on: [1×1 timeseries]command_type: [1×1 timeseries]command_value: [1×1 timeseries]sensors: [1×1 struct]

        可以将信号附加到输入端口并将信号导入控制器模型中,以便它可以在系统模型中直接独立执行。这种方法的优点是您可以将控制器模型作为独立组件进行测试和验证,以便于重用和与其他系统模型或闭环测试平台进行集成。要详细说明或准备用于测试的控制器模型,请更改其配置参数,以附加输入信号并将日志信号记录在 MATLAB 工作区中。可以通过“配置参数”对话框进行更改,或以编程方式进行更改,如下所示。

set_param('PMSMControllerLocal',...'LoadExternalInput', 'on',...'ExternalInput', 'in.motor_on, in.command_type, in.command_value, in.sensors',...'StopTime','0.06',...'ZeroInternalMemoryAtStartup','on',...'SimulationMode', 'normal')
save_system('PMSMControllerLocal.slx')

        现在,可以执行控制器模型并绘制与 PWM Compare 输出端口相关联的信号。

out = sim('PMSMControllerLocal');
controller_mode = out.logsout.getElement('controller_mode').Values;
pwm_compare_ref = out.logsout.getElement('pwm_compare').Values;
pmsmfoc_plotpwmcompare(controller_mode, pwm_compare_ref)

如图所示:

        记录的输出用作 PIL 测试的参考行为。

        请注意,绘图带有注释,描述在每个时间步上有关控制器模式的信息。此模式信息在解释执行探查信息时非常有用。

创建 PIL 实现

        在本节中,学习并使用一个示例 PIL 实现。首先查看 Embedded Coder 提供的先决条件帮助文档。然后将示例 PIL 实现复制到您的本地文件夹中,并向 Simulink 注册该实现。查看用于开发 PIL 实现的方法,并探索相关联的文件以获得更多见解。如果使用 Spectrum Digital Inc. 的具有 Code Composer v4 的 eZdsp F28335 板卡和串行连接,可以配置 PIL 实现以与控制器模型配合使用。如果使用的是其他处理器,则可以使用 PIL 实现作为实现的起点。

        Create PIL Target Connectivity Configuration for Simulink中描述了创建自定义 PIL 实现的基础知识。熟悉使用 rtiostream API 的概念,以便在 PIL 测试期间在 Simulink(主机端)和嵌入式处理器(目标端)之间进行通信。请注意,Embedded Coder 提供默认 TCP/IP 实现的主机端驱动程序(适用于 Simulink 支持的所有平台)以及一个仅适用于 Windows® 的版本来支持串行通信。使用联编文件编译生成的代码。请参阅Customize Template Makefiles。要创建 PIL 实现,您必须在嵌入式环境中执行若干任务,包括编写目标端通信驱动程序、编写用于编译生成的代码的联编文件,以及自动化下载和执行编译的可执行文件。

如图所示:

        使用该方法创建的 PIL 实现可用于 Spectrum Digital Inc. 的 eZdsp F28335 板。该实现包含以下目标连接 API 组件:

  • 主机端通信 - 主机端连接驱动程序配置为使用串行通信。

  • 目标端通信 - 目标端通信需要使用 rtiostream 函数以及计时器访问函数的手写串行实现。

  • 编译过程 - 使用基于联编文件的方法来编译可执行应用程序。

  • 启动程序 - 使用 Code Composer Studio™ v4 (CCSv4) 的调试服务器脚本 (DSS) 实用工具完成下载和运行可执行文件。

PIL 实现分三个阶段进行迭代开发。在开发 PIL 实现时,可以使用类似的方法。

第 1 阶段:使用 CCSv4 创建串行通信应用程序

  • 安装 CCSv4 并验证它可以与 F28335 eZdsp 板卡连接。

  • 编写用于发送和接收串行数据的嵌入式应用程序。

  • 测试开发计算机和嵌入式应用程序之间的串行通信。

  • 确定编译器、链接器和打包器使用联编文件编译应用程序所用的命令和选项。

  • 使用 DSS 实用工具从 Windows 命令提示符下载并运行应用程序。

第 2 阶段:使用 MATLAB 实现和测试嵌入式串行 rtiostream 并启动自动化

  • 扩展串行应用程序以实现用于回显数据的 rtiostream API 函数。编写 rtIOStreamOpen 来执行常规板卡初始化,包括配置串行端口。

  • 使用 rtiostream_wrapper 函数验证通过嵌入式处理器从 MATLAB 发送和接收串行数据。

  • 通过使用系统命令调用 DSS 实用工具,从 MATLAB 下载并运行应用程序。

第 3 阶段:使用 Simulink 实现和测试连接配置

  • 创建一个连接配置类以配置主机端串行通信,指定必须在编译过程包含 rtiostream 应用程序中的哪些目标端代码文件,指定如何访问将用于收集探查数据的计时器,并集成调用 DSS 实用工具以启动嵌入式应用程序。

  • 创建一个工具设定联编文件 (target_tools.mk),它指定编译器、链接器和打包器的命令和选项。此联编文件将包含在模板联编文件 (target_tools.mk) 中。

  • 创建包含 target_tools.mk 的模板联编文件 (ec_target.tmf)。

  • 确定可能依赖于安装的参数,并将其存储为 MATLAB 预设项。

  • 创建一个 Simulink 自定义文件,用于指定 PIL 实现什么时候是有效的。

        与 PIL 实现相关联的文件包含在 Embedded Coder 中,但不在 MATLAB 路径上。要浏览这些文件,可以将它们复制到本地文件夹中。您可以通过将文件夹添加到 MATLAB 路径并刷新 Simulink 自定义来注册 PIL 实现。

addpath(genpath(fullfile('.','examplePilF28335')))
sl_refresh_customizations

        使用 MATLAB 预设项指定路径信息和主机串行 COM 端口号。如果直接使用 PIL 实现,则必须根据配置指定这些预设项。

setpref('examplePilF28335','examplePilF28335Dir', fullfile('.','examplePilF28335'));
setpref('examplePilF28335','CCSRootDir',          'C:\Program Files\Texas Instruments\ccsv4');
setpref('examplePilF28335','TI_F28xxx_SysSWDir',  'C:\Program Files\Texas Instruments\TI_F28xxx_SysSW');
setpref('examplePilF28335','targetConfigFile',    fullfile('.','examplePilF28335','f28335_ezdsp.ccxml'));
setpref('examplePilF28335','baudRate',            115200);
setpref('examplePilF28335','cpuClockRateMHz',     150);
setpref('examplePilF28335','boardConfigPLL',      10);
setpref('examplePilF28335','COMPort',             'COM4');

        请注意,TI_F28xxx_SysSWDir 预设项指向 Texas Instruments 在其 C2000 Experimenter Kit Application Software (sprc675.zip) 中提供的一个文件夹。这些文件不包括在 Embedded Coder 中。

        现在即可使用该 PIL 实现。

准备用于 PIL 测试的控制器模型

        查看用于注册 PIL 实现的自定义文件,设置模型的配置参数以使用 PIL 实现,并启用控制器输出和执行探查数据的记录。

        当开始 PIL 仿真时,Simulink 会检查注册的 PIL 实现是否有效。自定义文件指定哪些配置参数对应于有效的 PIL 实现。可以通过调用以下命令来浏览该实现的自定义文件。

edit(fullfile('.','examplePilF28335','sl_customization.m'));

        请注意,该文件指定使用 PIL 实现所需的硬件设备和模板联编文件的设置。可以修改控制器模型中的配置参数以匹配设置。可以通过“配置参数”对话框进行修改,或以编程方式进行修改,如下所示。

set_param('PMSMControllerLocal',...'ProdHWDeviceType', 'Texas Instruments->C2000',...'TemplateMakefile', 'ec_target.tmf',...'GenCodeOnly', 'off',...'SimulationMode', 'processor-in-the-loop (pil)')

        对于 PIL 仿真,请启用代码执行探查,从而将执行时间度量记录在变量 executionProfile 中。

set_param('PMSMControllerLocal',...'CodeExecutionProfiling', 'on',...'CodeExecutionProfileVariable','executionProfile',...'CodeProfilingSaveOptions','AllData');
save_system('PMSMControllerLocal.slx')

        现在,可以运行控制器模型的 PIL 仿真。

测试生成的代码的行为和执行时间

        在本节中,在 PIL 模式下运行控制器模型,并了解行为和执行的探查结果。验证编译的控制器代码的行为是否与参考仿真行为一致,然后验证代码的执行是否符合计时要求。

        可以运行模型并绘制 PIL 仿真结果。当您第一次运行该模型时,Embedded Coder 会生成算法代码,将算法代码与串行通信接口代码链接,编译嵌入式应用程序,将应用程序下载到板卡,并开始进行目标系统上的仿真。请注意,在后续的 PIL 仿真过程中,仅当更改模型时,才会重新生成代码。由于存在与串行通信接口相关联的开销,PIL 仿真的运行速度可能比普通模式仿真慢。

        以下 MATLAB 命令有意被注释掉,因为它们需要连接到硬件和使用前面所述的嵌入式开发工具。如果您连接了硬件并安装了嵌入式开发工具,请取消注释并执行这些行以运行模型,绘制结果,并验证其行为在数值上等同于普通模式仿真。否则,请继续阅读本节以了解 PIL 执行分析选项。

% UNCOMMENT THE BELOW LINES TO RUN THE SIMULATION AND PLOT THE RESULTS
% if exist('slprj','dir'), rmdir('slprj','s'); end
% out = sim('PMSMControllerLocal')
% pwm_compare_pil = out.logsout.getElement('pwm_compare').Values;
% pmsmfoc_plotpwmcompare_pil(controller_mode, pwm_compare_pil, executionProfile)

如图所示:

        上一张图是控制器 PWM Compare 的输出。请注意,PIL 仿真输出看起来与“建立控制器模型的参考行为”一节中所示的普通模式仿真输出相同。要检查数值等效性,可以从 PIL 仿真输出中减去普通模式仿真输出:

% UNCOMMENT THE BELOW LINE TO VERIFY NUMERIC EQUIVALENCE OF THE OUTPUTS
% pilErrorWithRespectToReference = sum(abs(pwm_compare_pil.Data - pwm_compare_pil.Data))
pilErrorWithRespectToReference =0     0     0

        下图是在每个仿真时间步中执行控制器模型所花费的时间。“Stand By”状态需要的时间最少。执行时间中存在周期性小峰值,这是因为控制器是多速率、单任务型。周期性峰值对应于在同一任务中同时运行基本速率和 5 毫秒速率代码所需的时间。

        由于控制器在嵌入式处理器上必须以 25 kHz 的速度执行,因此该算法必须在 40 微秒内完成执行(减去其他代码的额外余量要求,这些代码也可能在最终应用程序上执行)。探查结果表明,该算法将在为嵌入式环境的配置分配的时间内执行。

        现在已经验证,生成的代码可提供在数值上等同的结果,并满足测试用例的执行计时要求。

close_system('PMSMControllerLocal',0);
close_system('power_utile',0);

        此 PIL 实现中使用的 MATLAB 预设项在各 MATLAB 会话之间持久保留。如果要删除预设项,请运行以下命令:

rmpref('examplePilF28335');
rmexamplePilF28335hooks();

结论

        该示例使用永磁同步电机的磁场定向控制算法,说明如何使用系统级仿真和算法代码生成来探索控制器算法的功能性行为。该示例还展示嵌入式处理器的目标集成、功能测试和执行探查的一般方法。一旦算法行为正确,您就可以从控制器模型生成代码,并在目标处理器上测试和探查代码。要进行进一步测试,可以将验证过的算法代码和与电机硬件对接的嵌入式软件集成在一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进程间通信之匿名管道和命名管道的理解和实现【Linux】

进程间通信之匿名管道和命名管道的理解和实现 进程间通信什么是管道匿名管道代码实现管道的读写规则管道特点 命名管道创建命名管道代码实现 进程间通信 进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同…

【obj To 3DTiles 格式转换】 可以自定义经纬高、属性表等参数 (一)

目录 0 引言1 3DTiles数据2 objTo3DTiles2.1 工具的安装2.1.1 拓展:Node.js 和 npm 2.2 工具的使用2.2.1 输出成瓦片数据2.2.2 输出带有坐标参数的瓦片数据 3 查看3DTiles数据 🙋‍♂️ 作者:海码007📜 专栏:Cesiumfor…

谷歌DeepMind最新研究:对抗性攻击对人类也有效,人类和AI都会把花瓶认成猫!

人类的神经网络(大脑)和人工神经网络(ANN)的关系是什么? 有位老师曾经这样比喻:就像是老鼠和米老鼠的关系。 现实中的神经网络功能强大,但与人类的感知、学习和理解方式完全不同。 比如ANN表…

上海亚商投顾:创业板指再创调整新低 全市场超4700只个股下跌

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 三大指数1月5日集体调整,沪指午后跌超1%,创业板指一度跌逾2%,尾盘跌幅有所…

.net 开源混淆器 ConfuserEx

官网:ConfuserEx 下载地址:Releases yck1509/ConfuserEx GitHub 使用参考:https://www.cnblogs.com/zhangzhi19861216/p/3937434.html

Windows10安全中心图标的关闭方法

在Windows10​​​​​​​电脑中,用户可以选择关闭不必要的应用图标。现在,用户想要关掉安全中心图标,但不知道有什么方法能够成功关掉安全中心图标?下面小编给用户们带来Windows10系统安全中心图标的关闭方法步骤,帮…

c语言-库函数qsort()初识

目录 前言一、qsort()的介绍及使用1.1 qsort()的介绍1.2 qsort()的使用1.2.1 使用qsort|()对整型数组按照升序排序1.2.2 使用qsort()对整型数组按照降序排序1.2.3 使用qsort()对结构体数组数据进行排序 二、利用冒泡排序模拟实现对任何数据进行排序2.1 冒泡排序2.2 模仿qsort()…

【REST2SQL】04 REST2SQL第一版Oracle版实现

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 REST2SQL的第一个版本,只支持Oracle数据库,以后会逐步加入其它数据看的支持。 项目文件组织如下: 1 REST2SQL为项目主目录 …

leetcode动态规划问题总结 Python

目录 一、基础理论 二、例题 1. 青蛙跳台阶 2. 解密数字 3. 最长不含重复字符的子字符串 4. 连续子数组的最大和 5. 最长递增子序列 6. 最长回文字符串 7. 机器人路径条数 8. 礼物的最大价值 一、基础理论 动态规划其实是一种空间换时间的基于历史数据的递推算法&…

linux常见操作,and一些练习题加线上练习网站,无须配置linux.持续更新中。。。。

文章目录 cd命令相对路径特殊的路径表达符和cd一起使用pwdmore 查看文件内容支持翻页小技巧clear用户,用户权限 and 用户的切换如何创建用户 ls和通配符的使用利用通配符 *grep 过滤管道符 |如何学习Linux在线练习网站 https://www.lanqiao.cn/courses/1 cd命令 cd…

Basal前端梳理

Basalt前端逻辑梳理 TBB安装参考 https://zhuanlan.zhihu.com/p/480823197 代码注释参考 https://blog.csdn.net/qq_39266065/article/details/106175701#t7 光流追踪参考 https://blog.csdn.net/weixin_41738773/article/details/130282527 VI Odometry KLT tracking 原理 …

第九届中西部外语翻译大赛初赛阶段已经圆满结束

2023年第九届中西部外语翻译大赛(以下简称竞赛),于2023年12月30日至31日举行。历届中西部外语翻译大赛均由中西部翻译协会共同体指导发起,各省市译协共建学术指导委员会,获奖证书盖章单位由四川省翻译协会、广西翻译协…

c# 学习笔记 - 集合(List)

文章目录 1.概论1.1 List 特性1.2 .NET API 2. 基本使用2.1 样例 3. 添加类操作3.1 Insert() 4. 删除类操作4.1 Remove()4.2 RemoveAt() 5. 查找类操作6. 排序类操作6.1 Sort(Comparsion<T>) 7. 其他类操作 1.概论 1.1 List 特性 可通过索引访问的强类型列表&#xff0c…

STM32学习笔记二十二:WS2812制作像素游戏屏-飞行射击游戏(12)总结

至此&#xff0c;飞行射击游戏已经基本实现该有的功能&#xff0c;已经比较接近早期的商业游戏了。 如果采用脚本&#xff0c;可以完成关卡游戏&#xff0c;如果不用&#xff0c;也可以做成无限挑战游戏。 我们汇总一下制作的过程&#xff1a; 1、建模UML 2、主循环处理过程…

设计模式篇章(1)——理论基础

设计模式&#xff1a;在软件开发中会面临许多不断重复发生的问题&#xff0c;这些问题可能是代码冗余、反复修改旧代码、重写以前的代码、在旧代码上不断堆新的代码&#xff08;俗称屎山&#xff09;等难以扩展、不好维护的问题。因此1990年有四位大佬&#xff08;GoF组合&…

3的幂00

题目链接 3的幂 题目描述 注意点 无 解答思路 不断除以3直到除数或余数为0为止&#xff0c;判断除完后的数字是否为1 代码 class Solution {public boolean isPowerOfThree(int n) {while (n / 3 ! 0) {if (n % 3 ! 0) {return false;}n n / 3;}return n 1;} }关键点 …

对称加密技术有哪些类型

对称加密是一种加密方式&#xff0c;其加密和解密所使用的密钥是相同的。这种方式的特点是速度快&#xff0c;效率高&#xff0c;适合用于大量数据的加密和解密。对称加密算法有很多种&#xff0c;常见的有AES、DES、3DES等。 对称加密的应用场景非常广泛&#xff0c;下面是一些…

Linux下配置静态ip地址

问题&#xff1a;虚拟机重启后ip地址动态更新&#xff0c;导致连shell十分麻烦 解决&#xff1a; 1. 进入配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 2.1 修改配置 BOOTPROTOstatic ONBOOTyes2.2 新增配置 #ip地址(自定义) IPADDR192.168.149.131 #子网掩码 …

2023年12月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:移动路线 桌子上有一个m行n列的方格矩阵,将每个方格用坐标表示,行坐标从下到上依次递增,列坐标从左至右依次递增,左下角方格的坐标为(1,1),则右上角方格的坐标为(m,n)。 小明是个调皮的孩子,一天他捉来一只蚂蚁,不小心把蚂蚁…

一款开源的MES系统

随着工业4.0的快速发展&#xff0c;制造执行系统&#xff08;MES&#xff09;成为了智能制造的核心。今天&#xff0c;将为大家推荐一款开源的MES系统——iMES工厂管家。 什么是iMES工厂管家 iMES工厂管家是一款专为中小型制造企业打造的开源MES系统。它具备高度的可定制性和灵…