低功耗批量驱动亚阈值OTA与CCII+单元构建的仪表放大器

需积分: 13 0 下载量 38 浏览量 更新于2024-08-09 收藏 639KB PDF 举报
"这篇研究论文探讨了一种针对低频应用的低功耗仪表放大器设计,采用基于低功耗批量驱动的亚阈值运算放大器(FC-OTA)和第二代正电流传送器(CCII+)单元。设计考虑了在弱反相区工作的条件,使用了 ± 0.35 V 的直流偏置电源。这种仪表放大器(IA)由2或3个CCII+单元组成,总功耗仅为3.847 µW或5.768 µW。" 本文的核心在于提出了一种新型的低功耗集成电路设计方法,利用折叠共源共栅运算放大器(FC-OTA)和正电流传送器(CCII+)的组合。FC-OTA是一种在弱反相区工作的放大器,这允许它在保持高效能的同时,降低功耗。而CCII+是第二代电流 conveyor 的一种,其在电路中担任重要角色,尤其在构建仪表放大器时。 CCII+单元由一个OTA单元和两个CMOS AB类反相器组成,分别用于实现CCII+的X和Z端子功能。这种结构使得CCII+单元能够提供低功率操作,同时保持良好的信号处理性能。其中,OTA单元仅消耗287 nW的功率,而整个CCII+单元的总功率消耗为1918 nW,体现了设计的低功耗特性。 仪表放大器(IA)是这种设计的主要应用,它集成了多个CCII+单元,目的是为了增强对低频生物信号和亚音频信号的放大能力。IA在设计中展现了高共模抑制比(CMRR)和高电源抑制比(PSRR),这对于噪声敏感的信号处理至关重要。IA的设计和仿真是在180纳米n-tub标准CMOS工艺下,利用Tanner EDA工具的16.1版本完成的,确保了其在实际应用中的可行性和效率。 这篇论文展示了如何通过创新的低功耗技术,设计出适用于低频应用的仪表放大器,特别适合于生物信号检测和亚音频信号处理等场景。这种放大器不仅具备低功耗优势,还能提供高增益调整范围,有助于在有限功率预算下实现高性能的模拟前端,为未来低功耗电子设备的设计提供了新的思路。

void SerialApp_ProcessMSGCmd( afIncomingMSGPacket_t *pkt ){ uint8 stat; uint8 seqnb; uint8 delay; switch ( pkt->clusterId ) { // A message with a serial data block to be transmitted on the serial port. case SERIALAPP_CLUSTERID1: // Store the address for sending and retrying. osal_memcpy(&SerialApp_RxAddr, &(pkt->srcAddr), sizeof( afAddrType_t )); seqnb = pkt->cmd.Data[0]; // Keep message if not a repeat packet if ( (seqnb > SerialApp_RxSeq) || // Normal ((seqnb < 0x80 ) && ( SerialApp_RxSeq > 0x80)) ) // Wrap-around { // Transmit the data on the serial port. if ( HalUARTWrite( SERIAL_APP_PORT, pkt->cmd.Data+1, (pkt->cmd.DataLength-1) ) ) { // Save for next incoming message SerialApp_RxSeq = seqnb; stat = OTA_SUCCESS; } else { stat = OTA_SER_BUSY; } } else { stat = OTA_DUP_MSG; } // Select approproiate OTA flow-control delay. delay = (stat == OTA_SER_BUSY) ? SERIALAPP_NAK_DELAY : SERIALAPP_ACK_DELAY; // Build & send OTA response message. SerialApp_RspBuf[0] = stat; SerialApp_RspBuf[1] = seqnb; SerialApp_RspBuf[2] = LO_UINT16( delay ); SerialApp_RspBuf[3] = HI_UINT16( delay ); osal_set_event( SerialApp_TaskID, SERIALAPP_RESP_EVT ); osal_stop_timerEx(SerialApp_TaskID, SERIALAPP_RESP_EVT); break; // A response to a received serial data block. case SERIALAPP_CLUSTERID2: if ((pkt->cmd.Data[1] == SerialApp_TxSeq) && ((pkt->cmd.Data[0] == OTA_SUCCESS) || (pkt->cmd.Data[0] == OTA_DUP_MSG))) { SerialApp_TxLen = 0; osal_stop_timerEx(SerialApp_TaskID, SERIALAPP_SEND_EVT); } else { // Re-start timeout according to delay sent from other device. delay = BUILD_UINT16( pkt->cmd.Data[2], pkt->cmd.Data[3] ); osal_start_timerEx( SerialApp_TaskID, SERIALAPP_SEND_EVT, delay ); } break; case SERIALAPP_CONNECTREQ_CLUSTER: SerialApp_ConnectReqProcess((uint8*)pkt->cmd.Data); case SERIALAPP_CONNECTRSP_CLUSTER: SerialApp_DeviceConnectRsp((uint8*)pkt->cmd.Data); default: break; }}每行代码注释

2023-06-06 上传