历史上的今天

今天是:2024年09月16日(星期一)

2018年09月16日 | STM32F103之实验2控制1个电机并采用编码器读取电机转速

发布者:EnchantedMelody 来源: eefocus关键字:STM32F103  电机  编码器  电机转速 手机看文章 扫描二维码
随时随地手机看文章

在实验1的电机驱动基础上,这里补充编码器测速的程序部分

#include "encoder.h"
#include "led.h"
///TIM4 编码器输入,TIM4_CH1作A相,TIM4_CH2作B相GPIO_Pin_6|GPIO_Pin_7;

TIM_ICInitTypeDef  TIM_ICInitStructure;
void TIM4_Encoder_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef  GPIO_InitStructure;
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 NVIC_InitTypeDef NVIC_InitStructure;
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);// 使能定时器时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //io口使能使用到的捕获编码器AB相借,
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入  
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  

 GPIO_Init(GPIOB, &GPIO_InitStructure);  
 //推挽输出 ,IO口速度为50MHz
 //初始化TIM4的时机单元
    TIM_TimeBaseStructure.TIM_Period = 899; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 80K
TIM_TimeBaseStructure.TIM_Prescaler =0; //设置用来作为TIMx时钟频率除数的预分频值  不分频
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
 //配置对应寄存器为编码器接口模式以及配置相关的输入捕获配置
  //THE MODE OF ENCODER 
     TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);  
//TIM_ICPolarity_Rising上升沿捕获 
     TIM_ICInitStructure.TIM_Channel = TIM_Channel_1; //CC1S=01 选择输入端 IC1映射到TI1上
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //上升沿捕获
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; //映射到TI1上
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; //配置输入分频,不分频 
  TIM_ICInitStructure.TIM_ICFilter = 0x01;//IC1F=0000 配置输入滤波器 不滤波
  TIM_ICInit(TIM4, &TIM_ICInitStructure);
// Enable the TIM4 Update Interrupt
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

 
   TIM_ClearFlag(TIM4, TIM_FLAG_Update);
   TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);   
   TIM_SetCounter(TIM4,0);
   TIM_Cmd(TIM4, ENABLE);  //使能TIM4 
  }
u8  TIM4CH1_CAPTURE_STA=0; //输入捕获状态    
u16 TIM4CH1_CAPTURE_VAL; //输入捕获值
 //定时器4中断服务程序  
void TIM4_IRQHandler(void)

  if((TIM4CH1_CAPTURE_STA&0X80)==0)//还未成功捕获
{  
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)

{    
if(TIM4CH1_CAPTURE_STA&0X40)//已经捕获到高电平
{
if((TIM4CH1_CAPTURE_STA&0X3F)==0X3F)//高电平太长了
{
TIM4CH1_CAPTURE_STA|=0X80;//标记成功捕获了一次
TIM4CH1_CAPTURE_VAL=0XFFFF;
}else TIM4CH1_CAPTURE_STA++;
}  
}

    TIM_ClearITPendingBit(TIM4, TIM_IT_Update); //清除中断标志位
 }
}
float HF_Get_Encode_TIM4(void)
{
    float cnt;
    cnt  = (float)((uint16_t)0x7fff) - (float)((uint16_t)(TIM4->CNT)) ;
    TIM4->CNT = 0x7fff;
    return cnt;

}

主函数如下:

#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
#include "usart.h"
#include "encoder.h"


 int main(void)
 {
  int cnt;
      delay_init();     //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
myusart_init(9600); //串口初始化为9600  
    LED_Init();//初始化与LED连接的硬件接口 
TIM1_PWM_Init(899,0);//不分频。PWM频率=72000/(899+1)=80Khz . 电机的频率不得小于10K
TIM4_Encoder_Init(9999,72-1);//1s
// HF_Encoder_Init(TIM4,0);
    while(1)
{
   
TIM_SetCompare1(TIM1,600);
   GPIO_ResetBits(GPIOD,GPIO_Pin_2); 
     delay_ms(100);
 GPIO_SetBits(GPIOD,GPIO_Pin_2); 
 delay_ms(100);

     cnt=(int)TIM_GetCounter(TIM4); 
 
printf("Position = %d\n\r", cnt);
   
 printf("陈xx最漂亮\r\n");  
  }
}  


