广告

使用高级MCU外设降低嵌入式系统的BOM成本

2023-07-06 16:12:52 Robert Perkel和Josh Booth,Microchip公司 阅读:
为了展示MCU片上外设提供的广泛功能,我们开发了一种智能珀耳帖冷却板,它在单个20引脚8位MCU上使用了23个片上硬件外设。

嵌入式智能已成为向应用添加计算的最具性价比的方式。但是仅仅添加简单的嵌入式智能还不足以引入一些分立元件,例如运算放大器或简单的逻辑门。这就是片上硬件外设发挥作用的地方。UnQednc

这些硬件外设可以降低CPU利用率、集成设计功能并降低设计的总BOM成本。为了展示这些外设提供的广泛功能,我们开发了一种智能珀耳帖冷却板,它在单个20引脚8位MCU PIC16F17146上使用了23个片上硬件外设。有关此设计的完整详细信息,请参见Github和应用笔记“AN4889: Using Core Independent Peripherals (CIPs) to Implement a Peltier Cooled Metal Plate”。UnQednc

如何更好地利用MCU硬件外设设计嵌入式智能设备?7月21日,由AspenCore主办的【2023全球MCU全球生态发展大会】将在深圳罗湖君悦酒店召开。除MCU主论坛外,会议同期还设有电机控制分论坛、汽车MCU分论坛、无线MCU和生态发展分论坛。干货满满,欢迎感兴趣的工程师朋友点此报名参会!UnQednc

Microchip将这些专用硬件块称为核心独立外设(CIP),它们可以提高性能、降低功耗和/或增加器件功能。本设计中使用的CIP有多种类型,从I2C控制器和PWM发生器到12位差分ADC和通用运算放大器。借助我们简称为冷板的智能珀耳帖冷却板,CIP使低功耗MCU等效于功能更强大的器件。UnQednc

图1:组装好的冷板演示。UnQednc

我们的灵感来自厨房电器,它可以让用户在接触冷表面时冷冻冰淇淋,因此我们的目标是使表面温度达到0℃。市场上的商业版本使用气体压缩机和制冷剂,出于安全原因,我们不能使用这些东西。因此,我们的版本改为使用固态珀耳帖热泵,这是一种将热量从热泵的一侧传递到另一侧的半导体。如图1所示,将珀耳贴元件连接到顶部的金属板,就可以将热量从金属板泵入设计中间的巨型散热器。然后用散热器上的风扇将热量吹走,就可以将更多的热量从顶板上移走。UnQednc

当用户打开冷板电源时,会看到一条显示当前冷板温度和设定温度的待机消息。使用用户界面(UI),用户可以将设定温度调低至0℃,然后启动冷板。几分钟之内,放在盘子上的任何东西都会冷却到设定的温度。UnQednc

监控冷板温度,可以让MCU在达到设定温度时关闭珀耳帖元件。通过监控散热器温度,可以对风扇进行智能速度控制,而不是让其以全功率运行,从而降低相对低温时的运行噪声。这也是内置的安全功能之一。如果散热器过热,或冷板冷却到了安全温度以下,系统将会关闭以实现自我保护。UnQednc

温度感测是通过将负温度系数(NTC)热敏电阻连接到冷板和散热器来执行的。每个NTC都用作分压器的一部分,其电压由带计算的模数转换器(ADCC) CIP进行测量。然后使用ADCC值与NTC温度的查找表计算出温度。UnQednc

图2:NTC测量电路。UnQednc

然后将每个NTC的温度记录下来以供MCU进行遥测和监控。定期自检功能会监控NTC是否存在异常值,这可能会由与NTC的电气连接不良所引起。如果发生这类情况,该演示也会自我保护而关闭。UnQednc

添加的另一个安全系统是电流监控。该实现中使用了六个互连的CIP来创建系统,它会将抽取的电流进行返回,并返回两个状态位,用来指示电流是否过低(说明电线断开)或者电流是否过高(说明短路)。UnQednc

