标签 开关电路 下的文章

大家好,我是良许

说到三极管,可能很多刚入门的朋友会觉得这个名字有点陌生,但如果你接触过电子电路或者嵌入式开发,那你一定见过它的身影。

三极管可以说是电子世界里最基础、最重要的元器件之一,几乎所有的电子设备里都能找到它的踪迹。

今天咱们就来聊聊三极管到底是什么,它有什么用,以及在实际开发中我们该怎么使用它。

1. 三极管的基本概念

1.1 三极管是什么

三极管,全称叫做"半导体三极管",英文名是 Transistor,有时候也叫做晶体管。

从名字就能看出来,它有三个电极,这也是"三极管"名字的由来。

这三个电极分别叫做:基极(Base,简称 B)、集电极(Collector,简称 C)和发射极(Emitter,简称 E)。

三极管本质上是一种半导体器件,它是由两个 PN 结组成的。根据这两个 PN 结的排列方式不同,三极管可以分为 NPN 型和 PNP 型两种。

NPN 型就是中间是 P 型半导体,两边是 N 型半导体;PNP 型则相反,中间是 N 型半导体,两边是 P 型半导体。

在实际应用中,NPN 型三极管使用得更多一些。

1.2 三极管的工作原理

三极管最神奇的地方在于,它可以用一个很小的电流去控制一个很大的电流。

具体来说,就是通过控制基极和发射极之间的电流(基极电流,记作IB​),来控制集电极和发射极之间的电流(集电极电流,记作IC)。

这个过程就像是用一个小水龙头去控制一个大水龙头的开关一样。

这里有一个很重要的参数,叫做电流放大倍数,用希腊字母β(贝塔)来表示。这个β值表示的是集电极电流和基极电流的比值,也就是:

$$
\beta = \frac{I_C}{I_B}
$$

一般来说,普通三极管的β值在几十到几百之间。

比如说,如果一个三极管的β值是 100,那么当基极电流是 1mA 的时候,集电极电流就可以达到 100mA。这就是三极管的放大作用。

1.3 三极管的三种工作状态

三极管在电路中有三种基本的工作状态:截止状态、放大状态和饱和状态。

截止状态:当基极电流为零或者很小的时候,三极管就处于截止状态。

这时候集电极电流也基本为零,三极管相当于一个断开的开关。

放大状态:当基极电流在一个合适的范围内时,三极管就工作在放大状态。这时候集电极电流和基极电流成正比关系,也就是IC​=β×IB。

这个状态主要用于模拟电路中的信号放大。

饱和状态:当基极电流足够大的时候,三极管就进入了饱和状态。这时候集电极电流不再随基极电流的增加而增加,三极管相当于一个闭合的开关。

在数字电路中,我们经常让三极管工作在饱和状态或截止状态,用来实现开关功能。

2. 三极管的实际应用

2.1 三极管作为开关使用

在嵌入式开发中,我们最常用三极管来做的事情就是当开关用。

比如说,STM32 的 GPIO 口输出电流一般只有几十毫安,如果我们要驱动一个需要几百毫安电流的负载(比如继电器、电机等),直接用 GPIO 口是不行的,这时候就需要用三极管来做电流放大。

举个具体的例子,假设我们要用 STM32 控制一个 12V 的继电器,这个继电器的线圈电流是 100mA。

我们可以这样设计电路:用 STM32 的 GPIO 口控制三极管的基极,三极管的集电极接继电器线圈,发射极接地。

当 GPIO 口输出高电平时,三极管导通,继电器得电工作;当 GPIO 口输出低电平时,三极管截止,继电器断电。

下面是一个简单的 HAL 库代码示例:

