1、STM32F4系列定时器输出PWM频率计算

第一步,了解定时器的时钟多少:

 

我们知道AHP总线是168Mhz的频率,而APB1和APB2都是挂在AHP总线上的。

(1)高级定时器timer1, timer8以及通用定时器timer9, timer10, timer11的时钟来源是APB2总线
(2)通用定时器timer2~timer5,通用定时器timer12~timer14以及基本定时器timer6,timer7的时钟来源是APB1总线

从STM32F4的内部时钟树可知:

当APB1和APB2分频数为1的时候,TIM1、TIM8~TIM11的时钟为APB2的时钟,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟;

而如果APB1和APB2分频数不为1,那么TIM1、TIM8~TIM11的时钟为APB2的时钟的两倍,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍。

因为系统初始化SystemInit函数里初始化APB1总线时钟为4分频即42M,APB2总线时钟为2分频即84M,所以TIM1、TIM8~TIM11的时钟为APB2时钟的两倍即168M,TIM2~TIM7、TIM12~TIM14的时钟为APB1的时钟的两倍即84M。

知道定时器的时钟源频率我们用定时器做延时就很方便了,只要设定合适的分频系数即可,附一下用中断实现延时的公式:(摘自原子的STM32F4开发指南)
                      Tout = ((arr+1)*(psc+1))/Tclk;
公式中psc就是分频系数,arr就是计数值,达到这个计数就会发生溢出中断,Tclk就是我上述分析的时钟源频率的倒数。

通过上面的公式我们就可以轻松计算出对应的定时器频率:但是这里我们需要将分频系数固定一个合适的值。设置成多大合适了,这里我们就要来分析一下我们控制系统的中步进电机的细分步距角和减速比了。

已经知道我们电机参数如下:步距角 = 1.8°  细分=16  减速比= 2mm

一圈360°需要的脉冲数 = 360/1.8*16 = 3200 pulse

又因为电机转一圈,对应的距离是2mm, 所以 电机带动轮子走1mm = 3200pulse / 2 = 1600pluse

#define  MM_TO_PLUSE  1600//1mm对应的脉冲数

#define PLUSE_TO_MM (1/1600)//一个脉冲对应的距离

#define  DIS_MM_TO_PLUSE(dis)   ( MM_TO_PLUSE * (dis)  ) //将以mm为单位的长度抓换成对应的脉冲数

#define SPEED_TO_PLUSE(speed) ( (speed) *MM_TO_PLUSE  ) //将mm/s的速度转换成HZ

到此为止,电机之间脉冲和距离之间的关系已经搞明白了,那我们开始言归正传,如何计算出我们需要的定时器频率输出了?

假设我们系统需要达到30mm/s的速度而且我们用的是timer2,调用宏计算 30mm/s * 1600 = 48000HZ的频率 = 48KHZ。意思就是说们只要定时器输出的PWM能够满足48KHZ的频率就可以了。

将上面的公式换算成 输出频率 =  定时器的时钟频率(注意是时钟频率不是输出频率)/(分频系数 + 1)/( 计数值+1)

将psc = 0;分频系数为1 ,内部自动加1 ,带入上面的公式就可以计算出计数值 = 1000。就可以输出对应的速度了。

#define TIMER_CLK   (48000000/1) //48Mhz 不分频

#define CALC_ARR(speed)  (TIMER_CLK /(speed)*MM_TO_PLUSE  )

知道速度值就可以调用CALC_ARR宏返回对应的ARR寄存器值啦,我们就可以根据机器的系统参数来控制了。注意,速度不能高于30000ms/s  = 30m/s的速度。因为定时的的最大频率就是48MHZ

上面胡乱计算一遍,不知道是否有误,还请多多指教。明天再花时间整理一下,有点乱。

