项目笔记| 基于Arduino和IR2101的无刷直流电机控制器

本文介绍如何使用 Arduino UNO 板构建无传感器无刷直流 (BLDC) 电机控制器或简单的 ESC(电子速度控制器)。

无刷直流电机有两种类型:有传感器和无传感器。有感无刷直流电机内置3个霍尔效应传感器,这些传感器检测无刷直流电机的转子位置。控制有传感器的BLDC电机很容易,因为我们知道转子的位置,就像在下面的项目中所做的那样:

在这里插入图片描述

项目电路原理图如下图所示。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

/* Sensorless brushless DC (BLDC) motor control with Arduino UNO (Arduino DIY ESC).* This is a free software with NO WARRANTY.* http://simple-circuit.com/*/#define SPEED_UP          A0          // BLDC motor speed-up button
#define SPEED_DOWN        A1          // BLDC motor speed-down button
#define PWM_MAX_DUTY      255
#define PWM_MIN_DUTY      50
#define PWM_START_DUTY    100byte bldc_step = 0, motor_speed;
unsigned int i;
void setup() {DDRD  |= 0x38;           // Configure pins 3, 4 and 5 as outputsPORTD  = 0x00;DDRB  |= 0x0E;           // Configure pins 9, 10 and 11 as outputsPORTB  = 0x31;// Timer1 module setting: set clock source to clkI/O / 1 (no prescaling)TCCR1A = 0;TCCR1B = 0x01;// Timer2 module setting: set clock source to clkI/O / 1 (no prescaling)TCCR2A = 0;TCCR2B = 0x01;// Analog comparator settingACSR   = 0x10;           // Disable and clear (flag bit) analog comparator interruptpinMode(SPEED_UP,   INPUT_PULLUP);pinMode(SPEED_DOWN, INPUT_PULLUP);
}
// Analog comparator ISR
ISR (ANALOG_COMP_vect) {// BEMF debouncefor(i = 0; i < 10; i++) {if(bldc_step & 1){if(!(ACSR & 0x20)) i -= 1;}else {if((ACSR & 0x20))  i -= 1;}}bldc_move();bldc_step++;bldc_step %= 6;
}
void bldc_move(){        // BLDC motor commutation functionswitch(bldc_step){case 0:AH_BL();BEMF_C_RISING();break;case 1:AH_CL();BEMF_B_FALLING();break;case 2:BH_CL();BEMF_A_RISING();break;case 3:BH_AL();BEMF_C_FALLING();break;case 4:CH_AL();BEMF_B_RISING();break;case 5:CH_BL();BEMF_A_FALLING();break;}
}void loop() {SET_PWM_DUTY(PWM_START_DUTY);    // Setup starting PWM with duty cycle = PWM_START_DUTYi = 5000;// Motor startwhile(i > 100) {delayMicroseconds(i);bldc_move();bldc_step++;bldc_step %= 6;i = i - 20;}motor_speed = PWM_START_DUTY;ACSR |= 0x08;                    // Enable analog comparator interruptwhile(1) {while(!(digitalRead(SPEED_UP)) && motor_speed < PWM_MAX_DUTY){motor_speed++;SET_PWM_DUTY(motor_speed);delay(100);}while(!(digitalRead(SPEED_DOWN)) && motor_speed > PWM_MIN_DUTY){motor_speed--;SET_PWM_DUTY(motor_speed);delay(100);}}
}void BEMF_A_RISING(){ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative inputACSR |= 0x03;            // Set interrupt on rising edge
}
void BEMF_A_FALLING(){ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative inputACSR &= ~0x01;           // Set interrupt on falling edge
}
void BEMF_B_RISING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 2;              // Select analog channel 2 as comparator negative inputACSR |= 0x03;
}
void BEMF_B_FALLING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 2;              // Select analog channel 2 as comparator negative inputACSR &= ~0x01;
}
void BEMF_C_RISING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 3;              // Select analog channel 3 as comparator negative inputACSR |= 0x03;
}
void BEMF_C_FALLING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 3;              // Select analog channel 3 as comparator negative inputACSR &= ~0x01;
}void AH_BL(){PORTD &= ~0x28;PORTD |=  0x10;TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)TCCR2A =  0x81;         //
}
void AH_CL(){PORTD &= ~0x30;PORTD |=  0x08;TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)TCCR2A =  0x81;         //
}
void BH_CL(){PORTD &= ~0x30;PORTD |=  0x08;TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)TCCR1A =  0x21;         //
}
void BH_AL(){PORTD &= ~0x18;PORTD |=  0x20;TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)TCCR1A =  0x21;         //
}
void CH_AL(){PORTD &= ~0x18;PORTD |=  0x20;TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)TCCR1A =  0x81;         //
}
void CH_BL(){PORTD &= ~0x28;PORTD |=  0x10;TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)TCCR1A =  0x81;         //
}void SET_PWM_DUTY(byte duty){if(duty < PWM_MIN_DUTY)duty  = PWM_MIN_DUTY;if(duty > PWM_MAX_DUTY)duty  = PWM_MAX_DUTY;OCR1A  = duty;                   // Set pin 9  PWM duty cycleOCR1B  = duty;                   // Set pin 10 PWM duty cycleOCR2A  = duty;                   // Set pin 11 PWM duty cycle
}