// 初始化GPIO
void Relay_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    // 使能GPIOA时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置PA5为输出模式
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 初始状态设为低电平,继电器断电
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
​
// 控制继电器开
void Relay_On(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
​
// 控制继电器关
void Relay_Off(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}

在这个应用中,我们需要注意几个关键点:首先是基极电阻的选择。

基极电阻太小会导致基极电流过大,可能损坏 GPIO 口;基极电阻太大则可能导致三极管无法完全导通。

一般来说,我们可以这样计算:假设 GPIO 口输出电压是 3.3V,三极管的 BE 结压降约 0.7V,我们希望基极电流是 1mA,那么基极电阻应该是:

$$
R_B = \frac{3.3V - 0.7V}{1mA} = 2.6k\Omega
$$

实际应用中可以选择标准阻值 2.7kΩ 或 3kΩ。

2.2 三极管的限流保护

在使用三极管驱动感性负载(如继电器、电机)时,还需要注意一个问题:当三极管突然截止时,感性负载会产生反向电动势,这个电压可能会很高,足以击穿三极管。

所以我们通常会在负载两端并联一个续流二极管,用来释放这个反向电动势。

电路设计时,续流二极管的负极接电源正极,正极接三极管的集电极。

当三极管截止时,感性负载产生的反向电流就会通过这个二极管形成回路,从而保护三极管。

2.3 三极管在模拟电路中的应用

除了做开关,三极管在模拟电路中还可以用来做信号放大。比如在音频电路中,我们可以用三极管来放大麦克风采集到的微弱音频信号。

不过在嵌入式系统中,我们更多的是使用集成运放芯片来做信号放大,因为运放的性能更稳定,使用也更方便。

但了解三极管的放大原理还是很有必要的,因为很多集成电路的内部其实就是由大量的三极管组成的。

比如我们常用的 LM358 运放,内部就包含了几十个三极管。

3. 三极管选型和使用注意事项

3.1 如何选择合适的三极管

在实际项目中选择三极管时,我们需要关注以下几个参数:

最大集电极电流ICM:这个参数表示三极管能够承受的最大电流。选择时要留有余量,一般选择实际工作电流的 2-3 倍。比如你的负载电流是 100mA,那就选择ICM至少 300mA 的三极管。

最大集电极-发射极电压VCEO:这个参数表示三极管能够承受的最大电压。

同样要留有余量,如果你的电路工作电压是 12V,建议选择VCEO 至少 20V 以上的三极管。

电流放大倍数β:这个参数越大,说明三极管的放大能力越强,需要的基极电流就越小。一般选择β值在 100 以上的三极管就够用了。

功耗:三极管在工作时会发热,特别是在驱动大电流负载时。要根据实际功耗选择合适封装的三极管,必要时还要加散热片。功耗可以用公式P=VCE​×IC​ 来估算,其中VCE是集电极-发射极之间的电压降。

常用的小功率三极管有 S8050(NPN 型)、S8550(PNP 型)、2N3904(NPN 型)、2N3906(PNP 型)等。中功率三极管有 TIP41(NPN 型)、TIP42(PNP 型)等。这些型号在市场上都很容易买到,价格也便宜。

3.2 使用三极管的常见错误

在实际使用中,新手经常会犯一些错误,这里总结几个常见的:

忘记加基极电阻:有些朋友直接把 GPIO 口连到三极管基极,这样会导致基极电流过大,可能烧坏 GPIO 口或三极管。一定要记得加基极电阻。

三极管极性接反:NPN 型和 PNP 型三极管的接法是不一样的,如果接反了,电路就不会工作。使用前一定要查清楚三极管的管脚定义。

不加续流二极管:驱动感性负载时如果不加续流二极管,三极管很容易被反向电动势击穿。这是一个很容易被忽视但又很重要的保护措施。

工作状态选择不当:如果是做开关使用,一定要让三极管工作在饱和状态或截止状态,不要工作在放大区,否则三极管会发热严重,甚至烧毁。

4. 总结

三极管虽然是一个很基础的元器件,但它的作用却非常重要。

在嵌入式开发中,我们经常需要用三极管来扩展单片机的驱动能力,实现对各种负载的控制。

掌握三极管的基本原理和使用方法,是每一个嵌入式工程师的必备技能。

从我自己的经验来看,刚开始接触三极管的时候,确实会觉得有点抽象,特别是那些什么 PN 结、载流子之类的概念。

但其实在实际应用中,我们不需要深究那么多理论,只要记住几个关键点就行:三极管可以用小电流控制大电流,做开关用时要工作在饱和或截止状态,驱动感性负载要加续流二极管。

把这些基本原则掌握了,在实际项目中就能游刃有余了。

希望这篇文章能帮助大家更好地理解和使用三极管。

如果你在实际使用中遇到什么问题,欢迎留言交流。

电子技术这东西,理论固然重要,但更重要的是多动手实践,在实践中积累经验。加油!

什么是 MOS 管?

大家好,我是良许。

最近在做一个电源管理的项目,需要用到 MOS 管来控制大电流的开关。

很多刚入门的朋友可能对 MOS 管不太了解,今天我就来详细聊聊这个在电子电路中非常重要的元器件。

1. MOS 管的基本概念

1.1 MOS 管的全称与结构

MOS 管的全称是 Metal-Oxide-Semiconductor Field-Effect Transistor,中文叫做金属-氧化物-半导体场效应晶体管,简称 MOSFET 或者 MOS 管。

从名字就能看出来,它主要由三种材料构成:金属栅极、氧化物绝缘层和半导体衬底。

MOS 管有三个引脚,分别是栅极(Gate,简称 G)、漏极(Drain,简称 D)和源极(Source,简称 S)。

这三个引脚的作用各不相同:栅极用来控制开关,漏极和源极之间形成导电通道。

当我们在栅极施加一定的电压时,就可以控制漏极和源极之间是否导通,这就是 MOS 管最核心的工作原理。

1.2 MOS 管的分类

MOS 管主要分为两大类:N 沟道 MOS 管(NMOS)和 P 沟道 MOS 管(PMOS)。

这两种管子的工作原理类似,但是导通条件相反。

对于 NMOS 管来说,当栅极电压高于源极电压一定程度(超过阈值电压)时,漏极和源极之间就会导通。

而 PMOS 管则相反,当栅极电压低于源极电压一定程度时才会导通。

在实际应用中,NMOS 管使用得更多一些,因为它的导通电阻更小,开关速度更快。

此外,根据工作模式的不同,MOS 管还可以分为增强型和耗尽型。

增强型 MOS 管在栅极没有电压时是截止的,需要施加电压才能导通,这是最常用的类型。

耗尽型 MOS 管则相反,在栅极没有电压时就是导通的,需要施加反向电压才能截止,这种类型比较少见。

2. MOS 管的工作原理

2.1 电场效应控制

MOS 管之所以叫做场效应晶体管,是因为它是通过电场来控制电流的。

当我们在栅极施加电压时,会在氧化层下方的半导体表面产生一个电场。

这个电场会吸引或排斥半导体中的载流子(电子或空穴),从而在漏极和源极之间形成或消除导电沟道。

以 NMOS 管为例,当栅极电压为 0V 时,漏极和源极之间是 P 型半导体,不导电。

当栅极施加正电压时,电场会把 P 型半导体表面的空穴排斥走,同时吸引电子过来。

当电子浓度足够高时,就会在表面形成一个 N 型导电沟道,这时漏极和源极之间就导通了。

2.2 三个工作区域

MOS 管在工作时有三个主要区域:截止区、线性区(也叫欧姆区)和饱和区。

在截止区时,栅极电压小于阈值电压,漏极和源极之间不导通,相当于一个开关断开的状态。

这时 MOS 管的漏极电流几乎为零,只有很小的漏电流。

在线性区时,栅极电压大于阈值电压,且漏极电压较小,此时漏极电流与漏源电压成正比关系,MOS 管表现得像一个可变电阻。

在这个区域,我们可以通过改变栅极电压来调节导通电阻的大小。

在饱和区时,栅极电压大于阈值电压,且漏极电压较大,此时漏极电流基本不随漏源电压变化,而是由栅极电压决定。这个区域主要用于放大电路。

2.3 阈值电压的重要性

阈值电压($$V\_{th}$$)是 MOS 管的一个重要参数,它决定了 MOS 管从截止到导通需要多大的栅极电压。

对于 NMOS 管,阈值电压通常在 1V 到 4V 之间,对于 PMOS 管则是负值。

在实际应用中,我们需要确保栅极电压足够大,通常要比阈值电压高出几伏,这样才能保证 MOS 管完全导通,降低导通电阻。

3. MOS 管在嵌入式系统中的应用

3.1 开关电路

在嵌入式系统中,MOS 管最常见的应用就是做开关。

比如我们要用单片机控制一个 12V 的电机,单片机的 IO 口只能输出 3.3V 或 5V 的电压,而且驱动能力很弱,这时就需要用 MOS 管来做开关。

下面是一个使用 STM32 控制 NMOS 管的简单例子:

// 初始化GPIO用于控制MOS管
void MOS_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    // 使能GPIOA时钟
    __HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置PA5为输出模式
    GPIO_InitStruct.Pin = GPIO_PIN_5;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  // 推挽输出
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 初始状态设为低电平,MOS管截止
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}
​
// 打开MOS管
void MOS_Turn_On(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);
}
​
// 关闭MOS管
void MOS_Turn_Off(void)
{
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET);
}