STM32定时器输出PWM频率和步进电机控制速度计算的更多相关文章

  1. STM32 精确输出PWM脉冲数控制电机(转)

    STM32 精确输出PWM脉冲数控制电机 发脉冲两种目的1)速度控制2)位置控制 速度控制目的和模拟量一样,没有什么需要关注的地方发送脉冲方式为PWM,速率稳定而且资源占用少 stm32位置控制需要获 ...

  2. STM32F103定时器输出PWM波控制直流电机

    这个暑假没有回家,在学校准备九月份的电子设计竞赛.今天想给大家分享一下STM32高级定时器输出PWM波驱动直流电机的问题.. 要想用定时器输出的PWM控制直流电机,,首先要理解“通道”的概念..一个定 ...

  3. stm32定时器输出移相PWM(非主从模式)

    背景:由于项目需要,需要stm32输出任意相角度的PWM 前提知识: 1.stm32定时器的Tim,一般有多个OC.具体差别根据型号来定. 2.定时器的使能,理论上是多个通道同时使能 3.TIM_OC ...

  4. STM32—TIMx输出PWM信号驱动MG996R舵机

    文章目录 一.前言 二.MG996R舵机简介 三.TIM定时器简介 四.通用定时器TIMx 1.TIMx主要功能 2.TIMx框图 3.计数单元 4.时钟选择 5.输出比较PWM 五.TIM3输出双路 ...

  5. 基于STM32F030F4P9和STM32 CUBEMX 输出PWM波形

    STM32F030F4P9定时器功能比较丰富,在此记录项目中使用其自动输出PWM波形(频率:50HZ).CubeMX配置定时器如下图说明. 在此定时器基础时钟为48MHZ,配置中不做分频处理,预分频系 ...

  6. 【转】STM32定时器输出比较模式中的疑惑

    OCx与OCxREF和CCxP之间的关系 初学STM32,我这个地方卡了很久,现在终于有些明白了,现在把我的理解写下与大家共享,如果有不对的地方,还请指出. OCxREF就是一个参考信号,并且约定: ...

  7. STM32中的PWM的频率和占空比的设置

    转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解:   TIM3的ARR寄存器和 ...

  8. 关于STM32 定时器 PWM 实时调节占空比时,预装载特性

    最近在调试项目的时候遇到一个奇怪的现象:在调试状态下,给定时器捕获比较寄存器赋不同值,能产生不同占空比的波形(图1).反映到器件上也有不同的电压显示,但是在设备运行的时候,就不行了(图2). 图1 图 ...

  9. STM32 HAL库学习系列第4篇 定时器TIM----- 开始定时器与PWM输出配置

    基本流程: 1.配置定时器 2.开启定时器 3.动态改变pwm输出,改变值  HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_1); 函数总结: __HAL_TIM ...

随机推荐

  1. mysql 删除某一个数据库下面的所有表,但不删除数据库

    删除某一个数据库下面的所有表,但不删除数据库.该语句经过从concat拼接,最后查询出来的是删除表的语句,然后执行那些查询出来的语句就ok了select concat(‘drop table ‘,ta ...

  2. CSS选择器之伪类选择器(元素)

    :first-child 选择某个元素的第一个子元素(IE6不支持) :last-child 选择某个元素的最后一个子元素 :first-of-type [CSS3]选择一个上级元素下的第一个同类子元 ...

  3. Spring 框架学习—控制反转(IOC)

        Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-st ...

  4. 润乾V4报表批量打印

     背景说明 在应用中,经常遇到,批量打印的需求,批量打印,顾名思义,就是点击一次打印按钮,能打印多张报表. 下面,我们来介绍一下怎么样实现批量打印的 应用举例: Jsp代码 <% //rep ...

  5. 浅谈maven中的scope,systempath

    scope  maven中scope的默认值是compile scope的分类 1)compile 默认是compile.compile表示被依赖项目需要参与当前项目的编译,包括后续的测试,运行周期也 ...

  6. 【Kettle】3、数据源连接配置

    1.各系统版本信息 System:Windows旗舰版 Service Pack1 Kettle版本:6.1.0.1-196 JDK版本:1.8.0_72 2.连接介绍 关于Kettle数据源连接方式 ...

  7. MySQL 5.7 Reference Manual】15.4.2 Change Buffer(变更缓冲)

    15.4.2 Change Buffer(变更缓冲)   The change buffer is a special data structure that caches changes to se ...

  8. linux centos5.8装yum安装mysql

     默认的yum安装mysql都是5.1版本的 想要安装5.7的可以进行配置rpm包进行, mysql5.7安装路径 下面是默认的5.1安装路径 首先我们在使用yum安装的的时候会默认使用最新安装的,最 ...

  9. 也许,这样理解HTTPS更容易

    http://kb.cnblogs.com/page/563885/ 本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样.但是这并不代表HTTPS的真实设计过程.在阅读本文 ...

  10. magento2 重置后台密码

    项目根目录:运行如下命令 bin/magento admin:user:create --admin-user="admin" --admin-password="123 ...