I2C转GPIO的IO扩展芯片输出电流不足-PCF8574
1赞板子上因为IO口不够用,采用了一个I2C转8路GPIO的芯片PCF8574(tssop20),控制Darlington管MC1413,驱动后端的7个Relay。
控制逻辑简图:
问题:
调试中发现,前面的控制逻辑都是正确的,但是Darlington管前级的电压只有0.9V左右,这个电压明显不能使管子打开。
向前怀疑PCF8574的驱动能力不足。查看datasheet,果然是标准推挽输出的上管还有个限流源,只有100uA的能力。中上部的那个p-mos只是在切换逻辑的时候才开启,用来提速rising-edge的,并不是continuous输出(怎么就有一种追求指标但对实际性能没帮助的感觉,这款片子最早是philips在97年推出的,难道有什么特别的考虑)。
尝试解决1:加上拉电阻
如果只是100uA的逻辑输出能力,这里就基本可以看成是open-drain输出结构了(相对Darlington管的驱动需求来说)。所以我在GPIO上加了个1K的上拉电阻,实测电压2.8V,驱动逻辑完全正常了。(可以大概计算管子需求的电流在600uA左右)
但是,设计之初默认是所有relay都不开启,加上拉之后就变成了所有relay上电瞬间都是开启的,风险就来了!
果然,全部上拉后,其中一个relay后面的小阻值负载电阻就过流了。故,上拉不是可靠的解决措施!
尝试解决2:找驱动能力正常的IIC芯片
接下来找同型号的替代芯片。TI类似“I2C IO Expander”的芯片还是很多的,比如TCA9534就是标准的推挽输出,没有任何限流,高电平驱动电流有-10mA。tssop16的兼容型号很多,却没有一个tssop20的!悲剧
现在暂时的解决思路是,找找过流的relay点,然后采用一部分片子用上拉,其他有风险的全部飞线连SOIC16的TCA9538(tssop16飞线难度很大啊)!后面改用 tssop16的TCA9534、TCA9554(内部带100k上拉)。
为么放过了这个100uA的限流???
总结:如果是采用低电平点亮LED,或者后端驱动逻辑芯片的设计,这个片子都没什么需要特别注意的,一旦有需要高电平驱动管子之类的,最好还是换成新型号tssop16封装的,或者没冲突下外加上拉。
备选型号分析:
TI | TCA9534 |
8ch,标准推挽输出, |
TI | TCA9554 | 8ch,标准推挽输出,带弱上拉 |
NXP、TI | PCF8574 | 8ch,输出灌电流限300uA |
MicroChip | MCP23008(MCP23S08) | 8ch,推挽,max 1.7mhz IIC |
MicroChip | MCP23009 | 8ch,open-drain,3.4mhz |
MicroChip | MCP23017(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。项目上的问题是否可以解决了?
关于手册上的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管。
但是,居然看到这句话,那么上电后,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
最终在板子上全部飞线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