在这个例子中,当我们调用 MOS_Turn_On() 函数时,PA5 输出高电平,NMOS 管的栅极得到高电压,MOS 管导通,负载(比如电机)就会工作。

调用 MOS_Turn_Off() 函数时,PA5 输出低电平,MOS 管截止,负载停止工作。

3.2 PWM 调速电路

MOS 管还可以配合 PWM 信号来实现电机调速。

通过改变 PWM 信号的占空比,可以控制电机的平均功率,从而实现调速。

// PWM初始化用于MOS管调速
void MOS_PWM_Init(void)
{
    TIM_HandleTypeDef htim2;
    TIM_OC_InitTypeDef sConfigOC = {0};
    
    // 使能TIM2时钟
    __HAL_RCC_TIM2_CLK_ENABLE();
    
    // 配置定时器基本参数
    htim2.Instance = TIM2;
    htim2.Init.Prescaler = 84 - 1;  // 假设系统时钟84MHz
    htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim2.Init.Period = 1000 - 1;   // PWM频率约为1kHz
    htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&htim2);
    
    // 配置PWM通道
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;  // 初始占空比为0
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);
    
    // 启动PWM输出
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1);
}
​
// 设置PWM占空比(0-100)
void MOS_Set_Speed(uint8_t speed)
{
    if(speed > 100) speed = 100;
    
    // 计算对应的CCR值
    uint16_t pulse = (1000 * speed) / 100;
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse);
}

