一、有源滤波器的实验

实验电路如下:

嵌入式分享合集163_嵌入式硬件

元器件及参数:

电阻采用精度为0.1%的RJ14型电阻,R1=100kΩ,R2=R3=10kΩ,R4=12kΩ,R5=3kΩ。

电容有两组用于比较:一组是高Q值的CB4型电容,容量为C1=C2=14.66nF,Q>20000。另一组是常见的CL型电容,容量为C1=C2=15.34nF,Q=220。

以上所有电阻与电容的参数均通过TH2816数字电桥测试。

51Ω是与信号源匹配的电阻,1uF电容是为了避免运放的失调引起测量误差的隔直电容。这两个器件引起的测量误差均远小于元器件误差的影响,所以可以忽略其影响。

运放有三个用于比较:

LF353,主要参数GBW=4MHz。

NE5532,主要参数GBW=10MHz。

THS4052,主要参数GBW=70MHz。

测试方法与测试仪器:

用信号发生器产生vi,用数字电压表测量输出电压vo,然后通过改变信号频率得到带通滤波器的中心频率以及两个半功率点频率,计算滤波器的Q值。

信号源采用Tektronix AGF 1022,输出电压测量采用Fluke 45型数字多用表,同时用示波器监视输入输出信号。

测量结果:

第1组实验,电容采用CL型。

1.1,运放采用LF353,结果是:f0=2077.0Hz,Q=17.66。

1.2,运放采用NE5532,结果是:f0=2080.0Hz,Q=16.85。

1.3,运放采用THS4052,结果是:f0=2079.8Hz,Q=16.57。

第2组实验,电容采用CB4型。

2.1,运放采用LF353,结果是:f0=2169.8Hz,Q=21.21。

2.2,运放采用NE5532,结果是:f0=2173.7Hz,Q=20.09。

2.3,运放采用THS4052,结果是:f0=2173.9Hz,Q=19.67。

分析与结论:

根据理论计算,在元器件理想条件下,第一组实验的中心频率为f0=2074.8Hz,第二组实验的中心频率为f0=2171.1Hz。两组实验的Q值相同,都应该是Q=20。

但是显然上述实验结果都与理论计算的结果有差别。此差别就是由于运放与电容的非理想特性引起。相对说来电阻的影响很小,所以下面就运放与电容进行分析。

首先看运放的影响。

两组实验结果都按照运放频响从低到高排列。显然运放频响高的中心频率也高(1.2与1.3有些颠倒,可能是测量误差的原因),但是总的说来影响并不是很大,最多也就是千分之一二。但是运放频响对于滤波器Q值的影响较大,运放频响从4MHz变化到70MHz,滤波器的Q值可以有-6%~-7%的变化。

再看电容的影响。

两组实验采用了两种不同电容。第一组是现在生产的电容,通常其Q值在100~300之间。第二组是多年前生产的电容,由于采用铝箔卷绕(现在生产的都是蒸镀金属膜),所以其等效串联电阻极低,有极高的Q值(在用电桥测量的时候其Q值一直在几万的数值上跳动)。

比较两组实验中采用相同运放的两个,譬如1.3与2.3。

先看对于中心频率的影响。1.3的理论f0=2074.8Hz,实测f0=2079.8Hz,误差为0.24%。2.3的理论f0=2171.1Hz,实测f0=2173.9Hz,误差为0.13%。可见电容的Q值确实影响滤波器的频率,但是影响不是很大。

在看对于Q值的影响。两组滤波器的理论Q值都是20。1.3的实测值为Q=16.57,与理论值的误差达-17%。2.3的实测值为Q=19.67,与理论值的误差为-1.7%。两者的差别竟然达到10倍之多!

其实这个滤波器的实际Q值可以按照“实际Q值的倒数=理论Q值的倒数+C1的Q值的倒数+ C2的Q值的倒数”这个关系进行估计。按照这个公式,1.3的实际Q值的估计值是16.92,2.3的实际Q值的估计值是19.96,均与实测值基本吻合

由此可得结论如下:

