TIM1,TIM8可以产生死区互补PWM波,学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考。Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2—5是通用定时器。从名字就可以看得出来主要功能上的差异。今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的。
      先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。
所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。
1、TIM生成PWM初始化设置
首先确定引脚,TIM1可以 无映射、部分映射、完全映射,对应引脚不同,这里使用部分重映射,使用TIM1的通道GH1、CH2产生PWM波,CH1N、CH2N产生互补的PWM波,即PA8和PA7为一对,PA9和PB0为一对。
//1、初始化结构体
//使用到GPIO、TIM基本配置、比较输出、死区配置;
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
//2、使能时钟,GPIO,TIM1,复用功能,
//时钟使能,管脚Rmap
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB | RCC_APB2Periph_TIM1 | RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
TIM_DeInit(TIM1);
TIM_InternalClockConfig(TIM1);
//   3、配置引脚,PE8和PE9

GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_7;
     GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
     GPIO_Init(GPIOA,&GPIO_InitStructure2);

GPIO_InitStructure2.GPIO_Pin=GPIO_Pin_0;
     GPIO_InitStructure2.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_InitStructure2.GPIO_Mode=GPIO_Mode_AF_PP;
     GPIO_Init(GPIOB,&GPIO_InitStructure2);

//4、 TIM基础设置;
//设置计数频率为72M/36;即每秒中计数值计数2M;
//Period设置为99,即计数够100清零,对应PWM频率为2M/100=20Khz;
TIM_TimeBaseStructure.TIM_Period=100-1; //周期为计数100次,计数频率为72M/36;
TIM_TimeBaseStructure.TIM_Prescaler=36-1; //设置频率为72M/36;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //不分频,时钟72M
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
//5、设置输出比较
//Pulse为跳变计数值,当计数值到达20时,PWM由高电平跳变到低电平,设置Pulse/Period即设置了占空比;在主程序中可以调用TIM_SetCompare1(TIM1,psc);动态设置Pulse的值;
//定时器比较输出配置
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_Pulse=20; //占空比
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
//高级定时器才有的互补输出配置
TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High; //互补端输出极性
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset; //死区后输出状态
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);

TIM_OC2Init(TIM1,&TIM_OCInitStructure);

/*6、设置死区
本项目要驱动IR2101晶闸管,死区时间设置为500ns,此处TIM_DeadTime =36;
死区时间设置要设置UTG[7:0]位;
图中T_DTS为系统时钟周期:T_DTS=1/(时钟频率)=1/72M=13.89ns;[7:5]=0XX;
当TIM_DeadTime 写入范围为[0,127]时,死区时间=[7:0] X T_DTS=[0,1764ns]
当TIM_DeadTime 写入范围为[128,191]时,[7:5]=10X;
死区时间=(64+[5:0]) x 2 x 13.89=(64+0)~(64+63)x2x13.89=[1777.9,3528.88]
当TIM_DeadTime 写入范围为[192,223]时,[7:5]=110;
死区时间=(32+[4:0]) X 8 X 13.89=(32+0)~(32+31) X 8X13.89=[3555.84,7000.56 ]
TIM_DeadTime 写入范围为[224,255]时,[7:5]=111;
死区时间=(32+[4:0])X 16 X13.89=(32+0)~(32+31) X 16X 13.89=[7111.68,140001.12]*/
//高级定时器死区配置
TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;
TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;
TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
TIM_BDTRInitStructure.TIM_DeadTime = 36; //死区时间
TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable; //刹车功能使能
TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High; //刹车输入极性
TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);
7、 开启CCR和ARR,使能TIM1,
//ccr1自动重装载
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);

TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_Cmd(TIM1,ENABLE);
//高级定时器才有的主输出使能,不开启不能用;
TIM_CtrlPWMOutputs(TIM1, ENABLE);

