STM32F103VCT6 高级定时器的PWM输出

2023-05-16

要求得到下列波形,死区时间1us,CH1和CH1之间的相位差事3us,频率50HZ。



1,To get TIM1 counter clock at 72MHz,the prescaler is computer as follows:
          Prescaler = (TIM1CLK / TIM1 counter clock) - 1
     To objective is to genterate PWM signal at 50KHz:
          -TIM1_Priod = (SystemCoreClock / 50000) - 1
     To get TIM1 output clock at 50KHz , the period (ARR) is computed as follows :
          ARR = (TIM1 counter clock / TIM1 output clock) - 1
     The Two Duty cycles are computed as the following description :  
            TIM1 Channel1 duty cycle = (TIM1_CCR1 / TIM1_ARR)*100 = 50%
            TIM1 Channel2 duty cycle = (TIM1_CCR1 / TIM1_ARR)*100 = 50% 
     The Timer pulse is calculated as follows : 
            TIM1_CCRx = (DutyCycle * TIM1_ARR) / 100
2,死区时间deadtime的计算方法
      UTG[7:0]:死区发生器装置,这些位定义了插入互补输出之间的死区持续时间,假设DT标示其持续时 间:
      DTG[7:0] = 0xx      =>      DT = DTG[7:0]× Tdtg , Tdtg = TDTS ;
      DTG[7:0] = 10x      =>      DT = (64 +  DTG[5:0])× Tdtg , Tdtg = 2×TDTS ; 
      DTG[7:0] = 110      =>      DT = (32 +  DTG[4:0])× Tdtg , Tdtg = 8×TDTS ;
      DTG[7:0] = 111      =>      DT = (32 +  DTG[4:0])× Tdtg , Tdtg = 16×TDTS ;      例子:若TDTS =  13.89ns(72MHz),可能的死区时间位:
      0到1764ns,若步长13.89ns;
      1777.9ns到3528.88ns;
      3555.84ns到7000.56ns;
      7111.68ns到14001.12ns;
如果 deadtime=1us,落在区间0到1764ns,所以公式选择& amp;nbsp;DTG[7:0] = 0xx      =>      DT = DTG[7:0]× Tdtg , Tdtg = TDTS ;
     1us = x 13.89ns,x=72,DTG[7:0]=0x72。假设是用第二个公式得到的30则DTG[5:0]=0b11110,加上DTG的前两位就是 DTG[7:          0]=0b1011110=0x5E;