传感器BLDC电机的换向是根据霍尔效应传感器状态完成的。

无传感器BLDC电机没有任何传感器来检测其转子位置,其换向基于定子绕组中产生的BEMF(反电动势)。

无传感器BLDC电机控制的主要优点是系统成本较低,主要缺点是电机必须以最小速率移动才能产生足够的BEMF来检测。

无传感器BLDC电机控制的主要优点是系统成本较低,主要缺点是电机必须以最小速率移动才能产生足够的BEMF来检测。

在这里插入图片描述

如上图所示,BEMF信号与霍尔效应传感器信号不同步(相移30°)。在每个通电序列中,两个绕组通电(一个连接到正极,另一个连接到负极),第三个绕组保持打开(浮动)。浮动绕组用于检测过零,因此,所有 3 个过零点的组合用于生成通电序列。我们总共有 6 个事件:

A阶段过零:从高到低,从低到高

B阶段过零:从高到低,从低到高

C阶段过零:从高到低,从低到高

如何检测过零事件?

检测过零事件的最简单方法是使用比较器。比较器有 3 个主端子:2 个输入(正负)和一个输出。如果正电压大于负电压,则比较器输出为逻辑高电平,如果正电压低于负电压,则逻辑低电平。

这个项目基本上需要 3 个比较器,连接如下图所示(B 阶段示例)。每个阶段都需要一个类似的电路。

在这里插入图片描述
所有 3 个比较器的虚拟自然点都是相同的,它是使用 3 个电阻器产生的。当浮动(开路)绕组中产生的BEMF越过零点向正侧时,比较器输出从低电平过渡到高电平。当浮动绕组中产生的BEMF越过零点向负侧时,比较器输出从高电平过渡到低电平。通过具有三个这样的比较器电路,每个相位上一个电路可产生三个数字信号,对应于绕组中的BEMF信号。这三个信号的组合用于推导换向序列。

在这里插入图片描述

项目电路原理图如下图所示:

在这里插入图片描述

请注意,所有接地端子都连接在一起。

在电路中有 2 个按钮,一个用于提高 BLDC 电机速度,第二个用于降低它。

前三个33k(连接到电机相位)和三个10k电阻用作分压器,因为我们不能为微控制器提供12V,其他三个33k电阻产生虚拟自然点。虚拟自然点连接到Arduino引脚6。

Arduino UNO板基于ATmega328P微控制器,该微控制器具有一个模拟比较器。该比较器的正输入位于 Arduino uno 引脚 6 (AIN0) 上,负输入可以是引脚 7 (AIN1)、A0 (ADC0)、A1 (ADC1)、A2 (ADC2)、A3 (ADC3)、A4 (ADC4) 或 A5 (ADC5)。因此,我将虚拟自然点连接到模拟比较器的正极引脚(引脚 6),将 A 相 BEMF 连接到引脚 7 (AIN1),将 B 相 BEMF 连接到引脚 A2,将 C 相 BEMF 连接到引脚 A3。每次比较器都会将虚拟点与一相的 BEMF 进行比较(这是在软件中完成的)。这最大限度地减少了所需的硬件并简化了电路。

IR2104S芯片用于控制每相的高端和低端MOSFET。高压侧和低压侧之间的切换是根据控制线IN和SD完成的。下图显示了输入和输出时序图:

在这里插入图片描述

三IR2104S的 SD 线分别连接到引脚 11、10 和 9,用于相 A、相 B 和相 C。Arduino UNO可以在该引脚上生成PWM信号,其中只有高侧MOSFET是PWM的。

使用Arduino代码的无传感器BLDC电机控制

下面的代码不使用任何 BLDC 电机库。

