[求助] 各位大侠!这个电路行得通吗?

werjufour   2015-2-7 22:53 楼主
C:\Users\ASUS\Pictures大侠们!       你们好!附件里的图可以使用吗?
       有人说这样不可以,必须把继电器接到集电极与地之间,是这样吗?
如果我这个图不行,是什么原因不行呢?
谢谢各位了?

  • 捕获.PNG

回复评论 (33)

说不能工作是不对的,应该可以工作,要看你电阻接多大了。这么接三极管饱和不了。
但是很少有人这么用,这算是非主流用法吧,一般半吊子经常设计成这样。
常规用法就是集电极接负载,然后继电器(并)接续流二极管。
点赞  2015-2-7 23:09
这样的接法叫射随器,能用。但在低压供电时因压降大容易使继电器获得驱动不足,晶体管的功耗也较大。另外,如果用低压控制高压,只用PNP管是不行的,为什么,留个“作业”给楼主。
好好弄明白晶体管基本应用电路吧。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2015-2-7 23:50
这个管子可能会被烧坏!
点赞  2015-2-8 00:51
你这个电路的逻辑功能是一通电晶体管就导通,继电器也导通,没有通断状态改变的控制功能。不如直接将继电器下端接地。
如果要有控制功能,且控制端是CPU的IO口,那你应该将晶体管改成NPN型,且R1不应该接地,而是接CPU的IO端。如果不改变晶体管极性,则+12V通过晶体管的BE结加到CPU的IO口,将烧毁CPU。
点赞  2015-2-8 08:08
如5楼所说,一上电,Q1导通,继电器通电,而控制电流在R1的压降上升要足够大,才能使Q1截止,继电器断开。 将R1接到+Vcc,控制信号在基极与地输入,电路就合理。 本帖最后由 captzs 于 2015-2-8 12:42 编辑
点赞  2015-2-8 12:33
别人给你建议是正确的。但不是必须。

点赞  2015-2-8 14:53
此共集电极电路可行,但与共发射极接法相比较,这种电路不如共发射极电路。
一是需要很大(接近于正负电源电压)的驱动电压范围,二是三极管不可能饱和,故管压降较大,从而管子功耗较大。
点赞  2015-2-8 14:57
另外,无论是采用哪种电路,继电器绕组两端必须接续流二极管,否则关断时击穿三极管的可能性非常大。
点赞  2015-2-8 15:00
好多大神,来学习
作为一个水军,就是尽量的多回帖,因为懂的技术少,所以回帖水分大,见谅! EEWORLD开发板置换群:309018200,——电工们免费装β的天堂,商家勿入!加群暗号:喵
点赞  2015-2-8 19:48
引用: 为什么饱和不了呢?
我就是不太懂才来这里向大侠们请教的!
如果就这个电路,能否可以给出算各级电压的公式呢?





点赞  2015-2-8 20:31
引用: 恩,谢谢!这个我知道,我这是简单的画 了一下,这样的接继电器可以否还有基极控制部分也没有给出




点赞  2015-2-8 20:32
引用: 不太明白大侠的意思,为什么这样接就是共集电极接法了呢?
另外压降大是什么原因呢?
能否说详细点呢?




点赞  2015-2-8 20:35
引用: 谢谢你!我正是用IO口来控制它的通断的,
不然我都把MCU给烧掉了!
我需要用PNP管来驱动继电器!
我自己弄了一个制作,用它来控制高压
但是用NPN管子出了点问题。把它改一下。大侠!能否抽出你宝贵的时间帮我看看下面的程序!为什么在我上电的时候,继电器会吸合一下,然后释放呢?该芯片复位时P3口复位值都为1,跟这个有关系吗?