3,Configure the break feature,active at High level,and using the automatic output enable feature
4,Use the Locking parameters level1
5,要求这两个通道的波形不对齐,那么TIM1_CCMR1的OC1M[2:0]必须设定为011,即 TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;这样ARR走两趟才是一个周期。
6,要求PWM输出频率为50KHz。所以ARR=(72MHz/100000)-1=719
      因为ARR加1的时间为(1/72MHz)s,则(1/72MHz)X=3us。X=216即CCR1、 CCR2之间相隔216时,PWM的相位差是3us。

      程序如下:< /div>void TIM1_PWM_DeadtimeInit(uint16_t arr,uint16_t psc,uint16_t ccr1,uint16_t ccr2,uint16_t deadtime)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);

    /*************************************************
    *采用寄存器模式  
    *TIM1的互补PWM,没有使用重映像,CH1-PA8,CH1-PB13< /div>    GPIOA->CRH&=0XFFFFFFF0;   //PA8输出
    GPIOA->CRH|=0X0000000B;   //复用功能输出 推挽式    
    GPIOA->ODR|=3<<8;
    
    GPIOB->CRH&=0XFF0FFFFF;   //PB13输出
    GPIOB->CRH|=0X00B00000;   //复用功能输出 推挽式    
    GPIOB->ODR|=3<<13;
    ***************************************************/
    /**************************************************/
    /*TIM1的互补PWM,没有使用重映像,CH1-PA8,CH1-PB13*/< /div>    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13 | GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOB,&GPIO_InitStructure);
    /*************************************************/
    /*************************************************
    *TIM1的互补PWM,使用完全重映射,CH1-PE9,CH1N-PE8*< /div>    GPIO_PinRemapConfig(GPIO_FullRemap_TIM1,ENABLE);//使用 AFIO_MARP的位7:6=11,完全重映像TIM1_CH1到PE9,TIM1_CH1N到PE8
<div& gt;    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9;    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOE,&GPIO_InitStructure);
    *************************************************/
    /**问题是当使用不完全重映射的互补PWM出现问题****< /div>    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//使用 AFIO_MARP的位7:6=01,部分重映像TIM1_CH1到PA8,TIM1_CH1N到PA7
<div& gt;    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7 | GPIO_Pin_8;    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);    
    ************************************************/
    //TIM1
    TIM_TimeBaseStructure.TIM_Period=arr;
    TIM_TimeBaseStructure.TIM_Prescaler=psc;
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_ClockDivision=0;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
    
    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_Toggle;//翻转,当 TIMx_CCR1=TIMx_CNT时,翻转OC1REF的电平
    TIM_OCInitStructure.TIM_Pulse=ccr1;
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //CCER的CC1P,输入/捕获输出极性
    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCPolarity_High;
    
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //CER的CC1N,输入/捕获输出使能
    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; //OIS1位
    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //CR2的OIS1N位,当MOE位0时,输出空闲状态位OIS1N.
    TIM_OC1Init(TIM1,&TIM_OCInitStructure);
     
    TIM_OCInitStructure.TIM_Pulse=ccr2;//316
    TIM_OC2Init(TIM1,&TIM_OCInitStructure);
    
    TIM_BDTRInitStructure.TIM_OSSRState=TIM_OSSRState_Disable; //OSSR:运行模式下“关闭状态”选择(Off-state selection for Run mode)
    TIM_BDTRInitStructure.TIM_OSSIState=TIM_OSSIState_Disable; //OSSI:空闲模式下“关闭状态”选择 (Off-state selection for Idle mode)
    TIM_BDTRInitStructure.TIM_LOCKLevel=TIM_LOCKLevel_1;//锁定设 置,级别为1,
    TIM_BDTRInitStructure.TIM_DeadTime=deadtime;//死区延时时间< /div>    TIM_BDTRInitStructure.TIM_Break=TIM_Break_Disable;//禁止刹车输 入
    TIM_BDTRInitStructure.TIM_BreakPolarity=TIM_BreakPolarity_Low; //刹车输入极性
    TIM_BDTRInitStructure.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable; //自动输出使能
    TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);
    
    TIM_CtrlPWMOutputs(TIM1,ENABLE);//BDTR的MOE位< /div>    
    TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);//CCMR1
    TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);//CCMR1
    TIM_ARRPreloadConfig(TIM1,ENABLE);//CR1
    TIM_Cmd(TIM1,ENABLE);//CR1
}< /div>

