STM32F103 TIM1输出PWM设置
//TIM1 分频
#define TIM1_DIV1 (1-1)
#define TIM1_DIV2 (2-1)
#define TIM1_DIV4 (4-1)
#define TIM1_DIV8 (8-1)
#define TIM1_DIV9 (9-1)
#define TIM1_DIV18 (18-1)
#define TIM1_DIV72 (72-1) #define TIM1PinA_Enb TIM1->CCER |= 0X0001 //比较通道1输出到IO
#define TIM1PinB_Enb TIM1->CCER |= 0X0010 //比较通道2输出到IO
#define TIM1PinC_Enb TIM1->CCER |= 0X0100 //比较通道3输出到IO
#define TIM1PinA_Dis TIM1->CCER &= ~0X0001 //比较通道1禁止输出到IO
#define TIM1PinB_Dis TIM1->CCER &= ~0X0010 //比较通道2禁止输出到IO
#define TIM1PinC_Dis TIM1->CCER &= ~0X0100 //比较通道3禁止输出到IO #define VT_PWM 1000 //PWM 计数最大值 频率8K
//#define VT_PWM 500 //PWM 计数最大值 频率16K //*************************************
// 函数名称:TIM1_PWMMode_Init
// 函数功能:TIM1 作PWM模式初始化 用作比较输出用
// 入口参数:计数个数 分频数
// 出口参数:无
// 返回值 :无
// 此设置适合用作BLDC驱动控制中驱动三对MOS
//***************************************
void TIM1_PWMMode_Init(int16_t Tcon,uint16_t psc)
{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_DeInit(TIM1); //复位定时器 TIM1->ARR = Tcon ; //定时器重装载值
TIM1->PSC = psc ; //时钟预分频系数
TIM1->CR1 &= ~(1<<4) ; //向上计数 TIM1->CR1 |= (1<<7); //使能自动重装载 //清除更新中断 比较1234中断标志
TIM1->SR &= ~0X001F ; // 通道1 2 3 配置为PWM1模式
TIM1->CCMR1 = 0X6868 ; //
TIM1->CCMR2 = 0X0068 ;
// 不使能比较通道1 2 3输出到IO 且1电平为有效电平
TIM1->CCER = 0X0000 ;
//
TIM1->CCR1 = 0 ;
TIM1->CCR2 = 0 ;
TIM1->CCR3 = 0 ;
TIM1->CCR4 = 0 ;
// 关更新中断 比较1-4中断
TIM1->DIER &= ~0X001F ;
// TIM1->DIER |= 0X0002 ; //开比较1 中断 TIM1->BDTR |= (1<<15) ; //主输出使能 !!!
//清除更新事件标记位 并初始化所有寄存器
TIM1->EGR &= ~0X0001 ; TIM1->CR1 |= 0X0001 ; //开启时钟 } //*************************************
// 函数名称:ToPWM_Value
// 函数功能:设置PWM占空比
// 入口参数:计数个数 分频数
// 出口参数:无
// 返回值 :无
//***************************************/
void ToPWM_Value(uint16_t InValue)
{
TIM1->CCR1 = InValue ;
TIM1->CCR2 = InValue ;
TIM1->CCR3 = InValue ;
} //*************************************
// 函数名称:BLDC_RUN_ONESTEP
// 函数功能:电机六步走向
// 入口参数:电机运行的当前步
// 出口参数:无
//***************************************/
void BLDC_RUN_ONESTEP(uint32_t STEP)
{
switch(STEP)
{
case 1 : // AB
TIM1PinB_Dis ;
TIM1PinC_Dis ;
TIM1PinA_Enb ;
UdePinA_Off ;
UdePinC_Off ;
UdePinB_On ;
break ;
case 2 : //AC
TIM1PinB_Dis ;
TIM1PinC_Dis ;
TIM1PinA_Enb ;
UdePinA_Off ;
UdePinB_Off ;
UdePinC_On ;
break ;
case 3 : //BC
TIM1PinA_Dis ;
TIM1PinC_Dis ;
TIM1PinB_Enb ;
UdePinA_Off ;
UdePinB_Off ;
UdePinC_On ;
break ;
case 4 ://BA
TIM1PinA_Dis ;
TIM1PinC_Dis ;
TIM1PinB_Enb ;
UdePinB_Off ;
UdePinC_Off ;
UdePinA_On ;
break ;
case 5 ://CA
TIM1PinA_Dis ;
TIM1PinB_Dis ;
TIM1PinC_Enb ;
UdePinB_Off ;
UdePinC_Off ;
UdePinA_On ;
break ;
case 6 : //CB
TIM1PinA_Dis ;
TIM1PinB_Dis ;
TIM1PinC_Enb ;
UdePinA_Off ;
UdePinC_Off ;
UdePinB_On ; break ;
default : break ;
}
} //----实例应用------
//72M/(9) = 8M pwm周期=(1/8)*1000=125U
TIM1_PWMMode_Init(VT_PWM,TIM1_DIV9) ; //PWM 频率设置初始化 频率F=8K // ToPWM_Value(500) ; //设置三相驱动的PWM占空比 500/1000 = 50%
// TIM1PinA_Enb ; //PWM输出到IO 此时可在IO上看到有PWM信号输出
STM32F103 TIM1输出PWM设置的更多相关文章
- STM32F103定时器输出PWM波控制直流电机
这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...
- STM32定时器输出PWM频率和步进电机控制速度计算
1.STM32F4系列定时器输出PWM频率计算 第一步,了解定时器的时钟多少: 我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的. (1)高级定时器timer1, t ...
- stm32定时器学习二——PWM设置
/* STM32 嵌入式学习入门(5)——PWM的实现 上一篇博文介绍了定时器和PWM的基本的原理,本篇博文从代码层面来介绍PWM的具体实现.同样,还是以博主所用的开发板——正点原子开发板STM32F ...
- STM32—TIMx输出PWM信号驱动MG996R舵机
文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...
- STM32F0xx_TIM输出PWM配置详细过程
前言 前面我说过STM32的定时器功能很强大,今天就来总结一下它的另外一个“强大”功能:TIM的比较输出功能,输出可调PWM波形.直接调用函数接口“TIM2_CH1_PWM(uint32_t Freq ...
- STM32 精确输出PWM脉冲数控制电机(转)
STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...
- STM32F4_TIM输出PWM波形(可调频率、占空比)
Ⅰ.概述 上一篇文章关于STM32基本的计数原理明白之后,该文章是在其基础上进行拓展,讲述关于STM32比较输出的功能,以输出PWM波形为实例来讲述. 提供实例工程中比较实用的函数:只需要调用该函数, ...
- Response输出excel设置文本样式
在网上查了些Response导出excel然后设置样式的方法,发现没有一个可行的于是开始自己研究, 发现可以通过输出样式的方式进行配置,我要设置的是全文本格式在excel样式是这样的mso-numbe ...
- PHP使用echo输出标签设置CSS样式问题
使用php是可以输出HTML标签的,这为页面设计带来很大方便. 在此记录php输出标签设置CSS样式的问题: echo可使用''.""或你不用引号,如果想要输出带CSS样式的HTM ...
随机推荐
- PL/SQL批处理语句(BULK COLLECT子句和FORALL语句)
Oracle为PL/SQL中的SQL相关功能提供了FORALL语句和BULK COLLECT子句,显著的增强了SQL相关功能.这两个语句一起被称作PL/SQL的批处理语句.Oracle为什么要提供这两 ...
- MFC的消息机制
MFC的消息循环(::GetMessage,::PeekMessage)消息泵(CWinThread::PumpMessage)和MFC的消息在窗口之间的路由是两件不同的事情 分两个步骤完成: 1 “ ...
- 循环获取json对象的属性名
今天做项目遇到一个难题,asp.net 项目,数据库中一个表有八十多个字段,我已经在前台将表转化为了json字符数组,我要在前台循环这八十多个字段,我只能根据属性名来处理,一筹莫展,最终解决,收益颇多 ...
- 疯狂Android演讲2 环境配置
笔者:本笃庆军 原文地址:http://blog.csdn.net/qingdujun/article/details/37053681 jdk-6u3-windows-i586-p.exe 下载地 ...
- Memcached 群集高可用性(HA)架构
Memcache本身并不实现集群功能.假设你想使用Memcahce集群需要使用第三方软件或编程来实现自己的设计,这里将被用来memagent实现代理,memagent也被称为magent.我们注意到, ...
- 承载于以太网帧之上的数据包的解析——ARP、IPv4、IPv6
承接上一博文而来,继续解析网络数据包,对于承载在以太网上的三种协议进行了解析,主要是分为依据RFC定义的标准先解析头部数据,然后得到有效载荷,即为协议包括的实体数据,更上层进行进一步处理. 一.ARP ...
- OpenGL--第一个OpenGL程序
环境:VS2012 + OpenGL所需文件(其他IDE也可以,不一定要VS2012,VS2010或其他也可以) 步骤: 1.下载Vs2012 2.下载OpenGL所需文件 3.解压缩OpenGL包并 ...
- 探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB
探索Oracle之数据库升级七 11gR2 to 12c 升级完毕后插入PDB 前言: 从Oracle 12c開始,引入了容器数据库的概念,能够实现数据库插拔操作,例如以下图: 如今我们 ...
- 为什么php时间阅读RTF,p标签会出现红色
为什么php读取富文本的时候,p标签会出现红线,怎么去掉,哪位大侠帮解决?跪求答案 就像以下一样,一遇到p标签就有红虚线 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- uva11426(莫比乌斯反演)
传送门:GCD Extreme (II) 题意:给定n(n<=4000000),求G G=0 for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) ...