在这类有源滤波器的实际制作中,运放的带宽与电容的Q值均会对滤波器的中心频率与Q值产生影响。中心频率受到的影响稍小,但Q值受到的影响很大。运放的带宽变窄会使得滤波器的Q值升高;电容的Q值下降会使得滤波器的Q值下降。

下图是我做实验的板子,其中焊在板上的是CB4电容,放在桌上的是CL电容。

嵌入式分享合集163_三极管_02

二、用二极管实现不同电压的输出

    利用二极管的单向导电性可以设计出好玩、实用的电路。

    分享本文,分析限幅电路和钳位电路,是如何用二极管来实现的。

限幅电路

    如下图所示,当在正半周期,并且VIN大于等于0.7V,二极管正向导通。此时,

VOUT会被钳位在0.7V上。

    而当VIN小于0.7V时二极管是截止状态,在负半周期时相当于电流反向,二极管也是截至状态,此时VOUT=VIN,VOUT波形跟随VIN变化。

嵌入式分享合集163_三极管_03

限辐电路示意图

根据上面限辐电路的原理,可以设计如下双向限辐电路。

嵌入式分享合集163_三极管_04

双向限辐电路示意图

    然而有时候0.7V电压不能满足要求,那么,怎么产生不同大小的限幅电压?

    在电路中加入偏置电压VBIAS,只有当VIN大于等于VBIAS时二极管才能导通。此时VOUT被钳位,其值是0.7V+VBIAS,如下图所示。

嵌入式分享合集163_单总线_05

偏压限幅电路示意图

钳位电路

    下面是二极管结合电容实现的钳位电路。分析中不考虑二极管的导通压降,假设RC时间常数足够大,从而使输出波形不会失真。

钳位电路原理

    当输入Vin在负半周期为负时,电流如下图中红色箭头所示。二极管导通,电容逐渐充电至V,在此过程中Vout=0。

    当输入Vin在正半周为正时,电流如蓝色箭头所示。二极管截止,Vout等于电容上电压加上正半周电压V,此时Vout=2V。

嵌入式分享合集163_运放_06

钳位电路原理

偏压钳位电路

    跟限幅电路类似的,为了获得所需要的钳位值,要在电路中加入偏置电压,如下图所示。

嵌入式分享合集163_单总线_07

偏压钳位电路

    当所加的偏压与二极管导通方向一致,钳位值会提高V1,Vout=2V+V1。

双向二极管钳位电路应用举例

    在某些电路中会利用两个二极管的钳位作用进行保护,如下图所示,假设0.7V为D1和D2的导通电压。

  • Vin大于等于Vmax,D1导通,Vout会被钳位在Vmax
  • Vin小于等于Vmin时,Vout被钳位在Vmin

嵌入式分享合集163_嵌入式硬件_08

二极管钳位保护电路

三、STM32基于onewire单总线的数据抽象实例

onewire(单总线) 是DALLAS公司推出的外围串行扩展总线技术总线,顾名思义,它是采用一根信号线进行通信,既传输时钟信号又传输数据,而且能够进行双向通信,具有节省I/O口线、资源结构简单、成本低廉、便于总线扩展和维护等诸多优点。

常用到单总线的器件,一般是温度传感器、EEPROM、唯一序列号芯片等,如DS18B20、DS2431。

在使用单总线时,往往很少CPU会提供硬件单总线,几乎都是根据单总线标准的时序图,通过普通IO翻转模拟实现单总线。而在模式实现时序图的过程中,需要根据CPU时钟频率等条件进行时序时间计算,如果更换CPU后,需要重新计算时序时间,如果时序代码和器件外设控制代码集成在一起,则代码改动比较大。

或者同一CPU需要模拟多根单总线时,传统的“复制”方式使得程序显得累赘,还增加ROM占用空间。因此,可以利用“函数指针”的方式,将时序部分抽象出来,达到“复用”代码的效果,减少重复代码编写。

#onewire 抽象

onewire 结构体

onewire结构体主要是对与CPU底层相关的操作抽象分离,调用时只需将该结构体地址(指针)作为函数入口参数,通过该指针实现对底层函数的回调。该结构体我们命名为“struct ops_onewire_dev”,其原型如下:

struct ops_onewire_dev
{
    void (*set_sdo)(int8_t state);
    uint8_t (*get_sdo)(void);
    void (*delayus)(uint32_t us);
};
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

其中: 

1)set_sdo:IO输出1bit,包括时钟和数据。 

2)get_sdo:IO输入1bit,包括时钟和数据。

3)delayus:时序延时函数,根据CPU频率进行计算。

#onewire 对外接口

extern uint8_t ops_onewire_reset(struct ops_onewire_dev *onewire);
extern int ops_onewire_read(struct ops_onewire_dev *onewire,void *buff,int size);
extern int ops_onewire_write(struct ops_onewire_dev *onewire,void *buff,int size);
  • 1.
  • 2.
  • 3.

1)分别为复位函数、读函数、写函数。 

2)入口首参数为“struct ops_onewire_dev”结构体指针,此部分就是硬件层相关,需要后期初始化的. 

3)其余入口参数易于理解,读/写缓存及数据大小。

onewire 抽象接口实现

分别实现上述三者函数接口。

复位函数

复位函数,在单总线初始化外设器件时需要用到,用于判断总线与器件是否通信上,类似“握手”的动作。如图,为DS18B20的复位时序图,以下与单总线相关的时序图,都是以DS18B20为例,因为此芯片为单总线应用的经典。

嵌入式分享合集163_三极管_09

根据时序图,实现复位函数。

