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

房山 网站建设怎么提高百度搜索排名

房山 网站建设,怎么提高百度搜索排名,不用源码做网站,北京最新新闻报道编码器简介: 例子讲解:正交编码器有两个输出,一个A相,一个B相,AB接口输出正交信号。然后接入STM32的定时器的编码器接口,编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,比如初始…

 

编码器简介:

 

例子讲解:正交编码器有两个输出,一个A相,一个B相,AB接口输出正交信号。然后接入STM32的定时器的编码器接口,编码器接口自动控制定时器时基单元中的CNT计数器进行自增或自减,比如初始化之后,CNT初始值为0,然后编码器右转,CNT就++,右转产生一个脉冲,CNT就加一次,比如右转产生10个脉冲(上升沿或者下降沿)之后,停下来,那么这个过程CNT就由0自增到10,停下来,编码器右=左转,CNT--,左转产生一个脉冲,CNT减一次,比如编码器再左转产生5个脉冲,那就在原来10的基础上自减5,停下来。
这个编码器接口,其实就相当于是一个带有方向控制的外部时钟,它同时控制这CNT的计数时钟和计数方向,这样的话,CNT的值就表示了编码器的位置,如果我们每隔一段时间取一次CNT的值,再把CNT清零,是不是每次取出来的值就表示了,编码器的速度,由上一篇笔记中的测频法和测周法的知识,这个编码器就是测频法测正交脉冲的频率,CNT计次然后每隔一段时间去一次计数值,只不过这个编码器接口更加高级,它能根据旋转方向,不仅可以自增计次,还可以自减计次,是一个带方向的测速
编码器接口资源比较紧张,如果一个定时器被配置成编码器接口模式,那它基本上就干不了其他的活了(如STM32F103C8T6只有4个定时器,所以最多只能接4个编码器),如果编码器不够用的话就要考虑一下资源够不够用,也可通过使用EXTI外部中断这就是用软件资源弥补硬件资源
每个定时器的CH3和CH4不能接编码器
 

正交编码器:

 

用正交信号的好处:

a、正交信号精度更高,因为A、B相都可以计次,相当关于计次频率提高了一倍

b、其次正交信号可以以抗噪声,因为正交信号两个信号必须是交替跳变的,可以设计一个抗噪声电路,如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,这时计次值是不会变化的

编码器接口的设计逻辑:

首先把A相和B相的所有边缘,作为计数器的计数时钟,出现边缘信号时就计数自增或自减,增还是减由另一相的高低电平决定。

 

编码器接口有使用CH1和CH2的输入捕获滤波器和边沿检测(高低电平是否反转,也就是TI,T2是否反相),编码器接口没有使用后面的是否交叉、预分频器、CCR寄存器与编码器接口无关

编码器接口的输出部分:相当于从模式控制器,去控制CNT的计数时钟和计数方向

注:在这里,我们并不会使用72M内部时钟和在时基单元初始化设置的计数方向,因为此时计数时钟和计数方向都处于编码器接口托管的状态,计数器的自增和自减手编码器控制

编码器接口基本结构示意图

 

 整体工作模式:

 

注:1、正转的状态都向上计数,反转的状态都向下计数

        2、一般选择第三个模式(在TI1和TI2上计数),精度高

 

实例讲解以及正交信号抗噪声原理:

TI1和TI2都不反向

 

TI1反相,TI2不反相(相当于把T1的信号取反再依据表格里的规则进行计数)

 若发现正转自减、反转自增,则应该把某个极性反相,就能反转计数方向,或者TI1\TI2调换

 

编码器接口测速实验


1、功能:每隔一段时间去计数值,就能得到编码器旋转的速度
        向右旋转:计数为正,想左旋转,计数为负,大小均为速度

        现在:通过定时器的编码器接口,自动计次(节约软件资源)

        之前:触发外部中断,在中断函数中自动计次

原理图:

 

步骤:

第一步:RCC开启时钟,开启GPIO和定时器的时钟

第二步:配置GPIO,PA6和PA7配置成输入模式

第三步:配置时基单元,预分频器选择不分频,自动重装,一般给最大65535,只需要给CNT执行计数即可

第四步:配置输入捕获单元(只有滤波器和极性两个参数)

第五步:配置编码器接口模式(调用库函数)

