STM32G4之方波和PWM波输出

文章目录

  • 前言
  • 一、方波输出
    • 1. 原理
    • 2.STM32CubeMX配置
    • 3.部分源码
  • 二、PWM波输出
    • 1.原理
    • 2.STM32CubeMX配置
    • 3.部分源码
  • 总结


前言

方波是指占空比一般为50%,PWM波是指可以调节占空比的


一、方波输出

1. 原理

利用引脚PA11和PA12对应的定时器4通道1/2输出波形
STM32G4之方波和PWM波输出_第1张图片
输出比较原理图
STM32G4之方波和PWM波输出_第2张图片
输出通道有8中模式,这里采用的是比较输出模式(2),即电平翻转模式当匹配时,引脚状态翻转。步进电机控制常用的模式

假设CCR寄存器里面的值设定为100,那么计数器从0开始计数,每隔100次,电平将会翻转一次,这样就通过设定CCR寄存器里面的值就可以输出不同频率的方波

假设1M作为计数时钟,计一个数需要t=1e-6s, 波的频率 1/[2*( 100*t)] =5khz

2.STM32CubeMX配置

(1)配置定时器4的模式和通道
STM32G4之方波和PWM波输出_第3张图片
(2)配置定时器4计数器的参数和输出比较通道参数,通道模式设置的是电平翻转,比较值设定的是100,每隔100计数,电平翻转一次
STM32G4之方波和PWM波输出_第4张图片
(3)配置定时器的输出引脚,输出速率设置为高
STM32G4之方波和PWM波输出_第5张图片

(4)配置定时器的中断优先级
STM32G4之方波和PWM波输出_第6张图片

3.部分源码

//  方波输出中断
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM4)   // 定时器判断
	{
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)  // 通道1
		{
			// 每次中断计数器的值加100
			__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_1, (__HAL_TIM_GetCounter(htim)+100)); // 5khz
			
		}
		else if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2)   // 通道2
		{
			// 每次中断计数器的值加500
			__HAL_TIM_SET_COMPARE(htim, TIM_CHANNEL_2, (__HAL_TIM_GetCounter(htim)+500));
		}	
	}
}

二、PWM波输出

1.原理

生成PWM波采用的是定时器15的通道1和通道2对应引脚为PA2和PA3
在这里插入图片描述
输出比较模式选择PWM模式,PWM(脉冲宽度调制)模式可以产生一个由TIMx_ARR寄存器确定频率(周期)、由TIMx_CCRx寄存器确定占空比的PWM信号

PWM模式分为PWM1互为PWM2
STM32G4之方波和PWM波输出_第7张图片
在递增计数模式下,计数器从 0 计数到自动重载值( TIMx_ARR 寄存器的内容),然后重新从 0 开始计数并生成计数器上溢事,在中, ARR=999, CCR=300, CNT 从 0 开始计数,当 CNT , 比 较中 断寄 存器 CCxIF 置 位 。 当CCR=。然后 CNT 又从 0 开始计数并生成计数器上溢事件,以此循环往复,生成PWM,设置不同的CCR可以调节不同的占空比,设置ARR值可调节周期

若计数时钟为1M,则PWM的频率 = 1 / (1e-3) = 1000hz, 占空比为30%

2.STM32CubeMX配置

(1)配置定时器15的模式和通道选择
STM32G4之方波和PWM波输出_第8张图片
(2)配置计数器,pwm生成通道1/2的参数
STM32G4之方波和PWM波输出_第9张图片

(3)配置定时器15输出引脚,输出频率高即可
STM32G4之方波和PWM波输出_第10张图片
注:PWM的输出不用中断,所以不用配置中断。

3.部分源码

// 初始化定时器15
	TIM15_PWM_Init();
	// 开启PWM通道
	HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim15,TIM_CHANNEL_2);
	

在while循环前添加这几句即可生成PWM波


总结

提示:这里对文章进行总结:

你可能感兴趣的:(#,STM32,stm32,单片机,arm)