/**
  * @brief  单总线复位时序
  * @param  onewire 总线结构体指针
  * @retval 成功返回0
*/
uint8_t ops_onewire_reset(struct ops_onewire_dev *onewire)
{
 uint8_t ret = 0;
 
 onewire->set_sdo(1);
 onewire->delayus(50);
 onewire->set_sdo(0);
 onewire->delayus(500);
 onewire->set_sdo(1);
 onewire->delayus(40);
 ret = onewire->get_sdo();
 onewire->delayus(500);
 onewire->set_sdo(1);
 return ret;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

 读函数

读函数即以该函数,通过单总线从外设上读取数据,至于代码的实现,完全是时序图的实现,无特殊难点。先实现单字节读函数,再通过调用单字节读函数实现多字节读函数。

嵌入式分享合集163_嵌入式硬件_10

/**
  * @brief  单总线读取一字节数据
  * @param  onewire 总线结构体指针
  * @retval 返回读取的数据
*/
static char ops_onewire_read_byte(struct ops_onewire_dev *onewire)
{
 char data = 0;
 uint8_t i;
 
 for(i=8;i>0;i--)
 {
  data >>= 1;
  onewire->set_sdo(0);
  onewire->delayus(5);
  onewire->set_sdo(1);
  onewire->delayus(5);
  if(onewire->get_sdo())
   data |= 0x80;
  else
   data &= 0x7f;
  onewire->delayus(65);
  onewire->set_sdo(1);
 }
 return data;
}

/**
  * @brief  读取多字节
  * @param  onewire 总线结构体指针
  * @param  buff 存放数据缓存
  * @param  size 数据大小
  * @retval 返回读取到的数据大小
*/
int ops_onewire_read(struct ops_onewire_dev *onewire,void *buff,int size)
{
 int i;
 char *p = (char*)buff; 
 for(i=0;i<size;i++)
  p[i++]=ops_onewire_read_byte(onewire);
 return i;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.

写函数

写函数与读函数同理,即以该函数,通过单总线往外设写入数据,至于代码的实现,完全是时序图的实现,无特殊难点。先实现单字节写函数,再通过调用单字节写函数实现多字节写函数。

嵌入式分享合集163_运放_11

/**
  * @brief  单总线写一字节
  * @param  onewire 总线结构体指针
  * @param  data 待写数据
  * @retval 返回读取的数据
*/
static int ops_onewire_write_byte(struct ops_onewire_dev *onewire,char data)
{
 uint8_t i;
 
 for(i=8;i>0;i--)
 {
  onewire->set_sdo(0);
  onewire->delayus(5);
  if(data&0x01)
   onewire->set_sdo(1);
  else
   onewire->set_sdo(0);
  onewire->delayus(65);
  onewire->set_sdo(1);
  onewire->delayus(2);
  data >>= 1;
 }
 return 0;
}

/**
  * @brief  写多字节
  * @param  onewire 总线结构体指针
  * @param  buff 代写数据地址
  * @param  size 数据大小
  * @retval 写入数据大小
*/
int ops_onewire_write(struct ops_onewire_dev *onewire,void *buff,int size)
{
 int i;
 char *p = (char*)buff;
 for(i=0;i<size;i++)
 {
  if(ops_onewire_write_byte(onewire,p[i]) != 0)
  break;
 }
 return i;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.

至此,onewire(单总线)抽象化完成,此部分代码与硬件层分离,亦可单独作为一个模块,移植到不同平台CPU时,也几乎无需改动。剩下部分工作则是实现“struct ops_onewire_dev”中的函数指针原型,即可使用一根单总线。

#onewire 抽象应用

以STM32F1为例,实现上述抽象接口。

“struct ops_onewire_dev” 实现

此部分即是与硬件相关部分,不同CPU平台改动该部分即可,如从51单片机移植到STM32上。下面涉及到的IO宏,是对应IO的宏定义,如“ONEWIRE1_PORT”、“ONEWIRE1_PIN”,实际使用的是PC13 IO口。

 IO输出

static void gpio_set_sdo(int8_t state)
{
    if (state)
  GPIO_SetBits(ONEWIRE1_PORT,ONEWIRE1_PIN); 
    else
  GPIO_ResetBits(ONEWIRE1_PORT,ONEWIRE1_PIN); 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

 IO输入

static uint8_t gpio_get_sdo(void)
{
    return (GPIO_ReadInputDataBit(ONEWIRE1_PORT,ONEWIRE1_PIN));
}
  • 1.
  • 2.
  • 3.
  • 4.

  延时函数

static void gpio_delayus(uint32_t us)
{
#if 1  /* 不用系统延时时,开启 */
    volatile int32_t i;
 
    for (; us > 0; us--)
    {
     i = 30;  //mini 17
        while(i--);
    }
#else
  delayus(us);
#endif
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

onewire 总线初始化

 onewire 抽象相关

第一步:定义一个“struct ops_onewire_dev”结构体类型变量(全局)——onewire1_dev。

struct ops_onewire_dev onewire1_dev;
  • 1.

第二步:实例化“onewire1_dev”中的函数指针。

onewire1_dev.get_sdo = gpio_get_sdo;
onewire1_dev.set_sdo = gpio_set_sdo;
onewire1_dev.delayus = gpio_delayus;

第三步:使用时,通过传入“onewire1_dev”地址(指针)即可。

onewire 基础相关

初始基础部分,与使用的CPU硬件相关,如时钟、IO方向等。

/**
  * @brief  初始化单总线
  * @param  none
  * @retval none
*/
void stm32f1xx_onewire1_init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;          
 RCC_APB2PeriphClockCmd(ONEWIRE1_RCC,ENABLE);  

 GPIO_InitStructure.GPIO_Pin = ONEWIRE1_PIN;
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
   GPIO_Init(ONEWIRE1_PORT, &GPIO_InitStructure);             
 ONEWIRE1_PORT->BSRR = ONEWIRE1_PIN;      
 
 /* device init */
 onewire1_dev.get_sdo = gpio_get_sdo;
 onewire1_dev.set_sdo = gpio_set_sdo;
 onewire1_dev.delayus = gpio_delayus;
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.

#onewire 使用

经过前面的步骤后,我们已经通过IO口翻转,模拟实现了一根单总线——“onewire1_dev”,以DS18B20为例,调用第一部分中三者接口,实现对DS18B20的操作。

DS18B20操作

对于DS18B20,不陌生,即是温度传感器,不多赘述,使用的功能主要是作为温度检测,另外还有其内部的唯一序列号会作为同一总线上挂多个DS18B20时的“地址”识别。

亦可把DS18B20的唯一序列号作为模块、产品、通信总线等的唯一标识使用。因此,代码也是主要实现这两个功能。

#include "onewire_hw.h"
#include "ds18b20.h"

static uint8_t ds18b20_start(void)
{    
 char reg;
    ops_onewire_reset(&onewire1_dev);     
      
 reg = 0xcc; /* 跳过ROM */
 ops_onewire_write(&onewire1_dev,®,1);
 reg = 0x44; /* 温度转换指令 */
 ops_onewire_write(&onewire1_dev,®,1);        
 return 0;
}

/**
  * @brief  读取温度
  * @param  none
  * @retval 温度值,浮点型
*/
float ds18b20_readtemp(void)
{
    uint8_t  tl,th,sign;
 uint16_t reg_temp; 
 char reg;
 float temp;
 
 ds18b20_start();
 ops_onewire_reset(&onewire1_dev); 
 reg = 0xcc;
 ops_onewire_write(&onewire1_dev,®,1); /* 跳过ROM */
 reg = 0xbe;
 ops_onewire_write(&onewire1_dev,®,1); /* 读取RAM */
 ops_onewire_read(&onewire1_dev,&tl,1);  /* 低8位数据 */
 ops_onewire_read(&onewire1_dev,&th,1);   /* 高8位数据 */
 if(th > 7)
 {/* - */
  th = ~th;
  tl = ~tl + 1; 
  sign = 0;             
 }
 else 
 {/* + */
  sign = 1;   
 }  
 reg_temp = (th<<8) | tl;
 temp = reg_temp * 0.0625f; 
 if(sign)
 {
  return temp;       
 }
 else 
 {
  return -temp;   
 }
}
 
/**
  * @brief  读唯一序列号
  * @param  rom 返回序列号缓存
  * @retval none
*/
void ds18b20_readrom(char *rom)
{
 uint8_t i;
 char reg;
 
 ops_onewire_reset(&onewire1_dev);
 reg = 0x33;
 ops_onewire_write(&onewire1_dev,®,1);
 for (i = 0;i < 8;i++)
 {
  ops_onewire_read(&onewire1_dev,&rom[i],1);  
 } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.

源码:https://github.com/Prry/drivers-for-mcu

四、三极管的应用电路

三极管有三个工作状态:截止、放大、饱和,放大状态很有学问也很复杂,多用于集成芯片,比如运放,现在不讨论。

    其实,对信号的放大我们通常用运放处理,三极管更多的是当做一个开关管来使用,且只有截止、饱和两个状态。相关文章: 四句口诀,玩转三极管!

    截止状态看作是关,饱和状态看作是开。

    Ib≥1mA时,完全可以保证三极管工作在饱和状态,对于小功率的三极管此时Ic为几十到几百mA,驱动继电器、蜂鸣器等功率器件绰绰有余。

三极管电路举例

    把三极管箭头理解成一个开关,如下图为NPN型三极管,按下开关S1,约1mA的Ib流过箭头,三极管工作在饱和状态,c极到e极完全导通,c极电平接近0V(GND),负载RL两端压降接近5V。

    Ib与Ic电流都流入e极,根据电流方向,e极为低电平,应接地,c极接负载和电源。

嵌入式分享合集163_运放_12

   如下图为PNP型三极管,按下开关S2,约1mA的Ib流过箭头,三极管工作在饱和状态,e极到c极完全导通,c极电平接近5V,负载RL两端压降接近5V。

    Ib与Ic电流都流出e极,根据电流方向,e极为高电平,应接电源,c极接负载和地。

嵌入式分享合集163_单总线_13

 如下图NPN三极管,对于NPN三极管更应该在b极加一个下拉电阻,一是为了保证b、e极间电容加速放电,加快三极管截止;二是为了保证给三极管b极一个已知逻辑状态,防止控制输入端悬空或高阻态时对三极管工作状态的不确定。

嵌入式分享合集163_三极管_14

   如下图是PNP三极端,对于PNP三极管,更应该在b极加一个上拉电阻,原理同上。

嵌入式分享合集163_三极管_15

  下图NPN三极管,对于感性负载,必须在负载两端并联一个反向续流二极管,因为三极管在关断时,线圈会自感产生很高的反向电动势,而续流二极管提供的续流通路,同时钳位反向电动势,防止击穿三极管。

    续流二极管的选型必须是快恢复二极管或肖特基二极管,两者响应速度快。

嵌入式分享合集163_三极管_16

    如下图的NPN三极管,对于某些控制信号为低电平时,可能并不是真正的0V,一般在1V以内,为保证三极管完全截止,不得不在三极管b极加一个反向稳压管或正向二极管,以提高三极管导通的阈值电压。

    根据个人经验,推挽输出的数字信号不用加,OC输出、二极管输出以及延时控制有必要加,通常稳压管正常的工作电流≥1mA。

嵌入式分享合集163_单总线_17

    下图是用三极管实现继电器的延时控制的例子。

    为三极管延时导通,快速关断的一个仿真电路,D1、R2、C1、D2构成延时导通Q2的回路,C1的电压为12V的时候Q2导通,R3、Q1、R4、R1构成快速关断Q2的回路,C1通过R3和Q1快速放电。

嵌入式分享合集163_单总线_18

要点

  • 对于NPN三极管,在不考虑三极管的情况下,b极电阻与下拉电阻的分压必须大于0.7V,PNP同理。
  • b极电流必须≥1mA可保证三极管处于饱和状态,此时Ic满足三极管最大的驱动能力。
  • 另外,对于三极管的放大倍数β,指的是输出电流的驱动能力放大了β,比如100倍,并不是把输出电流真正的放大了100倍。
五、功率MOS剖析

功率MOSFET的正向导通等效电路 

(1):等效电路

嵌入式分享合集163_三极管_19

(2):说明:

功率 MOSFET 正向导通时可用一电阻等效,该电阻与温度有关,温度升高,该电阻变大;它还与门极驱动电压的大小有关,驱动电压升高,该电阻变小。详细的关系曲线可从制造商的手册中获得

 功率MOSFET的反向导通等效电路 

(1):等效电路(门极不加控制)

嵌入式分享合集163_三极管_20

(2):说明:

即内部二极管的等效电路,可用一电压降等效,此二极管为MOSFET 的体二极管,多数情况下,因其特性很差,要避免使用。

 功率MOSFET的反向导通等效电路 

(1):等效电路(门极加控制)

嵌入式分享合集163_三极管_21

(2):说明:

功率 MOSFET 在门级控制下的反向导通,也可用一电阻等效,该电阻与温度有关,温度升高,该电阻变大;它还与门极驱动电压的大小有关,驱动电压升高,该电阻变小。详细的关系曲线可从制造商的手册中获得。此工作状态称为MOSFET 的同步整流工作,是低压大电流输出开关电源中非常重要的一种工作状态。

 功率MOSFET的正向截止等效电路 

(1):等效电路

嵌入式分享合集163_运放_22

(2):说明:

功率 MOSFET 正向截止时可用一电容等效,其容量与所加的正向电压、环境温度等有关,大小可从制造商的手册中获得。

 功率MOSFET的稳态特性总结 

(1):功率MOSFET 稳态时的电流/电压曲线

嵌入式分享合集163_单总线_23

(2):说明:

功率 MOSFET 正向饱和导通时的稳态工作点:

嵌入式分享合集163_三极管_24

当门极不加控制时,其反向导通的稳态工作点同二极管。

(3):稳态特性总结:

-- 门极与源极间的电压Vgs 控制器件的导通状态;当Vgs<Vth时,器件处于断开状态,Vth一般为 3V;当Vgs>Vth时,器件处于导通状态;器件的通态电阻与Vgs有关,Vgs大,通态电阻小;多数器件的Vgs为 12V-15V ,额定值为+-30V;

-- 器件的漏极电流额定是用它的有效值或平均值来标称的;只要实际的漏极电流有效值没有超过其额定值,保证散热没问题,则器件就是安全的;

-- 器件的通态电阻呈正温度系数,故原理上很容易并联扩容,但实际并联时,还要考虑驱动的对称性和动态均流问题;

-- 目前的 Logic-Level的功率 MOSFET,其Vgs只要 5V,便可保证漏源通态电阻很小;

-- 器件的同步整流工作状态已变得愈来愈广泛,原因是它的通态电阻非常小(目前最小的为2-4 毫欧),在低压大电流输出的DC/DC 中已是最关键的器件;

包含寄生参数的功率MOSFET等效电路

(1):等效电路

嵌入式分享合集163_嵌入式硬件_25

(2):说明:

实际的功率MOSFET 可用三个结电容,三个沟道电阻,和一个内部二极管及一个理想MOSFET 来等效。三个结电容均与结电压的大小有关,而门极的沟道电阻一般很小,漏极和源极的两个沟道电阻之和即为MOSFET 饱和时的通态电阻。

 功率MOSFET的开通和关断过程原理 

(1):开通和关断过程实验电路

嵌入式分享合集163_嵌入式硬件_26

(2):MOSFET 的电压和电流波形:

嵌入式分享合集163_运放_27

(3):开关过程原理:

开通过程[ t0 ~ t4 ]:

  • 在 t0 前,MOSFET 工作于截止状态,t0 时,MOSFET 被驱动开通;
  • [t0-t1]区间,MOSFET 的GS 电压经Vgg 对Cgs充电而上升,在t1时刻,到达维持电压Vth,MOSFET 开始导电;
  • [t1-t2]区间,MOSFET 的DS 电流增加,Millier 电容在该区间内因DS 电容的放电而放电,对GS 电容的充电影响不大;
  • [t2-t3]区间,至t2 时刻,MOSFET 的DS 电压降至与Vgs 相同的电压,Millier 电容大大增加,外部驱动电压对Millier 电容进行充电,GS 电容的电压不变,Millier 电容上电压增加,而DS电容上的电压继续减小;
  • [t3-t4]区间,至t3 时刻,MOSFET 的DS 电压降至饱和导通时的电压,Millier 电容变小并和GS 电容一起由外部驱动电压充电,GS 电容的电压上升,至t4 时刻为止。此时GS 电容电压已达稳态,DS 电压也达最小,即稳定的通态压降。

关断过程[ t5 ~t9  ]:

  • 在 t5 前,MOSFET 工作于导通状态, t5 时,MOSFET 被驱动关断;
  • [t5-t6]区间,MOSFET 的Cgs 电压经驱动电路电阻放电而下降,在t6 时刻,MOSFET 的通态电阻微微上升,DS 电压梢稍增加,但DS 电流不变;
  • [t6-t7]区间,在t6 时刻,MOSFET 的Millier 电容又变得很大,故GS 电容的电压不变,放电电流流过Millier 电容,使DS 电压继续增加;
  • [t7-t8]区间,至t7 时刻,MOSFET 的DS 电压升至与Vgs 相同的电压,Millier 电容迅速减小,GS 电容开始继续放电,此时DS 电容上的电压迅速上升,DS 电流则迅速下降;
  • [t8-t9]区间,至t8 时刻,GS 电容已放电至Vth,MOSFET 完全关断;该区间内GS 电容继续放电直至零。

因二极管反向恢复引起的MOSFET开关波形

(1):实验电路

嵌入式分享合集163_嵌入式硬件_28

(2):因二极管反向恢复引起的MOSFET 开关波形: 

嵌入式分享合集163_嵌入式硬件_29

功率MOSFET的功率损耗公式

(1):导通损耗:

嵌入式分享合集163_三极管_30

为MOSFET 器件与二极管回路中的所有分布电感只和。一般也可将这个损耗看成器件的感性关断损耗。

(3):开关损耗:

开通损耗:

嵌入式分享合集163_三极管_31

功率MOSFET的选择原则与步骤 

(1):选择原则

(A):根据电源规格,合理选择MOSFET 器件(见下表):

(B):选择时,如工作电流较大,则在相同的器件额定参数下,

-- 应尽可能选择正向导通电阻小的 MOSFET;

-- 应尽可能选择结电容小的 MOSFET。

嵌入式分享合集163_单总线_32

(2):选择步骤

(A):根据电源规格,计算所选变换器中MOSFET 的稳态参数:

  • 正向阻断电压最大值;
  • 最大的正向电流有效值;

(B):从器件商的DATASHEET 中选择合适的MOSFET,可多选一些以便实验时比较;

(C):从所选的MOSFET 的其它参数,如正向通态电阻,结电容等等,估算其工作时的最大损耗,与其它元器件的损耗一起,估算变换器的效率;

(D):由实验选择最终的MOSFET 器件。

 理想开关的基本要求 

(1):符号

嵌入式分享合集163_三极管_33

(2):要求

(A):稳态要求:

合上 K 后

  • 开关两端的电压为零;
  • 开关中的电流有外部电路决定;
  • 开关电流的方向可正可负;
  • 开关电流的容量无限。

断开 K 后

  • 开关两端承受的电压可正可负;
  • 开关中的电流为零;
  • 开关两端的电压有外部电路决定;
  • 开关两端承受的电压容量无限。

(B):动态要求:

K 的开通

  • 控制开通的信号功率为零;
  • 开通过程的时间为零。

K 的关断

  • 控制关断的信号功率为零;
  • 关断过程的时间为零。

(3):波形

嵌入式分享合集163_嵌入式硬件_34

其中:H:控制高电平;L:控制低电平

  • Ion 可正可负,其值有外部电路定;
  • Voff 可正可负,其值有外部电路定。

 用电子开关实现理想开关的限制 

(1):电子开关的电压和电流方向有限制:

(2):电子开关的稳态开关特性有限制:

  • 导通时有电压降;(正向压降,通态电阻等)
  • 截止时有漏电流;
  • 最大的通态电流有限制;
  • 最大的阻断电压有限制;
  • 控制信号有功率要求,等等。

(3):电子开关的动态开关特性有限制:

  • 开通有一个过程,其长短与控制信号及器件内部结构有关;
  • 关断有一个过程,其长短与控制信号及器件内部结构有关;
  • 最高开关频率有限制。

目前作为开关的电子器件非常多。在开关电源中,用得最多的是二极管、MOSFET、IGBT 等,以及它们的组合。

 电子开关的四种结构 

(1):单象限开关

嵌入式分享合集163_三极管_35

(2):电流双向(双象限)开关

嵌入式分享合集163_三极管_36

(3):电压双向(双象限)开关

嵌入式分享合集163_运放_37

(4):四单象限开关

嵌入式分享合集163_三极管_38

开关器件的分类 

(1):按制作材料分类:

  • (Si)功率器件;
  • (Ga)功率器件;
  • (GaAs)功率器件;
  • (SiC)功率器件;
  • (GaN)功率器件;--- 下一代
  • (Diamond)功率器件;--- 再下一代

(2):按是否可控分类:

  • 完全不控器件:如二极管器件;
  • 可控制开通,但不能控制关断:如普通可控硅器件;
  • 全控开关器件
  • 电压型控制器件:如MOSFET,IGBT,IGT/COMFET ,SIT 等;
  • 电流型控制期间:如GTR,GTO 等

(3):按工作频率分类:

  • 低频功率器件:如可控硅,普通二极管等;
  • 中频功率器件:如GTR,IGBT,IGT/COMFET;
  • 高频功率器件:如MOSFET,快恢复二极管,萧特基二极管,SIT 等

(4):按额定可实现的最大容量分类:

  • 小功率器件:如MOSFET
  • 中功率器件:如IGBT
  • 大功率器件:如GTO

(5):按导电载波的粒子分类:

  • 多子器件:如MOSFET,萧特基,SIT,JFET 等
  • 少子器件:如IGBT,GTR,GTO,快恢复,等

 不同开关器件的比较 

(1):几种可关断器件的功率处理能力比较

嵌入式分享合集163_运放_39

(2):几种可关断器件的工作特性比较

嵌入式分享合集163_运放_40