打印
[产品介绍及宣传专区]

CW32L083系列不同主频切换及对应功耗变化

[复制链接]
3210|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 pssyx 于 2023-6-27 16:33 编辑

CW32L083不同主频功耗测试
本文主要介绍CWL083VCT6芯片在不同主频下的功耗测试方法和测试结果。
HSIOSC时钟
HSIOSC 时钟由内部 RC 振荡器产生,不需要外部电路,比 HSE 时钟的成本低,启动速度快。HSIOSC 时钟频率固定为 48MHz,频率精度低于 HSE 时钟。RC 振荡器输出时钟的频率受芯片加工过程、工作电压、环境温度等因素影响,CW32L083 提供了 HSIOSC 时钟频率校准功能,用户可通过设置内置高频时钟控制寄存器 SYSCTRL_HSI 的 TRIM 位域值来校准 HSIOSC 时钟频率,HSIOSC 内部高速 RC 振荡器在芯片上电后,默认处于开启状态,用户可通过设置系统控制寄存器的 SYSCTRL_CR1 的HSIEN 位域为 0 来关闭。如用户停止并重新启动了 HSIOSC 振荡器,可通过内置高频时钟控制寄存器 SYSCTRL_HSI的 STABLE 标志位来确定 HSI 时钟是否稳定,STABLE 标志为 1 表示 HSIOSC 时钟已稳定,为 0 则表示 HSIOSC 时钟还未稳定。
HSIOSC 时钟经过分频后输出 HSI 时钟,分频系数通过内置高频时钟控制寄存器 SYSCTRL_HSI 的 DIV 位域设置,有效分频系数为 1、2、4、6、8、10、12、14、16,上电后默认值为 6,所以 HSI 时钟默认频率为 8MHz。
PLL时钟
CW32L083 内部集成锁相环 PLL 电路,可对输入时钟源进行锁相倍频输出 PLL 时钟。用户可通过内置锁相环控制寄存器 SYSCTRL_PLL 的 SOURCE 位域选择 PLL 的输入参考时钟源,如下表所示

锁相环倍频系数通过内置锁相环控制寄存器 SYSCTRL_PLL 的 MUL 位域进行设置,可设置范围为 2 ~ 12,默认值为 8。为保证锁相环的锁定收敛速度及输出时钟相噪性能,用户需根据实际的输入参考时钟频率和输出时钟频率分别设置 SYSCTRL_PLL.FREQIN 和 SYSCTRL_PLL.FREQOUT 位域的值。


