参考:stm32 定时器输出PWM原理及工作原理+控制舵机
作者:点灯小哥
发布时间: 2021-03-09 23:17:52
网址:https://blog.csdn.net/weixin_46016743/article/details/114606662

参考:stm32之pwm输出
作者:打酱油的;
发布时间: 2021-04-11 14:59:05
网址:https://blog.csdn.net/weixin_46098612/article/details/115597823

目录

  • 前言
  • PWM的工作原理
  • PWM的内部运作机制
    • PWM模式一:边沿对齐模式
    • PWM模式二:中央对齐模式
  • 自动加载的预加载寄存器
  • 通用定时器输出PWM结构体
  • 通用定时器输出PWM库函数
  • 通用定时器输出PWM控制舵机
    • 硬件接线
    • 配置步骤:需要配置3个结构体
    • 编程实现

前言

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

PWM的工作原理


TIM3通道2,即PB5,作为本实验连接舵机的引脚。
为何不是通道3PWM输出?不太理解。

上图最后一句话,点明PWM的原理。

PWM的内部运作机制


上图PWM模式选择介绍如下:

PWM模式一:边沿对齐模式


有效电平由上面的P位决定

PWM模式二:中央对齐模式

自动加载的预加载寄存器

通用定时器输出PWM结构体


注意:结构体只要配置上面4个红色字体即可

通用定时器输出PWM库函数

通用定时器输出PWM控制舵机

硬件接线

SG90电机

红线 : 3.3v/ 5v 接到VCC
黑线 : GND
黄线 : 信号线(PWM输出端口) 接到PB5

配置步骤:需要配置3个结构体

编程实现

motor.h

#include "stm32f10x.h"  //固件库void motor_config(void);

motor.c

#include "stm32f10x.h" //固件库
#include "motor.h"void motor_config(void)
{GPIO_InitTypeDef GPIO_MotorInit;       //1.GPIO结构体TIM_TimeBaseInitTypeDef TIM_MotorInit; //2.通用定时器结构体TIM_OCInitTypeDef TIMPWN_MotorInit;    //3.配置定时去输出PWM结构体RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); //4.1 打开GPIO时钟 RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3,  ENABLE);  //4.2 打开定时器3时钟RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,  ENABLE);    //复用使能时钟(我们用到部分重映射)GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3 , ENABLE );   //4.3 部分重映射时钟 TIM3 上面图有讲GPIO_MotorInit.GPIO_Mode  =  GPIO_Mode_AF_PP;//复用推挽输出(PB5部分重映射 参照上面图) GPIO_MotorInit.GPIO_Pin   =  GPIO_Pin_5;//PB5引脚 连接到舵机的信号线GPIO_MotorInit.GPIO_Speed =  GPIO_Speed_50MHz;GPIO_Init( GPIOB, &GPIO_MotorInit );TIM_MotorInit.TIM_ClockDivision =  TIM_CKD_DIV1;//设置时钟分频为1 不分频TIM_MotorInit.TIM_CounterMode    =  TIM_CounterMode_Up;//计数模式 TIM向上计数模式TIM_MotorInit.TIM_Period         =  200 - 1 ;    //重装载值 设置在下一个更新事件装入活动的自动重装载值 200/10000sTIM_MotorInit.TIM_Prescaler     =  7200 - 1 ;  //预分频 TIMx时钟频率预分频值 TIM_TimeBaseInit( TIM3, &TIM_MotorInit);//定时器3TIMPWN_MotorInit.TIM_OCIdleState = TIM_OCMode_PWM1;           //选择PWM模式1 即当前CNT值比CCR比较值小为有效电平TIMPWN_MotorInit.TIM_OutputState = TIM_OutputState_Enable;  //配置输出使能TIMPWN_MotorInit.TIM_OCPolarity  = TIM_OCPolarity_Low;     //比较输出极性 选低电平 即低电平为有效电平 好像是前面讲的P位//还有一个结构体成员 配置比较值CCRX  后面用固件库函数实现TIM_OC2Init( TIM3,    &TIMPWN_MotorInit ); //定时器3的通道2 所以用OC2TIM_OC2PreloadConfig( TIM3,  TIM_OCPreload_Enable); //自动加载的预加载寄存器 使能 前面讲到TIM_Cmd( TIM3,  ENABLE);
}

main.c

#include "stm32f10x.h"                  // Device header
#include "usart.h"
#include "led.h"
#include "tim.h"
#include "motor.h"//记得添加路径void delay(uint16_t time)
{uint16_t i = 0;while(time--){i=12000;while(i--);}
}int main(void)
{uint16_t pwmval = 155; //比较值155 自动重装载值为200 大约3/4motor_config();while(1){  //舵机在155和195之间 一直循环 for(pwmval = 195;pwmval >= 175;pwmval-=5){                //5. 设置PWM比较值函数 即占空比TIM_SetCompare2( TIM3,  pwmval); //定时器3 通道2delay(500);//延时0.5s               }          }
}

STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值相关推荐

  1. STM32通用定时器输出PWM

    1 .TIMx简介 通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成. 它适用于多种场合,包括测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM). 使用定时器预分 ...

  2. STM32学习笔记:通用定时器输出PWM

    脉冲宽度调制,简称PWM(Pulse Width Modulation)是利用微处理器的数字输出 对模拟电路进行控制的一种非常有效的控制技术,常用于控制Led灯的亮度.电机转速等. STM32 的定时 ...

  3. 通用定时器输出PWM波实现呼吸灯

    STM32F1系列含有8个定时器,分为基本定时器,通用定时器和高级定时器.基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部IO.通用定时器 TIM2/3/ ...

  4. DMA+TIM3通用定时器输出PWM波形驱动TM1814

    项目中用到了TM1814,这是芯片的简单介绍. 可以看出0码1码对于占空比时序有比较严格的要求,0码1码周期均在1.25us-2.5us,低电平时间的典型值分别为360ns和720ns.原先采用输出时 ...

  5. STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...

  6. stm32通用定时器的PWM输出

    配置过程:(以TIM3为例,其CH1-CH4为:PA6.PA7.PB0.PB1) 1)开启TIM3时钟,配置4个IO口为复用推挽输出. 2)设置TIM3的ARR和PSC来控制PWM的周期. 3)设置T ...

  7. stm32C8t6 通用定时器输出PWM+定时中断控制板载LED

    stm32f103c8t6只有基本定时器和通用定时器,没有高级定时器 通过定时器3使能中断1s一次控制板载LED 基本步骤 *开启定时器时钟 *定时器初始化结构体配置 *定时器中断开启 *定时器使能 ...

  8. 定时器输出PWM控制电机(程序)

    电机控制程序的三方面要点: 一.定时器的输出通道设置 二.电机频率的设定 三.占空比输入函数的设计 对于电机来说,转速与转向是最重要的表现.这里的程序是针对四个直流无刷电机来编写的. 控制四个电机,是 ...

  9. stm32 定时器输出PWM原理及工作原理+控制舵机

    1.PWM的工作原理 2.PWM的内部运作机制 3.PWM的模式 模块一  边沿对齐模式 模块二 中央对齐模式 4.自动加载的预加载寄存器 5.定时器输出PWM结构体讲解 6.定时器输出PWM库函数讲 ...

最新文章

  1. execute、executeQuery和executeUpdate之间的区别
  2. Html5 学习系列(一)认识HTML5
  3. 三分钟破解无线网——无线网络安全攻防
  4. Imagine dragons Dream中文歌词
  5. linux 用户进程结束后 malloc申请的内存会自动释放吗,进程退出后malloc的内存是否会被释放?
  6. Windows中动态磁盘管理
  7. sap.ca.ui.utils.busydialog - scenario1 - opportunity opened
  8. java文件下载至linux乱码,JAVA 文件下载乱码问题解决办法
  9. hive数据倾斜及处理案例
  10. hdu1212(大数取模)
  11. 什么是数字孪生?终于有人讲明白了
  12. spring mvc 静态资源拦截
  13. 软件的卡顿与卡死,意思是不同的
  14. 中国主要的区块链公司以及融资情况
  15. 计算机网络网线制作工具有,网线制作工具 网线水晶头制作过程详解(视频+图文教程)...
  16. postgresql 转 mysql_PostgreSQL转换为Mysql
  17. [Mysql] FIRST_VALUE()函数 | LAST_VALUE()函数 | NTH_VALUE()函数
  18. java苹果沙盒验证参数问题_java -苹果支付凭证校验
  19. 持续学习:(Elastic Weight Consolidation, EWC)Overcoming Catastrophic Forgetting in Neural Network
  20. MuJoCo及mujoco_py安装(以及troubleshooting)

热门文章

  1. 2springboot:快速创建springboot项目
  2. JavaScript中的闭包
  3. DP备份任务失败原因解析
  4. 《java设计模式》之责任链模式
  5. 【转】logback 常用配置详解(序)logback 简介
  6. 工业相机与镜头分辨率匹配
  7. C语言的指针初始化特别注意一点
  8. UploadRTOS.exe
  9. Halcon —— 边缘检测算子详解
  10. 异形3×3魔方还原教程_【理论篇】三阶魔方4.33千亿亿种变化是怎么计算出来的?...