关键字:STM32F103  电机  编码器  电机转速 引用地址:STM32F103之实验2控制1个电机并采用编码器读取电机转速

上一篇:关于STM32的编码器计数及溢出处理调试总结
下一篇:stm32f2xx与stm32f10x在正交编码器应用定时器初始化中的区别

推荐阅读

提到马斯克,大家首先想到的一般是特斯拉,但马斯克旗下还有一个更大胆更又创意的公司——Space X。很早之前SpaceX就提到载游客去太空旅行的目标。而这这一目标或将在今年成为现实。对于SpaceX来说,他们即将开启载人航天发射业务,现在官方宣布签下全球首位绕月飞行私人乘客。消息一出引来全球网友的关注,毕竟这个项目太疯狂了。SpaceX在官方推特上表示...
(文章来源:DIGIMES) 工业机器人从应用领域分布来看,汽车与制造为目前两大主要应用领域,市占比例分别约3成,而其主要使用场景则以搬运、与上下料为主。不过,除了源自于缺工效应下自动化需求比例提高,工业机器人在、感测技术的加值下带来新的能力延伸其功能性,有别于以往操作规则性的任务。 当前具有认知学习能力与自主调适能力的智能机器人能够...
半导体基础元器件领域的高产能生产专家Nexperia推出四款全新的TrEOS ESD保护器件,这些器件通过了AEC-Q101认证,适用于车规级应用,并且可承受高达175°C的高温。同时,与所有TrEOS器件一样,这些新的车用器件具有很低的电容,可确保高信号完整性,并具有很低的钳位电压和高稳健性,适用于新的车载接口。具体的车载应用包括采用USB 3.2、HDMI、LVDS、SerD...
MOTIF ANC将于2021年9月15日全球同步上市,中国大陆区域仅在限定渠道限量发售。限量发售渠道为Marshall天猫影音旗舰店、Marshall京东影音自营旗舰店及连卡佛、LOL、K11、声音小镇线下门店。MINOR III将于2021年9月15日起全渠道正式开售。具体销售渠道,请参看微信公众号Marshall Headphones。MARSHALL正式推出真无线耳机系列的两款最新产品—— Motif...

史海拾趣

问答坊 | AI 解惑

2005网络世界大会-构建自适应网络,推动以太网发展

IT架构从最开始出现,到现在已经渗透到各个企业、各个机构信息化的处理过程当中,实际上走过了几个阶段。我简单的把IT系统承载的价值链,在时间层面做一个简单的总结。如果把以太网的速率映射上,也会发现很有意思,最开始以太网第一个发展阶段过程 ...…

查看全部问答∨

国外的3D打印机,我们能做吗?

国外开源项目-3D打印机,算是一比较新奇的东西了。我们能做吗? …

查看全部问答∨

ddraw 缩放的问题

   我在程序中创建了一个主表面,因为不能为独占模式,所以采用用覆盖页面over lay的方式来显示图片。因此创建了带一个缓冲的覆盖页面。基本想法是把yuyv格式的图片copy到其中一个覆盖页面,然后再blt到另一个覆盖页面,最后显示出来,实 ...…

查看全部问答∨

找ARM汇编器ADS下载!

有 哪位高人能 告诉 我 哪里有 ADS软件 下载?…

查看全部问答∨

wince5中有没有类似超级终端的组件?

如题:wince5中有没有类似超级终端的组件?…

查看全部问答∨

字体变大了显示不完全

我用程序将编辑框的字体变大了,可是框的光标没有变大。举个例子,我在编辑框框中输入8,框内只能显示8的上半部分,下半部分显示不出来,而且即使把框拉大后数字还是无法显示完全,这是为什么啊??…

查看全部问答∨

TCL 的DVD研发部怎么样?

TCL 的DVD研发部TCL 怎么样? 有谁做过? 指点一下。谢谢!! …

查看全部问答∨

DIY Gloldensea_FPGA

最近自己查资料,参考强手的一些好方案,设计了一个Cylone2的FPGA板子,后续我整理完,将把资料上传,我怎么没找到怎么上传呢? [ 本帖最后由 鑫海宝贝 于 2010-11-24 09:31 编辑 ]…

查看全部问答∨

S3C6410 存储器映射存储器映射(1)

S3C6410芯片揭密之四 S3C6410 存储器映射存储器映射                              &nb ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved