找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2199|回复: 12
收起左侧

关于单片机上拉电阻接线问题 第二问

[复制链接]
ID:734017 发表于 2020-5-2 23:40 | 显示全部楼层 |阅读模式
本帖最后由 happy2058 于 2020-5-3 15:03 编辑

一直没搞好,睡都睡不好,这个板把我都快搞疯了
单片机IO不够5V 加了上拉电阻发现不行。试过1K和10K  然后发现以下问题点。
1,不管P1还是P2,单独给0xff 就是5V ,如果把整个代码下去进就只有3.9V左右,我把线都拔掉,空载3.9V。为什么???
2,下图,1 IO串10K  给0V  e极给5V VCC,   上拉1K        数码管不亮
               2图 IO串10K 给0V   e极给5V VCC ,                   数码管亮
               3图 IO串10K P2 3.9V   e极给5V,  上拉1K       数码管不亮          注:上拉到4.7V左右

               4图 IO串10K P2 3.9V   e极给5V ,                  数码管亮

               5图 IO串1K  P2 3.9V    e极给5V    上拉10K或1K    不管有没有上拉电阻,三极管都处在放大状态     数码管不受控

求大神分析一下,三极管没学好,不要见笑!!! 三极管是S8550  PNP

板上P24~P27是悬空,接了半边开关管脚




7a595214a548c2220fe946766aa877f.jpg
03ba4d1562816b83e4734af3934bae9.jpg
回复

使用道具 举报

