专题HC32F460的timer A的pwm输出正弦波
在HC32F460微控制器上使用Timer A输出PWM正弦波,可以通过以下步骤实现:
1. 原理说明
PWM输出正弦波的核心是SPWM(正弦脉宽调制)技术,通过调整PWM占空比来模拟正弦波的幅值变化。配合外部低通滤波器(RC滤波)可将PWM波形转换为平滑的正弦波。
2. 实现步骤
(1) 配置Timer A为PWM模式
- 选择Timer A的通道(如CH0),配置为PWM输出模式。
- 设置PWM频率(如10kHz-20kHz):
- 通过预分频器(
PSC)和自动重载值(ARR)调节周期。
- 通过预分频器(
- 使能PWM输出,并映射到对应的GPIO引脚。
示例代码片段:
stc_timera_base_init_t stcBaseInit = {0};
stc_timera_compare_init_t stcCompareInit = {0};
// 配置Timer A基础参数(周期和预分频)
stcBaseInit.enCntMode = TimeraCntModeSawtooth; // 锯齿波模式
stcBaseInit.enCntDir = TimeraCntDirUp; // 向上计数
stcBaseInit.enSyncClkDiv = TimeraPclkDiv1; // 时钟不分频
stcBaseInit.u16Period = PWM_PERIOD; // ARR值,决定PWM频率
stcBaseInit.u16StartValue = 0; // 初始计数值
Timera_BaseInit(TIMERA_UNIT, &stcBaseInit);
// 配置PWM比较模式(占空比)
stcCompareInit.enCompareMode = TimeraCompareModePwm; // PWM模式
stcCompareInit.enCompareMatchCond = TimeraCompareMatchCondEqual;
stcCompareInit.u16CompareValue = 0; // 初始占空比
Timera_CompareInit(TIMERA_UNIT, TimeraChannel0, &stcCompareInit);
// 启用Timer A和PWM输出
Timera_Start(TIMERA_UNIT);
(2) 生成正弦波采样表
- 根据正弦波的频率和PWM频率,生成一个周期的正弦波离散幅值表。
- 示例:若PWM频率为20kHz,正弦波频率为50Hz,则每个正弦波周期需要
20000/50 = 400个采样点。
生成采样表的代码:
#define SINE_SAMPLES 400 // 采样点数
uint16_t sineTable[SINE_SAMPLES];
void GenerateSineTable(void) {
for (int i = 0; i < SINE_SAMPLES; i++) {
float angle = 2 * 3.1415926f * i / SINE_SAMPLES;
float sineValue = sin(angle); // 范围[-1, 1]
sineValue = (sineValue + 1) * 0.5f; // 转换到[0, 1]
sineTable[i] = (uint16_t)(sineValue * PWM_PERIOD); // 映射到PWM占空比
}
}
(3) 动态更新PWM占空比
-
使用定时器中断:在Timer A的周期中断中更新占空比。
-
配置中断:
// 启用Timer A周期中断 Timera_EnableIrq(TIMERA_UNIT, TimeraIrqOverflow); -
中断服务函数:
void TIMERA_IRQHandler(void) { if (Timera_GetIrqStatus(TIMERA_UNIT, TimeraIrqOverflow)) { static uint16_t index = 0; Timera_SetCompareValue(TIMERA_UNIT, TimeraChannel0, sineTable[index]); index = (index + 1) % SINE_SAMPLES; Timera_ClearIrqFlag(TIMERA_UNIT, TimeraIrqOverflow); } }
(4) 添加低通滤波器
在PWM输出引脚后接RC低通滤波器,滤除高频PWM载波,保留正弦波信号。
推荐参数:
- 电阻R:1kΩ
- 电容C:0.1μF
- 截止频率:( f_c = \frac{1}{2\pi RC} \approx 1.6kHz )(适用于20kHz PWM频率)
3. 注意事项
- PWM频率选择:需远高于目标正弦波频率(至少10倍以上)。
- 中断响应速度:确保中断处理时间足够短,避免占空比更新延迟。
- 采样点数:增加采样点数可提高波形质量,但会占用更多内存。
- 幅度调节:通过调整正弦表的最大值(如
sineValue * 0.8 * PWM_PERIOD)可控制输出幅值。
4. 优化方案
- 使用DMA自动传输正弦表数据,减少CPU占用。
- 采用查表法结合插值算法提高波形精度。
通过以上步骤,即可在HC32F460的Timer A上输出高质量的正弦波信号。
-
hc32f460 MCU参考手册
本系列是基于ARM® Cortex®-M4 32-bit RISC CPU,最高工作频率200MHz的高性能MCU。Cortex-M4内核集成了浮点运算单元(FPU)和DSP,实现单精度浮点算术运算,支持所有ARM单精度数据处理指令和数据类型,支持完整DSP指令集。内核集成了MPU单元,同时叠加DMAC专用MPU单元,保障系统运行的安全性。
13次下载 2022-12-08 10.19 MB -
HC32F460电机驱动源代码
HC32F460电机驱动源代码
17次下载 2022-09-30 1.56 MB -
华大HC32F460 HC32F4A0加速程序运行速度
华大单片机HC32F4xx系类(HC32F460 HC32F4A0)可以运行最高200Mhz,但内部Flash在 CPU运行频率达到33M后,就需要加入不同的等待周期。所以实际程序在内部FLash内运行时,是跟不上CPU速度,也就不能达到最高运行速度200Mhz。如下图:可以看到在最高200Mhz时,读Flash中的指令需要等待5个CPU时钟周期,那大概20
14次下载 2022-01-12 -
HC32F460写端口不改变状态问题
由于某种原因,使用了华大的单片机,在写LCD的时候,遇到问题,LED数据线是接在A0~A7,使用PORT_SetPortData函数时发现只改变以前是0的Bit,如上一数据发的是01010101,下一数据发的是10101010,那么端口执行完这两个代码时,状态就是11111111,数据明显不对,检查PORT_SetPortData函数如下:en_result
3次下载 2022-01-12 -
HC32F460的相关资料分享
因ST涨价,陆陆续续换了一批单片机,因项目主要是云台,需要的单片机资源其实相对没有依赖性,所以国产芯片换了一波,使用华大M4 内核 168M主频的 HC32F460,记录一下。1 首先是JTAG 和SWD的问题,假如用习惯ST cubemx HAL库的小伙伴是不用管这个的,可以直接引脚复用配置。JTAG :TDI TDO CLK DAT RSTSWD: CL
0次下载 2021-12-07 -
HC32F460
因ST涨价,陆陆续续换了一批单片机,因项目主要是云台,需要的单片机资源其实相对没有依赖性,所以国产芯片换了一波,使用华大M4 内核 168M主频的 HC32F460,记录一下。1 首先是JTAG 和SWD的问题,假如用习惯ST cubemx HAL库的小伙伴是不用管这个的,可以直接引脚复用配置。JTAG :TDI TDO CLK DAT RST SWD:
13次下载 2021-11-24 0.54 MB -
华大HC32F460芯片
华大半导体有限公司(简称华大半导体)是中国电子信息产业集团有限公司(CEC)整合旗下集成电路企业而组建的专业子集团,成立于2014年5月8日。华大半导体涵盖设计、制造、封装、测试、EDA等领域,是拥有完整产业链的企业。目前华大MCU共分为四大方向:超低功耗MCU、通用类MCU、电机类MCU、车规MCU。官网有选型表,可以根据需求进行选型:HC32F460系列
27次下载 2021-11-23 0.33 MB -
HC32F460时钟系统简介
HC32F460时钟系统简介 Stark-2021-05概述目前只是调试了 GPIO 和 UART,感觉很有必要把时钟这部分补充说明一下,之前的文章中提到 GPIO 口没有时钟的门控时钟,之前大学玩 ST 单片机时候,那个 GPIO 的端口初始化是需要使能 GPIO_PORT ...
11次下载 2021-11-23 0.29 MB -
华大HC32F460使用Flash模拟EEPROM
在一些应用中,经常需要存储一些信息,掉电后可以保存。当然,可以外挂eeprom,flash也可以。不过呢,占用空间,资源,增加成本,设计上的难度也会增加(况且,460的flash这么大,分出来一点作为数据存储)。更具hc32f460的资料,有如下信息: 1 flash擦除的最小单元为8K bytes,最小编程单元4 bytes; 2 flash在擦除和编程期
46次下载 2021-11-23 0.13 MB -
利用DAC实现正弦波输出
利用DAC实现正弦波输出(电源技术投稿快吗)-该资料详细介绍了利用DAC实现正弦波输出
78次下载 2021-09-28 52.61KB -
基于HC32F460系列的DMA控制器使用手册
HC32F460 系列 MCU 内部集成 DMAC 模块,能够在 CPU 不参与的情况下实现存储器之间,存储器和外围功能模块之间以及外围功能模块之间的数据交换。
3次下载 2021-09-06 0.02 MB -
基于STM32f103使用的DAC正弦波
基于STM32f103使用的DAC正弦波
118次下载 2021-08-02 0.28 MB -
DAC—输出正弦波
程序简介 -工程名称:DAC 输出正弦波 -实验平台: 秉火STM32 F429 开发板 -MDK版本:5.16 -ST固件库版本:1.5.1 【 !】功能简介: 使用STM32的DAC输出正弦波. 学习目的:学会使用STM32 DAC,使用定时器触发控制信号频率 【 !】实验操作: 下载本程序,使用示波器检测开发板的PA4、PA5引脚,可测得正弦波。 接口
74次下载 2017-12-13 0.5 MB -
海为PLC正弦波输出
在PLC程序中做正弦波的输出就是:PLC寄存器的值随时间的推移,按正弦波的变化规律而变化的一种求法(周期和幅值可设定)。然而时间增量的大小决定着寄存器值变化的快慢,利用系统16us精度的时间来处理可以达到毫秒级变化。
4次下载 2017-10-09 0.18 MB -
用DSP56F805 PWM模块输出高频正弦波
用DSP56F805 PWM模块输出高频正弦波
26次下载 2009-05-18 222
- 本周
- 本月
- 总榜
-
11.55 MB 1次下载 免费
-
2
YC-CK6869蓝牙模块_规格书
0.17 MB 0次下载 免费 -
3
A-59U_具有USB功能的多模语音处理模块规格书-J
2.41 MB 0次下载 免费 -
4
I-PEX 82865-100B-02-D_CABLINE-CA系列60P高速极细同轴线束工程图纸
404.40 KB 0次下载 免费 -
5
神经网络AI降噪回音消除模块A-29说明书
1.42 MB 0次下载 免费 -
6
【超大音量回音消除模块】优异的全双工免提通话消回音A-29
1.37 MB 0次下载 免费 -
7
AP-0316_多功能语音处理模组
3.07 MB 0次下载 免费 -
8
AR1105声源定位模组
1.70 MB 0次下载 免费