为实现这一点,我们从低边电流分流电阻开始。这会产生一个与流过珀耳帖的电流成正比的电压。但是,信号非常小(10A时为100mV),这就会降低监控和测量电路的分辨率。UnQednc

为了克服这个问题,我们使用了MCU的片上运算放大器(OPAMP)外设,作为电流检测放大器。该MCU上的OPAMP包括一个内部电阻网络,而使我们无需添加分立元件即可设置OPAMP的增益。电流监控器是使用内部模拟比较器(CMP) CIP实现的,它们会将OPAMP的输出与每个数模转换器(DAC) CIP上的设定电平进行比较(DAC1值小,DAC2值大)。然后,在执行定期自检时,MCU只需轮询每个比较器的位,即可查看电流是否超出限制。UnQednc

UnQednc

图3:电流监控和测量系统。UnQednc

集成式OPAMP的另一个好处,是能够在启动时执行简单的自检。自检能够验证内部梯形电阻的增益以确保其在指定的容差范围内。这样就能确保固件对OPAMP的正确配置。UnQednc

MCU还具有功能安全(FuSa)就绪CIP,例如窗口看门狗定时器(WWDT)和带内存扫描器(CRC)的循环冗余校验模块。WWDT用于确保在系统处于活动状态时运行定期自检,并确保任何事物都不会阻止MCU处理时间敏感型任务,例如电流监控或温度感测。如果有任何事物使MCU停滞并阻止其对WWDT重置,则MCU将会重置关闭珀耳帖元件并返回到良好状态。UnQednc

定期自检的一部分是验证主冷却风扇是否正在运行。珀耳帖元件所产生的热量,在没有有源气流的情况下,足以导致即使是相当大的CPU散热器也能迅速升温。如前所述,MCU会根据散热器温度调整风扇速度。当风扇运行时,冷却风扇的转速计输出由一个定时器CIP进行计数。如果未检测到脉冲,则会假定风扇发生故障,进而导致系统自我保护关闭。UnQednc

使用的另一个安全功能是CRC扫描器,它会根据向内存馈入或从中读取的字节序列生成CRC校验和。在此应用中,CRC扫描器用于确保EEPROM中的用户设置有效。用户可以设置目标温度、显示温度单位(C或F)和温度滞后参数。这些值存储在EEPROM存储器中并在启动时加载。为确保设置有效,系统会验证CRC校验和。对CRC扫描器进行配置,即可对所使用的EEPROM进行扫描并执行CRC操作。UnQednc

//Runs a CRC and returns the checksumUnQednc

uint8_t settings_verifyCRC(void)UnQednc

{  UnQednc

    //Setup access to the outputUnQednc

    CRCCON0bits.SETUP = 0b00;UnQednc

   UnQednc

    //Clear Output and set SEED valueUnQednc

    CRCOUT = 0xFF;UnQednc

   UnQednc

    //Configure EEPROM Scan RangeUnQednc

    CRC_SetScannerAddressLimit((SETTINGS_EEPROM_STOP + 1), SETTINGS_EEPROM_START);UnQednc

   UnQednc

    //Start CRC ScannerUnQednc

    CRC_StartScanner();UnQednc

   UnQednc

    //Wait for the scanner...UnQednc

    while (CRC_IsScannerBusy());UnQednc

   UnQednc

    //We already set the setup bits to access CRCOUTUnQednc

    return CRCOUTL;UnQednc

}UnQednc

在硬件中计算校验和,可以节省程序内存并提高软件实现的性能。扫描完成后,MCU可以检查CRC输出寄存器以了解内存是否有效。UnQednc

在这些安全系统之外,MCU还会负责处理用户界面,后者由OLED字符显示器、带按钮的旋转编码器和2个LED组成。UnQednc

图4:用户界面。UnQednc

MCU会使用其MSSP CIP通过I2C与显示器通信以避免发生位碰撞。对于旋转编码器,正交编码输出由两个可配置逻辑块(CLC) CIP进行解码。CLC就像一个可编程逻辑单元。在许多情况下,MCU周围的少量胶合逻辑(分立式逻辑门和触发器等)可以用该外设代替,从而进一步减少BOM和设计面积。UnQednc

