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

小知识点五、无刷电机闭环控制(电流)

0 前言

该部分只用于自学使用,作为笔记方便后续自查。
资料参考:http://dengfoc.com

硬件:2208云台电机+MT6701磁编码器

1 电流控制理论

1.1 待解决的问题

简单回顾一下在之前的学习中,我们通过 U q U_q Uq和电角度 θ \theta θ来控制电机转子旋转,那电流闭环控制在获取什么?为什么要用电流闭环控制,该控制的意义是什么?
首先要明确的是不管是闭环位置控制还是闭环速度控制,实际上都是通过目标位置或者目标速度计算相应的 U q U_q Uq,在根据编码器实时获取电角度计算三相电压,最后根据PWM模拟控制。
其次、直接力矩控制的时候,实际上之前都是电压力矩控制,该控制就是直接输入一个 U q U_q Uq的值进行控制。但这样控制实际上面临一个问题,由于电机的力矩没有传感器进行检测,因此电机的力矩实际上是开环的。
那么实际上电流闭环控制就是为了解决这样的问题。

1.2 如何解决

STEP1:
从目标出发,如果我知道此时此刻电机真正的电流 c u r r e n t _ I current\_I current_I并且我有一个目标电流 t a r g e t _ I target\_I target_I,那么根据前两节课的内容,我们可以通过PI控制,来进行电流闭环控制:
已知:目标电流( t a r g e t _ I target\_I target_I)、当前电流( c u r r e n t _ I current\_I current_I)、当前误差( e r r o r = t a r g e t _ I − c u r r e n t _ I ) error=target\_I-current\_I) error=target_Icurrent_I))、上一时刻误差( e r r o r _ l a s t = t a r g e t _ I − l a s t _ I ) error\_last=target\_I-last\_I) error_last=target_Ilast_I))
U q = k p ∗ e r r o r + k i ∗ ( s u m ( ( e r r o r + e r r o r _ l a s t ) ∗ t s ∗ 1 2 ) ) U_q=k_p*error+k_i*(sum((error+error\_last)*ts*\frac{1}{2})) Uq=kperror+ki(sum((error+error_last)ts21))

STEP2:
t a r g e t _ I target\_I target_I是我们给出的,那么接下来的问题就是 c u r r e n t _ I current\_I current_I如何获取的问题?
假设我们有一个传感器,可以实时获取电机的三相电流值( I A , I B , I C I_{A},I_{B},I_{C} IA,IB,IC).
那么就可以通过克拉克变换求出( I α , I β I_{\alpha},I_{\beta} Iα,Iβ)忘记的小伙伴可以去前面的章节自行查看(传送门)
I α = I A I_{\alpha}=I_{A} Iα=IA
I β = 1 3 × ( 2 I B + I A ) I_{\beta}=\frac{1}{\sqrt{3}}\times (2I_{B}+I_{A}) Iβ=3 1×(2IB+IA)
再通过帕克变换
I d = c o s ( θ ) I α + s i n ( θ ) I β I_{d}=cos(\theta)I_{\alpha}+sin(\theta)I_{\beta} Id=cos(θ)Iα+sin(θ)Iβ
I q = − s i n ( θ ) I α + c o s ( θ ) I β I_{q}=-sin(\theta)I_{\alpha}+cos(\theta)I_{\beta} Iq=sin(θ)Iα+cos(θ)Iβ
那么现在我们就得到了 I q I_q Iq

2 电流控制代码

1、头部分

#include <Arduino.h> 
#include "InlineCurrent.h"// 宏定义
#define _ADC_VOLTAGE 3.3f            // ADC参考电压(单位:伏特)
#define _ADC_RESOLUTION 4095.0f      // 12位ADC的分辨率(2^12-1=4095)
#define _ADC_CONV ( (_ADC_VOLTAGE) / (_ADC_RESOLUTION) ) // ADC计数值转电压的转换系数
#define NOT_SET -12345.0             // 特殊标记值,用于标识未设置的参数
#define _isset(a) ( (a) != (NOT_SET) ) // 检查参数是否已设置的宏

2、根据电机编号初始化电流检测参数

