编码器速和方向检测电机方向与速检测stm编码器接口模式_第1页
编码器速和方向检测电机方向与速检测stm编码器接口模式_第2页
编码器速和方向检测电机方向与速检测stm编码器接口模式_第3页
编码器速和方向检测电机方向与速检测stm编码器接口模式_第4页
编码器速和方向检测电机方向与速检测stm编码器接口模式_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

1、编码器是什么玩意呢,它可是一个好玩的东西,做小车测速必不可少的玩意,下面,我将从编码器的原理讲起,一直到用stm32的编码器接口模式,测出电机转速与方向。1.编码器码盘示意图.gif (15.77 KB, 下载次数: 36)下载附件  保存到相册 2014-3-5 08:19 上传图1 编码器示意图      图1为编码器的示意图,中间是一个带光栅的码盘,光通过光栅,接收管接收到高电平,没通过,接收到低电平。电机旋转一圈,码盘上有多少光栅,接受管就会接收多少个高电平。371电机中的码盘就是这样的,他是334线码盘,具有较高的测速精度,也就是电机

2、转一圈输出334个脉冲,芯片上已集成了脉冲整形触发电路,输出的是矩形波,直接接单片机IO就OK。             增量式旋转编码器通过内部两个光敏接受管转化其角度码盘的时序和相位关系,得到其角度码盘角度位移量增加(正方向)或减少(负方向)。下图为编码器的原理图:编码器.jpg (2.85 KB, 下载次数: 32)下载附件  保存到相册 2014-3-4 20:16 上传图2 增量式旋转编码器A,B两点对应两个光敏接受管,A,B两点间距为 S2 ,码盘的光栅间距分别为S0和S1

3、。S0+S1的距离是S2的四倍。这样保证了A,B波形相位相差90度。旋转的反向不同,锯齿波A,B先到达高电平的顺序就会不同,如上图左侧所示,顺序的不同,就可以得到旋转的方向。2.stm32编码器接口模式(寄存器)        stm32的编码器接口模式在STM32中文参考手册中有详细的说明,在手册273页,14.3.12节。程序是完全按照 下图方式,设置寄存器的。      请到本文尾下载STM32中文参考手册        stm32编码器.jpg (

4、67.34 KB, 下载次数: 98)下载附件  保存到相册 2014-3-4 20:33 上传图3         从图3中可以看出,TI1波形先于TI2波形90°时,每遇到一个边沿变化是,计数器加1(可以通过寄存器设置加减),可以看出一个光栅,被计数了4次。TI1波形后于TI2波形90°时 ,每遇到一次边沿变化,计数器减1。 1. /TIM2_Encoder_Init,Tim2_CH1(PA0);Tim2_CH2(PA1)2. /arr:自动重装值 0XFFFF3. /psc:时钟预分频数 

5、       ,不分频4. void TIM2_Encoder_Init(u16 arr,u16 psc)5. 6.     RCC->APB1ENR|=1<<0;       /TIM2时钟使能7.         RCC->APB2ENR|=1<<2;       /使能PORTA时钟8.       

6、60; 9.     GPIOA->CRL&=0XFFFFFF00;   /PA0、PA1 清除之前设置10.     GPIOA->CRL|=0X00000044;   /PA0、PA1 浮空输入11.             12.     TIM2->ARR=arr;            /设定

7、计数器自动重装值 13.     TIM2->PSC=psc;            /预分频器14.15.         TIM2->CCMR1 |= 1<<0;          /输入模式,IC1FP1映射到TI1上16.         TIM2->CCMR1 |= 1<&

8、lt;8;          /输入模式,IC2FP2映射到TI2上17.         TIM2->CCER |= 0<<1;                  /IC1不反向18.         TIM2->CCER |= 0<<5;  

9、0;        /IC2不反向19.         TIM2->SMCR |= 3<<0;                  /所用输入均在上升沿或下降沿有效20.         TIM2->CR1 |= 1<<0;    

10、             /使能计数器21. 复制代码3 硬件用到的模块有STM32核心板、L298电机驱动、371带编码器电机(1:34)。这里主要介绍一下电机,1:34指的是电机轴转动34圈,电机输出1圈。1:X,X值越小,电机的输出转速也就越快,扭矩也就越小;反之,X值越大,电机的输出转速越慢,扭矩也越大。电机实物图.jpg (53.17 KB, 下载次数: 32)下载附件  保存到相册 2014-3-5 09:27 上传图4 电机实物图左边两根黄线是电机两极。绿线和白线是脉冲输出线,分别

11、接编码器的接收管A、B,用一根可以测得速度,两根同时用可测出电机速度与转向。红线和黑线是编码器电源接线,红正黑负,电压3.3V-5V,不不可接反。4 控制代码工作指示灯、电机方向与速度控制代码。1. /LED IO 初始化 端口PD.2  运行指示灯2. void LED_Init(void)3.                     4.         RCC->A

12、PB2ENR|=1<<5;      /使能PORTD时钟         5.         GPIOD->CRL&=0XFFFFF0FF;6.         GPIOD->CRL|=0X00000300;  /PD.2推挽输出7.         GPIOD-

13、>ODR|=1<<2;        /PD.2输出高 8. 9. /电机旋转方向控制信号端口初始化10. /PC10推挽输出,输出高11. void M_Init(void)12. 13.         RCC->APB2ENR|=1<<4;      /使能PORTC时钟14.         GPIOC->CRL&=0X