/*************************************************************
实验效果:用定时器定时来控制继电器的工作,初始时定时为150分钟、
继电器吸合、同时所定的时间在三位数码管上显示出来。开始时定时器
工作,按下S1确认定时键,每过1分钟时间减1,当所定的150分钟减为0时
继电器释放、定时器0不工作、数码管不显示单片机进入掉电模式。按下S1、
S2、S3均可唤醒单片机。S1的作用是按下该键时确认开始定时键,S2的作用
是按下该键时数码管显示或者不显示之间进行切换,S3的作用是设置需要定
时的时间,每按该键定时时间减10分钟。同时每个按键按下时都会发出滴的
一声。晶振采用12MHZ.
****************************************************************/
#include"STC15F204EA.h"
#include
#define GPIO_DIG P1
#define Fosc 12000000
sbit DS1=P3^7;
sbit DS2=P0^0;/*我所使用的单片机是A版本P0.0。B版本为P5.4*/
sbit DS3=P0^1;/*我所使用的单片机是A版本,所以这里用P0.1。B版本为P5.5*/      
sbit S3=P3^0;
sbit S2=P3^2;
sbit S1=P3^3;
sbit BZ=P3^4;
sbit RELAY=P3^5;
bit flag;
signed int  Num=160;
unsigned char bit100,bit10,bit1,Time;
unsigned char code DIG[10]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};
void Delay3ms();                //@12.000MHz
void Delay10ms();                //@12.000MHz
main()
{       
    unsigned char a,temp;
    BZ=0;
    RELAY=0;/*关闭继电器*/
    /*喂狗*/
    WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/
    P5M0=0x30;
    P3M0=0xB0;
          P1M0=0XFF;
    IT1=1;/*外部中断1为下降沿触发方式*/
    IT0=1;/*外部中断0为下降沿触发方式*/
    INT_CLKO=0x40;/*允许外部中断4中断*/
    EX1=1;/*允许外部中断1中断*/
    EX0=1;/*允许外部中断0中断*/       
    TMOD=0x00;/*设定定时器0、1工作模式为0*/
        AUXR=0x00;/*设定定时器0、1工作在12T模式*/
        TH0=(65536-Fosc/12/20)>>8;/*给定时器0赋初值,定时50ms*/
        TL0=(65536-Fosc/12/20);
        TH1=(65536-4*Fosc/12000)>>8;/*给定时器0赋初值,定时3ms*/
        TL1=(65536-4*Fosc/12000);
        ET0=1;/*开定时器0中断允许*/
        ET1=1;/*开中断允许*/
    PT1=1;/*设置定时器1为高优先级*/
        TR0=0;/*关闭定时器0*/
        TR1=1;/*开启定时器1*/
        EA=1;/*打开总中断*/
        while(1)
        {       
        WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/
        /*喂狗*/
            a=Num;
            bit100=a/100;/*提取百位*/
            a=a%100;
            bit10=a/10;/*提取十位*/
            bit1=a%10;/*提取个位*/
        if(Time==10)/*500毫秒到了吗?*/
        {
            Time=0;
            temp++;
            if(temp==120)/*1秒到了吗?*/
            {
                Num--;
                temp=0;
            }
            if((Num==1)&&(temp==119))
                BZ=1;
            if(Num==0)
            {
                BZ=0;
                Num=180;
                RELAY=0;/*关闭继电器*/
                TR0=0;/*关闭定时器0*/
                TR1=0;/*关闭定时器1*/
                GPIO_DIG=0;/*关闭数码管*/
                PCON=0x02;/*掉电模式,单片机睡觉*/
            }   
        }
        if(TR1==0)/*关闭数码管显示*/
        {
           //DS1=1;DS2=1;DS3=1;
            GPIO_DIG=0;
        }
        }                          
}
void Timr0() interrupt 1
{
        Time++;   
}
void Int0() interrupt 0
{
    Delay10ms();
    if(S2==0)
    {
        TR1=~TR1;/*数码管显示位取反*/
        flag=1;
    }   
}
void Int1() interrupt 2
{   
    Delay10ms();
    if(S1==0)
    {
        flag=1;
        TR0=1;/*定时器0启动确认定时*/
        TR1=1;/*启动定时计数器1扫描显示数码管*/
        Num--;
    }
}
void Int4() interrupt 16
{
    Delay10ms();
    if(S3==0)
    {   
        RELAY=1;/*打开继电器*/
        TR0=0;/*关闭定时计数器0进行调时间*/
        flag=1;
        if(TR1==1)/*数码管显示时才可以进行调节时间*/
        {
            Num=Num-10;
            if(Num<=0)
            Num=180;
        }
        TR1=1;/*启动定时计数器1扫描显示数码管*/
    }
}
void Timr1() interrupt 3
{
    unsigned char n,cnt;
    if(flag==1)/*有按键按下时蜂鸣器响一下(除按下S2键数码管不显示时不响外)*/
    {               
        BZ=1;
        cnt++;
        if(cnt==12)
        {
            cnt=0;
            BZ=0;
            flag=0;
        }     
    }
    if(Num>=100)
    {
        switch(n)
        {
            case(0):DS1=1;/*关闭第3位数码管显示*/                      
                        GPIO_DIG=DIG[bit100];/*送出数字段码*/
                        DS3=0; /*打开第一个数码的位选*/
                    break;
            case(1):DS3=1;/*关闭第1位数码管显示*/                 
                        GPIO_DIG=DIG[bit10];/*送出数字段码*/
                        DS2=0;/*打开第二个数码的位选*/
                    break;
            case(2):DS2=1;/*关闭第2位数码管显示*/                       
                        GPIO_DIG=DIG[bit1];/*送出数字段码*/
                        DS1=0;/*打开第三个数码的位选*/
                    break;
        }
    }
    else if((Num>=10)&&(Num<100))
    {   
        switch(n)
        {            
            case(0): DS1=1;/*关闭第3位数码管显示*/
                     break;                      
            case(1): DS3=1;/*关闭第1位数码管显示*/               
                          GPIO_DIG=DIG[bit10];/*送出数字段码*/
                         DS2=0;/*打开第二个数码的位选*/
                     break;
            case(2): DS2=1;/*关闭第2位数码管显示*/                       
                         GPIO_DIG=DIG[bit1];/*送出数字段码*/
                          DS1=0;/*打开第三个数码的位选*/
                     break;
        }
    }
    else
    {
        switch(n)
        {
            case(0): DS1=1;/*关闭第3位数码管显示*/
                     DS3=1;/*关闭第1位数码管显示*/
                     break;            
            case(1): DS2=1;/*关闭第2位数码管显示*/
                     break;      
            case(2): GPIO_DIG=DIG[bit1];/*送出数字段码*/
                         DS1=0;/*打开第三个数码的位选*/
                     break;
        }
    }
    n++;
    if(n>2)
    n=0;
}        
void Delay3ms()                //@12.000MHz
{
        unsigned char i, j;
        _nop_();
        _nop_();
        i = 36;
        j = 1;
        do
        {
                while (--j);
        } while (--i);
}
void Delay10ms()                //@12.000MHz
{
        unsigned char i, j;
        _nop_();
        _nop_();
        i = 117;
        j = 183;
        do
        {
                while (--j);
        } while (--i);
}




  • 3.PNG
  • 捕获.PNG
点赞  2015-2-8 20:54
引用: 大侠!能否给我说个明白呢?
我是真的不太懂,希望大侠能够给我讲解详细点呢?
万分感谢




点赞  2015-2-8 20:56

    main.rar (2015-2-8 21:00 上传)

    2.04 KB, 下载次数: 1

点赞  2015-2-8 21:01
建议楼主还是找出教材重新学习晶体管基本电路。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2015-2-8 22:34
引用: chunyang 发表于 2015-2-8 22:34
建议楼主还是找出教材重新学习晶体管基本电路。



点赞  2015-2-8 23:01



基本概念不清的话,只知道结果没什么好处。而基本原理不是几句话能说清的,最基本的东西务必去看书。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2015-2-8 23:23
在CPU上电时IO口处于高电平,为您提供1个电路参考,可以避免继电器瞬间闭合: 未命名.JPG 本帖最后由 wenyangzeng 于 2015-2-9 13:12 编辑
点赞  2015-2-9 13:09
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复