CurrSense::CurrSense(int Mot_Num)
{if(Mot_Num == 0) // 电机0的配置(三相电流检测){pinA = 35;     // A相电流检测引脚(ADC1_CH7)pinB = 33;     // B相电流检测引脚(ADC1_CH5)pinC = 32;     // C相电流检测引脚(ADC1_CH4)_shunt_resistor = 0.01;  // 分流电阻值(单位:欧姆)amp_gain  = 50;          // 电流检测运放增益倍数// 计算电压到电流的转换系数:1/(分流电阻*运放增益)volts_to_amps_ratio = 1.0f /_shunt_resistor / amp_gain; // 各相增益系数(符号取决于硬件连接方式):// - A/B相:负号表示电流方向与检测电路相反// - C相:正号表示同向gain_a = volts_to_amps_ratio * -1;  // A相转换系数(含方向)gain_b = volts_to_amps_ratio * -1;  // B相转换系数(含方向)gain_c = volts_to_amps_ratio;       // C相转换系数}if(Mot_Num == 1) // 电机1的配置(两相电流检测){pinA = 35;     // A相电流检测引脚pinB = 34;     // B相电流检测引脚(ADC1_CH6)// 注意:未设置pinC,表示使用两相检测_shunt_resistor = 0.01;  amp_gain  = 50;          volts_to_amps_ratio = 1.0f /_shunt_resistor / amp_gain; // 增益系数设置(同电机0)gain_a = volts_to_amps_ratio * -1;gain_b = volts_to_amps_ratio * -1;gain_c = volts_to_amps_ratio;  // 虽未使用但仍设置}
}

3、读取指定引脚的电压值(单位:伏特)(函数:analogRead)

float CurrSense::readADCVoltageInline(const int pinA){uint32_t raw_adc = analogRead(pinA);      // 读取ADC原始值(0-4095)return raw_adc * _ADC_CONV;               // 转换为实际电压值
}

4、初始化引脚

void CurrSense::configureADCInline(const int pinA,const int pinB, const int pinC){pinMode(pinA, INPUT);  // 设置A相为输入pinMode(pinB, INPUT);  // 设置B相为输入if( _isset(pinC) ) pinMode(pinC, INPUT); // 如果C相有效则设置
}

5、校准电流检测偏移量(消除零电流时的电压偏置)

void CurrSense::calibrateOffsets(){const int calibration_rounds = 1000; // 校准采样次数// 初始化偏移量offset_ia = 0;offset_ib = 0;offset_ic = 0;// 多次采样求平均for (int i = 0; i < calibration_rounds; i++) {offset_ia += readADCVoltageInline(pinA); // 累计A相电压offset_ib += readADCVoltageInline(pinB); // 累计B相电压if(_isset(pinC)) offset_ic += readADCVoltageInline(pinC); // 如果C相存在则累计delay(1); // 短暂延迟稳定信号}// 计算平均偏移电压(零电流时的基准电压)offset_ia = offset_ia / calibration_rounds; // A相偏移电压offset_ib = offset_ib / calibration_rounds; // B相偏移电压if(_isset(pinC)) offset_ic = offset_ic / calibration_rounds; // C相偏移电压
}

6、电流检测初始化入口

void CurrSense::init(){configureADCInline(pinA, pinB, pinC); // 配置ADC引脚calibrateOffsets();                   // 执行偏移校准
}

7、获取三相电流值(单位:安培)

void CurrSense::getPhaseCurrents(){// 计算A相电流:(测量电压 - 偏移电压) * 转换系数current_a = (readADCVoltageInline(pinA) - offset_ia) * gain_a;// 计算B相电流current_b = (readADCVoltageInline(pinB) - offset_ib) * gain_b;// C相处理:如果未设置引脚则电流为0,否则正常计算current_c = (!_isset(pinC)) ? 0 : (readADCVoltageInline(pinC) - offset_ic) * gain_c;
}

相关文章:

小知识点五、无刷电机闭环控制(电流)

0 前言 该部分只用于自学使用&#xff0c;作为笔记方便后续自查。 资料参考&#xff1a;http://dengfoc.com 硬件&#xff1a;2208云台电机MT6701磁编码器 1 电流控制理论 1.1 待解决的问题 简单回顾一下在之前的学习中&#xff0c;我们通过 U q U_q Uq​和电角度 θ \the…...

Java 编程之备忘录模式

前言 有时候&#xff0c;我们真希望人生能有“CtrlZ”。在日常生活中&#xff0c;我们经常使用“撤销”功能&#xff0c;例如在写 Word、画图、写代码时一不小心操作失误&#xff0c;就希望能回到之前的状态。这种**“状态快照 恢复”**机制&#xff0c;在设计模式中就叫做&a…...

SQL SERVER存储过程