如上所述,Arduino 引脚 9、10 和 11 可以生成 PWM 信号,其中引脚 9 和引脚 10 与 Timer1 模块(OC1A 和 OC1B)相关,引脚 11 与 Timer2 模块 (OC2A) 相关。两个定时器模块都配置为生成频率约为 31KHz、分辨率为 8 位的 PWM 信号。当按下按钮时,PWM信号的占空比会通过写入其寄存器(OCR1A、OCR1B和OCR2A)来更新(加速或减速)。

模拟比较器将正输入AIN0(Arduino引脚6)与负输入(AIN1(引脚7)、ADC2(引脚A2)或ADC3(引脚A3))进行比较。当正引脚电压高于负引脚电压时,设置模拟比较器ACO的输出,当正引脚电压低于负引脚电压时,ACO被清除。

在这个项目中,我使用了模拟比较器中断,并在上升时使用中断(从低到高的转换)和下降时的中断(从高到低的转换),这使得过零事件中断微控制器。

要完全理解代码,请阅读 ATmega328 数据表!

/* Sensorless brushless DC (BLDC) motor control with Arduino UNO (Arduino DIY ESC).* This is a free software with NO WARRANTY.* https://simple-circuit.com/*/#define SPEED_UP          A0
#define SPEED_DOWN        A1
#define PWM_MAX_DUTY      255
#define PWM_MIN_DUTY      50
#define PWM_START_DUTY    100byte bldc_step = 0, motor_speed;
unsigned int i;
void setup() {DDRD  |= 0x38;           // Configure pins 3, 4 and 5 as outputsPORTD  = 0x00;DDRB  |= 0x0E;           // Configure pins 9, 10 and 11 as outputsPORTB  = 0x31;// Timer1 module setting: set clock source to clkI/O / 1 (no prescaling)TCCR1A = 0;TCCR1B = 0x01;// Timer2 module setting: set clock source to clkI/O / 1 (no prescaling)TCCR2A = 0;TCCR2B = 0x01;// Analog comparator settingACSR   = 0x10;           // Disable and clear (flag bit) analog comparator interruptpinMode(SPEED_UP,   INPUT_PULLUP);pinMode(SPEED_DOWN, INPUT_PULLUP);
}
// Analog comparator ISR
ISR (ANALOG_COMP_vect) {// BEMF debouncefor(i = 0; i < 10; i++) {if(bldc_step & 1){if(!(ACSR & 0x20)) i -= 1;}else {if((ACSR & 0x20))  i -= 1;}}bldc_move();bldc_step++;bldc_step %= 6;
}
void bldc_move(){        // BLDC motor commutation functionswitch(bldc_step){case 0:AH_BL();BEMF_C_RISING();break;case 1:AH_CL();BEMF_B_FALLING();break;case 2:BH_CL();BEMF_A_RISING();break;case 3:BH_AL();BEMF_C_FALLING();break;case 4:CH_AL();BEMF_B_RISING();break;case 5:CH_BL();BEMF_A_FALLING();break;}
}void loop() {SET_PWM_DUTY(PWM_START_DUTY);    // Setup starting PWM with duty cycle = PWM_START_DUTYi = 5000;// Motor startwhile(i > 100) {delayMicroseconds(i);bldc_move();bldc_step++;bldc_step %= 6;i = i - 20;}motor_speed = PWM_START_DUTY;ACSR |= 0x08;                    // Enable analog comparator interruptwhile(1) {while(!(digitalRead(SPEED_UP)) && motor_speed < PWM_MAX_DUTY){motor_speed++;SET_PWM_DUTY(motor_speed);delay(100);}while(!(digitalRead(SPEED_DOWN)) && motor_speed > PWM_MIN_DUTY){motor_speed--;SET_PWM_DUTY(motor_speed);delay(100);}}
}void BEMF_A_RISING(){ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative inputACSR |= 0x03;            // Set interrupt on rising edge
}
void BEMF_A_FALLING(){ADCSRB = (0 << ACME);    // Select AIN1 as comparator negative inputACSR &= ~0x01;           // Set interrupt on falling edge
}
void BEMF_B_RISING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 2;              // Select analog channel 2 as comparator negative inputACSR |= 0x03;
}
void BEMF_B_FALLING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 2;              // Select analog channel 2 as comparator negative inputACSR &= ~0x01;
}
void BEMF_C_RISING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 3;              // Select analog channel 3 as comparator negative inputACSR |= 0x03;
}
void BEMF_C_FALLING(){ADCSRA = (0 << ADEN);   // Disable the ADC moduleADCSRB = (1 << ACME);ADMUX = 3;              // Select analog channel 3 as comparator negative inputACSR &= ~0x01;
}void AH_BL(){PORTB  =  0x04;PORTD &= ~0x18;PORTD |=  0x20;TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)TCCR2A =  0x81;         //
}
void AH_CL(){PORTB  =  0x02;PORTD &= ~0x18;PORTD |=  0x20;TCCR1A =  0;            // Turn pin 11 (OC2A) PWM ON (pin 9 & pin 10 OFF)TCCR2A =  0x81;         //
}
void BH_CL(){PORTB  =  0x02;PORTD &= ~0x28;PORTD |=  0x10;TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)TCCR1A =  0x21;         //
}
void BH_AL(){PORTB  =  0x08;PORTD &= ~0x28;PORTD |=  0x10;TCCR2A =  0;            // Turn pin 10 (OC1B) PWM ON (pin 9 & pin 11 OFF)TCCR1A =  0x21;         //
}
void CH_AL(){PORTB  =  0x08;PORTD &= ~0x30;PORTD |=  0x08;TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)TCCR1A =  0x81;         //
}
void CH_BL(){PORTB  =  0x04;PORTD &= ~0x30;PORTD |=  0x08;TCCR2A =  0;            // Turn pin 9 (OC1A) PWM ON (pin 10 & pin 11 OFF)TCCR1A =  0x81;         //
}void SET_PWM_DUTY(byte duty){if(duty < PWM_MIN_DUTY)duty  = PWM_MIN_DUTY;if(duty > PWM_MAX_DUTY)duty  = PWM_MAX_DUTY;OCR1A  = duty;                   // Set pin 9  PWM duty cycleOCR1B  = duty;                   // Set pin 10 PWM duty cycleOCR2A  = duty;                   // Set pin 11 PWM duty cycle
}

