无刷电机在汽车领域的应用与驱动编程技术

文章目录

    • 引言
    • 一、核心应用场景
      • 1. 新能源汽车动力系统
      • 2. 底盘控制系统
      • 3. 车身与舒适系统
      • 4. 智能驾驶与安全系统
    • 二、无刷电机的技术优势解析
    • 三、无刷电机驱动编程基础
      • 1. 驱动原理
      • 2. 驱动架构
    • 四、核心控制算法与实现
      • 1. 六步换向法(梯形波控制)
        • 算法流程图
        • C语言实现
      • 2. 磁场定向控制(FOC)
        • 算法流程图
        • C语言实现
      • 3. 无传感器控制算法
        • 滑膜观测器算法
    • 五、关键控制技术
      • 1. 磁场定向控制(FOC)
      • 2. 无传感器控制
      • 3. CAN/LIN总线集成
    • 六、未来发展趋势
      • 1. 集成化设计
      • 2. 碳化硅(SiC)功率器件
      • 3. 轮毂电机
      • 4. AI预测性维护
    • 七、挑战与解决方案
    • 八、电机驱动编程最佳实践
      • 1. 实时性保障
      • 2. 代码结构设计
      • 3. 安全机制
    • 九、结论

引言

无刷电机(BLDC,Brushless DC Motor)凭借其高效率、高可靠性、低维护成本精准控制等优势,在汽车领域得到广泛应用,尤其在新能源汽车(EV/HEV)和智能化汽车系统中扮演核心角色。本文将全面分析无刷电机在汽车中的应用场景、技术优势,并深入探讨电机驱动编程的核心算法与实现。


一、核心应用场景

1. 新能源汽车动力系统

  • 主驱动电机

    • 应用:纯电动车(BEV)、插电混动车(PHEV)的主动力源。
    • 优势
      • 效率>95%(远超有刷电机的75-85%),延长续航里程;
      • 高功率密度:轻量化设计(如特斯拉Model 3采用永磁同步电机,功率密度达4.5kW/kg);
      • 宽调速范围:0-15,000 RPM+,适应高速巡航与急加速需求。
    • 案例
      • 特斯拉(Model S/3/Y)、比亚迪(汉EV)、蔚来(ET系列)均采用永磁同步电机(BLDC的一种)。
  • 增程器发电机

    • 应用:增程式电动车(REEV,如理想ONE)中的发电单元。
    • 作用:燃油发动机驱动BLDC发电,为电池充电或直接供电,消除里程焦虑。

2. 底盘控制系统

  • 电动助力转向(EPS)

    • 原理:BLDC替代液压系统,根据车速/方向盘转角提供精准助力。
    • 优势
      • 节能3-5%(对比液压系统);
      • 响应速度<10ms,支持L2+级自动驾驶(如车道保持)。
    • 案例:博世、捷太格特等供应商的EPS系统。
  • 电子制动系统(EHB)

    • 应用:线控制动(Brake-by-Wire),如特斯拉的iBooster。
    • 作用:BLDC驱动制动泵,实现精准制动力分配,支持能量回收。
  • 主动悬架/空气悬架

    • 应用:高端车型(如奔驰S级、奥迪A8)的悬架高度/阻尼调节。
    • 原理:BLDC控制空气压缩机或电磁阀,实时调整悬架软硬度。

3. 车身与舒适系统

  • 空调压缩机

    • 优势
      • 变频控制(0-100%无级调速),降低噪音;
      • 能效提升30%,减少电池负担(EV关键指标)。
    • 案例:电装、法雷奥的电动压缩机。
  • 冷却系统

    • 应用:电池/电机/电控(三电系统)的热管理。
    • 原理:BLDC驱动水泵/风扇,精准调节冷却液流量。
    • 重要性:防止电池热失控(如比亚迪刀片电池的液冷系统)。
  • 座椅/车窗/天窗

    • 应用:电动座椅调节、玻璃升降、全景天窗开合。
    • 优势:静音(<45dB)、防夹保护、位置记忆功能。

