3. STM32之TIM实验--输出比较(PWM输出,电机,四轴飞行器,智能车,机器人)--(实验1:PWM驱动LED呼吸灯)

输出比较功能是驱动电机的必要条件,输出比较共有三个实验,3 4 5 三个主题讲解,如何感兴趣的同学对电机感兴趣,可以认真学一下TIM的输出比较功能(其实输出比较就是输出一个PWM波形的)

简单介绍一下PWM----Whappy
PWM原理 PWM频率与占空比详解-CSDN博客

伺服电机基本概念解析:伺服系统组成及其控制原理_伺服系统设计原理-CSDN博客

  1. STM32之定时器,输出比较,pwm控制led呼吸灯。

PWM控制电机的原理

PWM电机控制原理是通过调节PWM信号的占空比来控制电机的转速和方向的一种电机控制方式.。PWM是脉冲宽度调制的缩写,通过改变脉冲的宽度和周期来调节电压的平均值,从而控制电机的输出功率。在电机控制系统中,控制器产生PWM信号,经过功率放大器放大后,驱动电机转动。通过调整PWM信号的占空比,可以实现电机转速的控制,同时也可以改变电机的转向。PWM电机控制原理广泛应用于各种类型的电机控制系统中,如直流电机控制、步进电机控制、交流电机控制等。步进电机驱动器细分原理_步进驱动器细分设置表说明_步进电机细分-CSDN博客

脉冲数=电机移动距离,

脉冲频率=电机速度

上图说明:当作为输入时,可作为输入捕获,输出时,可以作为输出比较(基本功能是输出PWM)。CCR输入捕获和输出捕获寄存器,

定时器的输出比较是怎样生成PWM波形的?

CNT>=CCR1时:--->给输出模式控制器传递一个信号,然后通过参考信号OC1ref,最后通过极性选择,选择相关的高低电平通过输出使能电路通过OC1输出相对应的PWM波形,下表为控制ref输出控制表

通过上表,我们就可以知道STM32的定时器输出pwm波形可以通过配置输出和捕获中的输出模式控制器中的相关寄存器(OC1M[2:0])来进行精确的控制。

(第一个实验)本实验着重使用PWM模式1来输出可调的PWM波形,参考下图


配置PWM波形步骤

配置时基单元-->CCR(捕获比较寄存器自己设定的)-->输出模式配置-->极性选择-->输出使能

代码:配置步骤:配置时钟-->配置时基单元-->配置输入输出捕获CCR-->配置输出模式-->极性选择--GPIO输出

注:PWM和GPIO对应关系是怎样的?

复制代码
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"

int main(void)
{
	OLED_Init();
	PWM_Init();
	
	uint16_t Compare;
	while (1)
	{
		for(Compare=0; Compare<100; Compare++)
		{
			PWM_SetComparel(Compare);
			Delay_ms(10);
		}
		
		for(Compare=0; Compare<100; Compare++)
		{
			PWM_SetComparel(100-Compare);
			Delay_ms(10);
		}
	}
}

#include "stm32f10x.h"                  // Device header





/************************************************

配置步骤:配置时钟-->配置时基单元(并初始化OC)-->配置输入输出捕获CCR-->配置输出模式-->极性选择--GPIO输出

PWM频率:	Freq = CK_PSC / (PSC + 1) / (ARR + 1)
PWM占空比:	Duty = CCR / (ARR + 1)
PWM分辨率:	Reso = 1 / (ARR + 1)

实验目标:
输出一个PWM频率 = 1kHz,占空比 = 50%,分辨率 = 1%的PWM波形

************************************************/

void PWM_Init(void)
{
	
	//配置时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	TIM_InternalClockConfig(TIM2);//打开内部时钟
	
	//配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //ARR 时基单元中的自动重装值 ARR+1=100-->ARR= 100-1
	/********************************************************
    ARR时基单元中的自动重装值    公式:计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)= CK_PSC / (PSC + 1) / (ARR + 1)
	计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)
	*********************************************************/
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;  //PSC 时基单元中的预分频 PSC + 1 =720-->PSC =720-1
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//初始化输出比较单元OC
	
	TIM_OCInitTypeDef TIM_OCInitstructure;
	TIM_OCInitstructure.TIM_OCMode = TIM_OCMode_PWM1;                      //输出模式
	TIM_OCInitstructure.TIM_OCPolarity = TIM_OCPolarity_High;               //输出极性
	TIM_OCInitstructure.TIM_OutputState =  TIM_OutputState_Enable; 			 //输出使能
	TIM_OCInitstructure.TIM_Pulse =   0;             		 //配置CCR寄存器(通过公式)
	
	
	TIM_OC1Init(TIM2,&TIM_OCInitstructure);

	TIM_Cmd(TIM2, ENABLE);//启动定时器
}


void PWM_SetComparel(uint16_t Compare)
{
	TIM_SetCompare1(TIM2,Compare);
}
相关推荐
DeepVis Research13 分钟前
【AGI Safety/Robotics】2026年度 AGI 对抗性强化学习与软体机器人控制基准索引 (Skynet/Legion Core)
人工智能·网络安全·机器人·数据集·强化学习
IT阳晨。7 小时前
【STM32】天气预报项目
stm32·单片机·嵌入式硬件
IT阳晨。9 小时前
【STM32】智能台灯项目
stm32·单片机·嵌入式硬件
炸膛坦客10 小时前
Cortex-M3-STM32F1 开发:(三十九)DMA详细介绍(3):相关寄存器、库函数介绍,配置步骤,以及内存到内存和内存到外设的实例
stm32·单片机·嵌入式硬件
polarislove021414 小时前
9.6 [定时器]超声波测距实验-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
一路往蓝-Anbo15 小时前
C语言从句柄到对象 (六) —— 继承与 HAL:父类指针访问子类数据
c语言·开发语言·stm32·嵌入式硬件·物联网
一路往蓝-Anbo17 小时前
C语言从句柄到对象 (七) —— 给对象加把锁:RTOS 环境下的并发安全
java·c语言·开发语言·stm32·单片机·嵌入式硬件·算法
中國龍在廣州17 小时前
谈谈2025年人工智能现状及发展趋势分析
人工智能·深度学习·算法·自然语言处理·chatgpt·机器人·机器人学习
一路往蓝-Anbo18 小时前
C语言从句柄到对象 (八) —— 当对象会说话:观察者模式与事件链表
c语言·开发语言·数据结构·stm32·单片机·观察者模式·链表
polarislove021418 小时前
9.5 [定时器]输入捕获-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件