ID:734017 发表于 2020-5-2 23:51 | 显示全部楼层
程序如下
#include <reg52.h>
//                                                       0   1   2   3   4   5   6   7  8    9
unsigned char LED8DATA_One[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
//                                                    段选高位       底位
unsigned char LED8DATA_Two[4] = {0xef, 0xdf, 0xbf, 0x7f};
//unsigned char LED8DATA_Two[4] = {0xff, 0xff, 0xff, 0xff};              // 测试用全给1
unsigned char led[4] = {0x00};
int minute=60 ,sec=0;                                                                  //60分钟
unsigned int Counter=0;
void LEDDATA(unsigned char MM, unsigned char jj)
{
P0 = MM;
P2= jj;
}
void Time1_Init()                                                                      //定时器1中断   1毫秒
{
TMOD |= 0X10;
TMOD &= 0XDF;
  //TMOD = 0X10;
TH1 = 0XFC;
TL1 = 0X66;
TR1 = 1;
}
void int_Init()
{
ET1 = 1;
EA = 1;
}
void main()
{  
  unsigned char k=0;
  Time1_Init();
  int_Init();
  while (1)
   {
  led[3] = sec % 10;
  led[2] = sec / 10 % 10;
  led[1] = minute % 10;
  led[0] = minute / 10 % 10;

   if (k < 4)
   {
   k++;
   }
   else
   {
   k = 0;
   }
      LEDDATA(LED8DATA_One[led[k]],LED8DATA_Two[k]);
   if (500 < Counter)
      LEDDATA(LED8DATA_One[led[k]]^0X80,LED8DATA_Two[k]);                        //时钟显示
   }
}
void interrupt_time_1() interrupt 3                                                            //60分钟倒数中断
{
TH1 = 0XFC;
TL1 = 0X66;
Counter++;
if (1000 == Counter)
{
  Counter = 0;
  sec--;
  if(sec<0)
  {
  sec=59;
  }
  if (sec == 59)
  {
   minute--;
  }
}
}

回复

使用道具 举报

ID:642838 发表于 2020-5-3 16:00 | 显示全部楼层
1.png 看来你是没有弄清单片机上拉电阻的意思。在正电源和IO口之间接的才叫上拉电阻,如图
回复

使用道具 举报

ID:642838 发表于 2020-5-3 16:25 | 显示全部楼层
本帖最后由 odfggf 于 2020-5-3 16:56 编辑

  PNP导通的条件就是B级低于E级,5张图说的其实是PNP的偏置电阻。偏置电阻用1K,和10K串联分压,B级电压高于4.3V,不够PNP导通条件。
图中这几个10K电阻,是PNP的B级限流电阻,取值1K---4.7K,都足以满足3极管的开关2种状态,点亮数码管。在单片机数字电路当中,只需要考虑3极管的开关2种状态,放大等别的状态不需要,所以只需要给b级接一个限流电阻就行了,别的不需要
回复

使用道具 举报

ID:579424 发表于 2020-5-3 17:27 | 显示全部楼层
单片机输出低电平时,通过IC内部下拉到地。当输出高电平时,由内部上拉至vcc。三极管导通电压Vbe一般0.5到0.8v之间。
1/4.电流经上拉通过IC内部回流到地。vbe电压为上拉电阻电压,不考虑IC内部下拉分压时。粗略计算Vbe也无法满足导通电压,因而截至。
2/3.Vbe足以满足导通电压,因而不论高低电平都回导通。
5.就更不必说了。
回复

使用道具 举报

ID:511890 发表于 2020-5-3 17:41 | 显示全部楼层
上拉电阻:+5V---电阻---IO口。
图一:IO 0V。窜两电阻至5V。先当于两个电阻(10K,1K)分压,1K电阻分到的电压驱动三极管,也就是三极管E和B之间的电压为5*(1/11)约0.5V,三极管不导通。所以led不亮。
图二:三极管e极和B极电压降约5V,三极管导通,LED亮。
其它的图同理。就不分析了。
至于图3会亮。应该是8550有关。8550的EB压降只要达到1.2V就会导通。
最后,如果要加上拉电阻,避免出现LED在单片机待机状态下信号错误。就在10K电阻的另一端直接接+5V就行。这样,10K就是上拉电阻。你那个1K的电阻是并联在三极管BE极之间的。起到的是分压作用。不是上拉作用。
回复

使用道具 举报

ID:734017 发表于 2020-5-3 20:20 | 显示全部楼层
odfggf 发表于 2020-5-3 16:00
看来你是没有弄清单片机上拉电阻的意思。在正电源和IO口之间接的才叫上拉电阻,如图

谢谢你,之前不太明白,只知道为了得到一个电压才接电阻
回复

使用道具 举报

ID:734017 发表于 2020-5-3 20:21 | 显示全部楼层
星际尘埃 发表于 2020-5-3 17:27
单片机输出低电平时,通过IC内部下拉到地。当输出高电平时,由内部上拉至vcc。三极管导通电压Vbe一般0.5到0 ...

嗯,谢谢你,我好好理解一下
回复

使用道具 举报

ID:734017 发表于 2020-5-3 20:21 | 显示全部楼层
odfggf 发表于 2020-5-3 16:25
PNP导通的条件就是B级低于E级,5张图说的其实是PNP的偏置电阻。偏置电阻用1K,和10K串联分压,B级电压高 ...

谢谢你哦
回复

使用道具 举报

ID:734017 发表于 2020-5-3 20:24 | 显示全部楼层
幻剑心 发表于 2020-5-3 17:41
上拉电阻:+5V---电阻---IO口。
图一:IO 0V。窜两电阻至5V。先当于两个电阻(10K,1K)分压,1K电阻分到的电 ...

谢谢你,我那单片机IO口,电压不够,搞我好久,我要给1,让三极管不通
帮我看看这个图。IO的总电流是不是这样计算的,我基础不好
bedc1dd3b1d6c879461516408bfd0a7.jpg
回复

使用道具 举报

ID:420836 发表于 2020-5-4 01:54 | 显示全部楼层
在上图中,应将10k电阻器放在左侧5V电源下方,然后连接到IO和晶体管的基极,注意,在连接IO之前,添加一个1k电阻器。 在晶体管发射极和右侧5V之间,添加一个300 ohm的电阻器以限制LED电流。 IO被拉低以点亮LED,电流计算如下:在发射器上,(5V-1V)/ 300 ohm〜13.3mA; 在基极上,Vb = 5-1-0.3 = 3.7V,IO电流I = 3.7V-0.2 / 1k = 3.5mA,上拉电阻器电流I_pull_up =(5-3.7)/ 10k = 0.13mA,晶体管 基本电流Ib = 3.5mA-0.13mA = 3.37mA,LED电流I_LED = 13.3mA-3.37mA = 9.93mA;
回复

使用道具 举报

ID:734017 发表于 2020-5-4 10:39 | 显示全部楼层
TTQ001 发表于 2020-5-4 01:54
在上图中,应将10k电阻器放在左侧5V电源下方,然后连接到IO和晶体管的基极,注意,在连接IO之前,添加一个1 ...

你看我这个图,因为IO 给输出的时候不到5V (没有外接电路)实测只有3.8到4V之间。是不是程序把电压拉低了?
给低电平的时候,三极管导通,给高电平的时候,电压拉不上来,三极管无法断开。
在IO上拉,无法拉高。这方法不可行
问1-在基极上拉,这个点的电压要在4.3以上才能断开三极管。电阻要考虑三级管导通时基级电压。断开时基极电压。电阻取值随IO变化?
问2-IO电压在没有外接电路的时候,电压是怎么因为程序变化有影响??长通电是5V。跑程序的时候电压不足。
问3-有没有什么方法可以让IO固定在5V。压降小一点

51hei截图_20200504101454.png
ddd.jpg
回复

使用道具 举报

ID:642838 发表于 2020-5-5 09:39 | 显示全部楼层
happy2058 发表于 2020-5-4 10:39
你看我这个图,因为IO 给输出的时候不到5V (没有外接电路)实测只有3.8到4V之间。是不是程序把电压拉低 ...

这个应该考虑电源供电的稳定性,是不是电源供电不足?
另外在跑程序时,IO会不断变化,测出的电压是不准的。
如果检测都没有问题,可以考虑用电平转换器,而不是在三极管基级加电阻,这个无论怎么加,都不会有任何作用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表