




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国强力双面胶带市场调查研究报告
- 2025-2030中国洗菜机行业供需状况与营销模式研究报告
- 2025-2030中国氧氟沙星胶囊行业市场运行分析及竞争格局与投资发展研究报告
- 2025-2030中国校准光源行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国建筑安装行业市场发展分析及前景预测与战略规划研究报告
- 2025-2030中国夜间经济行业市场发展分析及发展机遇与趋势研究报告
- 2025-2030中国地西他滨行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国医院床褥行业市场发展趋势与前景展望战略研究报告
- 蜘蛛开店面试真题及答案
- 2021-2022学年山西省怀仁市高二上学期期末调研测试英语试题(解析版)(不含听力音频)
- 01K403 风机盘管安装
- 药理学教学课件:抗流感病毒药
- 2023年承德县小升初英语考试题库及答案解析
- 2023年大学生《思想道德与法治》考试题库附答案(712题)
- GB/T 7705-2008平版装潢印刷品
- GB/T 41326-2022六氟丁二烯
- 广西玉林市容县十里中学九年级化学 酸碱盐复习课件 人教新课标版
- 铲车三个月、半年、年保养记录(新)
- 重力坝毕业设计-水电站混凝土重力坝工程设计
- 脑电图(图谱)课件
- 《概率思想对几个恒等式的证明(论文)9600字》
评论
0/150
提交评论