在此应用中,CLC用于将正交编码信号转换为顺时针或逆时针脉冲。将这些脉冲送入定时器CIP,后者就会对产生的脉冲数进行计数。然后MCU就会计算自上次计时器读取以来的净旋转变化。UnQednc

UnQednc

图5:正交解码器在硬件中的实现。UnQednc

// Return total encoder moves since last pollUnQednc

int16_t encoderControl_getMoves(void){UnQednc

    static uint16_t oldTimer1 = 0;UnQednc

    static uint16_t oldTimer3 = 0;UnQednc

   UnQednc

    uint16_t newTimer1, newTimer3, netTimer1, netTimer3;UnQednc

    int16_t encoder;UnQednc

   UnQednc

    newTimer1 = Timer1_Read();UnQednc

    newTimer3 = Timer3_Read();UnQednc

   UnQednc

    netTimer1 = 0;UnQednc

    netTimer3 = 0;UnQednc

   UnQednc

    if(newTimer1 < oldTimer1){UnQednc

        // Rollover occurredUnQednc

        // Add an offset to the net value and clear the old valueUnQednc

        netTimer1 = 0xFFFF - oldTimer1;UnQednc

        oldTimer1 = 0;UnQednc

    }UnQednc

   UnQednc

     if(newTimer3 < oldTimer3){UnQednc

        // Rollover occurredUnQednc

        // Add an offset to the net value and clear the old valueUnQednc

        netTimer3 = 0xFFFF - oldTimer3;UnQednc

        oldTimer3 = 0;UnQednc

    }UnQednc

   UnQednc

    //Find the net changeUnQednc

    netTimer1 += newTimer1 - oldTimer1;UnQednc

    netTimer3 += newTimer3 - oldTimer3;UnQednc

   UnQednc

    // Calculate the net encoder changeUnQednc

    encoder = (int16_t)(netTimer3 - netTimer1);UnQednc

   UnQednc

    oldTimer1 = newTimer1;UnQednc

    oldTimer3 = newTimer3;UnQednc

   UnQednc

    return encoder;UnQednc

}UnQednc

根据我们的统计,我们在此示例中使用了23个CIP——作为参考,有18个物理I/O引脚,外加2个电源引脚。CIP简化了CPU任务,通过集成功能减少了设计面积,并增强了设计的安全性。有关此演示的更多信息,可以在此处找到我们的应用笔记或在查看完整的原理图、代码和CAD作品。UnQednc

Robert Perkel是Microchip的应用工程师。在此职位上,他负责开发技术内容,例如应用笔记以及供稿文章和视频。他还负责分析外设的用例以及代码示例和演示的开发。Perkel毕业于弗吉尼亚理工大学,获得计算机工程理学学士学位。UnQednc

Josh Booth是一名专业的计算机工程师,在硬件和软件工程、嵌入式系统、原型设计、系统管理、信息技术和FDM打印方面有着丰富的经验。Booth目前在Microchip担任技术工程师,负责为Microchip的全球客户群开发教程和培训内容。他是宾州西盆斯贝格大学校友,拥有计算机工程学士学位。UnQednc

(原文刊登于EDN姐妹网站Embeded,参考链接:Reducing BOM cost in embedded systems using advanced MCU peripherals,由Franklin Zhao编译。)UnQednc

本文为《电子技术设计》2023年6月刊杂志文章,版权所有,禁止转载。免费杂志订阅申请点击这里UnQednc

责编:Franklin
本文为电子技术设计原创文章,未经授权禁止转载。请尊重知识产权,违者本司保留追究责任的权利。
  • 微信扫一扫
    一键转发
  • 最前沿的电子设计资讯
    请关注“电子技术设计微信公众号”
广告
热门推荐
广告
广告
EE直播间
在线研讨会
广告
广告
面包芯语
广告
向右滑动:上一篇 向左滑动:下一篇 我知道了