当前位置: 首页 > news >正文

广西住房和城乡建设厅培训中心网站ks免费刷粉网站推广

广西住房和城乡建设厅培训中心网站,ks免费刷粉网站推广,做物流百度网站,做电商网站的设计思路有什么意思一、概述 1、Encoder Interface 编码器接口概念 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度每个高级定时器和通用…

一、概述

1、Encoder Interface 编码器接口概念

  • 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
  • 每个高级定时器和通用定时器都拥有1个编码器接口
  • 两个输入引脚借用了输入捕获的通道1和通道2(只能是通道1)

正交编码器:

其实只测其中一相就能测出速度,两相可以知道编码器正传还是反转。

编码器接口基本结构:

2、工作模式

TI1指的是通道1, TI2指的是通道2。

TI1和TI2均不反相(反相就是电平翻转):

TI或TI2反相:

虽然TI1的波形在图里没有翻转,但是你会发现,TI1上升沿,TI2为低电平,应该为向上计数,而图中是向下计数,所以TI1或TI2反相为反相计数器才会向下计数,可以对着表格测试一下。CNT向上计数表示编码器正转,CNT向下计数表示编码器反转。

二、用旋转编码器进行手动模拟 

完整代码如下:

  • 定时器定时1s

Timer.c:

#include "stm32f10x.h"                  // Device headerextern uint16_t Num;
void Timer_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;NVIC_InitTypeDef NVIC_InitStructure;//1.配置时钟,用那个外设RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//2.内部时钟配置TIM_InternalClockConfig(TIM2);//3.配置时基单元TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式TIM_TimeBaseInitStruct.TIM_Period=10000-1;                 //自动重装载寄存器ARRTIM_TimeBaseInitStruct.TIM_Prescaler=7200-1;               //预分频器TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;            //这个是高级定时器才用的,这里不用,给0TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);TIM_ClearFlag(TIM2,TIM_FLAG_Update);                        //清除中断标志位//4.配置中断输出控制,打开中断TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//5.NVIC配置NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitStructure);//6.启动定时器TIM_Cmd(TIM2,ENABLE);
}

Timer.h:

#ifndef _TIMER_H
#define _TIMER_Hvoid Timer_Init(void);#endif
  • 编码器接口

Encoder.c:

这里没有考虑定时器溢出情况。

#include "stm32f10x.h"                  // Device headervoid Encoder_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;TIM_ICInitTypeDef  TIM_ICInitStruct;GPIO_InitTypeDef GPIO_InitStructure;//1.配置时钟,用那个外设RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPU;   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;GPIO_Init(GPIOA, &GPIO_InitStructure);//2.配置时基单元TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;     //滤波频率TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //计数方式,向上TIM_TimeBaseInitStruct.TIM_Period=65535-1;                 //自动重装载寄存器ARR,让CNT达到最大量程TIM_TimeBaseInitStruct.TIM_Prescaler=1-1;                  //预分频器TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);//3.初始化捕获单元TIM_ICStructInit(&TIM_ICInitStruct);                          //对结构体进行初始化,防止产生其他影响TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;                   //选择输入通道TIM_ICInitStruct.TIM_ICFilter=0xF;                            //滤波//TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;      //选择极性,上升沿TIM_ICInit(TIM3,&TIM_ICInitStruct);TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;                   //选择输入通道TIM_ICInitStruct.TIM_ICFilter=0xF;                            //滤波//TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;      /选择极性,上升沿,表示电平不反相TIM_ICInit(TIM3,&TIM_ICInitStruct);//4.配置编码器接口TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12, TIM_ICPolarity_Falling,TIM_ICPolarity_Rising);//5.启动定时器TIM_Cmd(TIM3,ENABLE);}int16_t Encoder_Get(void)
{int16_t Temp;Temp=TIM_GetCounter(TIM3);TIM_SetCounter(TIM3,0);return Temp;   }

Encoder.h:

#ifndef _ENCODER_H
#define _ENCODER_Hint16_t Encoder_Get(void);void Encoder_Init(void);#endif

main.c:

#include  "stm32f10x.h"                  // Device header
#include  "OLED.h"
#include  "delay.h"
#include  "Timer.h"
#include  "Encoder.h"int16_t speed;int main(void)
{OLED_Init();Timer_Init();Encoder_Init();OLED_ShowString(1,1,"CNT:");while(1) {OLED_ShowSignedNum(1,5,speed,5);Delay_ms(1000);}}void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET){speed=Encoder_Get();TIM_ClearITPendingBit(TIM2,TIM_IT_Update);  //更新中断就是产生一个中断标志位}}

http://www.yidumall.com/news/43842.html

相关文章:

  • 固阳网站建设站长工具seo综合查询问题
  • 动态网站做优化成都新站软件快速排名
  • 用tornado做网站站长之家工具查询
  • 优书网推书附子seo教程
  • 济南网站建设培训班青岛官网seo公司
  • 做网站seo的公司哪家好谷歌seo外包公司哪家好
  • 网站建设与设计毕业论文智能建站模板
  • 阿里网站注册百度推广营销怎么做
  • 复兴区建设局网站有创意的网络广告案例
  • 手机版网站建设合同阿里指数在线查询
  • 做电影资讯网站算侵权吗软文推广哪个平台好
  • 中国新闻网上海新闻关键词排名优化公司地址
  • 6网站建设做网站360广告推广平台
  • 网站注册怎么做屏蔽过滤30条新闻摘抄
  • 怎么查一个网站的外链和反链软件黑马培训价目表
  • 个人网站建立 学生长沙seo外包
  • 杭州网站案列公众号免费推广平台
  • 网站界面美观度网络营销论文题目
  • 连云港建设网站2345电脑版网址导航
  • 金山建设机械网站seo是什么职业
  • 利用ps怎么做网站首页新闻联播今日新闻
  • 北京网站建设 专业10年女装标题优化关键词
  • 成都网站建设市场seo手机排名软件
  • 网站修改 iis6应用程序池百度云app下载安装
  • 宿迁网站推广公司厦门seo排名收费
  • 遵化网站开发百度seo查询收录查询
  • 怎么做阿里巴巴官网站百度宣传推广
  • 网站空间是虚拟机吗seo搜索优化待遇
  • 上海科技网站设计建设站长工具天美传媒
  • 深圳b2c电子商务网站网络推广用什么软件好