kevinc

主攻ZYNQ及RTOS开发,关注Flash存储

I2C转GPIO的IO扩展芯片输出电流不足-PCF8574

1
阅读(12413) 评论(3)

板子上因为IO口不够用,采用了一个I2C转8路GPIO的芯片PCF8574(tssop20),控制Darlington管MC1413,驱动后端的7个Relay。

控制逻辑简图:

blob.png

问题:

调试中发现,前面的控制逻辑都是正确的,但是Darlington管前级的电压只有0.9V左右,这个电压明显不能使管子打开。

向前怀疑PCF8574的驱动能力不足。查看datasheet,果然是标准推挽输出的上管还有个限流源,只有100uA的能力。中上部的那个p-mos只是在切换逻辑的时候才开启,用来提速rising-edge的,并不是continuous输出(怎么就有一种追求指标但对实际性能没帮助的感觉,这款片子最早是philips在97年推出的,难道有什么特别的考虑)。

blob.png

blob.png


尝试解决1:加上拉电阻

如果只是100uA的逻辑输出能力,这里就基本可以看成是open-drain输出结构了(相对Darlington管的驱动需求来说)。所以我在GPIO上加了个1K的上拉电阻,实测电压2.8V,驱动逻辑完全正常了。(可以大概计算管子需求的电流在600uA左右)

但是,设计之初默认是所有relay都不开启,加上拉之后就变成了所有relay上电瞬间都是开启的,风险就来了!

果然,全部上拉后,其中一个relay后面的小阻值负载电阻就过流了。故,上拉不是可靠的解决措施!


尝试解决2:找驱动能力正常的IIC芯片

接下来找同型号的替代芯片。TI类似“I2C IO Expander”的芯片还是很多的,比如TCA9534就是标准的推挽输出,没有任何限流,高电平驱动电流有-10mA。tssop16的兼容型号很多,却没有一个tssop20的!悲剧

blob.png

现在暂时的解决思路是,找找过流的relay点,然后采用一部分片子用上拉,其他有风险的全部飞线连SOIC16的TCA9538(tssop16飞线难度很大啊)!后面改用 tssop16的TCA9534、TCA9554(内部带100k上拉)。

为么放过了这个100uA的限流???

总结:如果是采用低电平点亮LED,或者后端驱动逻辑芯片的设计,这个片子都没什么需要特别注意的,一旦有需要高电平驱动管子之类的,最好还是换成新型号tssop16封装的,或者没冲突下外加上拉。

备选型号分析:

TITCA9534
8ch,标准推挽输出,
TITCA95548ch,标准推挽输出,带弱上拉
NXP、TIPCF85748ch,输出灌电流限300uA
MicroChipMCP23008(MCP23S08)8ch,推挽,max 1.7mhz IIC
MicroChipMCP230098ch,open-drain,3.4mhz
MicroChipMCP23017(MCP23S17)16ch,推挽25mA,1.7mhz,货

参数比较:

TCA系列MCP系列

IIC-400khz

addr-cmd-data,4-register

TSSOP-16

IIC-1.7mhz,SPI-10mhz

addr-cmd-data,10-register

SSOP-20


尝试解决3:找mos型的芯片替代Darlington管

因为mos管是电压驱动的,驱动电流需求非常小<10uA,可以用PCF8574驱动。

在TI找到7ch的TPL7407L,nmos。可以完全兼容替代MC1413。项目上的问题是否可以解决了?

blob.png

关于手册上的COM脚推荐电压8.5V-40V之间的问题。

由于项目中前端logic是3.3V的,relay的电压是5VDC。所以这个8.5V是没法满足的。

手册上有一段说的很清楚,由于DRIVER这个模块是低压cmos做的,最大承压7V,所以在上面加了个LDO模块,用来把外面的Vsupply电压降到7V以内,那么可以推算出LDO有个至少1.5V的转换压降。所以才有了8.5V-min的推荐。

如果Vsupply=5V,那么DRIVER的logic电压是3.5V左右,即加在栅极的电压。这个电压开启是没有问题的,只是会影响Id电流,以及Ron电阻。具体影响就是导通能力减弱了点,内阻稍大了点。估算下来,仍会优于Darlington管。

blob.png

但是,居然看到这句话,那么上电后,PCF8574后面的mos管会全部开启,跟措施1类似了。再次悲剧。除非前端换成纯push-pull的。

At power on, all the ports are HIGH with a weak 100 uA internal pull-up to VDD。 - PCF8574


TCA9554 vs. MCP23008

之前一直比较纠结,400khz-IIC与10mhz-SPI,考虑到设计中的主频时钟是50mhz,400khz的串行速率是太慢了。下面根据项目情况仔细对比以下几点:

1、IO口占用。iic只需要2根线就可以控制8个芯片共64个gpio,spi是4根线控制4个片子共32个gpio,如果再多带个cs共5根线控制64个gpio;---项目上需要控制38个relay

2、spi的in/out分开,处理速度更快; ---项目后续可能有nand的cs/wp等控制,速度越快越好

3、iic有响应机制;---暂时收到错误也不会回馈系统 一般不会有错

4、23008有reset引脚,对软复位很有用; ---也可以让软件控制会初始态

5、9554的tssop16和23008的QFN封装


两种芯片在板子上都飞线试过

相同的logic代码,iic速率330khz,都测试OK,发送指令如下:

TCA9554 

0x400100 由于下一步切换成output后,IO全部为高,这里先全部改为00;

0x400300 地址0100-000-W,03配置寄存器设为output,因为默认是input;

0x4001FF 01寄存器,所有IO输出高电平;

MCP23008

0x420000 IODIR寄存器切换成output;

0x4209FF Port寄存器全部输出高;


指令格式:addr+cmd+data

blob.png

最终在板子上全部飞线mcp23008-soic18,跟mc1413正好pin-pin对接。

后面改版决定使用mcp23008-QFN20封装的。1、封装紧凑合适;2、reset非常适用本项目;3、切换成output后默认是00;4、10个配置reg具有灵活性;

另,23008指标是2.7~5.5V @400kHz, 4.5~5.5V @1.7mHz;虽然板上是3.3V供电,但还是尝试把速率提到1mhz以上。


/**********************************************************************************/

查询PCF8574时,无意间发现的这个牛人自制PCB板的过程,哈哈

http://bbs.cmnxt.com/forum.php?mod=viewthread&tid=10792


  1. @AET-程品豹   

    kevinc您好,我给您发邮件了。请注意查收

    公司不能登个人邮箱,手机屏昨天也碎了,悲剧! 有什么要讨论的回在这里吧。

  2. kevinc您好,我给您发邮件了。请注意查收

  3. • MCP23008 – I2C interface; three address pins 
    • MCP23S08 – SPI interface; two address pins