目录

一、认识三级管

1.三极管的基本概念

2. 三极管的内部结构与工作原理

1. 结构特点

2. 工作原理(以 NPN 为例)

二、STM32驱动代码

 1. fan.h —— 头文件

 2. fan.c —— 实现文件

 3. main.c —— 主程序(调用示例)

🔌 硬件连接再确认(关键!)


一、认识三级管

1.三极管的基本概念

三极管是一种电流控制型的半导体器件,由三层半导体材料构成,形成两个 PN 结(如下图所示)。根据结构不同,可分为 NPN 型PNP 型 两种。

  • NPN 型:由两层 N 型半导体夹一层 P 型半导体构成(N-P-N)。
  • PNP 型:由两层 P 型半导体夹一层 N 型半导体构成(P-N-P)。

注意:电子从负极流向正极,电流是从正正极流向负极,这样形成了基于硅晶体管的单向导电性,PN结就是合金P与合金N接触的这个区域(交界面)

PN结
发展历史路径

三极管有三个电极:

  • 发射极(Emitter, E):发射载流子。
  • 基极(Base, B):控制载流子流动。
  • 集电极(Collector, C):收集载流子。

2. 三极管的内部结构与工作原理

1. 结构特点

  • 发射区:掺杂浓度高,用于高效发射载流子。
  • 基区:非常薄(微米级),掺杂浓度低,以减少载流子在基区的复合。
  • 集电区:面积较大,用于收集载流子。

2. 工作原理(以 NPN 为例)

当三极管工作在放大区时:

  • 发射结(BE)正向偏置:使电子从发射区注入基区。
  • 集电结(BC)反向偏置:使大部分注入基区的电子被集电区收集,形成集电极电流。

由于基区很薄且掺杂浓度低,只有极少数电子在基区与空穴复合,形成很小的基极电流 IBIB​。而大部分电子到达集电极,形成较大的集电极电流 ICIC​。

三极管的核心特性是:小电流控制大电流,即:

IC=βIBIC​=βIB​

其中,ββ(或 hFEhFE​)为直流电流放大系数,典型值在 20~500 之间。

注意:发射极e和集电极c断开状态时,禁止电流通过


二、STM32驱动代码

注意:使用的是最常见的S8050三极管

风扇控制模块,包含 fan.cfan.h 和在 main.c 中的调用示例,使用 STM32F103C8T6 +标准外设库(Standard Peripheral Library),驱动引脚为 PB8(TIM4_CH3)。


 1. fan.h —— 头文件

// fan.h
#ifndef __FAN_H
#define __FAN_H

#include "stm32f10x.h"

void Fan_Init(void);
void Fan_SetSpeed(uint8_t duty);  // duty: 0 ~ 100

#endif

 2. fan.c —— 实现文件

// fan.c
#include "fan.h"

// 初始化 PB8 为 TIM4_CH3 PWM 输出
void Fan_Init(void)
{
    // 1. 开启时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

    // 2. 配置 PB8 为复用推挽输出(TIM4_CH3)
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 3. 配置 TIM4 基础参数(1kHz PWM)
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_TimeBaseStructure.TIM_Prescaler = 71;        // 72MHz / (71+1) = 1MHz
    TIM_TimeBaseStructure.TIM_Period = 999;          // 1MHz / (999+1) = 1kHz
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);

    // 4. 配置通道 3(CH3)为 PWM 模式
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse = 0;               // 初始关闭
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
    TIM_OC3Init(TIM4, &TIM_OCInitStructure);
    TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);

    // 5. 启动定时器
    TIM_Cmd(TIM4, ENABLE);
}

// 设置风扇转速:duty = 0~100(百分比)
void Fan_SetSpeed(uint8_t duty)
{
    if (duty > 100) duty = 100;
    uint32_t pulse = (duty * 1000) / 100;  // 映射到 0~1000
    TIM_SetCompare3(TIM4, pulse);
}

 3. main.c —— 主程序(调用示例)

// main.c
#include "stm32f10x.h"
#include "fan.h"
#include "Delay.h"



int main(void)
{
    // 其他外设初始化(如串口、DHT11、OLED 等)可放这里

    // 初始化风扇
    Fan_Init();

    while (1)
    {
        Fan_SetSpeed(0);    // 停止
        Delay_ms(2000);

        Fan_SetSpeed(30);   // 低速
        Delay_ms(2000);

        Fan_SetSpeed(60);   // 中速
        Delay_ms(2000);

        Fan_SetSpeed(100);  // 全速
        Delay_ms(2000);
    }
}

🔌 硬件连接再确认(关键!)这个看下面的链接,看不懂的话对着连接

S8050 三极管是干什么的?S8050 引脚图和原理图,几分钟带你搞定 S8050 - 知乎

元件 连接
风扇红线 外部 5V 电源正极(我使用的是5v风扇)
风扇黑线 S8050 的 集电极(C,中间脚)
S8050 基极(B,左边脚) → 220Ω 电阻 → PB8
S8050 发射极(E,右边脚) → GND(与 STM32 共地)

✅ S8050 封装:TO-92,字面朝自己,引脚朝下 → 左 B,中 C,右 E

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