0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

低功耗MCU怎么选?

sanyue7758 来源:21ic论坛 2023-03-25 10:25 次阅读

芯片国产化日益高涨的情况下,一些新的芯片厂家脱颖而出,比如以串口通讯发展起来的沁恒微电子的WCH、兆易创新的GD、雅特力的AT、中科蓝讯的AB,以及国民技术等。

其中的国民技术则属于后起之秀,其主打的产品有基于M0内核的N32G03X通用系列、基于M4内核的N32G45X通用系列,以及面向低功耗的N32L4XX系列。

这样在选取低功耗MCU时,我们就多出了一种选择,也加大了设计的灵活性。

此外,国民技术所主打的3个系列产品是支持以MDK来进行开发的,这样对于那些出道早的程序者就天然地增添了一份亲近感。你可别小看了这份亲近感,常言道“不怕千招会,就怕一招熟”,用惯的东西好上手,它起到事半功倍的性能。

下面就有请我们的主角N32L43XRL-STB开发板上场,它的MCU为N32L436CBL7,其最高主频可达108 MHz,是采用LQFP48管脚封装。

该芯片的主要性能及参数

● 采用32位ARMCortex-M4内核+FPU,支持单周期硬件乘除法指令,支持DSP指令和MPU。

● 高达128KByte片内Flash,10万次擦写次数,10年数据保持。

● 高达32KByte片内SRAM,包括24Kbyte SRAM1和8Kbyte SRAM2。

● 高性能模拟接口,含1个12bit 5MspsADC,且多种精度可配置、2个轨到轨运算放大器、2个高速模拟比较器、多达24通道电容触摸按键、1个采样率为1Msps的12bit DAC

● 丰富的通信接口,有3个USART接口、2个UART接口、1个LPUART、2个速率高达27 MHz的SPI接口、2个速率高达1 MHz的I2C接口、1个USB2.0 Fullspeed Device接口及1个CAN 2.0A/B总线接口。

● 多样的定时计数器,有2个16bit高级定时计数器、5个16bit通用定时计数器、2个16bit基础定时计数器、1个16bit低功耗定时计数器、1x24bit SysTick、1x7bit窗口看门狗、1x12bit独立看门狗。

所以,它在性能方面是完全可以胜任常规芯片要求的! 该芯片的功耗情况:

● 在Standby模式下:典型值为1.5uA,即所有备份寄存器保持,IO保持,可选 RTC Run,8KByte Retention SRAM保持,可快速唤醒。

● 在Stop2模式下:典型值为3uA,RTC Run,8KByte Retention SRAM2保持,CPU寄存器保持,IO保持,可快速唤醒。

● 在Run模式下:90uA/MHz@108MHz/3.3V,100uA/MHz@72MHz/3.3V。

接下来,就将N32L43XRL-STB开发板与N32G45XVL-STB开发板放到一起,做一下功耗的对比。当然,这是在都配有调试下载工具的情况下,会比单纯的芯片对比要大一些,但相对来讲还是比较公平的。 经检测,N32L43XRL-STB开发板的功耗为0.13135W,N32G45XVL-STB开发板的功耗为0.15392W,二者净差值为0.02257W。

0d093790-cab3-11ed-bfe3-dac502259ad0.jpg

图1 开发板的对比

0d1bb4ce-cab3-11ed-bfe3-dac502259ad0.jpg

图2 N32L43XRL-STB的功耗

0d2b2f08-cab3-11ed-bfe3-dac502259ad0.jpg

图3 N32G45XVL-STB的功耗

如何构建开发环境:

前面说过国民技术的MCU是支持MDK来开发的,那么对于N32L4x系列的开发板,是如何来构建其开发环境的呢?

首先要做的自然是要安装MDK,其版本可以是V5.25。

随后,为支持此类芯片的使用,还需要安装Nationstech.N32L43x_DFP.0.1.0。

这样再打开MDK,就可在芯片列表中见到N32L4x系列的身影,见图4所示。

0d337514-cab3-11ed-bfe3-dac502259ad0.jpg

图4 添加芯片支持

至此,开发环境就基本构建好了。