这段代码配置了一个 1kHz 的 PWM 信号,通过调用 MOS_Set_Speed() 函数并传入 0 到 100 的值,就可以控制电机的速度。

当占空比为 50% 时,电机获得的平均功率是满功率的一半,速度也大约是最高速度的一半。

3.3 电源管理电路

在嵌入式系统的电源管理中,MOS 管也扮演着重要角色。

比如在低功耗设计中,我们可以用 PMOS 管来控制某些模块的电源开关,在不需要时完全切断电源,达到最低功耗。

// 电源管理初始化
void Power_Management_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    
    __HAL_RCC_GPIOB_CLK_ENABLE();
    
    // 配置PB0控制PMOS管(低电平导通)
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_PULLUP;  // 上拉,默认高电平
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
    
    // 初始状态关闭电源
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
}
​
// 打开外设电源
void Peripheral_Power_On(void)
{
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);  // PMOS导通
    HAL_Delay(10);  // 等待电源稳定
}
​
// 关闭外设电源
void Peripheral_Power_Off(void)
{
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);  // PMOS截止
}

这种设计在电池供电的设备中特别有用,可以显著延长电池寿命。

4. 使用 MOS 管的注意事项

4.1 栅极驱动问题

MOS 管的栅极虽然不需要电流,但是有一定的电容(栅极电容),在开关过程中需要对这个电容充放电。

