最近一个项目,使用光耦作为AD采样芯片作为SPI的隔离使用。
众所周知,使用光耦嘛,速度肯定得降下来,于是把spi速度调整到了8Kbps,开始使用。
光耦电路是最标准也是最简单的电路。
板子是其它人画的,他们告诉我,此处的R258为680欧,R263为4.7K,U68为TLP181
作了简单的测试,基本没有问题,数据可以正常获取。
准备放到产品上去使用时,问题来了:经常读取到错误的数据,在仔细琢磨,难道是前端 AD采样不准?于是作为滤波处理,对采集到的数据进行kalman滤波,想着问题应该解决了。结果发现,还是有很大的偏差。
于是,做处理,每次对AD采集的数据进行处理,每采一次,记录cnt++,每发现一次与上一次的数据值相差>0.2V,记录err_cnt++,长期运行看。
运行一段时间后,发现err_cnt占总的cnt的比例接近4%,问题严重呢。
再次跟踪,看看当数据错误时,与正常数据的差值有多大,发现差别非常大,再仔细研究一下,发现约为正常值的1/2或是1/4左右,于是猜测,是否是spi读取时,某个位丢了,于是,把光耦拆了,直接连接看有没有错误。
拆除光耦,作数据读取,读取了一万个数据,发现,没有此类的错误,坚定信心,光耦的问题!。
仔细阅读 TLP181的数据手册,发现有这么一段y话:
嗯,怀疑上拉电阻有问题呢,于是,将R263改成了2K,问题明显改善,测试的错误率降低到了1%。哟,有戏,继续改,改电阻改成了1.2K,嗯,错误率没啥变化。
奇怪咧,难道是驱动电流不够?将R258改成了220欧,咦,错误率上升到了4%,想不通了。
怎么办?只在再细细扒数据手册了,正着看,反着看,看了不下十遍,突然看到这一段了
对啊, 需要考虑CTR呢,Ic和If的关系要对应呢那我该先多少的Ic和IF呢?
还是看手册
推荐的IF是16-20mA,那按照上面的说明,饱和的CTR至少是30%,于是选定If为16mA左右,Ic在10mA左右,根据此规格选R258和R262
R258 = (5 - 0.7)/16mA = 268欧
R263 = (3-0.2)/10mA = 300欧
于是选R258=220 R260 =300,替换原有的电阻,测试,读取了半个小时,一万次,错误率为0.
OK,搞定收工。