此外,为了便于了解和学习程序的设计方法,还应下载一个函数库与例程,其压缩包为Nationstech.N32L43x_Library.1.1.0.7Z。

以例程LedBlink为例,经编译其结果如图5所示。

0d541d82-cab3-11ed-bfe3-dac502259ad0.jpg

图5 完成编译

为进行下载测试,需按图6所示来设置调试工具的类型,并按图7所示来选取烧录算法

0d667d92-cab3-11ed-bfe3-dac502259ad0.jpg

图6 设置调试工具

0d721710-cab3-11ed-bfe3-dac502259ad0.jpg

图7 设置烧录算法

在开发板上载有3个彩色LED,其电路原理图见图8所示,使用例程就可见到图9所示的流水灯效果。

仿照该例程,可获得GPIO口的使用方法,并实现开发板的功能扩展。

0d7fe548-cab3-11ed-bfe3-dac502259ad0.jpg

图8 原理图

0d8fc30a-cab3-11ed-bfe3-dac502259ad0.jpg

图9 测试效果

驱动相应器件的功耗对比

1)OLED屏显示及功耗

OLED屏是一种自发光的显示器件,但又较之数码管要更节省电能。此外,对I2C接口的OLED屏来讲,它的引脚少又能节省对GPIO口资源的占用,且所显示的信息及形式更丰富,故极适合与N32L43X系列这样的芯片相配合来设计低功耗产品。

那么,在N32L43X系列芯片的开发环境下,要实现I2C接口的OLED屏驱动是否容易呢?

其实,要实现起来并不复杂,所需要的只是2个GPIO口及相应等级的延时函数支持,从而保证以GPIO口模拟的方式来完成I2C通讯。

在OLED屏与开发板按一下关系来连接的情况下:

SCL----PA1

SDA----PA2

对引脚功能的配置函数为:

void OLEDInit(void) { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1|GPIO_PIN_2; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); }

而输出高低电平的引脚定义为:

#define OLED_SCLK_Clr() GPIOC-》PBA = GPIO_PIN_1 #define OLED_SCLK_Set() GPIOA-》PBSC = GPIO_PIN_1 #define OLED_SDIN_Clr() GPIOA-》PBC = GPIO_PIN_2 #define OLED_SDIN_Set() GPIOA-》PBSC = GPIO_PIN_2

延时函数的配备:

由于在MDK的开发板平台下,并未提供毫秒级和微秒级延时的函数,因此需要使用系统的滴答时钟来自行设计。

微秒级延时函数:

void Delayus(uint32_t count) { SysTick_Delay_Us(count); }

毫秒级延时函数:

void Delayms(uint32_t count) { count=count*1000; SysTick_Delay_Us(count); }

使用微秒级延时函数的I2C启动函数为:

void IIC_Start() { OLED_SCLK_Set(); Delayus(2); OLED_SDIN_Set(); Delayus(2); OLED_SDIN_Clr(); Delayus(2); OLED_SCLK_Clr(); Delayus(2); } 有了以上的基础,就不难将OLED屏的驱动功能移植给N32L43X系列芯片。 实现OLED屏显示功能测试的主程序为:int main(void) { LedInit(PORT_GROUP2, LED3_PIN); OLEDInit(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,“N32L43x ”,16); OLED_ShowString(20,2,“OLED TEST”,16); OLED_ShowString(20,4,“jinglixixi”,16); OLED_ShowString(20,6,“2022.3.2”,16); while (1) { LedOn(PORT_GROUP2, LED3_PIN); Delayms(500); LedOff(PORT_GROUP2, LED3_PIN); Delayms(500); } } 在OLED屏显示的情况下,其整体功耗如图10所示。

0d94ffbe-cab3-11ed-bfe3-dac502259ad0.jpg

图10 功耗测试

2)传感器检测及功耗 以BMP085温度大气压传感器为例,其器件的连接关系为:

OLED_CLK_PIN---PA1

OLED_DIN_PIN---PA2

BMP_CLK_PIN---PB0

BMP_DIN_PIN---PB1

读取传感器数据的语句定义为:

