基于STM32的正交编码器接口应用含源程序_第1页
基于STM32的正交编码器接口应用含源程序_第2页
基于STM32的正交编码器接口应用含源程序_第3页
基于STM32的正交编码器接口应用含源程序_第4页
基于STM32的正交编码器接口应用含源程序_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、真理惟一可靠的标准就是永远自相符合。土地是以它的肥沃和收获而被估价的;才能也是土地,不过它生产的不是粮食,而是真理。如果只能滋生瞑想和幻想的话,即使再大的才能也只是砂地或盐池,那上面连小草也长不出来的。8 人生的磨难是很多的,所以我们不可对于每一件轻微的伤害都过于敏感。在生活磨难面前,精神上的坚强和无动于衷是我们抵抗罪恶和人生意外的最好武器。基于STM32的正交编码器接口应用本设计应用了 ST公司的最新单片机 STM32完成。STM32应用的是ARM 32位的 Cortex? -M3 CPU,最高72MHz工作频率,单周期乘法和硬件除法,高速的运行速度,可 以保证编码器高转速条件下的高速脉冲依

2、旧能够被准确的计数。多达7个定时器,3个16位定时器,每个定时器有多达 4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码 器输入。因此只要对MC进行配置之后,MC只需要少量的中断程序, 就可以方便的完成对编 码器的方向和角速度的运算。STM3单片机工作在3.3V下。拥有内部8M晶振,可以通过锁相环倍频到 48M (内部晶振由于稳 定度不够,只能倍频到 48M)I畑PAPA1%4.%TDtCWCJNTIXI oscjxi/pni4HBOCTO |KS1'VBATVDD IVDD2VDD23VWAPRPRpci5-osn2_crrvss Ivs吩VSSASTM32H01CST6

3、 C3上HinGND采用标准的JATG喪口进行程序的烧录和调试。GXD采用一块Im1117-3.3V作为芯片的稳压电源。LM1117为一块LDO(低压差线性稳压器),输入最低为 3.3+0.7=4vGXD用一块LCD5110手机屏作为显示设备, 可以显示输出电压以及当前状态。 液晶屏参数为 72*48,点阵式,使用一个驱动库作为支持,方便开发,工作在3.3V电压下,与单片机相适应。耗电极低,小于 1MA,背光耗电为20MA。采用USB接口与编码器连接,线序定义为 V+,A相,B相,GND,正好将USB的所有连线 用完,可以同时完成给编码器提供电力以及返回信号的功能。同时MINIUSB接口良好的

4、物理连接特性也保证了应用的稳定性。由于编码器为NPF集电极输出,所以需要在信号线上提供一定的上拉电阻。所使用的编码器为远征牌,200线(转一圈输入200个脉冲),AB两相,最大转速200rad/s,输入电压可以为5到18V(编码器内部带有稳压芯片)。STM32F10x正交编码器接口详述ST呵I Ox的所有通用定时器 及高级定时器都集成了正交编码器接口。定时器的两个输入 T1和TI2直接与增量式正交编码器接口。当定时器设为正交编码器模式时,这两个信号的边沿作 为计数器的时钟。而正交编码器的第三个输出(机械零位),可连接外部中断 口来触发定时器的计数器复位。2J定时器正交编码器接口框图图2:定时器

5、正交编码器接口2J功能描述选择编码器接口模式的方法是:如果计数器只在TI2的边沿计数,则置TIM1_SMCR寄存器中的SMS=001 ;如果只在TI1边沿计数,则置SMS=010 ; 如果计数器同时在TI1和TI2边沿计数,则置SMS=011 o通过设置TIM1_CCER寄存器中的CC1P和CC2P位,可以选择TI1和TI2极 性;如果需要,还可以对输入滤波器编程。两个输入TI1和TI2被用来作为增量编码器的接口。参看表1,假定计数器已经启动(TIM1_CR1寄存器中的CEN=1),则TI1FP1或TI2FP2上的有效跳变作为 计数器的时钟信号。TI仆P1和TI2FP2是TI1和TI2在通过输

6、入滤波器和极性控制 后的信号;如果没有滤波和变相,则 TI仆P仁TI1,TI2FP2二TI2。根据两个输入 信号的跳变顺序,产生了计数脉冲和方向信号。依据两个输入信号的跳变顺序,计数器向上或向下计数,因此 TIM1_CR1寄存器的DIR位由硬件进行相应的设 置。不管计数器是对TI1计数、对TI2计数或者同时对TI1和TI2计数。在任一输 入(TI1或者TI2)跳变时都会重新计算DIR位。歼应用笔记$TM32FI0xxx正交编码器接口编码器接口模式基本上相当于使用了一个带有方向选择的外部时钟。这意 味着计数器只在0到TIM1_ARR寄存器中自动装载值之间连续计数(根据方向, 或是0到ARR计数,

7、或是ARR到0计数)。所以在开始计数之前必须配置 TIM1_ARR ;同样,捕获器、比较器、预分频器、周期计数器、触发输出特性 等仍工作如常。编码模式和外部时钟模式 2不兼容,因此不能同时操作。在这个模式下,计数器依照增量编码器的速度和方向被自动的修改,因此,它的内容始终指示着编码器的位置。 计数方向与相连的传感器旋转的方向对应。 表1列出了所有可能的可能的组合,假设 TI1和TI2不同时变换。表1:计数方向与编码器信号的关系一个外部的增量编码器直接和 MCU连接不需要外部接口逻辑。但是,一般 使用比较器将编码器的差动输出转换到数字信号,这大大增加了抗噪声干扰能 力。编码器输出的第三个信号表示

8、机械零点,可以连接到一个外部中断输入, 触发一个计数器复位。程序初始化时钟初始化I/O 口初始化 编码器初始化 中断控制器初始化 显示屏初始化 定时器初始化LCD_Display();显示各项数值向下计器严4向上或0向加到 While子二时候TIM4溢出99的 '、”疋时器TIM4每0.25s V.进入一次中断L一一-4进入Tim4_IRQ()获得溢出次数Count1和旋转方向Speed0进入Tim2RQ()计算编码器每秒产生脉冲数/*/编码器库函数/操作环境:MDK*#in clude "encon der.h"/#i nclude "LCD.h&quo

9、t;*/正交编码器接口的初始化*void ENC_I nit(void)TIM_TimeBasel ni tTypeDef TIM_TimeBaseStructure;TIMClni tTypeDef TIMCln itStructure;GPIO_I ni tTypeDef GPIO_I nitStructure;NVIC_I ni tTypeDef NVIC_I ni tStructure;RCC_APB1PeriphClockCmd(RCC_APBPeriph_ENCODER_TIMER, ENABLE);/TIM4 /ENCODER_TIMER寸钟初始化 RCC_APB2PeriphC

10、lockCmd(RCC_APBPeriph_ENCODER_GPIO, ENABLE);/ ENCODER_GPIO 时钟初始化GPIO_StructInit(&GPIO_InitStructure);/TI1 TI2 初始化GPIO_I nitStructure.GPIO_Pi n = ENCODER_TI1 | ENCODER_TI2; PB6,PB7GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/ 浮空输出GPIO_I nit(ENCODER_GPIO, & GPIO_I ni tStructure);NVIC_

11、InitStructure.NVIC_IRQChannel = TIMER_IRQChannel;/TIM4_IRQn/ 设置ENCODER_TIMER勺优先级NVIC_I ni tStructure.NVIC_IRQCha nn elPreemptio nPriority = TIMx_PRE_EMPTION_PRIORITY; NVIC_I ni tStructure.NVIC_IRQCha nn elSubPriority = TIMx_SUB_PRIORITY;NVIC_I ni tStructure.NVIC_IRQCha nn elCmd = ENABLE;NVIC_I nit(&

12、amp;N VIC_I nitStructure);/* Timer configuration in Encoder mode */ 设置 ENCODER_TIMER为编码器模式TIM_DeI ni t(ENCODER_TIMER);ENCODER_TIMER复位TIM_TimeBaseStructI nit (& TIM_TimeBaseStructure);TIM_TimeBaseStructure.TIM_Prescaler = 0x0;/ 无分频TIM_TimeBaseStructure.TIM_Period = (4*ENCODER_PPR)-1; /计数器重载值 4*20

13、0-1 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_Cou nterMode = TIM_Cou nterMode_Up;向上计数模式TIM_TimeBaseInit(ENCODER_TIMER, &TIM_TimeBaseStructure); /TIM4/TIM4TIM_E ncoderl nterfaceCo nfig(ENCODER_TIMER,TIM_EncoderMode_TI12,TIMCPolarity_Rising, TIMCPolarity_Risi

14、ng); / 编码器接口初始化 TIMCStructI nit(& TIMCln itStructure);TIMCln itStructure.TIMCFilter = ICx_FILTER; /6TIMCln it(ENCODER_TIMER, &TIMClni tStructure);/ Clear all pending in terruptsTIM_ClearFlag(ENCODER_TIMER, TIM_FLAG_Update);TIM_ITCo nfig(ENCODER_TIMER, TIMT_Update, ENABLE);/Reset coun terTIM2

15、->CNT = COUNTER_RESET; 0TIM_Cmd(ENCODER_TIMER, ENABLE);*/计算马达转子相对于初始位置的角度-180至+ 180*void ENC_Get_Electrical_A ngle(ui nt16_t *degree)in t32_t temp;in t16_t tim_cou nt;tim_count=TIM_GetCounter(ENCODER_TIMER);/获取 ENCODER_TIMER TIM4 的值if(tim_count>=400)/如果超过180度,角度为负数degree0='-'degree1=(800-tim_count)*180/(4*ENCODER_PPR/ 2);/ 整数部分temp = (in t32_t)(800-tim_cou nt) *(in t32_t)(1OOOOOO/(4*ENCODER_PPR/2)*36O-degree1*1OOOOOO;d

温馨提示

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

评论

0/150

提交评论