STM32F103输出多路死区互补PWM波相关推荐

  1. MSP432库函数输出多路任意占空比PWM波

    一.在电赛开始的前一天中午,突然得知2021电赛电赛推迟至8月11号至14号,现在晚上又通知变成了择期,比赛时间遥遥无期 既然如此那就再继续拼搏吧,顺便也分享一下备赛以来对msp432的学习 二.前情 ...

  2. STM32F103输出互补PWM波

    STM32F103单片机定时器自带互补PWM波形输出功能,利用定时器输出比较模式,不仅可以输出互补的 PWM波,还可以设置输出方波的起始相位和死区时间. 下面就总结一下如何实现PWM互补输出. voi ...

  3. STM32F103单片机输出相位可调PWM波

    STM32定时器功能如下 通常使用的是PWM模式,可以通过PWM功能可以生成频率和占空比可调的方波信号,有时候需要生成初始相位可调的方波,PWM功能就就不能满足要求了.可以通过输出比较模式来实现. 输 ...

  4. STM32通用定时器输出带死区互补PWM/任意移相PWM

    项目上遇到了多个通道的带死区的互补功能,单纯靠H7的TIM1/TIM8/TIM15/TIM16/TIM17几个硬件自带的死区互补还不够,本文就使用通用定时器TIM2/TIM3/TIM4/TIM5来实现 ...

  5. STM32F103单片机生成16路PWM波

    单片机输出pwm波在项目中是恨常用的一个功能,今天就总结一下用STM32F103C8T6单片机输出16路 pwm波. 使用keil5软件,用标准库函数来实现. 首先看定时器初始化 void TIM1_ ...

  6. 利用stm32高级定时器的重复计数实现输出精确个数的pwm波

    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; 利用该配置完成输出精确数量的PWM波形,但是该值取值范围是[0, 255], 如果需要大于该数值的pw ...

  7. c语言定时器1khz占空比,STM32高级定时器TIM1产生两路互补的PWM波(带死区)

    测试环境:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本文使用TIM1的通道1,通道2,产生两路1kh ...

  8. stm32关于带死区时间的互补PWM输出

    1.互补PWM输出简介 在使用stm32输出PWM波形时,笔者所用的stm32f103zet6中的高级定时器TIM1和TIM8可以输出互补的PWM波形,使用互补的PWM波常见与一些半桥电路和全桥电路控 ...

  9. STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐

    1.首先我们要了解定时器(timer) timer分为三种:高级定时器(tim1,tim8),基本定时器(tim6,tim7),通用定时器(tim2,tim3,tim4,tim5). 基本定时器:它有 ...

最新文章

  1. oracle cusor游标,ORACLE CURSOR 游标详解
  2. UISegmentedControl (待续)
  3. 每日一皮:总觉得这个咖啡杯有点奇怪...
  4. 【caffe】使用自己的图像数据训练lenet并用opencv进行预测
  5. ubuntu文件、目录操作基本命令
  6. 15 张图,了解一下 TCP/IP 必知也必会的 10个要点
  7. Numpy Data type
  8. oracle数据库导出和oracle导入数据的二种方法(oracle导入导出数据)
  9. python列表知识点_列表知识点整理
  10. 计算机哪个是易失性存储器,易失性的存储器是什么?
  11. mysql 同义词_数据库中的同义词synonym
  12. eplan连接定义点不显示_EPLAN电气图实例-控制回路(电机回路6)
  13. windows ESP分区丢失处理方案与磁盘分区注意事项
  14. java学习笔记(二):Spring-security的Remember-me配置,以及配置Session管理器防止Session fixation
  15. 劳动仲裁解除劳动关系要多长时间
  16. 使用EndNote在Word中插入参考文献的格式设置
  17. 虚拟化应用交付解决方案【ANS SOLUTIONS】
  18. 人间第一赋《破窑赋》《命运赋》《时运赋》
  19. 学习Nginx看这篇就够了
  20. 详解ENet | CPU可以实时的道路分割网络

热门文章

  1. 【Blender】乐高生成器——材质节点与几何节点制作的笔记分享
  2. 为什么编译原理被称为龙书?
  3. 谷歌人工智能算法RankBrain运行原理解析
  4. 流媒体服务器(16)—— 一文搞明白直播和点播的区别
  5. Vim 离合器,面向脚踏板编程
  6. python3自动化测试书籍推荐_免费送书 | 《Selenium 3+Python 3自动化测试项目实战:从菜鸟到高手》...
  7. 人脸识别之人脸检测(十一)--JDA算法
  8. Java的JSR规范
  9. vue框架根据antd封装的走马灯组件
  10. 工程伦理第一章习题答案