【经验】武汉芯源CW32系列MCU PWM输出功能指南
脉冲宽度调制(PWM),即“Pulse Width Modulation”的缩写,简称脉宽调制,是在数字电路中达到模拟输出效果的一种手段,常见应用电机调速,照明灯调光等。在MCU中,主要通过定时器单元来时实现PWM输出,以CW32L083VxTx为例,LPTIM,GTIM,ATIM都可以输出PWM信号。
低功耗寄存器(LPTIM)中,LPTIM在连续模式下可以输出PWM波,在单次模式下可以输出单脉冲波或单次置位波形。连续模式下输出PWM波的周期和占空比由自动重载寄存器LPTIM_ARR和比较寄存器LPTIM_CMP决定。
通用定时器(GTIM)中,通过设置输出比较功能,可以产生一个由重载寄存器GTIMx_ARR确定频率、由比较捕获寄存器GTIMx_CCRy确定占空比的PWM信号。每个GTIM对应有4个GTIMx_CCRy寄存器,可输出4路PWM信号。向GTIMx_CCMR寄存器中的CCyM位写入0xE或0xF,能够独立地控制每个CHy输出PWM信号的波形。
设置GTIMx_CMMR.CCyM为0xE,当GTIMx_CNT >= GTIMx_CCRy时,CHy通道输出高电平,否则输出低电平。如果GTIMx_CCRy中的比较值大于重载寄存器GTIMx_ARR的值,则CHy通道输出保持为低电平;如果GTIMx_CCRy中的比较值为0,则CHy通道输出保持为高电平。
设置GTIMx_CMMR.CCyM为0xF,当GTIMx_CNT < GTIMx_CCRy时,CHy通道输出高电平,否则输出低电平。如果GTIMx_CCRy中的比较值大于重载寄存器GTIMx_ARR的值,则CHy通道输出保持为高电平;如果GTIMx_CCRy中的比较值为0,则CHy通道输出保持为低电平。
下图是GTIMx_CMMR.CCyM为0xE、GTIMx_ARR为0x08时PWM波形实例图:
高级定时器(ATIM)中有独立PWM输出模式和互补PWM输出两种模式。
独立PWM模式可独立输出6路PWM,PWM的周期和占空比由重载寄存器ATIM_ARR和比较捕获寄存器ATIM_CHxCCRy寄存器确定。PWM输出模式需要设置控制寄存器ATIM_CR、滤波寄存器ATIM_FLTR和死区寄存器ATIM_DTR,如下表所示:
另外比较通道CHx的A路可通过控制寄存器ATIM_CR的PWM2S位域配置为单点比较或双点比较工作方式。在单点比较方式下,使用比较捕获寄存器ATIM_CHxCCRA控制比较输出;在双点比较方式下,使用比较捕获寄存器ATIM_CHxCCRA和ATIM_CHxCCRB控制比较输出。比较通道的B路只能使用单点比较,由比较捕获寄存器ATIM_CHxCCRB控制比较输出。
互补PWM模式可输出3对互补输出的PWM波形,通常用于电机控制。设置控制寄存器ATIM_CR的COMP位域为1选择互补PWM输出模式,比较输出通道CHxA与通道CHxB产生一对互补PWM。在互补PWM输出模式下,通道CHx的A路控制输出信号,B路比较捕获寄存器CHxCCRB不再控制CHxB输出,但仍可用作内部控制,比如触发ADC或DMA。
另外互补PWM输出模式,也可通过控制寄存器ATIM_CR的PWM2S位域选择单点比较或双点比较工作方式:单点比较时使用比较捕获寄存器ATIM_CHxCCRA控制比较输出;双点比较时使用比较捕获寄存器ATIM_CHxCCRA和ATIM_CHxCCRB控制比较输出。
实例演示
以CW32L083VxTx的通用定时器GTIM1为例,实现PWM输出例程:GTIM1的CH3通道(PB08)输出周期为500uS,占空比递增递减循环改变的PWM信号。
1、配置不同的系统时钟。
void RCC_Configuration(void)
{
/* 0. HSI使能并校准 */
RCC_HSI_Enable(RCC_HSIOSC_DIV6);
/* 1. 设置HCLK和PCLK的分频系数 */
RCC_HCLKPRS_Config(RCC_HCLK_DIV1);
RCC_PCLKPRS_Config(RCC_PCLK_DIV1);
/* 2. 使能PLL,通过HSI倍频到48MHz */
RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, 6);
// PLL输出频率48MHz
RCC_PLL_OUT();
///< 当使用的时钟源HCLK大于24M,小于等于48MHz:设置FLASH 读等待周期为2 cycle
///< 当使用的时钟源HCLK大于48M,小于等于72MHz:设置FLASH 读等待周期为3 cycle
__RCC_FLASH_CLK_ENABLE();
FLASH_SetLatency(FLASH_Latency_2);
/* 3. 时钟切换到PLL */
RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL);
RCC_SystemCoreClockUpdate(48000000);
}
2、配置GPIO口
void GPIO_Configuration(void)
{
/* PB08作为GTIM1的CH3 PWM 输出 */
__RCC_GPIOB_CLK_ENABLE();
PB08_AFx_GTIM1CH3();
PB08_DIGTAL_ENABLE();
PB08_DIR_OUTPUT();
PB08_PUSHPULL_ENABLE();
}
3、配置中断使能
void NVIC_Configuration(void)
{
__disable_irq();
NVIC_EnableIRQ(GTIM1_IRQn);
__enable_irq();
}
4、配置GTIM为PWM输出功能
void PWM_OutputConfig(void)
{
GTIM_InitTypeDef GTIM_InitStruct = {0};
__RCC_GTIM1_CLK_ENABLE();
GTIM_InitStruct.Mode = GTIM_MODE_TIME; /*!< GTIM的模式选择。*/
GTIM_InitStruct.OneShotMode = GTIM_COUNT_CONTINUE;
/*!< GTIM的单次/连续计数模式选择。*/
GTIM_InitStruct.Prescaler = GTIM_PRESCALER_DIV16;
/*!< GTIM的预分频系数。*/
// DCLK = PCLK / 16 = 48MHz/16 = 3MHz
GTIM_InitStruct.ReloadValue = Period * 3 - 1; /*!< GTIM的重载值。*/
//ARR设置为1499
GTIM_InitStruct.ToggleOutState = DISABLE;
GTIM_TimeBaseInit(CW_GTIM1, >IM_InitStruct);
//GTIM的基础参数初始化
GTIM_OCInit(CW_GTIM1, GTIM_CHANNEL3, GTIM_OC_OUTPUT_PWM_HIGH);
//比较输出功能初始化
GTIM_SetCompare3(CW_GTIM1, PosWidth);
GTIM_ITConfig(CW_GTIM1, GTIM_IT_OV, ENABLE);
GTIM_Cmd(CW_GTIM1, ENABLE);// GTIM使能
}
5、GTIM标志清零函数
void GTIM_ClearITPendingBit(GTIM_TypeDef *GTIMx, uint32_t GTIM_IT)
{
GTIMx->ICR = ~GTIM_IT;
}
6、GTIM 比较值设置函数
void GTIM_SetCompare3(GTIM_TypeDef *GTIMx, uint32_t Value)
{
GTIMx->CCR3 = 0x0000FFFF & Value;
}
7、GTIM中断处理函数
void GTIM1_IRQHandler(void)
{
/* USER CODE BEGIN */
// 中断每500us进入一次,每50ms改变一次PosWidth
static uint16_t TimeCnt = 0;
GTIM_ClearITPendingBit(CW_GTIM1, GTIM_IT_OV);
if (TimeCnt++ >= 100) // 50ms
{
TimeCnt = 0;
if (Dir)
{
PosWidth += 15; // 5us
}
else
{
PosWidth -= 15;
}
if (PosWidth >= Period * 3)
{
Dir = 0;
}
if (0 == PosWidth)
{
Dir = 1;
}
GTIM_SetCompare3(CW_GTIM1, PosWidth);
}
/* USER CODE END */
}
8、主函数
uint32_t Period = 500; // 周期,单位us
uint32_t PosWidth = 0; // 正脉宽,单位us
uint8_t Dir = 1; // 计数方向 1增加,0 减少
int32_t main(void)
{
/*系统时钟配置 */
RCC_Configuration();
/* GPIO配置*/
GPIO_Configuration();
PWM_OutputConfig();
/* NVIC配置*/
NVIC_Configuration();
while(1)
{
/* 中断服务程序见GTIM1_IRQHandler() */
}
9、实验演示
系统时钟由HSI提供,通过PLL倍频到48MHz。GTIM1经16分频后,以3MHz的频率计数,ARR设置为1499,GTIM1的溢出周期为500μs。GTIM1每500μs进入一次中断,每50ms改变一次CH3的CCR寄存器的值,即改变PWM的正脉宽,步长为5μs,先递增到ARR,然后递减到0,如此反复。通过示波器图像显示,PB08处的信号波的占空比随时间进行周期性变化。截取2个波形如下:
- |
- +1 赞 0
- 收藏
- 评论 0
本文由ll转载自武汉芯源半导体公众号,原文标题为:CW32 PWM输出功能介绍,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关推荐
武汉芯源半导体安全低功耗MCU CW32L010 | 新品使用初体验
CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片
【经验】芯源CW32系列MCU电容式触摸按键设计指南
芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。
【经验】武汉芯源CW32系列MCU芯片低功耗模式的特性介绍
武汉芯源CW32系列芯片支持3种工作模式,运行模式、休眠模式以及深度休眠模式,本文以CW32L083为例介绍低功耗模式的特性。
【应用】基于国产32位MCU芯片CW32F030C8T6的智能门锁方案,主频64MHz,具备低功耗多功能优势
智能门锁集成3D识别算法、接近检测、指纹输入模块,低功耗计算芯片等于一体,解锁快、功耗低、续航久,现武汉芯源推出一款MCU芯片CW32F030C8T6助力于智能门锁设计。
武汉芯源半导体CW32L010系列安全低功耗MCU:驱动高速风筒新力量
MCU作为高速风简控制系统的核心,承担着传感器数据采集、高速电机控制、用户界面交互以及安全保护等多重任务。武汉芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。
【IC】武汉芯源CW32L010安全低功耗MCU,树立M0+产品行业新标杆!
近日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。产品是基于eFlash的单芯片低功耗微控制器,集成了主频高达48MHz的ARM®Cortex®-M0+内核、高速嵌入式存储器(多至64K字节FLASH和多至4K字节SRAM)以及一系列全面的增强型外设和I/O口。
CW32L010 ARM®Cortex®-M0+32位低功耗MCU,高达64KB闪存、4KB RAM规格书
描述- 本资料为Wuhan Xinyuan Semiconductor Co., Ltd.生产的CW32L010微控制器的数据手册。该微控制器基于ARM® Cortex®-M0+内核,具有低功耗特性,最高频率可达48 MHz。它集成了高达64KB的闪存、4KB的RAM,支持多种外设和通信接口,适用于各种低功耗应用。
型号- CW32L010,CW32L010F8,CW32L010F8P6,CW32L010F8U6,CW32L010F8U6X,CW32L010Y8M6,CW32L010Y8,CW32L010X8
【应用】基于CW32L系列MCU的指夹式血氧仪,实现更高精度测量
主控芯片建议使用CW32F003(20pin)资源足够,还便宜。CW32抗干扰性能可轻松通过ESD 8KV认证,加之优秀的ADC性能,是血氧仪类产品的不二之选
【产品】武汉芯源CW32L083系列MCU中断系统介绍
本文针对武汉芯源CW32L083系列MCU,同系列产品亦可参考。ARM® Cortex®-M0+内核的嵌套向量中断控制器(NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟的异常和中断处理。
CW32L010 ARM®Cortex®-M0+低功耗32位MCU参考手册
描述- 本资料为CW32L010微控制器参考手册,旨在为应用开发者提供关于如何使用该微控制器内存和外设的完整信息。手册内容涵盖系统架构、内存组织、电源控制、复位和时钟控制、中断、RAM和FLASH内存、GPIO、CRC、RTC、定时器、看门狗定时器、UART、SPI、I2C、红外调制发射器、ADC、电压比较器、低压检测器、调试接口和数字签名等模块的详细说明和编程指南。
型号- CW32L010
介绍MCU的ARM处理器——Cortex-M0+内核
ARM Cortex-M0+是2012年3月14日ARM公司发布的一款低功耗效率、能效最高的ARM处理器,可用于存在设计约束的嵌入式应用。它具有最小的硅面积和极少的代码量,从而使开发人员能够以16和8位的价位实现32位性能。处理器的低门数使其能够部署在需要简单功能的应用中。本文中武汉芯源来给大家介绍Cortex-M0+内核,希望对各位工程师有所帮助。
【技术】武汉芯源CW32定时器输入捕获的操作讲解
CW32系列MCU的GTIM、ATIM的每个定时器都带有至少4路独立的捕获/比较通道,输入捕获功能可以测量输入信号的脉冲宽度或者频率。本文进行武汉芯源CW32定时器输入捕获的操作讲解。
精雕细琢打造MCU,武汉芯源开辟属于自己的Cortex-M0+新赛道!
物联网市场如火如荼,在大量基于Cortex™-M0+的MCU已经面市的情况下,Cortex™-M0+ MCU在以这片红海中还有发展的空间吗?答案是有,近日武汉芯源半导体推出的基于Cortex™-M0+内核CW32L010新品系列就是通过差异化的细节设计开辟了属于自己的新赛道。
武汉芯源半导体首款车规级MCU,CW32A030C8T7通过AEC-Q100测试考核
武汉芯源半导体车规级MCU产品,CW32A030C8T7产品顺利通过AEC-Q100(Grade2)车规级可靠性测试,符合车用电子高可靠性和稳定性要求,可用于环境温度范围-40°C~105°C的大部分车载应用环境。
CW32F030C8T6 MCU Supports an Ultra Wide Temperature Range of -40~105 ℃, Ensures Safe and Stable Operation of Portable Charging Gun
Wuhan Core Source Semiconductor‘s CW32F030C8T6 serves as the core control chip of the portable charging gun of Sihao New Energy Vehicle, indicating that CW32F030C8T6 microcontroller has been recognized by frontline host manufacturers.
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论