函数调用
void main(void)
{
    ......
    TIM1_PWM_DeadtimeInit(719,0,100,316,72)//uint16_t arr,uint16_t psc,uint16_t ccr1,uint16_t ccr2,uint16_t deadtime

      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32F103VCT6 高级定时器的PWM输出 的相关文章

  • 蓝桥杯09-PWM脉冲调制的操作

    目录 一 原理 二 设置思路 xff1a 三 题目练习 一 原理 1 脉冲宽度调制 xff08 PWM xff09 是一种对模拟信号电平进行数字编码的方法 通过高分辨率计数器的使用 xff0c 方波的占空比被调制用来对一个具体模拟信号的电平
  • pwm控制电机原理

    首先我们要明白电机的原理 电机 简单来说就是 实现电能与机械能相互转换的电工设备 那么我们经常使用的直流电机原理就是 xff1a 电生磁 xff1a 通电导线会产生磁场 也就是电磁感应 旋转磁场带动转子转动 电动机是由定子和转子组成 xff
  • STM32实现PWM输出与PWM输入捕获(HAL库)

    文章目录 一 前言二 STM32 定时器2 1 基本定时器2 1 1 功能与框图2 1 2 CubeMX配置 2 2 通用定时器2 2 1 功能与框图2 2 2 CubeMX配置 2 3 高级定时器2 3 1 功能与框图2 3 2 Cube
  • 航模无人机中PWM信号频率浅谈

    航模中执行机构 xff1a 动力电调 xff0c 舵机等基本都是通过PWM信号来驱动的 xff0c 但不同的电机或电调输入的信号频率和占空比又是不一样的 xff0c 这个是由什么决定的呢 xff1f 今天就以我的理解来简单讲一讲 最早的航模
  • 【STM32Cube HAL】输入捕获(六)——PWM测量

    对于PWM的捕获 xff0c 我这里一共使用两种方法实现 xff1a 第一种是PWM输入模式 xff0c 采用一个定时器的两个通道 xff08 通道一和通道二 xff09 xff0c 配置从模式为复位模式 xff0c 没有进行溢出处理 xf
  • pixhawk飞控板添加额外pwm输出通道控制开伞或舵机转动实现功能

    学习大佬的文章 xff0c 贴图来用 https blog csdn net dai93 article details 89852241 这是输出流的大致示意 如果在飞控需要控制单独的舵机 xff0c 可以自定义一个pwm通道输出 xff
  • 【STM32】STM32F103C8T6+L298N通过PWM控制直流电机转速

    系列文章目录 STM32 新建工程模板及配置 STM32 STM32与PC端 HC 06 ROS进行USART串口通信 ROS ROS上位机使用Serial库和boost asio库与STM32进行USART通讯 STM32 STM32F1
  • PWM波控制舵机总结

    文章转载自 https www cnblogs com zhoubatuo p 6138033 html 一 关于舵机 xff1a 舵机 xff08 英文叫Servo xff09 xff1a 它由直流电机 减速齿轮组 传感器和控制电路组成的
  • STM32关闭PWM输出时,让IO输出固定高或低电平的方法。

    看到有很多人在网上询问停止PWM时如何获取固定输出 xff0c 记录在此供参考 方法1 xff1a 设置占空比为0xffff 或0 后即可得到想要的0或1输出 方法2 xff1a 配置回通用IO口 xff0c 再设置为0或1 以上两种方法是
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • STM32Cube的PWM控制算法篇(一)数字锁相环初步设计Digital phase locked loop

    数字锁相环 Digital phase locked loop数字锁相环是一个通过PID算法使PWM调频改变相位 xff0c 以达到与目标模型同频同相或同频稳定相位差的目的 xff0c 在实际应用中较为常见 xff0c 其中包括齿轮对接 远
  • PWM互补输出,以及死区时间计算

    本文基于野火例程进行解说 实验内容 本次实验输出一对互补的pwm波 xff0c 且进行死区时间的计算说明 代码 互补输出对应的定时器初始化代码 xff1a bsp advance tim c span class token comment
  • STM32F103控制PCA9685产生16路PWM波控制SG90舵机

    STM32控制PCA9685产生16路PWM波控制SG90舵机 如果你能点开这篇文章 xff0c 说明你已经知道PCA9685是多么强大 xff0c NXP公司原本做这片芯片是为了提供给LED使用 xff0c 在其官方文档里也能看到所有PW
  • 魔方机器人之下位机编程---------舵机控制

    1 春天180 舵机 SR 403P 信号线和控制线颜色对应关系 两黑一白 白色信号线 中间电源 另一黑色电源 以上MC9S12XS128单片机通道三产生的周期为20ms 高电平为1 5ms的舵机控制信号 void PWM Init voi
  • 快速学习Stm32舵机控制板控制一个舵机运动

    PWM是什么 PWM 英文名Pulse Width Modulation 是脉冲宽度调制缩写 它是通过对一系列脉冲的宽度进行调制 等效出所需要的波形 包含形状以及幅值 对模拟信号电平进行数字编码 也就是说通过调节占空比的变化来调节信号 能量
  • PWM 互补两个引脚输出相同的PWM波形 CH1 和CH1N

    将互补CH1N 输出pwm与CH1输出相同的波形 TIM OCInitStructure TIM OCPolarity TIM OCPolarity Low 输出极性 TIM输出比较极性高 TIM OCInitStructure TIM O
  • STM32F103ZET6 之 ADC+TIM+DMA+USART 综合实验

    1 实验目的 1 使用 TIM1 触发 ADC ADC 采集的数据通过DMA 传至内存 然后通过串口打印出采集的数据 2 学会 DMA 传输数据并将数据进行保存 3 验证ADC 的采样率与实际设置的是否相符 2 硬件资源 1 指示灯 2 A
  • STM32 PWM基本知识及配置过程

    STM32 PWM基本知识及配置过程 将通用定时器分为四个部分 1 选择时钟 2 时基电路 3 输入捕获 4 输出比较 本节定时器PWM输出主要涉及到定时器框图右下方部分 即输出比较部分 和上一讲相同 时基时钟来源于内部默认时钟 对此有疑问
  • 快速学习Stm32舵机控制板控制多个舵机运动以及调速

    本次分享stm32对多个舵机的控制 之前讲解过单个舵机的控制 以及控制原理 定时器的使用和pwm的输出来控制一个舵机的角度转向 这次就和大家分享一下多个舵机的控制以及调速 利用单片机实现对 8 个舵机的同时控制 掌握多个舵机控制程序实现方法
  • STM32通用定时器使用详解

    1 通用定时器基本介绍 通用定时器包括TIM2 TIM3 TIM4和TIM5 STM32通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成 每个定时器都是完全独立的 没有互相共享任何资源 它们可以一起同步操作 定时器可以进行定

随机推荐

  • PHP常用的设计模式

    php常用的设计模式 xff1a 1 单例模式 xff08 构造方法私有化 xff0c 对外提供实例化对象的静态调用方法 xff09 class Site span class token punctuation span public s
  • 003.多线程-主线程、守护线程、用户线程的区别

    对于线程的分类 xff0c 我们可以简单划分为 xff1a 主线程 xff08 每个进程只有一个主线程 xff09 子线程 主线程 xff1a main方法 子线程 xff1a 非主线程皆是子线程 子线程中可以简单划分为 xff1a 守护线
  • Ubuntu中在当前目录下打开终端

    在Ubuntu中 xff0c 打开终端可以通过Ctrl 43 Alt 43 T来打开 xff0c 但其打开的是 下的 xff0c 如果进入指定的目录 xff0c 便需要通过cd命令来进行切换 xff0c 故本文提供一个可以通过鼠标右键来在当
  • C语言经典面试题100道(校对详解版)

    题目非本人整理 xff0c 转载于https blog csdn net qq 42613510 article details 81225935 做了校对与详解 xff0c 方便大家参考 最后编程答案自己做的 xff0c 还没写完 xff
  • 浅谈FreeRTOS任务启动与切换流程

    一个轻量级操作系统最核心的地方就在于任务的执行与切换 xff0c 像FreeRTOS和ucOS 在任务启动与切换方面都差不多 xff0c 本文主要从枝干而省去了所有细枝末节让你最快的了解操作系统的任务创建与切换 以正点原子FreeRTOS移
  • 状态机编程思维学习笔记(C语言)

    前言 不摸鱼摆烂的第一天 目录 前言C语言面对对象特性引入函数指针结构体中套用函数指针宏定义中 纯替换 状态机概念状态机实现后文 C语言面对对象特性引入 众所周知 xff0c C 43 43 是由C语言编写而成 xff0c 因此 xff0c
  • stm32串口中断收发数据环形缓冲区的设计

    Function Name USART2 IRQHandler Description This function handles USART2 global interrupt request Input None Output None
  • 多线程的守护线程和等待线程结束方法

    守护线程的含义是 xff1a 如果当前运行的所有线程都是守护线程 xff0c 则程序直接结束 package thread 64 ClassName Test7 64 Author 瞿肖 64 Date 2022 7 11 14 32 pu
  • 用数学规划的方式求解优化问题

    本文介绍如何用数学语言对实际中的优化问题进行建模 通过建立数学模型 我们利用现成的求解器可以便捷地计算出最优解 或可行解 运输问题 考虑三个粮食储量分别是100 200 300的仓库 单位 吨 下文省略 我们需要把粮食运送给4个客户 其需求
  • 操作系统磁盘管理

    文章目录 01 知识概述部分02 课程知识回顾说明03 磁盘管理知识体系结构04 磁盘管理物理结构05 磁盘管理分区操作问题 xff1a 新添加硬盘无法识别 分区操作1 xff1a fdisk xff08 操作时可看10点的视频 xff09
  • ROS学习——Rviz(更新中)

    固定架 两个框架中最重要的是固定框架 固定框架是用于表示 世界 框架的参考框架 这通常是 地图 或 世界 或类似名称 xff0c 但也可以是例如里程表框架 如果将固定框架错误地设置为例如机器人的底座 xff0c 则机器人曾经见过的所有物体都
  • Boost型Ladrc控制双闭环电路 双闭环控制

    Boost型Ladrc控制双闭环电路 双闭环控制 xff08 1 xff09 电压外环采用简化Ladrc控制器 xff0c 简化线性自抗扰控制 xff0c 采用PD控制 43 三阶LESO状态观测器 xff0c xff08 2 xff09
  • 【STM32】HAL库——串口中断通信(二)

    由于调试过程中发现Proteus 8有些许bug xff0c 串口中断采用STM32F103RCT6开发板进行讲解 前期准备 xff1a STM32CubeMXSTM32F103RCT6开发板IDE Keil xff08 MDK ARM x
  • Detected problems with API compatibility...修复

    Detected problems with API compatibility 修复 一 xff0c Detected problems with API 问题产生 博主接手年代过于老旧项目 xff0c 在最新安卓版本P等都会出现该弹窗提
  • docker 标记(Tag),推送(push),拉取(pull)你自己的镜像

    链接 https blog csdn net jpiverson article details 50731568 里面的有很详细的步骤和见解 1 输入docker images命令来查看当前的镜像列表 2 找到镜像的id 3 使用IMAG
  • ASSERT: "false" in file qasciikey.cpp, line 501

    pycharm利用moba xterm的x server远程开发 xff0c 在用cv2显示图片时报错 xff1a ASSERT 34 false 34 in file qasciikey cpp line 501 代码 xff1a cv2
  • nvidia-smi命令输出结果缓慢

    可能的原因和解决办法 xff1a 当前已经打开了节能模式 xff08 需要关闭节能模式 xff0c 切换到持久模式 xff09 如何关闭节能模式 xff1a span class token comment 修改或创建配置文件 span s
  • ESP8266深度学习之一初识设备

    一 ESP8266是什么 xff1f 总的来说ESP8266是一款单片机 xff0c 而且是一款自带WIFI功能的单片机 它是安信可公司众多单片机中的一种 xff0c 同时它也有很多种型号可以供我们选择使用 二 ESP8266有什么特点 x
  • 什么是RTK?

    国内习惯把GNSS接收机叫成RTK这倒是真的 xff0c 因为RTK技术的普及 xff0c 让大家对接收机的作用就 限定 在了RTK xff0c 在之前没有RTK时 xff0c 接收机就是接收机 目前 xff0c GNSSj接收机约99 的
  • STM32F103VCT6 高级定时器的PWM输出

    要求得到下列波形 xff0c 死区时间1us CH1和CH1之间的相位差事3us 频率50HZ 1 xff0c To get TIM1 counter clock at 72MHz the prescaler is computer as