如果驱动能力不足,会导致开关速度变慢,甚至无法完全导通。

对于大功率 MOS 管,栅极电容可能达到几千皮法,这时就需要专门的驱动电路。

在实际应用中,如果发现 MOS 管发热严重,很可能是因为没有完全导通,工作在线性区,导通电阻很大。

这时需要检查栅极电压是否足够高,是否超过了阈值电压加上足够的余量。

4.2 静电防护

MOS 管的栅极氧化层非常薄,只有几十到几百纳米,很容易被静电击穿。

在焊接和使用 MOS 管时,一定要做好静电防护措施。

建议使用防静电手环,焊接前先触摸接地的金属物体释放身上的静电。

存储 MOS 管时,最好把三个引脚短接在一起,或者插在导电泡棉上。

4.3 散热设计

虽然 MOS 管的导通电阻很小,但在大电流应用中仍然会产生一定的热量。

功耗可以用公式$$P = I^2 \times R{DS(on)}$$ 来计算,其中$$I$$ 是通过的电流,$$R{DS(on)}$$ 是导通电阻。

如果功耗超过 1W,就需要考虑加散热片了。

在 PCB 设计时,可以通过增大铜箔面积来帮助散热。

对于 TO-220 封装的 MOS 管,可以直接把散热片焊接在 PCB 上。

对于贴片封装的 MOS 管,可以在背面铺大面积的铜箔,并通过过孔连接到顶层的散热焊盘。

4.4 续流二极管

在驱动感性负载(如电机、继电器、电磁阀)时,一定要并联续流二极管。

因为感性负载在断电瞬间会产生很高的反向电压,可能会击穿 MOS 管。续流二极管可以为这个反向电流提供一个回路,保护 MOS 管不被损坏。

// 带续流保护的电机控制
void Motor_Control_With_Protection(uint8_t enable)
{
    if(enable)
    {
        // 启动电机前先确保PWM占空比为0
        MOS_Set_Speed(0);
        HAL_Delay(1);
        
        // 打开MOS管
        MOS_Turn_On();
        
        // 逐渐增加速度,避免启动电流过大
        for(uint8_t i = 0; i <= 50; i++)
        {
            MOS_Set_Speed(i);
            HAL_Delay(10);
        }
    }
    else
    {
        // 逐渐降低速度
        for(uint8_t i = 50; i > 0; i--)
        {
            MOS_Set_Speed(i);
            HAL_Delay(10);
        }
        
        // 关闭MOS管
        MOS_Turn_Off();
    }
}

这段代码实现了电机的软启动和软停止,可以减小启动和停止时的电流冲击,延长 MOS 管和电机的寿命。

5. 总结

MOS 管是嵌入式系统中非常重要的元器件,它可以用很小的控制功率来控制很大的负载功率,是实现各种开关、调速、电源管理功能的基础。

理解 MOS 管的工作原理和使用方法,对于做好硬件设计和驱动开发都非常重要。

在实际应用中,选择合适的 MOS 管需要考虑多个参数:导通电阻、最大电流、最大电压、开关速度、封装形式等。

一般来说,导通电阻越小越好,但价格也会越贵。

最大电流和电压要留有足够的余量,通常选择实际值的 2 倍以上。

对于高速开关应用,还要注意栅极电荷和开关时间等参数。

掌握了 MOS 管的使用,你就可以设计出更加强大和灵活的嵌入式系统了。

希望这篇文章能帮助大家更好地理解和使用 MOS 管。