14、FFFFFF00;15.         GPIOC->CRL|=0X00000033;  /PC10推挽输出16.         GPIOC->ODR|=0XF<<0;             /PC10输出高电平17. 18.19. /定时器TIM3,PWM输出初始化,CH1(PA6)20. /arr:自动重装值21. /psc:时钟预分频数22.

15、 /设置自动重装值为900,那么PWM频率=72000/900=8Khz23. /见STM32参考手册,14.3.9PWM模式。24. void TIM3_PWM_Init(u16 arr,u16 psc) /arr设定计数器自动重装值   25.                                     /psc预分频器不

16、分频,psc=026. 27.         RCC->APB1ENR|=1<<1;       /TIM3时钟使能    28.                   29.         GPIOA->CRL&=0XF0FFFFFF;/PA6输出30. 

17、0;       GPIOA->CRL|=0X0B000000;/复用功能输出           31.         GPIOA->ODR|=1<<6;/PA6上拉        32.33.         TIM3->ARR=arr;/设定计数器自动

18、重装值 34.         TIM3->PSC=psc;/预分频器不分频35.         36.         TIM3->CCMR1|=6<<4;  /CH1 PWM1模式        高电平有效         37.   &#

19、160;     TIM3->CCMR1|=1<<3; /CH1预装载使能38.39.         TIM3->CCER|=1<<0;   /OC1 输出使能   40.41.         TIM3->CR1=0x0080;   /ARPE使能 42.         

20、TIM3->CR1|=0x01;    /使能定时器3 43. 44.45. /电机方向与速度控制,速度调节范围为-100+10046. /大于0时,正转,小于0时,反转47. / 占空比低于0.4时电机不转48. /(占空比是指高电平在一个周期之内所占的时间比率)49. /TIM3->CCR1的设定范围为0900(因为arr=900)50. /见STM32参考手册,14.3.9PWM模式。51. void Motor_Speed_Control(s16 motorSpeed)         52.

21、53.     s16 speed = 0 ;        54.         55.     if(motorSpeed>100)  speed = 100;56.             else if (motorSpeed<-100)  speed = -100;57.   

22、0;                     else  speed = motorSpeed;58.         if(speed = 0)59.         60.                 M_1 =

23、 0;61.                 M_2 = 0;62.         63.             else if(speed > 0)64.                 65.       

24、                  M_1 = 0;66.                         M_2 = 1;67.                      

25、60;  TIM3->CCR1 = speed * 9;68.                 69.                         else70.                   

26、      71.                                 M_1 = 1;72.                            

27、;     M_2 = 0;73.                                 TIM3->CCR1 = -speed * 9;74.                     

28、0;   75. 76.复制代码电机速度与方向检测代码1. /TIM2_Encoder_Init,Tim2_CH1(PA0);Tim2_CH2(PA1)2. /arr:自动重装值 0XFFFF3. /psc:时钟预分频数        ,不分频4. /见STM32中文手册 14.3.12编码器接口模式5. void TIM2_Encoder_Init(u16 arr,u16 psc)6. 7.     RCC->APB1ENR|=1<<0;    

29、   /TIM2时钟使能8.         RCC->APB2ENR|=1<<2;       /使能PORTA时钟9.         10.     GPIOA->CRL&=0XFFFFFF00;   /PA0、PA1 清除之前设置11.     GPIOA->CRL|=0X00000044;   /PA

30、0、PA1 浮空输入12.             13.     TIM2->ARR=arr;            /设定计数器自动重装值 14.     TIM2->PSC=psc;            /预分频器15.16.        

31、0;TIM2->CCMR1 |= 1<<0;          /输入模式,IC1FP1映射到TI1上17.         TIM2->CCMR1 |= 1<<8;          /输入模式,IC2FP2映射到TI2上18.         TIM2->CCER |= 0<<1;  

32、60;               /IC1不反向19.         TIM2->CCER |= 0<<5;           /IC2不反向20.     TIM2->SMCR |= 3<<0;            

33、;      /所用输入均在上升沿或下降沿有效21.         TIM2->CR1 |= 1<<0;                  /使能计数器22. 23. /计数寄存器赋值24. void TIM2_Encoder_Write(int data)25. 26.     TIM2->CNT = data;27. 28. /

34、读计数个数29. int TIM2_Encoder_Read(void)30. 31.     TIM2_Encoder_Write(0);        /计数器清032.         delay_ms(10);          /检测时间,可调节33.     return (int)(s16)(TIM2->CNT);     &#

35、160;     /数据类型转换34.                              /记录边沿变化次数(一个栅格被记录4次)35. 复制代码这里我们只显示边沿变化次数,没有具体的算出速度。主函数1. int main(void)2. 3. /        motorSpeed的范围为

36、-100 +100;4.         s16 motorSpeed = 100; 5.         Stm32_Clock_Init(9); /系统时钟设置6.         delay_init(72);             /延时初始化7.         ua

37、rt_init(72,9600);  /串口1初始化8.         LED_Init();                         /初始化与LED连接的硬件接口9.         M_Init();                           /初始化电机运行方向控制端口10.    

温馨提示

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

评论

0/150

提交评论