都是IO弱上拉惹的祸

2012年12月10日 11:36    发布者:绝对好文
作者:特权同学

开发的一款液晶驱动器,接收MCU过来的指令和数据进行图像显示。使用了一片可编程(带使能和PWM调节控制)的背光芯片。在CPLD设计中,上电复位状态将背光使能拉低(关闭),直到MCU端发送开显示指令后才会将背光使能拉高(开启)。

遇到的问题是这样,一上电原本背光是关闭的,直到MCU发出指令后才会开启,但是一上电(按下开关),背光闪烁了一下。效果就像闪光灯一样,也就是说,上电瞬间,背光开启又关闭,然后再开启。试着改变上电延时启动背光时间以及不同的电路板,发现都会出现类似的问题,排除代码设计问题和电路板本身的问题。

开始的时候,没有动用示波器,只是以为CPLD在上电后复位结束前的这段时间内控制背光使能信号的引脚出于三态,使能引脚对于这个三态(类似悬空)也有可能被开启。因此,猜想在背光芯片的输入端所使用的10uF电容是否太小,如果加大这个电容应该就可以大大延缓背光芯片的输入电压的时间,从而即便在复位结束后一段时间内,使能管脚仍然无法正常使能背光。这个想法确是也没有什么问题,于是并了一个10uF,效果不是那么明显,再并了一个100uF大大家伙,问题解决了。不过充电长放电也长,关闭后短时间内若再开启,现象仍然复现,问题搁浅,加大电容不是办法。

询问了背光芯片的原厂商,提出了CPLD在上电初始是高电平的解释。拿来示波器一看,确是在CPLD的复位信号刚刚上升的时候(0.5V以下),连接到背光使能的IO脚出现了一个短暂的高脉冲,这个高脉冲维持了大约250us,感觉很蹊跷,为什么复位期间IO脚出现如此的高脉冲呢?于是再找了另一个IO脚对照,一摸一样的波形。然后找了同一个BANK的VCCIO同时捕获,VCCIO上升后不久就看到那个IO脚上升,上升的波形也几乎一致。挺纳闷的,为什么CPLD在上电初始复位之时IO出现一个短暂的高脉冲呢?是电路的干扰吗?不像,于是找来Altera的FAE,一句话解决问题:Altera CPLD的IO在上电后复位前处于弱上拉状态。也难怪出现这个高电平,而且对背光产生了作用。弱上拉已成事实,那解决的办法有一个,加个下拉,电阻要远小于上拉。而看看电路,原本就有一个推荐的100K下拉电阻在呢?思考了一下,为什么不起作用呢?而且采到的高电平还是直逼3.3V呢。是不是那个弱上拉比100K小得多呢?不知道,但是换了10K的下拉后,问题解决了,无数次开关看不到闪屏现象了。再次采样,那个IO的输出不到0.33V,这么看若上拉该有100K以上吧?而和下拉100K时的压值算算还挺让人摸不着头脑的。但,这个问题也许是和负载有关吧。不过,让特权同学记住了一点,CPLD上电后复位前的IO处于弱上拉。