找回密码
 注册
关于网站域名变更的通知
查看: 531|回复: 1
打印 上一主题 下一主题

非软件错,也非硬件错,是软件硬件一块错

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-11-1 10:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
非软件错,也非硬件错,是软件硬件一块错
( M; @7 m/ w- @2 C7 J( Q
今天遇到一个小bug,如题目所说,是软件和硬件凑到一块出的错。
+ d) f5 Y* D9 w) j4 A+ K   如下图,是硬件。
- L# O0 o' |  }+ n3 j5 y, V3 w# r! \9 v# k/ a) F! C+ z
) n8 b1 {2 _' ^3 V
这是用一个晶体管控制继电器的输出,pkn接单片机的输出,R14是上拉电阻。这个图的出处,是以前的设计,我直接抄过来用了。一向也还好用。0 p8 h6 A+ h3 @/ |. W: g6 f' s
   但是必须指出,前一段用万用表 eepw.com.cn/news/listbylabel/label/万用表量过单片机的pkn引脚,在输出为高时,只有0.7V的电压,理论上应为单片机的供电电压5V。这大概是被晶体管拉低了。单片机是Microchip的DSPic,单腿的输出可到8mA,看样子单片机勉为其难了。长期这样会不会损坏单片机?. T8 G" e9 h4 r4 g" q0 N2 t

! _, }) q! H  Y! M! I9 z   出问题的是下面一段程序,要根据pkn的状态进入一段程序:
# X6 @) v1 m/ ]+ a; C       if(PORTBbits.PKN == 1)
2 K1 |1 n! Y5 K( c( z( i% S+ c       {  …… }
3 e$ t, V$ z! ^; Z# X   结果有一万次路过这个块,该进而没有进去。这是为什么?* X0 l& q2 ?/ R7 y% ^* F
   检查了半天,逻辑没有错。
% _( i8 {. \1 Q0 l+ I1 _% q
  s# s$ |) U( e9 E+ H   不废话了。想到了前面说的,在程序让pkn输出为高的时候,它被三极管拉低到0.7V,这时三极管是开通的,但是单片机管脚的状态却是“0”。所以上面的判断语句,从程序本身没有错,因为已在稍早时对PORTBbits.PKN赋1了,但是这个脚的实际状态却是“0”。) |/ t0 f2 X( p% p. s

) q0 ~  I/ ~6 J; J: N    这个程序,把PORTBbits.PKN,改为LATBbits.PKN,就是正确的。因为此时读、写的是输出锁存的状态,即使管脚的实际状态为零,锁存也告诉我们,他内心的态度是1。% E0 c. p) H$ m% D, T
    程序虽然对了,硬件还是不好,因为管脚还是要被拉低为零。而且R14的上拉是没有用处的。应把上拉的R14改为串在单片机管脚与三极管基极之间。
; f2 j% h8 K0 r

该用户从未签到

2#
发表于 2018-11-3 08:44 | 只看该作者
把三极管换成MOS,N沟MOS。 压控就可以避免电压被拉低的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-11 09:23 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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