#define IIC_SDA_IN GPIO_ReadInputDataBit(GPIOB, GPIO_PIN_1)

实现数据引脚输入输出功能定义的函数为:

void IIC_INPUT_MODE_SET() { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Input; GPIO_InitStructure.GPIO_Pull = GPIO_Pull_Up; //GPIO_No_Pull GPIO_Pull_Down GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); } void IIC_OUTPUT_MODE_SET() { GPIO_InitType GPIO_InitStructure; RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOB, ENABLE); GPIO_InitStruct(&GPIO_InitStructure); GPIO_InitStructure.Pin = GPIO_PIN_1; GPIO_InitStructure.GPIO_Current = GPIO_DC_4mA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pull = GPIO_No_Pull; GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure); }

模拟I2C发送字节数据的函数为:

void BMP085_Send_Byte(char txd) { char t; IIC_OUTPUT_MODE_SET(); SCL_Clr(); for(t=0;t《8;t++) { if((txd&0x80)》》7) SDA_Set(); else SDA_Clr(); txd《《=1; SysTick_Delay_Us(2); SCL_Set(); SysTick_Delay_Us(2); SCL_Clr(); SysTick_Delay_Us(2); } }

读取温度大气压的函数为:

void bmp085Convert() { unsigned int ut; unsigned long up; long x1, x2, b5, b6, x3, b3, p; unsigned long b4, b7; ut = bmp085ReadTemp(); up = bmp085ReadPressure(); x1 = (((long)ut - (long)ac6)*(long)ac5) 》》 15; x2 = ((long) mc 《《 11) / (x1 + md); b5 = x1 + x2; temperature = ((b5 + 8) 》》 4); b6 = b5 - 4000; x1 = (b2 * (b6 * b6)》》12)》》11; x2 = (ac2 * b6)》》11; x3 = x1 + x2; b3 = (((((long)ac1)*4 + x3)《《OSS) + 2)》》2; x1 = (ac3 * b6)》》13; x2 = (b1 * ((b6 * b6)》》12))》》16; x3 = ((x1 + x2) + 2)》》2; b4 = (ac4 * (unsigned long)(x3 + 32768))》》15; b7 = ((unsigned long)(up - b3) * (50000》》OSS)); if (b7 《 0x80000000) p = (b7《《1)/b4; else p = (b7/b4)《《1; x1 = (p》》8) * (p》》8); x1 = (x1 * 3038)》》16; x2 = (-7357 * p)》》16; pressure = p+((x1 + x2 + 3791)》》4); }

检测温度大气压的主程序为:

int main(void) { LedInit(PORT_GROUP2, LED3_PIN); BMP085_Init(); Init_BMP085(); OLEDInit(); OLED_Init(); OLED_Clear(); OLED_ShowString(20,0,“N32L43x ”,16); OLED_ShowString(20,2,“OLED & BMP085”,16); OLED_ShowString(20,4,“t= C”,16); OLED_ShowString(20,6,“p= KPa”,16); while (1) { bmp085Convert(); OLED_ShowNum(44,4,temperature/10,3,16); OLED_ShowNum(44,6,pressure/100,5,16); LedOn(PORT_GROUP2, LED3_PIN); Delayms(500); LedOff(PORT_GROUP2, LED3_PIN); Delayms(500); } } 在添加传感器的情况下,其显示效果及整体功耗分别如图11和图12所示。

0da7d166-cab3-11ed-bfe3-dac502259ad0.jpg

图11 显示效果

0dba5ea8-cab3-11ed-bfe3-dac502259ad0.jpg

图12 整体功耗

至此,就在N32L43XRL-STB开发板上完成了温度大气压检测装置的设计,并针对其低功耗的特点对相应环境的功耗进行了跟踪测量。尽管测试的工具不很专业,但它还是能够带来一个很直观的感性认识。所以在低功耗的设计中,使用N32L43X芯片是可行的也是十分方便的,其功耗也是能够达到认可的!

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17144

    浏览量

    351145
  • 计数器
    +关注

    关注

    32

    文章

    2256

    浏览量

    94545
  • 开发板
    +关注

    关注

    25

    文章

    5046

    浏览量

    97438

原文标题:低功耗MCU怎么选?看网友亲测国民技术N32L4xx系列!

文章出处:【微信号:处芯积律,微信公众号:处芯积律】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    32位低功耗MCU设计

    32位低功耗MCU设计前言传统的低功耗 MCU 设计都是以8位MCU为主,因为8 位内核阈门相对较少,运行或泄露电流低,售价也相对低廉。但是
    发表于 10-08 15:38

    转:32位低功耗MCU设计

    32位低功耗MCU设计前言传统的低功耗 MCU 设计都是以8位MCU为主,因为8 位内核阈门相对较少,运行或泄露电流低,售价也相对低廉。但是
    发表于 01-25 16:15

    低功耗MCU如何降低功耗

    低功耗MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大就会经常出现电量不足的情况。 平时我们在做产品的时候,基本的功能实现很简单,但只要涉及到关于
    发表于 11-12 13:57

    如何选择超低功耗MCU

    在物联网的推动下,业界对各种电池供电设备产生了巨大需求。这反过来又使业界对微控制器和其他系统级器件的能源效率要求不断提高。因此超低功耗MCU功耗相关的很多指标都不断得刷新记录。在选择合适的超
    发表于 12-28 07:12

    MCU如何降低功耗

     低功耗MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大就会经常出现电量不足的情况。  平时我们在做产品的时候,基本的功能实现很简单,但只要涉及到
    发表于 12-30 06:55

    MCU怎么实现低功耗

    MCU怎么实现低功耗
    发表于 03-10 07:47

    低功耗MCU

    低功耗MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大就会经常出现电量不足的情况。平时我们在做产品的时候,基本的功能实现很简单,但只要涉及到关于
    发表于 10-29 06:17

    如何保证MCU低功耗

    保证MCU低功耗 这五点很重要低功耗MCU的一项非常重要的指标,比如某些可穿戴的设备,其携带的电量有限,如果整个电路消耗的电量特别大的话,就会经常出现电量不足的情况,影响用户体验。本
    发表于 11-04 06:38

    低功耗MCU选型要点

    摘要有时为了一款低功耗产品而绞尽脑汁,产品的低功耗实现往往在于主控MCU的选择。低功耗MCU选型要点 powerDown时有极低的电流
    发表于 11-04 06:32

    Apollo2_超低功耗MCU

    低功耗MCU
    发表于 08-18 11:11 107次下载

    TI MCU设计研讨会:低功耗MCU的性能介绍

    TI 2014 MCU设计研讨会:低功耗MCU
    的头像 发表于 08-22 01:40 2374次阅读

    关于MCU低功耗问题

    随着便携式移动设备,各种穿戴设备的兴起,我们不得不关注设备的功耗问题,因为这些设备都具有一个特征:使用电池系统供电,一块线路板上跟功耗相关的单元电路可能有很多,今天我们来谈谈关于MCU低功耗
    的头像 发表于 08-13 15:22 3772次阅读

    低功耗MCU设计理念

     转自:http://www.eeworld.com.cn/mcu/article_2018031938316_2.htmlMCU功耗来自何处    在开始讨论低功耗MCU设计前,必须
    发表于 10-27 15:36 19次下载
    <b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>设计理念

    MCU低功耗设计(三)产品

    引言:能耗对电池供电的产品来说是一个重大问题,一旦电能耗尽设备将“罢工”。在《MCU低功耗设计(一)理论》中,我们介绍了节能的原理;在《MCU低功耗设计(二)实践》中,实测了STM8L
    发表于 10-28 14:06 16次下载
    <b class='flag-5'>MCU</b><b class='flag-5'>低功耗</b>设计(三)产品

    低功耗MCU选型

    摘要有时为了一款低功耗产品而绞尽脑汁,产品的低功耗实现往往在于主控MCU的选择。低功耗MCU选型要点 powerDown时有极低的电流
    发表于 11-01 16:25 18次下载
    <b class='flag-5'>低功耗</b><b class='flag-5'>MCU</b>选型