参考资料

  • [1] 【YouTube@Hyperspace Pirate】Brushless DC Speed Controller
  • [2] 使用Arduino和IR2101的无刷直流电机控制器
  • [3] 使用Arduino的无传感器BLDC电机控制 – DIY ESC
  • [4] Sensorless brushless motor control with PIC16F887

MOSFETs: IRLZ44
Flyback Diodes: MUR120G
MOSFET Drivers: IR2101
5V Linear Regulator: LM7805
MOSFET Driver supply regulator: LM317

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

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

相关文章

MLIR的TOY教程学习笔记

MLIR TOY Language 文章目录 MLIR TOY Language如何编译该项目ch1: MLIR 前端IR解析ch2: 定义方言和算子 (ODS)1. 定义方言2. 定义OP3. OP相关操作4. 定义OP ODS (Operation Definition Specification)1. 基本定义2. 添加文档3. 验证OP4. 新增构造函数5. 定义打印OP的格式 ch3:…

降雨量预测 | Matlab基于ARIMA-RBF降雨量预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 降雨量预测 | Matlab基于ARIMA-RBF降雨量预测 注&#xff1a;程序和数据放在一个文件夹。 程序语言为matlab&#xff0c;程序可出预测效果图&#xff0c;指标图; 代码特点&#xff1a;参数化编程、参数可方便更改、代…

浅聊 Three.js 屏幕空间反射SSR-SSRShader

浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…

前端vue框架的项目文件创建及常见Vue指令运用

前言 本文介绍前端Vue框架&#xff0c;先从npm工具创建的Vue项目开始&#xff0c;对项目结构的一些文件用途进行说明&#xff0c;随后对Vue文件编写所用的两种风格&#xff08;选项式API和组合式API风格&#xff09;做了区分&#xff0c;同时对编写代码中常见的生命周期钩子函…

Pytorch使用前期准备

一、检查英伟达驱动和CUDA Toolkit是否正确安装 1.任务管理器性能选项卡中能正确显示显卡型号则表示显卡驱动正确安装 2. CUDA Toolkit会跟随pytorch自动安装 二、虚拟环境的准备 Miniconda — Anaconda documentationhttps://docs.anaconda.com/miniconda/ 1.安装anaconda或者…

腾讯元宝上线“3D角色梦工厂”:快速生成专属3D角色!

7月16日&#xff0c;腾讯旗下大模型应用“腾讯元宝”上线“3D角色梦工厂”&#xff0c;允许用户通过上传一张五官清晰的正面头像&#xff0c;并选择不同的角色模板&#xff0c;迅速生成个人3D角色&#xff01; 技术特点 “3D角色梦工厂”将大模型生成技术与3D应用相结合&#…

大模型(LLM)选择指南:AI解决方案的12个决策点