4. 智能驾驶与安全系统

  • 雷达/摄像头执行器

    • 应用:激光雷达扫描电机、摄像头云台调节(如蔚来ET7的Aquila超感系统)。
    • 要求:高精度控制(±0.1°)、快速响应(<50ms)。
  • 自动驻车(APA)

    • 原理:BLDC驱动转向轮,实现无人泊车轨迹控制。

二、无刷电机的技术优势解析

特性对汽车的价值对比有刷电机
无电刷磨损寿命>10万公里,免维护有刷需定期更换碳刷(寿命约1万公里)
高效率降低能耗,提升EV续航效率低15-20%
高扭矩密度小体积大功率,节省空间相同功率体积大30%
精准控制支持复杂算法(如FOC矢量控制)控制精度低,响应慢
低EMI干扰减少对车载电子设备的影响火花干扰强

三、无刷电机驱动编程基础

1. 驱动原理

无刷电机驱动依赖于电子换向,通过功率半导体(MOSFET/IGBT)替代传统电刷,实现定子绕组的顺序通电。核心组件包括:

  • 转子位置传感器:霍尔传感器或编码器
  • 控制器(ECU):执行换向逻辑和闭环控制
  • 三相逆变器:由6个功率管组成(通常为三相全桥)

2. 驱动架构

位置反馈
三相逆变器
驱动电路
霍尔传感器
编码器
Q1 Q2
Q3 Q4
Q5 Q6
预驱动器
保护电路
电源管理
MCU
驱动电路
三相逆变器
无刷电机
位置反馈

四、核心控制算法与实现

1. 六步换向法(梯形波控制)

六步换向法是最基础的无刷电机控制方式,通过检测转子位置,按顺序导通定子绕组。

