三极管的电平转换及驱动电路分析

3.3V-5V电平转换电路

1

如上图。左端接3.3V CMOS电平,能够是STM32、FPGA等的IO口,右端输出为5V电平,实现3.3V到5V电平的转换。

如今来分析下各个电阻的作用(抓住的核心思路是三极管的Vbe导通时为恒定值0.7V左右):

  1. 假设没有R87,则当US_CH0的高电平直接加在三极管的BE上,>0.7V的电压要到哪里去呢?
  2. 假设没有R91。当US_CH0电平状态不确定时,默认是要Trig输出高电平还是低电平呢?因此R91起到固定电平的作用。同一时候。假设无R91,则仅仅要输入>0.7V就导通三极管,门槛电压太低了,R91有提升门槛电压的作用(可參见第二小节关于蜂鸣器的分析)。

    可是,加了R91又要注意了:R91假设太小,基极电压近似

    仅仅有Vb>0.7V时才干使US_CH0为高电平时导通,上图的Vb=1.36V

  3. 假设没有R83,当输入US_CH0为高电平(三极管导通时),D5V0(5V高电平)直接加在三极管的CE级。而三极管的CE,三极管非常easy就损坏了。

再进一步分析其工作机理:

  1. 当输入为高电平。三极管导通。输出钳制在三极管的Vce,对电路測试结果仅0.1V
  2. 当输入为低电平。三极管不导通,输出相当于对下一级电路的输入使用10K电阻进行上拉,实际測试结果为5.0V(空载)

    请注意:

    对于大电流的负载。上面电路的特性将表现的不那么好,因此这里一直强调——该电路仅适用于10几mA到几十mA的负载的电平转换。

蜂鸣器驱动电路

2

上面是从周立功的iMX283开发板上载下的电路,既能够是有源也能够是无源蜂鸣器。来分析下:

  1. 计算下各处的电流(S9013的β=120,设蜂鸣器电流15mA):

    输入为高电平的门槛电压计算为:

    R1起到了提供啊门槛电压的作用。

  2. 有源蜂鸣器和无源蜂鸣器的驱动电路差别主要在于无源蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管D1提供续流。否则,在蜂鸣器两端会有反向感应电动势,产生几十伏的尖峰电压。可能损坏驱动三极管,并干扰整个电路系统的其他部分。

    而假设电路中工作电压较大,要使用耐压值较大的二极管,而假设电路工作频率高,则要选用快速的二极管

  3. 设计这样的电路的基本路子是:确定负载(蜂鸣器10mA~80mA)电流和输入门槛电压。

    根据1中的方法计算获得R1与R2的值。

ULN2x03驱动电路

3-1

针对上面的驱动电路:

  1. 负载接的是红外二极管。其串联电阻是限流电阻。控制红外发射强度
  2. 输入连接到STM32的PWM功能普通IO口(设置推挽输出),COM口接输出电压5V

3-2

针对上面的电路測试(Power=5.0V):

  1. 输入3.3V,输出0.6V
  2. 输入0V,输出5.0V
  3. 输入不接,输出5.0V

所以,ULN2003/2803相同能够用于电平转换,那这是为什么呢?ULN2803/2003与三极管又有什么关系——其内部实现就是两个三极管。

4

其结构有3个特点:

  1. 输出集电极开漏。因此能够自己接上拉电阻,将信号上拉到对应的电平,ULN2803手冊上说明能承受的最大电压为50V

  2. 数据手冊上说明在Ic=250mA时的输入门槛电压为VI(on)=2.7V

  3. COM端接有一个反向二极管:接到输出电源,用于驱动电机等负载电感器件时能在上下电时提供电流回路保护电路。输出电压高于COM端电压,则电压会钳制在VCOM+0.4V左右(这里的二极管压降较小)

ULN2003与ULN2803的差别仅在于ULN2003仅仅有8个通道,而ULN2803有9个通道。

相对于前面的自己搭建的三极管电路,其具有更好的电流驱动特性。因此,前面的自己搭建的三极管电路适用于电平切换及小电流的驱动,而ULN2803及ULN2003适用于更大电流的驱动(Datasheet上说最大驱动电流能达到500mA左右)。因此经常使用ULN2803及ULN2003(还有其他的如75452、MC1413、L293D)提高系统的带负载能力(电机、大型LED、继电器等)。

后注:

三极管还可用来驱动MOS管,相关内容还有待之后的实际測试与验证,留待之后讨论!

转载于:https://www.cnblogs.com/mfmdaoyou/p/7115248.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个使用STC8A8K64D4单片机、PWM按键控制输出电平,并通过A/D、D/A转换实时显示电压和电流的C语言代码示例: ```c #include <STC8.H> sfr P4 = 0xe8; // 定义P4口为数字量输出 void delay(unsigned int t) { // 延时函数 unsigned int i, j; for (i = 0; i < t; i++) { for (j = 0; j < 120; j++); } } void PWM_Init() { // 初始化PWM P4M0 = 0x00; // 将P4口设为推挽输出 P4M1 = 0x00; PWMCFG = 0x00; // PWM1 为标准模式 PWMCR = 0x80; // PWM1 输出使能 PWMPH = 0x00; // 设置PWM1占空比高8位为0 PWMPL = 0x00; // 设置PWM1占空比低8位为0 PWMCKS = 0x04; // PWM1时钟选择,Fsys/16 } void ADC_Init() { // 初始化ADC P1ASF = 0x01; // 将P1.0设为模拟输入 ADC_RES = 0x00; // 清除ADC结果寄存器 ADC_CONTR = 0x88; // ADC转换使能,转换时钟选择,Fadc/2 } unsigned int ADC_Read(unsigned char ch) { // 读取ADC值 ADC_CONTR = ADC_POWER | ADC_SPEEDH | ch | ADC_START; _nop_(); // 等待转换完成 _nop_(); // 建议使用timer定时,防止死循环 while (!(ADC_CONTR & ADC_FLAG)); ADC_CONTR &= ~ADC_FLAG; return ADC_RES; } void DAC_Init() { // 初始化DAC P2M0 = 0x00; // 将P2口设为推挽输出 P2M1 = 0x00; } void DAC_Output(unsigned int value) { // 输出DAC值 P2 = value; } void main() { unsigned int pwm_value = 0; // PWM占空比值 unsigned int adc_voltage = 0; // ADC转换的电压值 unsigned int dac_current = 0; // DAC输出的电流值 PWM_Init(); // 初始化PWM ADC_Init(); // 初始化ADC DAC_Init(); // 初始化DAC while (1) { pwm_value = ADC_Read(0); // 读取按键值并作为PWM占空比 PWMPH = pwm_value >> 8; // 设置PWM占空比高8位 PWMPL = pwm_value; // 设置PWM占空比低8位 adc_voltage = ADC_Read(1); // 读取电压值 dac_current = adc_voltage * 255 / 3300; // 计算电流值,假设电压范围为0-3300mV DAC_Output(dac_current); // 输出电流值到DAC // 在数码管上显示电压和电流,具体代码根据实际数码管和显示方法进行编写 delay(100); // 延时一段时间 } } ``` 以上是一个简单的示例代码,它通过读取按键值来作为PWM占空比,控制输出电平;通过ADC读取电压值,并计算电流值,然后使用DAC输出电流值;同时,你需要根据实际的数码管和显示方法来编写显示电压和电流的代码。请根据你的实际需求和硬件环境进行适当的修改和调整。 希望这个示例能够帮助到你!如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值