什么是存储过程 SQL 存储过程&#xff08;Stored Procedure&#xff09;是一个在数据库中预编译并存储的一组 SQL 语句。它们可以包含查询、插入、更新、删除等数据库操作&#xff0c;甚至包括控制流语句&#xff08;如条件判断、循环等&#xff09;。存储过程可以通过调用来执…...

Vue样式绑定与条件渲染详

一、Vue样式绑定 在Vue中&#xff0c;我们可以通过多种方式动态地绑定样式&#xff0c;让界面根据数据状态变化而自动更新样式。 1. class样式绑定 (1) 字符串写法 适用场景&#xff1a;样式的类名不确定&#xff0c;需要动态指定 <template><div><!-- 绑定…...

python基于协同过滤的动漫推荐系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

光场操控新突破!3D 光学信息处理迎来通用 PSF 工程时代--《自然》子刊:无需复杂算法,这一技术让 3D 光学成像实现 “即拍即得”念日

导语 在光学成像领域&#xff0c;如何突破分辨率与成像速度的瓶颈&#xff0c;一直是科研人员探索的焦点。近日&#xff0c;加州大学洛杉矶分校&#xff08;UCLA&#xff09;的研究团队在《Light: Science & Applications》发表论文&#xff0c;提出了一种通用点扩散函数&a…...

ubuntu20.04如何给appImage创建快捷方式

ubuntu20.04如何给appImage创建快捷方式 1. 确保AppImage是可执行的 chmod x /path/to/your/appimage2. 创建.desktop文件 在~/.local/share/applications/目录下创建一个新的 .desktop 文件&#xff1a; vi ~/.local/share/applications/your-appname.desktop添加以下内容…...

网络安全之SQL RCE漏洞

引言 堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也称为跳板机或运维安全审计系统&#xff0c;是一种用于管理和控制对内部网络资源访问的安全设备。它的主要作用是作为运维人员访问内部服务器和网络设备的唯一入口&#xff0c;通过集中化的身份认证、权限管理和…...

DeepSeek网页版随机点名器

用DeepSeek帮我们生成了一个基于html5的随机点名器&#xff0c;效果非常棒&#xff0c;如果需要加入名字&#xff0c;请在代码中按照对应的格式添加即可。 提示词prompt 帮我生成一个随机点名的HTML5页面 生成真实一点的名字数据 点击随机按钮开始随机选择 要有闪动的效果 &…...

Elasticsearch索引字段的类型

在 Elasticsearch 中&#xff0c;索引字段的类型&#xff08;即 Mapping 中的字段类型&#xff09;对搜索和存储性能影响很大。下面是各种常用数据类型的用途及推荐使用场景总结&#xff1a; 1. keyword 类型&#xff08;精确匹配&#xff09; 适合数据&#xff1a; 不需要分词…...

大模型在慢性病毒性肝炎预测及诊疗方案制定中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、慢性病毒性肝炎概述 2.1 疾病定义与分类 2.2 发病机制与病理特征 2.3 流行病学现状 三、数据收集与预处理 3.1 数据来源 3.2 数据清洗 3.3 特征工程 四、大模型选择与构建 4.1 模型选择依据 4.2 模型…...

DAY 43 复习日

浙大疏锦行https://blog.csdn.net/weixin_45655710 第一步&#xff1a;寻找并准备图像数据集 在Kaggle等平台上&#xff0c;你可以找到大量用于图像分类任务的数据集&#xff0c;例如英特尔图像分类数据集 (Intel Image Classification) 或手写数字识别数据集 (Digit Recogni…...

SQL学习笔记3

SQL常用函数 1、字符串函数 函数调用的语法&#xff1a;select 函数&#xff08;参数); 常用的字符串函数有&#xff1a; 拼接字符串&#xff0c;将几个字符串拼到一起&#xff1a;concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…...

JVM调优实战 Day 7:JVM线程分析与死锁排查

【JVM调优实战 Day 7】JVM线程分析与死锁排查 文章标签 jvm调优, 线程分析, 死锁排查, JVM监控, Java性能优化, JVM参数配置 文章简述 在Java应用的高并发场景中&#xff0c;线程管理与死锁问题往往是性能瓶颈的根源。本文作为“JVM调优实战”系列的第7天&#xff0c;深入解析…...

Android-Layout Inspector使用手册

Layout Inspector Android Layout Inspector 是 Android Studio 中用于调试应用布局的工具 启动方法&#xff1a; 通过下载Layout Inspector插件&#xff0c;在 “View - Tool Windows - Layout Inspector” 或 “Tools - Layout Inspector” 启动。 主要界面区域&#xff1a…...