PLL 默认处于关闭状态,通过设置系统控制寄存器 SYSCTRL_CR1 的 PLLEN 位域为 1 来启动。PLL 启动后,芯片内部时钟监控模块检测到一定数量的 PLL 时钟信号,则认为 PLL 时钟已稳定。检测时钟数量可通过内置锁相环控制寄存器 SYSCTRL_PLL 的WAITCYCLE 位域进行设置,通过内置锁相环控制寄存器 SYSCTRL_PLL 的 STABLE 标志位,可确定 PLL 时钟是否稳定,STABLE 标志为 1 表示 PLL 时钟已稳定,为 0 则表示 PLL 时钟还未稳定。
修改 PLL 参数流程如下:
步骤 1:设置 SYSCTRL_CR1.PLLEN 为 0,关闭 PLL;
步骤 2:等待 SYSCTRL_PLL.STABLE 标志被系统硬件清零;
步骤 3:更改 PLL 的参数;
步骤 4:设置 SYSCTRL_CR1.PLLEN 为 1,启动 PLL;
步骤 5:等待 SYSCTRL_PLL.STABLE 标志被系统硬件置 1,标识 PLL 时钟已稳定。
实例演示
通过按键KEY1中断调节运行主频(4M/12M/24M/48M/64M),LCD显示对应数字。
(1).初始化GPIO
void GPIO_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStruct = {0};
__RCC_GPIOA_CLK_ENABLE();
    GPIO_InitStruct.IT = GPIO_IT_FALLING;//KEY1 -- PA04     
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pins = GPIO_PIN_4;
GPIO_Init(CW_GPIOA, &GPIO_InitStruct);
GPIO_ConfigFilter(CW_GPIOA, bv4, GPIO_FLTCLK_LSI);
}
(2).GPIO中断控制函数
void GPIOA_IRQHandlerCallback(void)
{
if(CW_GPIOA->ISR_f.PIN4)
    {
        GPIOA_INTFLAG_CLR(bv4);
        Key1Count++;
switch(Key1Count)
        {
            case 1:
                CW_LCD->RAM0 = 0x0603;//4
RCC_HSI_Enable(RCC_HSIOSC_DIV12);
RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 4MHz
RCC_PLL_Disable(); //关闭PLL
                break;
            case 2:
                CW_LCD->RAM0 = 0x030e0005;//12
RCC_HSI_Enable(RCC_HSIOSC_DIV4);
                break;
            case 3:
                CW_LCD->RAM0 = 0x0603030e;//24
RCC_HSI_Enable(RCC_HSIOSC_DIV2);
                break;
            case 4:
                CW_LCD->RAM0 = 0x0f0f0603;//48
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 8MHz
RCC_PLL_Disable(); //关闭PLL
FLASH_SetLatency(FLASH_Latency_2);
//频率大于24M需要配置FlashWait=2
CW_SYSCTRL->AHBEN_f.FLASH = 0; //关闭FLASH时钟
RCC_HSI_Enable(RCC_HSIOSC_DIV1);
RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 48MHz
                break;
            case 5:
                CW_LCD->RAM0 = 0x0603050f;//64
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, RCC_PLL_MUL_8);
//开启PLL,PLL源为HSI 8MHz
FLASH_SetLatency(FLASH_Latency_3);
//频率大于48M需要配置FlashWait=3
CW_SYSCTRL->AHBEN_f.FLASH = 0; //关闭FLASH时钟
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL); //切换系统时钟到PLL
                break;
            case 6:
                CW_LCD->RAM0 = 0;
                CW_LCD->RAM1 = 0;
                CW_LCD->RAM8 = 0;
                CW_LCD->RAM9 = 0;
                Key1Count = 0;
                break;
        }
    }
}
(3).初始化LCD
void LCD_Configuration(void)
{
LCD_InitTypeDefLCD_InitStruct = {0};
LCD_InitStruct.LCD_Bias = LCD_Bias_1_3;
LCD_InitStruct.LCD_ClockSource = LCD_CLOCK_SOURCE_LSI;
LCD_InitStruct.LCD_Duty = LCD_Duty_1_4;
LCD_InitStruct.LCD_ScanFreq = LCD_SCAN_FREQ_256HZ;
LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal;
    __RCC_LCD_CLK_ENABLE();
RCC_LSI_Enable(); //启动LSI为LCD提供时钟
LCD_Init(&LCD_InitStruct); //基本配置
LCD_COMConfig(LCD_COM0 | LCD_COM1 | LCD_COM2 | LCD_COM3, ENABLE); //SEG   
LCD_SEG0to23Config(LCD_SEG0 | LCD_SEG1 | LCD_SEG2 | LCD_SEG3 | LCD_SEG4 | LCD_SEG5 | LCD_SEG6 | LCD_SEG7, ENABLE);
LCD_SEG32to55Config(LCD_SEG32 | LCD_SEG33 | LCD_SEG34 | LCD_SEG35 | LCD_SEG36 | LCD_SEG37 | LCD_SEG38 | LCD_SEG39, ENABLE);
LCD_ContrastConfig(LCD_Contrast_Level_2); //显示对比度,仅内部电阻模式时有效
LCD_DriveVoltageConfig(LCD_INRS_LEVEL_0); //功耗最小
CW_LCD->RAM0 = 0x0f0f;
LCD_Cmd(ENABLE);
}
(4).配置嵌套的矢量中断控制器
void NVIC_Configuration(void)
{
    __disable_irq();
NVIC_SetPriority(GPIOA_IRQn, 0);
NVIC_EnableIRQ(GPIOA_IRQn);
    __enable_irq();
}
(5).主函数
int32_t main(void)
{
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
GPIO_Configuration();
LCD_Configuration();
NVIC_Configuration();
while(1){}
}
测试结果
将电流表串接在单板J23跳线上,单板上电,默认主频为8MHz然后通过KEY1按键,控制主频在4MHz-12MHz -24MHz -48MHz -64MHz之间进行切换,记录不同主频下的电流值,如下:

主频(MHz)
4
12
24
48
64
功耗(mA)
0.9983
2.0599
3.3526
4.3942
6.5494

使用特权

评论回复
评论
forgot 2023-6-28 08:44 回复TA
赞一个 
沙发
caigang13| | 2023-7-6 07:42 | 只看该作者
功耗表现不错

使用特权

评论回复
板凳
jcky001| | 2023-11-7 10:48 | 只看该作者
功耗测试数据很可

使用特权

评论回复
地板
dspmana| | 2024-4-2 18:58 | 只看该作者
CW32L083系列MCU的主频可以达到64MHz,但FLASH存储器支持的最高操作时钟是24MHz。当系统时钟设置超过24MHz时,需要增加FLASH的等待周期,以确保数据的正确读取。

使用特权

评论回复
5
febgxu| | 2024-4-4 10:45 | 只看该作者
CW32L083系列MCU提供了多种主频选项,以满足不同应用的需求。具体的主频选项可能因具体的产品型号而异,但通常包括几十兆赫兹到几百兆赫兹的范围。

使用特权

评论回复
6
wwppd| | 2024-4-4 13:10 | 只看该作者
在进行主频切换时,必须注意时钟源的配置和外设的兼容性。例如,如果使用内部48MHz时钟不分频初始化,需要确保在切换频率之前设置好FLASH的等待周期。

使用特权

评论回复
7
pl202| | 2024-4-4 15:54 | 只看该作者
CW32L083系列MCU的主频切换及对应功耗变化是一个复杂的过程,它受到多种因素的影响,包括工作电压、环境温度、负载以及时钟配置等。

使用特权

评论回复
8
bestwell| | 2024-4-4 18:08 | 只看该作者
在正常工作模式下,CW32L083可能会运行在较高的主频。

使用特权

评论回复
9
chenci2013| | 2024-4-4 20:13 | 只看该作者
CW32L083系列微控制器是一款注重低功耗设计的MCU,它集成了主频高达64MHz的ARM® Cortex®-M0+内核,并具备多达256KB的FLASH存储器和24KB的RAM,以及多达87路的GPIO端口。此外,它还整合了一系列的外设,如1路12位ADC、6路UART、2路SPI、2路IIC以及多路定时器等。

使用特权

评论回复
10
benjaminka| | 2024-4-4 22:14 | 只看该作者
在低功耗模式下,CW32L083系列的主频可以显著降低,以减少能量消耗。例如,使用内部的低功耗定时器(LPTIM)可以在保持低功耗的同时进行定时操作。

使用特权

评论回复
11
elsaflower| | 2024-4-5 21:57 | 只看该作者
在进行不同主频切换及对应功耗变化的测试时,CW32L083系列可以利用其内部的RC振荡器产生的HSIOSC时钟,这种时钟不需要外部电路的支持,相比HSE时钟来说,可以简化设计并减少功耗。例如,在测试中可能会使用内部48MHz的时钟而不进行分频,此时需要注意,CW32的FLASH存储器支持的最高操作时钟为24MHz。若系统时钟设置超过24MHz,就需要设置FLASH的等待周期,并且这一操作需要在时钟频率切换之前完成。

使用特权

评论回复
12
kmzuaz| | 2024-4-6 12:15 | 只看该作者
当CW32L083系列MCU从低主频切换到高主频时,由于CPU和系统总线的速度增加,处理能力和数据传输速率也会相应提高,但功耗也会相应增加。

使用特权

评论回复
13
mmbs| | 2024-4-6 14:24 | 只看该作者
在低功耗模式下,CW32L083的功耗会比在正常工作模式下低得多。休眠模式的功耗通常是所有模式中最低的,因为此时微控制器的核心部分几乎不工作。

使用特权

评论回复
14
modesty3jonah| | 2024-4-6 17:17 | 只看该作者
为了获得CW32L083系列MCU在不同主频下的功耗数据,建议查阅该系列MCU的数据手册或功耗曲线图。数据手册通常会提供详细的功耗参数,包括不同工作模式下的典型功耗值。功耗曲线图则可以直观地展示功耗随主频变化的趋势。

使用特权

评论回复
15
tifmill| | 2024-4-6 21:09 | 只看该作者
可以通过改变MCU的主频来观察功耗的变化情况,以确定最佳主频设置。这通常涉及到对MCU的时钟系统进行配置,包括选择时钟源、设置分频和倍频等。不同的主频设置会导致MCU的工作状态和功耗发生变化,因此需要根据具体的应用需求来选择合适的主频。

使用特权

评论回复
16
cemaj| | 2024-4-7 11:16 | 只看该作者
了解CW32L083系列不同主频切换及对应功耗变化对于优化MCU的性能和功耗具有重要意义

使用特权

评论回复
17
everyrobin| | 2024-4-7 13:26 | 只看该作者
CW32L083系列MCU采用了先进的低功耗设计技术,包括低功耗运行模式、低功耗睡眠模式和低功耗待机模式等,以降低在不同工作条件下的功耗。

使用特权

评论回复
18
jonas222| | 2024-4-7 16:30 | 只看该作者
功耗测试和分析是一个相对复杂的过程,需要综合考虑多种因素。

使用特权

评论回复
19
earlmax| | 2024-4-7 19:19 | 只看该作者
在深度休眠模式下,MCU的功耗可以非常低,通常在几百纳安(nA)的范围内。而在主动工作模式下,功耗会显著增加,取决于工作频率、外设使用情况以及代码执行效率等因素。

使用特权

评论回复
20
alvpeg| | 2024-4-7 21:46 | 只看该作者
除了主频之外,其他因素如外设的使用情况也会对功耗产生影响。因此,在测试不同主频的功耗时,还需要考虑外设的功耗开销,例如串口、ADC、定时器等。通过测试不同外设的功耗开销,可以更全面地评估MCU的整体功耗性能。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

45

帖子

0

粉丝