算法流程图
扇区1
扇区2
扇区3
扇区4
扇区5
扇区6
开始
初始化硬件
读取霍尔信号
判断扇区
导通A+C-
导通A+B-
导通C+B-
导通C+A-
导通B+A-
导通B+C-
更新PWM占空比
延时控制周期
C语言实现
#include <stdint.h>
#include "stm32f4xx_hal.h"// 定义霍尔信号状态与扇区对应关系
typedef enum {SECTOR_1 = 0b101,  // A+C-SECTOR_2 = 0b001,  // A+B-SECTOR_3 = 0b011,  // C+B-SECTOR_4 = 0b010,  // C+A-SECTOR_5 = 0b110,  // B+A-SECTOR_6 = 0b100   // B+C-
} Sector_t;// 定义PWM占空比结构体
typedef struct {uint16_t duty_a;uint16_t duty_b;uint16_t duty_c;
} PWM_Duty_t;// 六步换向函数
void SixStepCommutation(uint8_t hall_state, PWM_Duty_t* pwm_duty) {switch(hall_state) {case SECTOR_1:// A+ C- 导通pwm_duty->duty_a = pwm_duty->duty_c = PWM_MAX_DUTY;pwm_duty->duty_b = 0;break;case SECTOR_2:// A+ B- 导通pwm_duty->duty_a = pwm_duty->duty_b = PWM_MAX_DUTY;pwm_duty->duty_c = 0;break;case SECTOR_3:// C+ B- 导通pwm_duty->duty_c = pwm_duty->duty_b = PWM_MAX_DUTY;pwm_duty->duty_a = 0;break;case SECTOR_4:// C+ A- 导通pwm_duty->duty_c = pwm_duty->duty_a = PWM_MAX_DUTY;pwm_duty->duty_b = 0;break;case SECTOR_5:// B+ A- 导通pwm_duty->duty_b = pwm_duty->duty_a = PWM_MAX_DUTY;pwm_duty->duty_c = 0;break;case SECTOR_6:// B+ C- 导通pwm_duty->duty_b = pwm_duty->duty_c = PWM_MAX_DUTY;pwm_duty->duty_a = 0;break;default:// 错误状态,关闭所有输出pwm_duty->duty_a = pwm_duty->duty_b = pwm_duty->duty_c = 0;break;}
}// 主控制循环
void MotorControlLoop(void) {PWM_Duty_t pwm_duty = {0};uint8_t hall_state;while(1) {// 读取霍尔传感器状态hall_state = ReadHallSensors();// 执行六步换向SixStepCommutation(hall_state, &pwm_duty);// 更新PWM输出UpdatePWM(&pwm_duty);// 控制周期延时HAL_Delay(1);}
}

2. 磁场定向控制(FOC)

磁场定向控制(Field-Oriented Control)是更先进的控制方式,通过坐标变换实现电机转矩和磁通的解耦控制,提供更平滑的转矩输出和更高的效率。

算法流程图
开始
读取电流和位置
Clark变换
Park变换
PI控制器
反Park变换
SVPWM调制
输出PWM
延时控制周期
C语言实现
#include <math.h>
#include "stm32f4xx_hal.h"// 定义FOC控制结构体
typedef struct {float ia;      // A相电流float ib;      // B相电流float ic;      // C相电流float i_alpha;  // α轴电流float i_beta;   // β轴电流float i_d;      // d轴电流float i_q;      // q轴电流float v_d;      // d轴电压float v_q;      // q轴电压float v_alpha;  // α轴电压float v_beta;   // β轴电压float theta;    // 转子电角度float speed;    // 电机转速
} FOC_Control_t;// PI控制器结构体
typedef struct {float kp;      // 比例系数float ki;      // 积分系数float integral; // 积分项float output;  // 输出值float limit;   // 输出限幅
} PI_Controller_t;// Clark变换:三相静止坐标系 → 两相静止坐标系
void ClarkeTransform(float ia, float ib, float ic, float* i_alpha, float* i_beta) {*i_alpha = ia;*i_beta = (ia + 2 * ib) / 1.73205080757f;  // 1.73205080757 ≈ √3
}// Park变换:两相静止坐标系 → 两相旋转坐标系
void ParkTransform(float i_alpha, float i_beta, float theta, float* i_d, float* i_q) {*i_d = i_alpha * cos(theta) + i_beta * sin(theta);*i_q = -i_alpha * sin(theta) + i_beta * cos(theta);
}// 反Park变换:两相旋转坐标系 → 两相静止坐标系
void InverseParkTransform(float v_d, float v_q, float theta, float* v_alpha, float* v_beta) {*v_alpha = v_d * cos(theta) - v_q * sin(theta);*v_beta = v_d * sin(theta) + v_q * cos(theta);
}// PI控制器更新
void PI_Controller_Update(PI_Controller_t* pi, float error, float dt) {// 比例项float p_out = pi->kp * error;// 积分项pi->integral += error * dt;float i_out = pi->ki * pi->integral;// 总输出pi->output = p_out + i_out;// 输出限幅if (pi->output > pi->limit) {pi->output = pi->limit;pi->integral -= error * dt;  // 抗积分饱和} else if (pi->output < -pi->limit) {pi->output = -pi->limit;pi->integral -= error * dt;  // 抗积分饱和}
}// SVPWM调制:生成三相PWM占空比
void SVPWM(float v_alpha, float v_beta, float vdc, PWM_Duty_t* pwm_duty) {float v_ref = sqrt(v_alpha * v_alpha + v_beta * v_beta);float theta = atan2(v_beta, v_alpha);// 扇区判断int sector = (int)(theta * 3 / M_PI) + 1;if (sector < 1) sector = 1;if (sector > 6) sector = 6;// 计算占空比(简化版)float t1 = (sqrt(3) * sin(sector * M_PI / 3 - theta) * v_ref) / vdc;float t2 = (sqrt(3) * sin(theta - (sector - 1) * M_PI / 3) * v_ref) / vdc;float t0 = 1 - t1 - t2;// 根据扇区分配占空比switch(sector) {case 1:pwm_duty->duty_a = (uint16_t)((t1 + t2 + t0/2) * PWM_PERIOD);pwm_duty->duty_b = (uint16_t)((t2 + t0/2) * PWM_PERIOD);pwm_duty->duty_c = (uint16_t)((t0/2) * PWM_PERIOD);break;case 2:pwm_duty->duty_a = (uint16_t)((t1 + t0/2) * PWM_PERIOD);pwm_duty->duty_b = (uint16_t)((t1 + t2 + t0/2) * PWM_PERIOD);pwm_duty->duty_c = (uint16_t)((t0/2) * PWM_PERIOD);break;// ... 其他扇区类似处理default:pwm_duty->duty_a = pwm_duty->duty_b = pwm_duty->duty_c = 0;break;}
}// FOC主控制函数
void FOC_Control(FOC_Control_t* foc, float target_speed, float dt) {PWM_Duty_t pwm_duty = {0};// 1. 读取电流和位置ReadCurrents(&foc->ia, &foc->ib, &foc->ic);foc->theta = GetRotorAngle();// 2. Clark变换ClarkeTransform(foc->ia, foc->ib, foc->ic, &foc->i_alpha, &foc->i_beta);// 3. Park变换ParkTransform(foc->i_alpha, foc->i_beta, foc->theta, &foc->i_d, &foc->i_q);// 4. PI控制器(速度环和电流环)static PI_Controller_t speed_pi = {0.5, 0.1, 0, 0, 10.0};static PI_Controller_t id_pi = {2.0, 0.5, 0, 0, 12.0};static PI_Controller_t iq_pi = {2.0, 0.5, 0, 0, 12.0};// 速度环(外环)float speed_error = target_speed - foc->speed;PI_Controller_Update(&speed_pi, speed_error, dt);float iq_ref = speed_pi.output;// 电流环(内环)float id_error = 0 - foc->i_d;  // d轴参考电流通常为0float iq_error = iq_ref - foc->i_q;PI_Controller_Update(&id_pi, id_error, dt);PI_Controller_Update(&iq_pi, iq_error, dt);foc->v_d = id_pi.output;foc->v_q = iq_pi.output;// 5. 反Park变换InverseParkTransform(foc->v_d, foc->v_q, foc->theta, &foc->v_alpha, &foc->v_beta);// 6. SVPWM调制SVPWM(foc->v_alpha, foc->v_beta, DC_BUS_VOLTAGE, &pwm_duty);// 7. 更新PWM输出UpdatePWM(&pwm_duty);
}

3. 无传感器控制算法

无传感器控制通过反电动势(BEMF)估算转子位置,省去了位置传感器,降低成本和系统复杂度。

滑膜观测器算法
// 滑膜观测器结构体
typedef struct {float i_alpha_est;  // 估算的α轴电流float i_beta_est;   // 估算的β轴电流float e_alpha;       // α轴反电动势float e_beta;        // β轴反电动势float theta_est;     // 估算的转子角度float speed_est;     // 估算的转子速度float L;             // 电感float R;             // 电阻float h;             // 滑膜增益
} SlidingObserver_t;// 滑膜观测器更新
void SlidingObserver_Update(SlidingObserver_t* obs, float i_alpha, float i_beta, float v_alpha, float v_beta, float dt) {// 电流估算误差float err_alpha = i_alpha - obs->i_alpha_est;float err_beta = i_beta - obs->i_beta_est;// 滑膜控制律float z_alpha = obs->h * err_alpha;float z_beta = obs->h * err_beta;// 反电动势估算obs->e_alpha = z_alpha - obs->L * err_alpha / dt;obs->e_beta = z_beta - obs->L * err_beta / dt;// 转子位置和速度估算obs->theta_est = atan2(-obs->e_beta, obs->e_alpha);float prev_theta = obs->theta_est;// 计算速度(角度微分)float delta_theta = obs->theta_est - prev_theta;if (delta_theta > M_PI) delta_theta -= 2 * M_PI;if (delta_theta < -M_PI) delta_theta += 2 * M_PI;obs->speed_est = delta_theta / dt;// 更新电流估算float di_alpha = (v_alpha - obs->R * obs->i_alpha_est + obs->e_alpha) / obs->L;float di_beta = (v_beta - obs->R * obs->i_beta_est + obs->e_beta) / obs->L;obs->i_alpha_est += di_alpha * dt;obs->i_beta_est += di_beta * dt;
}

五、关键控制技术

1. 磁场定向控制(FOC)

  • 原理:通过Clark/Park变换解耦电流,实现扭矩与磁场独立控制。
  • 效果:扭矩波动<5%,平顺性提升50%(适用于EPS/主驱动)。

2. 无传感器控制

  • 技术:反电动势(BEMF)检测、高频信号注入。
  • 价值:降低成本,提高可靠性(如冷却风扇电机)。

3. CAN/LIN总线集成

  • 作用:与整车网络通信,实现动力域协调控制(如加速时空调功率自动降低)。

六、未来发展趋势

1. 集成化设计

  • 电机-减速器-电控三合一(如华为DriveOne),减少体积40%,降低成本。

2. 碳化硅(SiC)功率器件

  • 应用:SiC MOSFET替代IGBT,开关频率提升至100kHz+,效率再提高3-5%。

3. 轮毂电机

  • 革命性设计:电机直接集成到车轮内,取消传动轴(如比亚迪e-Platform 3.0)。
  • 优势:实现四轮独立扭矩矢量控制,提升操控性。

4. AI预测性维护

  • 通过电流/振动信号分析,预测电机故障(如轴承磨损),保障行车安全。

七、挑战与解决方案

挑战解决方案
高温退磁风险钕铁硼磁体+液冷系统(工作温度≤180℃)
高频噪声斜槽/斜极设计+主动降噪算法
成本压力扁线电机(铜填充率提升20%)、规模效应
安全冗余要求双绕组设计(如Lucid Air的电机冗余系统)

八、电机驱动编程最佳实践

1. 实时性保障

  • 使用RTOS:如FreeRTOS,确保控制任务按时执行
  • 中断优化:高优先级中断处理关键事件(如过流保护)
  • 硬件加速:利用MCU的PWM模块、ADC和定时器硬件

2. 代码结构设计

// 电机控制模块分层架构
// 硬件抽象层
void HAL_InitPWM(void);
void HAL_InitADC(void);
void HAL_SetPWM(uint16_t duty_a, uint16_t duty_b, uint16_t duty_c);// 驱动层
void Driver_Init(void);
void Driver_Commutate(uint8_t sector);
void Driver_SetSpeed(float speed);// 算法层
void FOC_Init(void);
void FOC_Run(float target_speed);
void SixStep_Init(void);
void SixStep_Run(float target_speed);// 应用层
void App_ControlMotor(void);
void App_HandleFault(void);

3. 安全机制

// 故障检测与处理
typedef enum {FAULT_NONE = 0,FAULT_OVERCURRENT,FAULT_OVERVOLTAGE,FAULT_UNDERVOLTAGE,FAULT_OVERTEMP,FAULT_STALL
} FaultCode_t;void FaultDetection(void) {// 过流检测if (ReadCurrent() > MAX_CURRENT) {SetFault(FAULT_OVERCURRENT);EmergencyStop();}// 过压检测if (ReadVoltage() > MAX_VOLTAGE) {SetFault(FAULT_OVERVOLTAGE);EmergencyStop();}// 堵转检测if (GetSpeed() < MIN_SPEED && GetDutyCycle() > HIGH_DUTY_THRESHOLD) {SetFault(FAULT_STALL);EmergencyStop();}
}

九、结论

无刷电机已成为汽车电气化、智能化的核心执行器,从动力总成到车身控制,其高效率、高可靠性和精准控制能力直接决定了车辆的性能与用户体验。随着碳化硅技术、集成化设计和AI控制的成熟,无刷电机将在未来汽车(尤其是自动驾驶电动车)中扮演更关键的角色,推动汽车向零排放、高智能、高安全的方向持续演进。

在驱动编程方面,从基础的六步换向到先进的FOC控制,再到无传感器算法,电机控制技术不断进步。通过合理的软件架构设计、实时性保障和安全机制,可以充分发挥无刷电机的性能潜力,为汽车提供更高效、更可靠的动力解决方案。未来,随着AI和边缘计算技术的融入,电机驱动系统将具备自学习、自适应能力,进一步推动汽车智能化的发展。

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

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

相关文章

【游戏引擎之路】登神长阶(十八):3天制作Galgame引擎《Galplayer》——无敌之道心

游戏引擎开发记录&#xff1a;2024年 5月20日-6月4日&#xff1a;攻克2D物理引擎。 2024年 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 2024年 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 2024年 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 2024年…

kotlin kmp 跨平台环境使用sqldelight

欢迎访问我的主页: https://heeheeaii.github.io/ 1. 项目结构 SQLDelightKMPDemo/ ├── shared/ │ ├── src/ │ │ ├── commonMain/kotlin/ │ │ ├── androidMain/kotlin/ │ │ ├── desktopMain/kotlin/ │ │ └── commonMain/sqldel…

机器学习【五】decision_making tree

决策树是一种通过树形结构进行数据分类或回归的直观算法&#xff0c;其核心是通过层级决策路径模拟规则推理。主要算法包括&#xff1a;ID3算法基于信息熵和信息增益选择划分属性&#xff1b;C4.5算法改进ID3&#xff0c;引入增益率和剪枝技术解决多值特征偏差&#xff1b;CART…

简单记录一下VSCode中的一些学习记

在刚开始学习VSCode时&#xff0c;相信大家都会好奇VSCode底部区域那几个不同的状态栏具体有什么作用&#xff08;输出、调试控制台、终端、端口&#xff09;&#xff0c;貌似好像都是输出与代码相关的信息的&#xff1f;貌似代码运行结果既可以出现在输出中&#xff0c;也可以…

基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(二)

目录 二、Hive、SparkSQL、Impala 比较 1. SparkSQL 简介 2. Hive、SparkSQL、Impala 比较 &#xff08;1&#xff09;功能 &#xff08;2&#xff09;架构 &#xff08;3&#xff09;场景 3. Hive、SparkSQL、Impala 性能对比 &#xff08;1&#xff09;cloudera 公司…

C++:std::array vs 原生数组 vs std::vector

&#x1f4cc; C&#xff1a;std::array vs 原生数组 vs std::vector 引用&#xff1a; C/C 标准库 std::vector、std::array、原生静态数组 的区别有哪些&#xff1f; 深度剖析&#xff1a;std::vector 内存机制与 push_back 扩容策略 今天过去了 还有许许多个明天 能和大…

Hyper-V + Centos stream 9 搭建K8s集群(二)

一、安装自动补全主节点安装就可以yum install -y bash-completion echo source <(kubectl completion bash) >>~/.bashrc kubectl completion bash >/etc/bash_completion.d/kubectl二、安装Calico网络插件&#xff08;主节点&#xff09;下载文件wget https://ca…

VBA代码解决方案第二十七讲:禁用EXCEL工作簿右上角的关闭按钮

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…

Spring AI 系列之三十一 - Spring AI Alibaba-基于Nacos的MCP

之前做个几个大模型的应用&#xff0c;都是使用Python语言&#xff0c;后来有一个项目使用了Java&#xff0c;并使用了Spring AI框架。随着Spring AI不断地完善&#xff0c;最近它发布了1.0正式版&#xff0c;意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说…

sqli-labs:Less-12关卡详细解析

1. 思路&#x1f680; 本关的SQL语句为&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入类型&#xff1a;字符串型&#xff0…

【SpringAI】8.通过json动态添加mcp服务

前言 官方示例的代码中&#xff0c;mcp一般是配置到yml中或者json文件中&#xff0c;使用自动装配的方式注入服务&#xff0c;这种方式不方便在程序启动后添加新的服务&#xff0c;这里参考cherry studio的方式动态添加mcp服务 1.确定方案 mcp服务的维护放到mysql业务数据库维…

【PDF + ZIP 合并器:把ZIP文件打包至PDF文件中】

B站链接 PDF ZIP 合并器&#xff1a;把ZIP文件打包至PDF文件中_哔哩哔哩_bilibiliz 加强作者的工具 https://wwgw.lanzn.com/i8h1C32k9bef 密码:30cv 新增c框架&#xff0c;加快运行速度

阿里云部署微调chatglm3

git Ifs install Git lfs 主要用于管理大型文件。在传统的Git仓库中&#xff0c;所有文件内容都会被完整记录在每一次提交中&#xff0c;这会导致仓库体积增大&#xff0c;克隆、拉取和推送操作变慢&#xff0c;甚至可能超出存储限额。Git LFS通过将大文件替换成文本指针&#…

Linux网络编程 ---五种IO模型

五种IO模型一、IO慢的原因二、五种IO模型三、如何设置非阻塞式IO&#xff1f;一、IO慢的原因 二、五种IO模型 阻塞式IO 非阻塞式IO 信号驱动IO 多路转接 异步IO 三、如何设置非阻塞式IO&#xff1f; &#xff08;一&#xff09;用法说明 &#xff08;二&#xff0…

Obsidian结合CI/CD实现自动发布

CI/CDQuickAddJS脚本bat脚本sh脚本实现自动发版Hugo文章 需求来源 每次手动执行Hugo的命令&#xff0c;手动把public文件夹上传到自己的服务器可以完成发版需求。 但是&#xff0c;作为一个内容创作者&#xff0c;我更希望的关注于自己的内容&#xff0c;而不是关注整个发版…

[硬件电路-141]:模拟电路 - 源电路,信号源与电源,能自己产生确定性波形的电路。

源电路&#xff08;Source Circuit&#xff09;是电子系统中为其他电路或负载提供特定信号或能量的基础电路模块&#xff0c;其核心功能是生成、调节或转换所需的物理量&#xff08;如电压、电流、波形、频率等&#xff09;。以下是源电路的详细解析&#xff1a;一、源电路的核…

Unity_数据持久化_PlayerPrefs基础

Unity数据持久化 一、数据持久化基础概念 1.1 什么是数据持久化 定义&#xff1a; 数据持久化就是将内存中的数据模型转换为存储模型&#xff0c;以及将存储模型转换为内存中的数据模型的统称。 通俗解释&#xff1a; 将游戏数据存储到硬盘&#xff0c;硬盘中数据读取到游戏中&…

什么是列存储(Columnar Storage)?深度解析其原理与应用场景

列存储的基本概念&#xff1a;颠覆传统的数据组织方式列存储&#xff08;Column Storage&#xff09;是一种革命性的数据库存储技术&#xff0c;它通过按列而非按行组织数据&#xff0c;从根本上改变了数据的物理存储结构。与传统行存储数据库不同&#xff0c;列式数据库将每一…

机器人抓取流程介绍与实现——机器人抓取系统基础系列(七)

机器人抓取系统基础系列文章目录 1. UR机械臂的ROS驱动安装官方教程详解——机器人抓取系统基础系列&#xff08;一&#xff09; 2. MoveIt控制机械臂的运动实现——机器人抓取系统基础系列&#xff08;二&#xff09; 3. 机器人&#xff08;机械臂&#xff09;的相机选型与安装…

【Qt】QObject::startTimer: Timers cannot be started from another thread

QTimer对象的 start 函数调用必须和创建QTimer对象是同一个线程。 #include "QtTimerTest.h" #include <QDebug>QtTimerTest::QtTimerTest(QWidget *parent): QMainWindow(parent),m_timer(nullptr),m_timerThread(nullptr), m_workingThread(nullptr) {ui.set…