当前位置: 首页 > article >正文

从Simulink到实物:单闭环直流调速仿真如何指导真实的Arduino/STM32控制?

从Simulink到Arduino如何将直流电机控制算法从仿真落地到真实硬件当你第一次在Simulink中看到那个完美的电机转速响应曲线时那种成就感是无可替代的。但很快一个更迫切的问题出现了这些漂亮的仿真结果如何变成手中那块Arduino或STM32开发板上的实际控制效果这正是许多嵌入式开发者和创客面临的最后一公里挑战。仿真世界和现实硬件之间存在着巨大的鸿沟。在Simulink中你的PI控制器运行在理想的连续时间域电机参数精确无误传感器反馈即时且无噪声。而当你转向Arduino或STM32时突然需要面对离散采样、PWM分辨率限制、传感器噪声、计算延迟等一系列现实问题。本文将带你跨越这道鸿沟从仿真概念到实际代码一步步构建一个真实的单闭环直流调速系统。1. 理解仿真与硬件实现的本质差异在开始移植代码之前我们必须清楚认识到仿真环境和真实硬件之间的关键差异。这些差异决定了为什么不能简单地把Simulink模型复制粘贴到微控制器上。连续时间 vs 离散时间Simulink默认使用连续时间模型而微控制器只能在固定的时间间隔采样周期进行测量和计算。这意味着我们需要将连续的PI控制算法离散化。理想传感器 vs 真实传感器仿真中的转速反馈是完美的而实际使用的编码器或测速发电机会有量化误差、噪声和非线性。例如常见的增量式编码器每转只能提供有限数量的脉冲这引入了速度测量的量化误差。无限精度 vs 有限精度仿真中使用的是双精度浮点数而大多数微控制器的浮点运算能力有限特别是没有FPU的8位或低端32位MCU需要考虑定点数实现或优化计算顺序来减少精度损失。考虑一个典型例子在Simulink中你的PI控制器可能这样表示Kp 0.5; Ki 0.1; error setpoint - feedback; integral integral error*dt; output Kp*error Ki*integral;而在Arduino上你需要考虑dt如何准确测量使用micros()还是定时器中断积分项如何防止饱和anti-windup策略输出如何映射到PWM的有限分辨率8位10位如何处理计算过程中的溢出问题2. 从Simulink模型到离散化控制算法将连续时间的控制算法转换为适合微控制器实现的离散形式是成功移植的关键一步。让我们以最常见的PI控制器为例详细讲解这个转换过程。2.1 连续时间PI控制器回顾在Simulink中PI控制器的传递函数通常表示为Gc(s) Kp Ki/s对应的时域方程为u(t) Kp*e(t) Ki*∫e(t)dt其中u(t)是控制器输出e(t) r(t) - y(t)是误差信号设定值减去反馈值Kp是比例增益Ki是积分增益2.2 离散化方法前向欧拉法对于微控制器实现我们需要将这个连续时间方程离散化。最常用的方法是前向欧拉法它将积分近似为求和∫e(t)dt ≈ T * Σe[k]其中T是采样周期e[k]是第k个采样时刻的误差值因此离散时间的PI控制器可以表示为u[k] Kp*e[k] Ki*T*Σe[k]2.3 Arduino代码实现框架基于上述离散方程我们可以写出Arduino上的基本实现框架// PI控制器参数 float Kp 0.5; // 比例增益 float Ki 0.1; // 积分增益 float Ts 0.01; // 采样周期10ms // 控制器状态变量 float integral 0; float prevError 0; unsigned long prevTime 0; float computePI(float setpoint, float feedback) { // 计算时间间隔 unsigned long now micros(); float dt (now - prevTime) / 1e6; prevTime now; // 确保dt不会过大如第一次调用时 if(dt 0.1) dt Ts; // 计算误差 float error setpoint - feedback; // 积分项带抗饱和处理 integral error * dt; if(integral 100) integral 100; // 积分限幅 if(integral -100) integral -100; // PI计算 float output Kp * error Ki * integral; return output; }注意在实际应用中采样时间Ts应该通过定时器中断精确控制而不是依赖loop()的不确定时间间隔。上述代码简化了时间处理适合初步实验。2.4 离散化带来的额外考虑离散化引入了一些在连续时间仿真中不存在的问题采样频率选择根据香农采样定理采样频率至少应为系统带宽的2倍但实际应用中通常选择10倍以上。对于直流电机控制典型采样频率在100Hz-1kHz之间。量化效应微控制器的ADC和PWM都是有限分辨率的。例如Arduino Uno的10位ADC将模拟输入量化为0-102312V电压测量时每个步进代表约11.7mV。计算延迟从读取传感器到输出PWM之间存在计算延迟在高性能控制系统中需要考虑这种延迟的影响。3. 硬件接口与信号调理有了控制算法下一步是建立与真实电机系统的硬件接口。这一环节常常被仿真工程师忽视却是实物实现中最容易出问题的地方。3.1 典型硬件组成一个完整的直流电机速度控制系统通常包含以下硬件微控制器Arduino/STM32等电机驱动器如L298N、TB6612FNG或DRV8833电源足够功率的直流电源注意电机启动电流速度传感器光学编码器增量式或绝对式霍尔传感器测速发电机信号调理电路电平转换如5V到3.3V滤波电路降低传感器噪声隔离电路防止电机干扰影响MCU3.2 电机驱动接口以常用的L298N驱动模块为例与Arduino的连接方式如下L298N引脚Arduino引脚说明ENA9PWM速度控制IN18方向控制1IN27方向控制212V外部电源电机电源GND共地必须与Arduino共地对应的电机控制代码框架const int ENA 9; const int IN1 8; const int IN2 7; void setup() { pinMode(ENA, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); // 初始方向 digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } void setMotorSpeed(float speed) { // 限制速度范围 speed constrain(speed, -255, 255); // 设置方向 if(speed 0) { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); speed -speed; } // 输出PWM analogWrite(ENA, (int)speed); }3.3 速度测量实现速度测量通常有两种方法方法一编码器脉冲计数// 使用中断测量编码器脉冲频率 volatile long encoderCount 0; const int encoderPPR 12; // 编码器每转脉冲数 void encoderISR() { encoderCount; } float getSpeed() { static long lastCount 0; static unsigned long lastTime 0; unsigned long now micros(); long currentCount encoderCount; float dt (now - lastTime) / 1e6; if(dt 0.01) return 0; // 时间间隔太短不更新 float speed (currentCount - lastCount) / (dt * encoderPPR) * 60.0; // RPM lastCount currentCount; lastTime now; return speed; } void setup() { attachInterrupt(digitalPinToInterrupt(2), encoderISR, RISING); }方法二测速发电机电压测量const int speedPin A0; const float voltsPerRPM 0.00383; // 测速发电机常数 float getSpeed() { int raw analogRead(speedPin); float voltage raw * (5.0 / 1023.0); return voltage / voltsPerRPM; // RPM }提示无论哪种方法都应该添加低通滤波硬件RC滤波或软件数字滤波来消除噪声影响。一个简单的软件一阶低通滤波器实现float filteredSpeed 0; const float alpha 0.1; // 滤波系数(0α1) float getFilteredSpeed() { float speed getSpeed(); // 获取原始速度 filteredSpeed alpha * speed (1 - alpha) * filteredSpeed; return filteredSpeed; }4. 系统整合与参数调试现在我们已经有了控制算法、电机驱动接口和速度测量是时候将它们整合成一个完整的闭环控制系统了。4.1 主控制循环结构一个典型的闭环控制流程如下读取当前速度通过编码器或测速发电机计算控制量PI控制器输出应用控制量设置PWM占空比等待下一个控制周期void loop() { static unsigned long lastControlTime 0; unsigned long now millis(); // 固定时间间隔控制 if(now - lastControlTime 10) { // 10ms控制周期 float speed getFilteredSpeed(); // 获取滤波后的速度 float control computePI(targetSpeed, speed); // 计算PI输出 setMotorSpeed(control); // 应用控制 lastControlTime now; } // 其他任务如串口监控、参数调整等 monitorAndAdjust(); }4.2 参数调试技巧从Simulink仿真到实物实现控制参数通常需要重新调整。以下是实用的调试步骤先调比例P将Ki设为0逐渐增加Kp直到系统开始振荡然后取该值的50%作为初始P参数。再调积分I保持Kp不变逐渐增加Ki直到稳态误差消除且动态响应可接受。抗饱和处理添加积分限幅以防止长时间误差积累导致的控制量饱和。采样时间影响如果系统不稳定尝试降低采样频率增加Ts或调整参数。一个实用的调试技巧是通过串口实时监控关键变量void monitorAndAdjust() { static unsigned long lastPrintTime 0; if(millis() - lastPrintTime 100) { Serial.print(Target:); Serial.print(targetSpeed); Serial.print( Actual:); Serial.print(getFilteredSpeed()); Serial.print( Control:); Serial.println(currentControl); lastPrintTime millis(); } // 简单的串口参数调整 if(Serial.available()) { char cmd Serial.read(); if(cmd p) Kp 0.1; if(cmd P) Kp - 0.1; if(cmd i) Ki 0.01; if(cmd I) Ki - 0.01; Serial.print(New params: Kp); Serial.print(Kp); Serial.print( Ki); Serial.println(Ki); } }4.3 常见问题与解决方案问题1电机响应迟缓可能原因P增益太小解决方案逐步增加Kp观察响应改善问题2电机振荡可能原因P增益太大或积分时间太短解决方案降低Kp或Ki或增加采样时间问题3稳态误差无法消除可能原因积分增益不足或积分饱和解决方案增加Ki或检查积分限幅设置问题4高转速时控制效果差可能原因PWM频率太低导致电流纹波大解决方案提高PWM频率在Arduino上可使用analogWriteFrequency()问题5低速时速度测量不准可能原因编码器分辨率不足或测速发电机非线性解决方案使用更高分辨率编码器或添加低速补偿算法5. 进阶优化策略当基本控制系统工作正常后可以考虑以下进阶优化策略来提升性能。5.1 前馈控制在PI控制基础上增加前馈控制可以显著提高对设定值变化的响应速度。前馈控制直接根据设定值计算控制量而不需要等待误差出现。float computeFeedForward(float setpoint) { // 简单的前馈模型假设控制量与速度成正比 return setpoint * feedForwardGain; } float enhancedControl(float setpoint, float feedback) { float ff computeFeedForward(setpoint); float fb computePI(setpoint, feedback); return ff fb; }5.2 非线性PID对于存在明显非线性的系统如静摩擦力可以考虑非线性PID变种float nonlinearPID(float error) { // 死区补偿 if(fabs(error) deadZone) return 0; // 非线性增益 float gain Kp; if(fabs(error) threshold) gain * 2; return gain * error Ki * integral; }5.3 自适应控制对于负载变化大的应用可以实现简单的自适应策略void adaptParameters(float error, float control) { // 如果控制量饱和但仍有误差增加增益 if(fabs(control) maxControl fabs(error) 0.1) { Kp * 1.05; Ki * 1.05; } // 如果持续振荡减小增益 else if(oscillationDetected()) { Kp * 0.95; Ki * 0.95; } }5.4 状态观测器当无法直接测量所有状态变量时如只有位置测量但需要速度信号可以设计状态观测器// 简单的一阶观测器 float estimatedSpeed 0; const float observerGain 0.5; void updateObserver(float positionMeasure, float controlInput) { float error positionMeasure - estimatedPosition; estimatedPosition Ts * (estimatedSpeed observerGain * error); estimatedSpeed Ts * (controlInput - friction * estimatedSpeed); }6. STM32实现考虑虽然Arduino适合快速原型开发但STM32提供了更高性能的选择。以下是STM32实现的一些特殊考虑6.1 定时器配置STM32的定时器功能强大可以精确控制PWM和采样时间// STM32 HAL库定时器配置示例 TIM_HandleTypeDef htim1; void MX_TIM1_Init(void) { htim1.Instance TIM1; htim1.Init.Prescaler 84-1; // 84MHz/84 1MHz htim1.Init.CounterMode TIM_COUNTERMODE_UP; htim1.Init.Period 1000-1; // 1MHz/1000 1kHz PWM htim1.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; HAL_TIM_PWM_Init(htim1); } // 启用PWM通道 HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1);6.2 编码器接口STM32的定时器可以直接连接编码器硬件计数脉冲TIM_Encoder_InitTypeDef sConfig {0}; TIM_MasterConfigTypeDef sMasterConfig {0}; void MX_TIM3_Init(void) { htim3.Instance TIM3; htim3.Init.Prescaler 0; htim3.Init.CounterMode TIM_COUNTERMODE_UP; htim3.Init.Period 65535; htim3.Init.ClockDivision TIM_CLOCKDIVISION_DIV1; sConfig.EncoderMode TIM_ENCODERMODE_TI12; sConfig.IC1Polarity TIM_ICPOLARITY_RISING; sConfig.IC1Selection TIM_ICSELECTION_DIRECTTI; sConfig.IC1Prescaler TIM_ICPSC_DIV1; sConfig.IC1Filter 0; HAL_TIM_Encoder_Init(htim3, sConfig); HAL_TIM_Encoder_Start(htim3, TIM_CHANNEL_ALL); }6.3 性能优化技巧使用硬件FPU如果STM32带有FPU启用它可以显著提高浮点运算速度。DMA传输使用DMA处理ADC采样减少CPU开销。定点数运算对于没有FPU的型号考虑使用定点数运算// 定点数PI控制器示例 #define FIXED_SHIFT 8 #define FIXED_SCALE (1 FIXED_SHIFT) int32_t Kp_fixed 0.5 * FIXED_SCALE; int32_t Ki_fixed 0.1 * FIXED_SCALE; int32_t integral_fixed 0; int32_t computePI_fixed(int32_t setpoint, int32_t feedback) { int32_t error setpoint - feedback; integral_fixed (error * Ts_fixed) FIXED_SHIFT; // 抗饱和 if(integral_fixed 100 * FIXED_SCALE) integral_fixed 100 * FIXED_SCALE; if(integral_fixed -100 * FIXED_SCALE) integral_fixed -100 * FIXED_SCALE; int32_t output (Kp_fixed * error Ki_fixed * integral_fixed) FIXED_SHIFT; return output; }