【51单片机5毫秒定时器】2022-6-1

缘由单片机的代码&#xff0c;求大家来帮帮我-编程语言-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断…...

Flutter 多平台项目开发指南

Flutter 多平台项目开发指南 本指南将帮助你从 0 到 1 创建并适配一个支持 Android / iOS / Web / Windows / macOS / Linux 的 Flutter 多平台项目。 ✅ 一、创建支持多平台的 Flutter 项目 flutter create my_multi_platform_app cd my_multi_platform_app默认会生成支持以…...

Mac电脑如何搭建基于java后端的开发的各种工具服务

1. 确认Mac的CPU架构 首先&#xff0c;确认您的Mac是使用Intel还是Apple Silicon&#xff08;如M1芯片&#xff09;架构&#xff1a; uname -m如果返回x86_64&#xff0c;表示是Intel架构。如果返回arm64&#xff0c;表示是Apple Silicon架构。 2.安装IDEA Download Intelli…...

深入解析前端 Meta 标签:HTML 的隐形守护者与功能大师

在构建现代网页时&#xff0c;我们常常关注炫目的视觉效果、复杂的交互逻辑或强大的框架&#xff0c;却容易忽略那些深藏于 <head> 之中、看似不起眼的 <meta> 标签。这些标签如同网页的隐形守护者&#xff0c;无声地承担着定义文档元数据、指导浏览器行为、优化搜…...

CRON表达式编辑器与定时任务实现技术文档

1. 前端CRON表达式编辑器组件 CronExpressionEditor.vue组件是系统中用于创建和编辑CRON表达式的核心UI组件&#xff0c;它提供了直观的界面来生成复杂的定时任务表达式。 1.1 组件结构与状态管理 // 核心状态变量 const second ref<string>(0); const minute ref&…...

45. 跳跃游戏 II

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...

《解锁AudioSet:开启音频分析的无限可能》

音频新时代的 “密钥”&#xff1a;AudioSet 登场 在科技飞速发展的今天&#xff0c;音频作为信息传播与交互的关键媒介&#xff0c;早已渗透到现代科技的各个角落。从智能手机中的语音助手&#xff0c;让我们通过简单的语音指令就能查询信息、发送消息&#xff0c;到智能家居系…...

环境太多?不好管理怎么办?TakMll 工具帮你快速切换和管理多语言、多版本情况下的版本切换。

本篇文章主要介绍一款环境管理工具&#xff0c;即TakMll&#xff0c;通过简单的入口命令 “tkm” 即可快速的管理多种语言下、多种版本的环境切换&#xff0c;诸如快速切换PHP、同时存在java、mave等不同版本。 作者&#xff1a;任聪聪 日期&#xff1a;2025年6月26日 TakMll 特…...

spring-ai 1.0.0 (1)模型调用能力

听说1.0是一个非常好用的版本&#xff0c;最后还是扛不住听说的压力&#xff0c;为了落实自己悬浮心理&#xff0c;自己还是着手实践一下了。 第一步pom集成&#xff1a; 参考spring-projects/spring-ai | DeepWiki维基以及官方文档入门 &#xff1a;&#xff1a; Spring AI …...

如何在 Manjaro Linux 上启用 AUR 仓库来安装软件包

Manjaro 是基于 Arch 的系统&#xff0c;是了解和学习 Arch Linux 命令的绝佳方式。它自带所有流行的桌面环境界面&#xff0c;无论是 XFCE 还是 Gnome 的爱好者&#xff0c;都可以在 Manjaro 中直接使用。 Manjaro 或 Arch Linux 的默认软件包管理器是 Pacman&#xff0c;我们…...

简单使用python

本文章没有深入探讨python&#xff0c;只说语法格式&#xff0c;合适于有其他编程语言的基础、并想快速使用python的人查看。 一、print() 用于打印信息&#xff0c;括号中可以是数学运算表达式或者字符串&#xff08;或者说是文字&#xff09;。 print(hello!) 1.1、转义字…...

2025服务端java搭建篇:蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝

2025服务端java搭建篇&#xff1a;蜻蜓I即时通讯系统私有化部署深度指南-优雅草卓伊凡|麻子|贝贝 前言 蜻蜓I即时通讯系统是一款不依赖第三方服务的私有化即时通讯解决方案&#xff0c;本指南将详细介绍如何使用宝塔面板在CentOS系统上完成系统的完整部署。私有化部署意味着您…...

用Streamlit开发第一个Python应用程序