最后,调用TIM_Cmd开启定时器

电路初始化后,CNT会随着编码器旋转而自增自减
若想测量编码器的位置:直接读出CNT即可
测量编码器的速度和方向:需要每隔一段固定的闸门时间,取出一次CNT,然后再把CNT清零,这是测频法测量速度,需要用到定时器功能。


 

 

4、代码:

Encoder.c

#include "stm32f10x.h"                  // Device headervoid Encoder_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 65536 - 1;		//ARRTIM_TimeBaseInitStructure.TIM_Prescaler = 1 - 1;		//PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStructure);TIM_ICInitTypeDef TIM_ICInitStructure;TIM_ICStructInit(&TIM_ICInitStructure);  //设置默认值TIM_ICInitStructure.TIM_Channel = TIM_Channel_1;//TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //这里的上升沿不代表上升沿有效,仅仅代表高低电平极性不反转。TIM_ICInitStructure.TIM_ICFilter = 0xF;TIM_ICInit(TIM3, &TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; //这里的上升沿不代表上升沿有效,仅仅代表高低电平极性不反转。TIM_ICInitStructure.TIM_ICFilter = 0xF;TIM_ICInit(TIM3, &TIM_ICInitStructure);//编码器接口配置TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);//TIM_EncoderMode_TI12:根据TI1FP1和TI2FP2边的计数//TIM_ICPolarity_Rising:这里的上升沿不代表上升沿有效,仅仅代表高低电平极性不反转。Rising:极性不反转TIM_Cmd(TIM3, ENABLE);
}int16_t Encoder_Get(void)
{int16_t Temp;Temp = TIM_GetCounter(TIM3);  //读取计次值TIM_SetCounter(TIM3, 0);   //清零计次值return Temp;
}

 Timer.c(1秒触发一次中断)

#include "stm32f10x.h"                  // Device headervoid Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1;TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1;TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);TIM_ClearFlag(TIM2, TIM_FLAG_Update);TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitStructure;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);TIM_Cmd(TIM2, ENABLE);
}/*
void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}
*/

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Timer.h"
#include "Encoder.h"int16_t Speed;int main(void)
{OLED_Init();Timer_Init();Encoder_Init();OLED_ShowString(1, 1, "Speed:");while (1){OLED_ShowSignedNum(1, 7, Speed, 5);}
}void TIM2_IRQHandler(void)
{if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET){Speed = Encoder_Get();TIM_ClearITPendingBit(TIM2, TIM_IT_Update);}
}

http://www.ds6.com.cn/news/2594.html

相关文章:

  • 烟台网站建设联系电话上海外贸seo
  • discuz网站模板营销渠道模式有哪些
  • 网站空间后台做谷歌推广比较好的公司
  • 团风做网站谷歌浏览器下载视频
  • 代申请可信网站seo优化搜索结果
  • 《网页设计与网站建设》A卷答案友情链接seo
  • app软件开发企业seo优化技术是什么
  • 河南省建设工程造价协会网站seo关键词优化推广价格
  • 公司常用网站开发软件淘宝推广怎么做
  • 如何修改网站标题什么是网站推广策略
  • ps ui做响应式网站要求138ip查询网域名解析
  • 怎么给网站做开场动画搜索引擎优化主要包括
  • 如何用rp做网站网上推广产品哪个网好
  • 网站模板怎么做搜索数据
  • 淄博网站建设 优易科技seo网站优化培训
  • 网站开发详情aso优化方法
  • 网站后台照片限制200k怎么修改重庆镇海seo整站优化价格
  • 邢台如何做企业网站广告优化师适合女生吗
  • 怎么做点击图片进入网站百度关键词查询排名
  • 新泰网站建设新闻稿
  • 三站合一网站建设百度一下你就知道了
  • 怎么做网站收款二维码视频推广
  • 客服网站制作seo建站优化推广
  • 龙山建设工程有限公司网站十大搜索引擎排名
  • 用手机怎么做网站百度推广一个月费用
  • 合肥房产网站建设站长统计app
  • 门户网站建设方案是什么意思云计算培训
  • web前端开发岗位要求苏州百度快速排名优化
  • jsp 网站开发广州百度推广排名优化
  • 网站常规后台公司seo排名优化