wulin 发表于 2018-12-20 21:13 这个方法相当有用,感谢楼主分享经验。 为了这个高电平脉冲,折腾了很久了,现在终于完美解决。 |
51单片机这个功能还是有不足的,为何不返回来想呢,或在NPN前再加1级PNP的三极管不就可以了吗,我用51单片机作项目都是这样处理的 |
wulin 发表于 2018-12-21 09:47 如果只需要1个端口上电复位后低电平可以用P2.0,在下载用户程序时硬件选项中设置。 ![]() |
dzbj 发表于 2018-12-21 12:07 我也试过加一个1K的下拉电阻,然后将470欧用作三极管基极的限流,然而并没有什么用,而且限流电阻小三极管都进入放大区了。打电话去51那边他们那边销售也说不清给个技术的电话 打了几次没通就没打 了 |
你这个电路和STC官网以前给的不一样 不知道是不是STC官网笔误 这么接相当于把输出端口分压了 我大概算了一下 如果限流470欧 下拉3k 输出电压是4.3v 如果1k下拉就只有3.4v 感觉这样有接多东西驱动起来不太好 过去STC给的说法是这样:51单片机复位后所有端口都是弱上拉 为了防止误动 可以在输出端口接下拉电阻 1~3k 并将端口设置成推挽输出模式 就是说不要那个470欧以上的电阻或者放在下拉电阻之后作为限流用 端口必须参照手册的PxM0/PxM1设置成推挽 否则拉不起来 我一般推NMOS 2.2k下拉+10k限流 管脚电压一般在4.5v~4.8v之间 截止STC8x系列的手册 没有看到如何配置寄存器能成为复位后直接输出低 |
aking991 发表于 2018-12-21 09:42 加个PNP是没啥问题,之前一直不想外加多余的器件 |
wulin 发表于 2018-12-21 09:47 104 我之前试过。加在三极管B极,另一端接地,也是不能完全消除。要完全消除那还是得像之前那个大神说的加个反相器。多谢大神指教! |
luanhong 发表于 2018-12-21 08:59 可以这样理解,按此方法在实际应用中没有发现异常。如果在下拉电阻两端并联103~104小电容能有效消除小脉冲,但会影响外部瞬态响应特性。这是要根据实际需求取舍的, |
51单片机这个功能还是有不足的,为何不返回来想呢,或在NPN前再加1级PNP的三极管不就可以了吗,我用51单片机作项目都是这样处理的 |
wulin 发表于 2018-12-20 21:13 程序我试过,刚才又按您的程序试了一下,还是有个小脉冲,尖峰电压降低了 原来是24V 现在上不到24V就往下降了。我的理解的芯片手册的意思是。复位后没进入程序前,所有的 IO都会成为准双向口的高电平。但其输出能力较弱,所以测量输出电压还是有3.3V但是其驱动电流较低,带不动晶体管?能这样理解吗?但是电压器件还是能带的动 ? |
angmall 发表于 2018-12-20 19:57 外加器件有很多种方法 ![]() |
这是你理解错了。如果想P20~P27 设置成强推挽输出并且开机瞬间没有尖脉冲按手册推荐的方法是可行的。只要初始化代码写得正确完全可以满足需求。单片机加电复位后P2默认准双向(弱上拉)高电平,由于有下拉电阻使得I/O实际输出电压很低不足以使晶体管导通。进入main程序首先设P2全是低电平,延时几微秒再设P2全是强推挽,这时不会有高电平输出。在应用程序中需要输出高电平时因强推挽输出I/O口内阻小足以抵消下拉电阻影响保持高电平驱动晶体管。 void main() { //进入main时I/O口全都是高电平 //初始化设置 P2=0x00;//先设P2全是低电平 _nop_();//延时几微秒 _nop_(); _nop_(); _nop_(); P2M0 = 0xff;//后设P2全是强推挽 P2M1 = 0x00; while(1) { } } |
51单片机上电的时候,默认都是高电平的,你想输出低电平的话可以加一个反相器。 一看就知道,是外行设计的电路。这才需要零初始状态。 开关设计成低电平驱动的,这样就可以避免这种情况 |