stm32编码器模式.doc_第1页
stm32编码器模式.doc_第2页
stm32编码器模式.doc_第3页
stm32编码器模式.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

我最近有一个项目要利用stm32的编码器模式计数,我很苦恼,我想用原子的寄存器设置模式,库函数的我没有很好的接触,我自己也配置了,可是lcd上始终显示不到数字,这是库函数的程序:void ENC_Init(void) TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_ICInitTypeDef TIM_ICInitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APBPeriph_ENCODER_TIMER, ENABLE); / ENCODER_TIMER时钟初始化 RCC_APB2PeriphClockCmd(RCC_APBPeriph_ENCODER_GPIO, ENABLE); / ENCODER_GPIO时钟初始化 GPIO_StructInit(&GPIO_InitStructure);/TI1 TI2初始化 GPIO_InitStructure.GPIO_Pin = ENCODER_TI1 | ENCODER_TI2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/浮空输入 GPIO_Init(ENCODER_GPIO, &GPIO_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = TIMER_IRQChannel;/设置ENCODER_TIMER的优先级 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = TIMx_PRE_EMPTION_PRIORITY; NVIC_InitStructure.NVIC_IRQChannelSubPriority = TIMx_SUB_PRIORITY; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); /* Timer configuration in Encoder mode */设置ENCODER_TIMER为编码器模式 TIM_DeInit(ENCODER_TIMER); /ENCODER_TIMER复位 TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Prescaler = 0x0; / 无分频 TIM_TimeBaseStructure.TIM_Period = (4*ENCODER_PPR)-1; /计数器重载值 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; /设置时钟分割 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/向上计数模式 TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure); TIM_EncoderInterfaceConfig(ENCODER_TIMER, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);/编码器接口初始化 /TIM_ICPolarity_Rising: TIM输入捕获上升沿 TIM_ICStructInit(&TIM_ICInitStructure); TIM_ICInitStructure.TIM_ICFilter = ICx_FILTER; /TIM_ICFilter选择输入比较滤波器。该参数取值在0x0和0xF之间 TIM_ICInit(ENCODER_TIMER, &TIM_ICInitStructure);/ Clear all pending interrupts TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);/清除TIMx的待处理标志位 TIM_ITConfig(ENCODER_TIMER, TIM_IT_Update, ENABLE); /使能或者失能指定的TIM中断 /Reset counter TIM2-CNT = COUNTER_RESET; TIM_Cmd(ENCODER_TIMER, ENABLE); / 使能或者失能TIMx外设/*/ 计算马达转子相对于初始位置的角度-180至+180/*void ENC_Get_Electrical_Angle(uint16_t *degree)int32_t temp;int16_t tim_count;tim_count=TIM_GetCounter(ENCODER_TIMER); /获取ENCODER_TIMER的值if(tim_count=400)/如果超过180度,角度为负数degree0=-;degree1=(800-tim_count)*180/(4*ENCODER_PPR/2);/整数部分temp = (int32_t)(800-tim_count) * (int32_t)(1000000/(4*ENCODER_PPR/2)*360-degree1*1000000; degree2=(unsigned char)temp;/小数部分else/如果未超过180度,角度为正数degree0=+;degree1=tim_count*180/(4*ENCODER_PPR/2);/整数部分temp = (int32_t)tim_count * (int32_t)(1000000/(4*ENCODER_PPR/2)*180-degree1*1000000; degree2=(unsigned char)temp; /小数部分/*/TIm2_IRQ 计算编码器每秒钟产生的脉冲数/*void Tim2_IRQ(void)unsigned int temp;if(Count0=0)Count0+;/以便下次读取并计算Count2=Count1;Encoder_TIM_Count0=TIM_GetCounter(ENCODER_TIMER);/第一次读取ENCODER_TIMER的值elsetemp=Count1-Count2;/ENCODER_TIMER溢出次数Encoder_TIM_Count1=TIM_GetCounter(ENCODER_TIMER);/第二次读取ENCODER_TIMER的值Count0=0;Count1=0;if(temp=0) /如果ENCODER_TIMER溢出次数为0if(Encoder_TIM_Count1=Encoder_TIM_Count0)Speed1=(Encoder_TIM_Count1-Encoder_TIM_Count0)*8;/每秒的脉冲数等于两次计数器差的绝对值*4elseSpeed1=(Encoder_TIM_Count0-Encoder_TIM_Count1)*8; else/如果ENCODER_TIMER溢出次数不为0if(Speed0=+) /如果ENCODER_TIMER正向溢出if(Encoder_TIM_Count1=Encoder_TIM_Count0)Speed1=(Encoder_TIM_Count1-Encoder_TIM_Count0+(4*ENCODER_PPR)*temp)*8;else Speed1=(800-Encoder_TIM_Count0+Encoder_TIM_Count1+(4*ENCODER_PPR)*(temp-1)*8;else/如果ENCODER_TIMER逆向溢出Speed1=(800-Encoder_TIM_Count1+Encoder_TIM_Count0+(4*ENCODER_PPR)*(temp-1)*8; /*/TIm4_IRQ 获得溢出此数count1和旋转方向speed/*void Tim4_IRQ(void)unsigned int temp;Count1+;/* Clear the interrupt pending flag */TIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);temp

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论