最近在思考能够用于96孔板的ECIS电路, 需要给板中电极提供约2.5V峰值电压(最好可调)而且频率可调的交流电. 而且我不想用类似金手指的方法把电极引出用板外电路供电. 为了完成目标, 我准备在电极层下面再加一块电路板提供交流电甚至是电流电压检测, 用通孔把电极引入(其实相当于原来是两层板现在做成了三层电路板), 这样造成了我的交流电发生/控制模块只有9mm×9mm的面积能放器件.
使用RS485/RS422模拟交流电
RS422这个通讯协议中使用4条线来传输数据(不含时钟线), 它的一位数据由两条线仪器传输, 当线A比线B电压高1.5V时为1, 线A比线B低1.5V时为0. 速率可达为30Mbps, 也就是说我一直发10101010的循环可以得到由方波构成的15MHz的交流电, 一直发11001100则得到7.5MHz的交流电, 以此类推.
RS485也是类似的, 不过它只用2条线来传输数据(所以不能同时收发), 而且传输速率只能达到250kbps, 用上述方法最多得到峰值2.5V(记不清了, 好像是2.5V)频率125kHz的交流电.
这个方案的缺点是只能发出方波的交流电, 峰值电压不可调, 而且贵(RS422要三四十元一片). 因为MCU没有那么多IO口控制RS422/RS485的数据输入, 需要用74HC595之类的芯片扩展出足够的IO口, 所以用RS422的话实际能够达到的交流电的频率可能会因为MCU与74芯片的速度而更低.
使用反相器模拟交流电
反相器会将输入的高电平(一般>0.75Vcc)变为低电平(一般<0.15Vcc)输出, 或者反过来, 速度也能达到MHz级别, 所以将反相器的输入输出引出可以作为方波交流电来用.反相器还比RS422/RS485便宜很多(单价个位数RMB) ,而且只要控制电源电压Vcc就能控制输出交流电的峰值电压, 但是一旦加上控制电源电压的DAC就贵了.
如果不要求调整峰值电压的话反相器是一个不错的选择呢.
使用双路DAC模拟交流电
两路都DAC一路从0涨到Vcc一路从Vcc跌倒0就能模拟出交流电了, 而且各种波形都可以模仿. 一般微型的DAC用I2C协议控制, 这样就不需要用74HC595扩展处96个IO口了, 直接把全部设备接入I2C总线即可(I2C总线最多能够接入128个设备), 但是受限于I2C的通信速率(接入设备过多), 能够达到的交流电频率可能只有数kHz.
为了解决上述问题可以用一个小MCU控制这个双路DAC, 只要用串口或者I2C(因为SPI占了4条线比串口和I2C多, 所以不考虑了)告诉这个MCU峰值电压与频率(或者再加上波形)就行. 但是这样成本增加了, 而且9mm×9mm的电路板放不下这些元件了.
ATtiny模拟交流电
那就干脆直接用MCU了. 利用PWM也可以模拟出一些交流电(效果可能就不得而知了), 而且如果MCU有ADC, 可以直接进行电极上电流电压的检测.
ATtiny系列是8位8引脚的迷你AVR MCU, 价格可以比DAC便宜很多, ATtiny13只需要4 RMB. 同时ATtiny MCU又具有两路或者三路的PWM, 有ADC, 支持I2C通信和SPI通信, 运行速率为10MHz到20MHz, 勉强能够支持MHz级别频率的交流电模拟.
因为引脚复用严重以及没有足够内存存储程序/数据, 我最终没有用低廉的ATtiny13, 而是用了价格为其三倍的ATtiny85, 它拥有8kB的”大内存”和额外的PWM输出, 中文资料也更多, 只是连续给96个MCU写程序想想就觉得刺激.
ESP32模拟交流电
为了获得更好的模拟效果, 我需要更快的MCU以及DAC, 又能够塞入9mm×9mm. 我唯一知道自带DAC的MCU就是ESP32了, 它自带两个8位DAC, 十几个ADC, 支持串口/SPI/I2C/BLE/WiFi通信(没有天线的设计还是不要考虑BLE和WiFi了吧), 并且最高运行频率为240MHz(为了控制发热应该只用到80MHz). 而且ESP32的封装(QFN5x5/QFN6x6)是能够放入我们9mm×9mm的地方的, 但是这种封装也意味着不能用电烙铁焊接了.
把ESP32用在这里简直是高射炮打蚊子. ESP32单价要二十几RMB, 用上它意味着我的96孔板ECIS电路的硬件成本将要超过2000 RMB…
不过ESP32具有WiFi以及OTA更新MCU程序的功能, 或许可以实现自动化程序烧写, 摆脱给96个MCU烧写程序的可怜操作.
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!