相关文章:

从Simulink到实物:单闭环直流调速仿真如何指导真实的Arduino/STM32控制?

从Simulink到Arduino:如何将直流电机控制算法从仿真落地到真实硬件 当你第一次在Simulink中看到那个完美的电机转速响应曲线时,那种成就感是无可替代的。但很快,一个更迫切的问题出现了:这些漂亮的仿真结果,如何变成手…...

cool-admin(midway版)数据导入模板:Excel模板设计与导出

cool-admin(midway版)数据导入模板:Excel模板设计与导出 【免费下载链接】cool-admin-midway 🔥 cool-admin(midway版)一个很酷的后台权限管理框架,模块化、插件化、CRUD极速开发,永久开源免费,基于midway.js 3.x、typ…...

【AI】开源文字转语音(TTS)模型

目前开源界在文字转语音(TTS)领域非常活跃,特别是针对多角色对话、情感控制和声音克隆方面,涌现了几个非常强大的模型。 结合(多角色、好用、开源),以下几款目前(截至2026年4月&…...

Qwen3.5-2B轻量化优势展示:相同GPU下并发数提升300%实测数据

Qwen3.5-2B轻量化优势展示:相同GPU下并发数提升300%实测数据 1. 轻量化模型的核心价值 1.1 为什么需要轻量化模型 在AI应用落地过程中,模型部署成本一直是关键瓶颈。传统大模型虽然效果出色,但对硬件要求高、推理耗时长、并发能力有限&…...

保姆级教程:在OpenEuler 22.03 LTS-SP4上,用cephadm搞定Ceph Pacific集群部署

在OpenEuler 22.03 LTS-SP4上部署Ceph Pacific集群的完整指南 OpenEuler作为国产操作系统的代表,凭借其高性能和安全性,正逐渐成为企业级应用的首选。而Ceph作为开源的分布式存储解决方案,以其高可靠性和可扩展性赢得了广泛认可。本文将详细介…...

当相机位姿已知:利用COLMAP从稀疏到稠密重建的实战指南

1. 环境准备与数据格式转换 在开始COLMAP重建之前,我们需要确保环境配置正确,并完成相机位姿数据的格式转换。COLMAP支持Windows、Linux和macOS系统,但为了获得最佳性能,建议使用配备NVIDIA显卡的机器,并安装CUDA加速版…...

Fix | Resolving ImportError: libGL.so.1 Missing in Docker/Local Environments

1. 遇到libGL.so.1缺失报错怎么办? 最近在部署一个基于OpenGL的图形处理项目时,又双叒叕遇到了这个熟悉的报错:"ImportError: libGL.so.1: cannot open shared object file: No such file or directory"。这已经是这个月第三次碰到…...

从Simulink模型到神经网络:一个完整的数据驱动建模与验证实践

1. 为什么需要从Simulink模型转向神经网络? 在控制系统工程领域,Simulink模型一直是建模和仿真的黄金标准。但最近几年,越来越多的工程师开始尝试用神经网络来替代传统模型。这背后有几个关键原因: 首先,传统物理模型在…...

COMSOL激光打孔形貌优化:不同入射角设置方法与模型注释解析

COMSOL 不同激光入射角打孔形貌设置方法 模型内容:不同激光入射角度的设置 优势:视频教学和模型注释清晰明了,各个情况都有涉及可参考性极强,可以修改,收敛性已调至最优,本案例可进行拓展应用服务&#xff…...

基于MATLAB/Simulink的双馈异步感应发电机直接功率控制仿真探索

Direct_Power_Control_of_DFIG:基于MATLAB/Simulink的双馈异步感应发电机的直接功率控制仿真模型 仿真条件:MATLAB/Simulink R2015b在电力系统研究领域,双馈异步感应发电机(DFIG)因其独特的性能优势而备受关注。直接功…...

基于MATLAB的用于分析弧齿锥齿轮啮合轨迹的程序已调通,可直接运行并输出齿轮啮合轨迹及传递误差

158.基于matlab的用于分析弧齿锥齿轮啮合轨迹的输出齿轮啮合轨迹及传递误差程序已调通,可直接运行 1. 程序概述 本程序包实现了一套完整的弧齿锥齿轮齿面接触分析(TCA) 系统,主要用于分析大轮凸面与小轮凹面的啮合特性。程序由刘…...

深入Fly-By拓扑:为什么你的LPDDR4必须做Write Leveling?一次讲清时钟与数据对齐的核心原理

深入Fly-By拓扑:为什么你的LPDDR4必须做Write Leveling?一次讲清时钟与数据对齐的核心原理 在4266 Mbps的高速数据传输场景下,LPDDR4内存子系统如同一条需要精确调谐的八车道高速公路。当信号传输速率突破4GT/s时,皮秒级的时序偏差…...

I.MX6U-MINI开发板系统固化全流程:从uboot编译到rootfs烧录(附网络配置技巧)

I.MX6U-MINI开发板系统固化实战指南:从零构建到网络调优 第一次拿到I.MX6U-MINI开发板时,面对系统固化的多个环节总有种无从下手的感觉。作为嵌入式Linux开发的入门门槛,系统固化不仅关系到后续应用开发的基础环境,更是理解嵌入式…...

COMSOL相场法/水平集方法多孔介质两相驱替模型案例 附随机孔隙度几何程序 助力学习两相流驱替模拟

COMSOL相场法(/水平集方法)多孔介质驱替模型案例,可以提供随机孔隙度几何程序。 提供基于COMSOL中相场方法模拟多孔介质两相驱替(水气、油水等等)的算例(也可以定做水平集驱替的算例)&#xff0…...

Z-Image Turbo实际作品分享:城市风光生成效果

Z-Image Turbo实际作品分享:城市风光生成效果 本文所有内容均为技术效果展示,不涉及任何政治敏感内容,所有案例均为技术演示用途。 1. 效果概览:城市风光的AI艺术呈现 Z-Image Turbo作为基于Gradio和Diffusers构建的高性能AI绘图…...

LCC-LCC无线充电恒流/恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振...

LCC-LCC无线充电恒流/恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振补偿拓扑,闭环移相控制 1. 输入直流电压350V,负载为切换电阻,分别为50-60-70Ω,最大功率3.4kW,最大效率为93.6% 2. 闭环PI控制&…...

成为技术专家的捷径?不,只有长期主义的坚持

在软件测试领域,我们常常被一种“速成”的幻象所包围。铺天盖地的培训广告承诺“三个月精通自动化测试”、“六周成为性能测试专家”,各种“一招鲜”的测试工具和“万能”的测试框架被包装成通往成功的捷径。对于身处其中、渴望突破职业瓶颈的测试工程师…...

量子机器学习在医疗影像中的技术迷思与测试验证陷阱

当量子计算遭遇医学影像近年来,"量子赋能医疗影像"成为热门概念,宣称通过量子算法(如QSVM、量子卷积)可大幅提升病灶识别精度和图像重建效率。然而,作为软件测试从业者,我们需警惕技术炒作背后的…...

别再死记硬背Modbus了!用Python+Modbus-TCP/RTU模拟器5分钟搞懂数据帧

用PythonModbus模拟器5分钟实战协议帧解析 当你第一次接触工业通信协议时,那些晦涩的术语和抽象的数据帧结构是否让你望而生畏?作为在工业自动化领域工作多年的开发者,我完全理解这种挫败感。传统学习Modbus的方式往往从理论入手,…...

MIKE URBAN中如何添加污水管水质

管网中的水质一直是管网模型中的一个难题,很多群友也要求小编更新水质方面的内容,一方面,其实水质相关的内容官方资料已经很多了, 觉得没必要重复更新。另一方面,管道水质率定实在太难以率定,很难算的准确。…...

Cocos Creator 屏幕适配实战:从设计分辨率到完美适配的完整指南

1. 理解屏幕适配的核心概念 第一次用Cocos Creator做横屏游戏时,我盯着iPad和手机上完全变形的UI界面愣了半天。这才明白为什么老司机们总说:"屏幕适配不做,上线火葬场"。屏幕适配的本质是解决设计分辨率(美术产出资源时…...

浅谈MIKEURBAN计算进度条停止的解决方法

01 问题昨天晚上,一个同事拿着笔记本对着我说,为什么我的MIKE URBAN计算进度条一直停滞在5%,停止了。我说是不是兼容问题,要不重新安装下软件吧。最终还是很感谢某同事找到了解决方法。02 解决方法MIKE URBAN低版本的通常分为了32…...

别再死记参数了!深入Halcon measure_pos算子底层:从高斯滤波到亚像素边缘的完整推导

深入解析Halcon measure_pos算子:从数学原理到工程调优 在工业视觉检测领域,亚像素级边缘检测一直是核心难题。当我们使用Halcon这类专业工具时,measure_pos算子看似简单易用,但真正理解其底层机制的人却寥寥无几。本文将带您穿透…...

Open-Shell-Menu:让Windows界面回归高效与个性化的开源解决方案

Open-Shell-Menu:让Windows界面回归高效与个性化的开源解决方案 【免费下载链接】Open-Shell-Menu Classic Shell Reborn. 项目地址: https://gitcode.com/gh_mirrors/op/Open-Shell-Menu 当项目经理王工在Windows 11电脑上第5次点击"所有应用"按钮…...

聚焦18650电池点焊机:新能源产业焊接环节的核心设备

在新能源产业高速发展的当下,18650锂电池凭借其高能量密度、长循环寿命及稳定性能,成为电动汽车、储能系统、便携电子设备等领域的核心动力源。作为电池组装环节的关键设备,18650单节自动点焊机通过精密的焊接技术,将电池极耳与镍…...

给AI模型‘打补丁’:用‘上下文提示’和‘查询分解’两招,轻松提升多模态大模型的抗攻击能力

多模态大模型防御实战:用上下文提示与查询分解抵御图像对抗攻击 当你在社交媒体上传一张"猫"的照片,AI系统却识别为"狗"——这种看似无害的错误在医疗影像分析或自动驾驶场景中可能引发灾难。2024年CVPR会议揭示了一个关键发现&…...

103. ancher WebSocket 与 NGINX OSS 入口控制器的故障

Environment 环境 SUSE Rancher 2.10.3AWS EKS cluster AWS EKS 集群NGINX OSS Ingress Controller (oci://ghcr.io/nginx/charts/nginx-ingress) NGINX OSS 入口控制器(oci:// ghcr.io/nginx/charts/nginx-ingress) Situation 地理位置 After upgrad…...

102. 在控制平面主机名更改后恢复 Rancher 配置的 RKE2 集群

Environment 环境 Rancher provisioned RKE2 downstream cluster control plane node hostname changed, without removing the node from the cluster. Rancher 配置了 RKE2 下游集群控制平面节点的主机名更改,但未将该节点从集群中移除。 Procedure 程序It is …...

3大核心优势!猫抓视频捕获工具让流媒体解析效率提升100%

3大核心优势!猫抓视频捕获工具让流媒体解析效率提升100% 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓浏览器扩展是一款专业的网…...

低成本低功耗认证芯片推荐——LCS4110R

LCS4110R是以32位安全CPU内核为基础的高性价比安全芯片,符合EAL4安全等级设计要求,自带DES/TDES硬件协处理器。LCS4110R芯片是业内拥有自主设计的产品,集成内部文件系统,支持LKCOS系统,自主可控,供货稳定。…...