今天我们来看看国外各家领先的大型语言模型&#xff08;LLM&#xff09;&#xff0c;这些模型来自OpenAI、Google、Anthropic、Cohere、Meta、Mistral AI以及Databricks等不同的供应商。我们会根据几个关键因素来评估这些模型&#xff0c;包括性能&#xff08;涵盖价格、质量和…

NET 语言识别,语音控制操作、语音播报

System.Speech. 》》System.Speech.Synthesis; 语音播报 》》System.Speech.Recognition 语音识别 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Speech.Recog…

在 Windows 上运行 Linux:WSL2 完整指南(二)

系列文章目录 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;一&#xff09;&#x1f6aa; 在 Windows 上运行 Linux&#xff1a;WSL2 完整指南&#xff08;二&#xff09;&#x1f6aa; 文章目录 系列文章目录前言四、常见问题及解决方法问题二&#xff1a;0…

昇思25天学习打卡营第17天|LLM-基于MindSpore的GPT2文本摘要

打卡 目录 打卡 环境准备 准备阶段 数据加载与预处理 BertTokenizer 部分输出 模型构建 gpt2模型结构输出 训练流程 部分输出 部分输出2&#xff08;减少训练数据&#xff09; 推理流程 环境准备 pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspo…

AV1技术学习:Affine Motion Compensation

一、Affine Model Parameter 除了传统的平移运动补偿&#xff0c;AV1 还支持仿射变换模型&#xff0c;将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x, y). 参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例…

Spring后端框架复习总结

之前写的博客太杂,最近想把后端框架的知识点再系统的过一遍,主要是Spring Boot和Mybatis相关,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点可以参考之前写java后端专栏,这篇不再赘述。 目录 Spring什么是AOP?底层原理?事务…

【HarmonyOS NEXT】网络请求 - 分页加载

分页加载关键字&#xff1a;onReachEnd 一、申请网络权限 在 module.json5 文件中&#xff0c;添加网络权限&#xff1a; {"module": {..."requestPermissions": [{"name": "ohos.permission.INTERNET","usedScene": {&qu…

K8S实战进阶

title ‘K8S实战进阶’ date 2024-04-02T16:57:3608:00 draft true 一、搭建Kubernetes集群 1.1 搭建方案 1.1.1 minikube minikube 是一个工具&#xff0c; 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机&#xff08;包括 Windows、macOS 和 Linux PC&…

图像生成(Text-to-Image)发展脉络

这篇博客对 图像生成&#xff08;image generation&#xff09; 领域的经典工作发展进行了梳理&#xff0c;包括重要的一些改进&#xff0c;目的是帮助读者对此领域有一个整体的发展方向把握&#xff0c;并非是对每个工作的详细介绍。 脉络发展&#xff08;时间顺序&#xff0…

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换 背景&#xff1a;uniapp做的微信小程序&#xff0c;使用到了相机拍照并获取位置坐标信息&#xff1b;在腾讯地图上展示坐标点位置信息&#xff1b; 由于业务需要我们的PC端用的不是腾讯地图&#xff0c;需要使用WGS84坐标或…

uniapp判断h5/微信小程序/app端+实战展示

文章目录 导文使用条件编译的基本语法常见的平台标识符示例实战展示使用场景举例注意事项 导文 这里是导文 当你在开发Uni-app时&#xff0c;需要根据不同的平台&#xff08;比如App端、H5端、微信小程序等&#xff09;来执行不同的代码逻辑&#xff0c;可以使用条件编译来实现…

03 Git的基本使用

第3章&#xff1a;Git的基本使用 一、创建版本仓库 一&#xff09;TortoiseGit ​ 选择项目地址&#xff0c;右键&#xff0c;创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件&#xff08;隐藏文件&#xff09; 二&#xff09;Git ​ 选择项目地址&#xff0c…

Redis分布式系统中的主从复制

本篇文章主要对Redis的主从复制进行讲解。主要分析复制的原理&#xff0c;包括:建立复制、全量复制、部分复制、全量复制、心跳检测等。希望本篇文章会对你有所帮助。 文章目录 一、主从复制简介 二、配置主从复制模式 断开主从复制 安全性 只读 传输延迟 三、拓扑结构 四、主…

Java开发之Java容器

#来自ゾフィー&#xff08;佐菲&#xff09; 1 总览 1.1 List ArrayList&#xff1a; Object[]数组Vector&#xff1a;Object[]数组LinkedList&#xff1a; 双向链表&#xff0c;JDK1.6 之前为循环链表&#xff0c;JDK1.7 取消了循环 1.2 Set HashSet&#xff1a;无序&#xf…