网站对联图片,活动推广,物联网技术应用是学什么的,外国ps素材网站编码器是什么#xff1f;
编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器#xff0c;我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分#xff0c;可以分为增量式编码器和绝对式编码器。
从编码器检测原理上来分#xff0…编码器是什么
编码器是一种将角位移或者角速度转换成一连串电数字脉冲的旋转式传感 器我们可以通过编码器测量到底位移或者速度信息。编码器从输出数据类型上 分可以分为增量式编码器和绝对式编码器。
从编码器检测原理上来分还可以分为光学式、磁式、感应式、电容式。常 见的是光电编码器光学式和霍尔编码器磁式。 正交编码器简单理解就是产生上图波形的信号其波形频率和转的速度有关方向与相位差有关
编码器接口 这张是通用定时器的结构图 编码器接口位置如图
连接着CH1和CH2编码器接口控制着CNT的增减原先的时钟CK_PSC和计数方向都被编码器接口托管 编码器接口结构简图 小技巧因为如果方向是减的话CNT值为0减1会变成65535如果用补码表示65535就是-1
工作模式 下图展现了为什么正交编码器可以抗噪声 TI1反向相当于在TI1一路的信号翻转了通过极性选择 其实编码器接口就基本相当于一个带有方向选择的外部时钟
代码
使用TIM3的CH1和CH2 #include stm32f10x.h
void Encoder_Init(void)
{TIM_TimeBaseInitTypeDef TIM_TimerBaseInitStructure;TIM_ICInitTypeDef TIM_ICInitStructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_ICStructInit(TIM_ICInitStructure);//防止有不确定值先给它一个初始值配置输入捕获的结构体RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);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_InternalClockConfig(TIM3);//内部时钟不需要TIM_TimerBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1;//TIM_TimerBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up;//计数器模式没有用因为增减由编码器接口控制了TIM_TimerBaseInitStructure.TIM_Period 65536 - 1;//(0~65535)//满量程计数TIM_TimerBaseInitStructure.TIM_Prescaler 1 - 1;//(0~65535)//不分频TIM_TimerBaseInitStructure.TIM_RepetitionCounter 0;//重复计数器只要高级定时器有TIM_TimeBaseInit(TIM3,TIM_TimerBaseInitStructure);//初始化TIM3时基单元TIM_ICInitStructure.TIM_Channel TIM_Channel_1;TIM_ICInitStructure.TIM_ICFilter 0xF;//滤波器配置TIM_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Rising;//在极性选择里这个是不反向的意思,这里配置也可以在编码器接口配置函数配置也可以//TIM_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV1;//优先级用不到//TIM_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI;//优先级用不到TIM_ICInit(TIM3,TIM_ICInitStructure);TIM_ICInitStructure.TIM_Channel TIM_Channel_2;TIM_ICInitStructure.TIM_ICFilter 0xF;TIM_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Rising;TIM_ICInit(TIM3,TIM_ICInitStructure);//配置TIM3的编码器接口工作模式为TI1和TI2都计数通道1,2都不反向TIM_EncoderInterfaceConfig(TIM3,TIM_EncoderMode_TI12,TIM_ICPolarity_Rising,TIM_ICPolarity_Rising);TIM_Cmd(TIM3,ENABLE);
}
uint16_t Encoder_Get(void)//这个函数可以用定时器中断来定时读取值来实现测速的目的
{int16_t Temp;Temp (int16_t)TIM_GetCounter(TIM3);//将获取到的CNT进行类型转换为有符号数TIM_SetCounter(TIM3,0);//CNT清零return Temp;
}