用Streamlit开发第一个Python应用程序 Using Streamlit to Develop the First Application in Python By JacksonML 1.Streamlit简介 Streamlit是个新出世的、功能强大的Python第三方库&#xff0c;将为基于Web的Python应用程序大放异彩。 Streamlit官网主页面如下&#x…...

IDEA + Spring Boot + javadoc 实例应用

1、添加 javadoc 插件 依赖 pom.xml <build><plugins><!-- javadoc 插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-javadoc-plugin</artifactId><version>3.6.3</version><…...

【机器学习深度学习】交互式线性回归 demo

目录 一、环境准备 二、Demo 功能 三、完整交互 demo 代码 3.1 执行代码 3.2 示例交互演示 3.3 运行结果 3.4 运行线性图 使用 PyTorch 构建交互式线性回归模型&#xff1a;输入数据、拟合直线、图像可视化并实现实时预测&#xff0c;助你深入理解机器学习从数据到模型的…...

新手向:Anaconda3的安装与使用方法

我们在刚开始接触Python时使用的是Python的直接编译器,如果我们需要进行其他的项目编写往往需要使用另一个版本的Python ,这样反复的下载很是麻烦并且还会造成系统变量的紊乱.这次我们引入Anaconda3,可创建虚拟的Python环境,满足不同项目的需要,当不用的时候可以直接放心删除不…...

详解零拷贝

目录 一、用户态&#xff08;User Mode&#xff09;和内核态&#xff08;Kernel Mode&#xff09; 1.1 用户态 (User Mode)&#xff1a; 1.2 内核态 (Kernel Mode)&#xff1a; 1.3 关键交互&#xff1a;系统调用 (System Call) 二、为什么需要区分用户态和内核态&#x…...

微服务常用的基础知识

1.微服务介绍 1.1 产生背景 随着互联网的发展&#xff0c;网站应用的规模不断扩大&#xff0c;传统单体架构逐渐难以应对大型网站高并发、高扩展性等需求&#xff0c;于是分布式系统架构应运而生。Spring Cloud 就是在这种背景下诞生的&#xff0c;它利用 Spring Boot 的开发便…...

【开源工具】Windows一键配置防火墙阻止策略(禁止应用联网)| 附完整Python源码

🛡️【开源工具】Windows一键配置防火墙阻止策略(禁止应用联网)| 附完整源码 🌈 个人主页:创客白泽 - CSDN博客 🔥 系列专栏:🐍《Python开源项目实战》 💡 热爱不止于代码,热情源自每一个灵感闪现的夜晚。愿以开源之火,点亮前行之路。 🐋 希望大家多多支持,…...

6月份最新代发考试战报:思科华为HCIP HCSE 考试通过

6月份最新代发考试战报&#xff1a;思科华为HCIP HCSE 考试通过 H19-423 HCSA-Presales-IP Network 数通考试通过&#xff0c; H12-725 HCIP-Security安全 考试通过&#xff0c;H13-121 HCIP-Kunpeng Application Developer鲲鹏计算 考试通过&#xff0c;CCNP 350-401考试通过…...

本地部署开源时间跟踪工具 Kimai 并实现外部访问( Windows 版本)

Kimai 是一款开源的时间跟踪工具&#xff0c;它易于使用&#xff0c;并提供了强大的报告功能&#xff0c;在个人和团队记录工作时间、项目时间和活动时间等之后可以帮助用户了解他们是如何花费时间的&#xff0c;从而提高生产力和效率。本文将详细介绍如何在 Windows 系统本地部…...

SpringBoot 中 @Transactional 的使用

SpringBoot 中 Transactional 的使用 一、Transactional 的基本使用二、Transactional 的核心属性三、使用避坑&#xff08;失效场景&#xff09;3.1 自调用问题3.2 异常处理不当3.3 类未被 Spring 管理3.4 异步方法内使用失效 四、工作实践4.1 事务提交之后执行一些操作4.2 事…...

Mac电脑安装iTerm2通过rz命令上传文件到远程服务器

背景 闲着没事买了个云服务器玩&#xff08;京东云轻量云主机&#xff09;&#xff0c;Mac本地搞了个java的jar包&#xff0c;想上传到云服务器&#xff0c;通过scp命令在Mac自带的【终端】上怎么都上传不了&#xff0c;如图。但是通过ssh命令&#xff08;ssh root主机IP &…...

供应链数据可视化大屏

在全球化与数字化转型的双重浪潮下&#xff0c;供应链管理正面临前所未有的挑战&#xff1a;黑天鹅事件频发、多环节协同效率低下、库存与成本难以平衡……如何让供应链更透明、更敏捷、更具韧性&#xff1f;供应链数据可视化大屏应运而生&#xff0c;成为企业破解管理痛点的关…...

A2O MAY登上央视《中国音乐TOP榜》舞台,展现新歌榜冠军实力

——A2O MAY凭借新歌《BOSS》登上中国QQ音乐新歌榜冠军后&#xff0c;成功出演CCTV音乐节目《中国音乐TOP榜》&#xff0c;以实力赢得瞩目。 由A2O Entertainment&#xff08;以下简称A2O&#xff09;推出的全球女团 A2O MAY&#xff08;成员包括朱晨予CHENYU、李诗洁SHIJIE、…...

关于如何在 Git 中切换到之前创建的分支的方法

文章目录 关于如何在 Git 中切换到之前创建的分支的方法一、确保你在项目目录中二、查看所有分支&#xff08;可选&#xff09;三、切换到目标分支四、如果分支仅在远程存在五、验证是否切换成功六、常见问题处理七、总结命令流程 PS:下次进入分支时&#xff0c;只需完成步骤1 …...

vue3+element-plus 组件功能实现 上传功能

一、整体功能概述 这段代码实现了一个基于 Vue 3 和 Element Plus 组件库的文件导入及预览功能模块。主要包含了一个主导入对话框&#xff08;用于上传文件、展示文件相关信息、进行导入操作等&#xff09;以及一个用于预览文件内容的预览对话框。支持导入特定格式&#xff08;…...

多相机人脸扫描设备如何助力高效打造数字教育孪生体?

在教育数字化转型浪潮中&#xff0c;数字孪生体作为现实教育场景的虚拟映射&#xff0c;正成为智慧教育发展的关键技术支点。传统教育模式面临师资资源分布不均、个性化教学难以覆盖、跨时空教学场景受限等痛点&#xff0c;而数字孪生体通过构建高仿真虚拟教育主体&#xff08;…...

高中成绩可视化平台开发笔记

高中成绩可视化平台&#xff08;1&#xff09; 一、项目概述 本系统是一个基于 PyQt5 和 Matplotlib 的高中成绩数据可视化分析平台&#xff0c;旨在帮助教师快速了解学生成绩分布、班级对比、学科表现等关键指标。平台支持文科与理科的数据切换&#xff0c;并提供多个维度的图…...

圆周期性显示和消失——瞬态实现(CAD c#二次开发、插件定制)

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Timers; [assembly: CommandClass(typeof(IfoxDemo.Commands))] namespace IfoxDemo {// 新增的圆形闪烁命令实…...

Spark SQL to_json 函数介绍

目录 前言函数介绍参数说明示例 前言 在Apache Hive中&#xff0c;并没有内置的to_json函数。在Apache Spark SQL中确实有to_json函数,它可以用来将结构化数据&#xff08;如结构化类型或MAP类型&#xff09;转换为JSON字符串。这个功能对于需要将表格数据输出为JSON格式的场景…...

5个免费的硬盘分区工具,操作简单功能全

电脑用久了&#xff0c;系统盘空间告急、数据盘混乱无序&#xff0c;很多人想重新分区&#xff0c;却又担心太复杂或怕搞坏硬盘。其实&#xff0c;只要用对工具&#xff0c;分区操作其实一点都不难。更重要的是&#xff0c;有很多免费的分区软件&#xff0c;不仅好用&#xff0…...

uniapp事件onLoad区分大小写

区分大小写。不然会不起作用。onLoad方法中的功能均不会被执行。 除了功能逻辑要检查外。大小写是要认真检查的一部分...

Flutter Riverpod 使用详细解析

&#x1f4da; Flutter 状态管理系列文章目录 Flutter 状态管理(setState、InheritedWidget、 Provider 、Riverpod、 BLoC / Cubit、 GetX 、MobX 、Redux) setState() 使用详解&#xff1a;原理及注意事项 InheritedWidget 组件使用及原理 Flutter 中 Provider 的使用、注…...

算法打卡 day4

4 . 高精度算法 性质&#xff1a;数组或者容器从低位往高位依次存储大整数&#xff0c;方便进位。 4.1 高精度加法 给定两个正整数&#xff08;不含前导 0&#xff09;&#xff0c;计算它们的和。 输入格式 共两行&#xff0c;每行包含一个整数。 输出格式 共一行&#xff0c;…...