版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务3.4智能小车电机测速模块的应用开发1任务描述1任务目标带编码器AB相输出的直流电机测速。TIM任务3.4利用直流电机编码器输出AB相测量电机转速22任务内容本任务要求设计一个可实现智能小车电机测速的应用程序,具体要点如下。1、取一个电机作为测速对象。2、系统可通过串行通信传输当前的“电机转速(x转/分)”与“电机转向”至上位机的串口调试助手。3任务分析TIM任务3.4利用直流电机编码器输出AB相测量电机转速分析本任务的要求可知,要实现电机测速功能的技术要点有两个:
一是在电机上安装编码器;
二是配置STM32F4的定时器工作在输入捕获模式,对编码器的输出脉冲进行计数,经过换算后得到电机的转速信息。
本任务涉及的必备知识:编码器的工作原理;直流电机测速方法;STM32F4微控制器定时器编码器接口模式的编程配置方法。4TIM知识链接
编码器(encoder)是一种用于运动控制的传感器。它利用光电转换或磁电转换的原理,检测物体的机械位置及其变化,并将此信息转换为电信号后输出,传递给各种运动控制装置。我们把将角位移转换成电信号的编码器称为“码盘”,将直线位移转换成电信号的编码器称为“码尺”。
编码器有以下常见的应用场景:角度测量长度测量速度测量位置测量1.什么是编码器5电机测速知识链接2.编码器的分类①光电编码器光电编码器是一种集光、机、电为一体的数字检测装置,它通过光电转换将传输至轴上的机械位移量转换成脉冲或数字量输出。其原理示意如图3-40所示。图3-40光电编码器原理示意图图3-41带光电编码器或带磁电编码器的电机实物②磁电编码器采用磁阻或者霍尔元件对磁性材料的角度或者位移进行测量。同光电编码器相比,磁电编码器具有抗震、抗污染等优点。旋转编码器内部大都由码盘、光电检测装置和信号处理电路等部分构成。码盘上刻了若干个线槽,线槽等距并且可透光,当码盘旋转时就会周期性地透过和遮挡来自光电检测装置的光线,这样检测装置就会周期性地生成若干电信号。但是这些电信号通常比较微弱,需要加入一套处理电路对信号进行放大和整形,最后把信号整形为脉冲信号并向外输出。6电机测速知识链接3.增量式光电编码器的工作原理从图3-42可以看出A和B两路脉冲是有相位差的,一般相差90°,目的是根据两相信号变化的先后顺序就可以判断运动方向,记录输出的脉冲个数可以知道位移量的大小,同时通过输出信号的频率就能得到转速。74.编码器的技术指标电机测速知识链接表3-36某电机GMR编码器与磁电编码器参数对比型号编码器线数(P/R)类型供电范围编码器保护适配单片机GMR编码器500巨磁阻效应3.3~5V带塑料后盖STM32等带硬件编码器接口的单片机磁电编码器13磁感应3.3~5V裸露(磁电编码器比较稳定,无需后盖)几乎所有的单片机85.直流电机的测速方法电机测速知识链接捕获编码器输出脉冲的方法1.方法一:使用定时器的捕获功能,记录AB两路脉冲中任意一路的上升沿或下降沿次数。由于只记录一路脉冲的信息,该方法的缺点是无法判断电机的旋转方向。2.方法二:使用定时器同时捕获两路脉冲的上升沿或下降沿次数,并判断AB两路脉冲之间的时延,进而达到判断电机旋转方向的目的。3.方法三:将编码器的输出脉冲与MCU的外部中断线相连,配置好外部中断线的触发方式(上升沿或下降沿)后,即可对脉冲进行计数。该方法的缺点也是无法判断电机的旋转方向。4.方法四:使用定时器的编码器接口功能,同时捕获两路脉冲的上升沿或下降沿次数,并利用MCU硬件自带的功能判断电机的旋转方向。95.直流电机的测速方法电机测速知识链接捕获编码器输出脉冲的方法
方法四优势最大,无需占用中断资源即可对脉冲进行计数,并能够判断电机的旋转方向;同时,利用MCU硬件处理减少了程序设计的工作量。因此,如果使用带编码器接口功能的MCU(如:STM32F4系列),应选择此方法。
方法一存在功能缺失问题(即:无法判断电机的旋转方向),故其被选择的优先级较低,取而代之的是方法二。但使用方法二时,如果要用程序实现电机旋转方向的判别,编程工作量较大。
方法三适用于定时器不具备编码器接口且输入捕获功能弱的MCU(如:51系列)。方法三的稳定性最低,同时又存在功能缺失问题,因此其被选择的优先级最低。
综上所述可知,在使用STM32F407ZGT6型号的MCU的前提下,本任务应选择方法四来实现编码器输出脉冲的捕获。105.直流电机的测速方法电机测速知识链接1)周期测速法(M法测速)周期测速法简单地说就是根据单位时间内一共有多少个脉冲来计算转速。设转速为n(单位:r/s),测量时间为T0(单位:s);T0时间内的脉冲数为M0;电机转一圈产生的脉冲数为C,则转速的计算公式为:n=M0/(C×T0),当M0很大时,即转速快,这个方法测得的精度和平稳性好,当M0很小时,速度改变带来的M0变化很小,即转速慢时算出的误差就很大。所以M法测速适用于高转速场合。115.直流电机的测速方法电机测速知识链接2)频率测速法(T法测速)T法测速是这样的:先建立一个频率已知且固定的高频脉冲,当编码器读到一个信号,开始对高频脉冲进行计数,编码器第二个信号到来后,停止计数。根据对高频脉冲计数的次数、高频脉冲频率和电机转一圈编码器产生的脉冲数进行速度计算。
125.直流电机的测速方法电机测速知识链接3)M/T法测速
13STM32F4定时器的编码器接口模式电机测速知识链接1.编码器接口硬件框图解析编码器接口的两路输入分别来自于TI1FP1和TI2FP2信号。TI1FP1和TI2FP2是TI1与TI2经过输入滤波器和极性选择后的信号。实际应用中一般不进行滤波与反相,即:TI1FP1=TI1,TI2FP2=TI2。定时器编码器接口硬件框图142.编码器接口模式的工作原理电机测速知识链接①配置TI1FP1与TI1、TI2FP2与TI2的映射关系,并配置是否反相;②配置编码器的计数方式(仅在TI1或TI2边沿处计数,或者同时在TI1和TI2处计数);③CEN=“1”(位于TIMx_CR1寄存器,使能计数器);④编码器接口判断两个输入信号的相位关系,硬件对TIMx_CR1寄存器的DIR位(该位反映电机是正转还是反转)进行相应修改;⑤编码器接口根据DIR位情况,计数器相应递增(电机正转)或递减计数(电机反转),计数器在0到TIMx_ARR寄存器值之间进行连续计数,因此在电机启动前必须先配置TIMx_ARR值;⑥任何输入(TI1或TI2)发生信号转换时,都会重新计算DIR位;⑦计数器根据增量式编码器的速度和方向自动进行修改,其值始终表示当前编码器的位置。152编码器接口计数原理电机测速知识链接编码器接口可以利用输入脉冲的边沿进行计数,我们通过计数值的变化量,就可以算出输入脉冲信号的变化量,也就可以进一步计算出电机的转速了。接下来我们看一下编码器接口是如何根据脉冲边沿计数的,它的计数方向与输入脉冲信号的各种可能的组合关系如表3-37所示。
表3-37有效边沿相对信号的电平TI2FP2相对TI1TI1FP1相对TI2TI1FP1信号TI2FP2信号上升沿下降沿上升沿下降沿仅在TI1处计数高递减递增不计数不计数低递增递减不计数不计数仅在TI2处计数高不计数不计数递增递减低不计数不计数递减递增在TI1和TI2处都计数高递减递增递增递减低递增递减递减递增163编码器接口计数原理电机测速知识链接表3-37中的有效边沿我们可以通过代码去配置,一共有3种边沿检测方式,其中仅在TI1处计数表示只检测TI1上的脉冲边沿变化,这时候的计数方向需要结合TI2FP2上的电平情况来确定。正转:当A相上升沿到来时(图中①处),我们需要关注B相的电平高低,从图中可看到B相此时是低电平,结合表3-37,可以得知此时计数方向为递增计数;当A相下降沿到来时(图中②处),从图中可以看到B相此时是高电平,结合表3-37,可以得知此时计数方向为递增计数;当A相上升沿再次到来时(图中③处),同理可得此时计数方向为递增计数。综上所得,我们可以知道此时编码器正转,对应的计数方向是递增计数。图3-45173编码器接口计数原理电机测速知识链接表3-37中的有效边沿我们可以通过代码去配置,一共有3种边沿检测方式,其中仅在TI1处计数表示只检测TI1上的脉冲边沿变化,这时候的计数方向需要结合TI2FP2上的电平情况来确定。反转:当A相上升沿到来时(图3-45中④处),我们需要关注B相的电平高低,从图3-45中可看到B相此时是高电平,结合表3-37,可以得知此时计数方向为递减计数;当A相下降沿到来时(图3-45中⑤处),从图3-45中可以看到B相此时是低电平,结合表3-37,可以得知此时计数方向为递减计数;当A相上升沿再次到来时(图3-45中⑥处),同理可得此时计数方向为递减计数。综上所得,我们可以知道此时编码器反转,对应的计数方向是递减计数。图3-45184硬件连接电机测速知识链接直流电机共有6根外部接线,其上安装的编码器可输出AB两相脉冲,另外4根接线分别是:电机电源+、电机电源-、编码器VCC和编码器GND。带编码器的电机外部接线图194测速原理电机测速知识链接
(1)减速比:一般直流电机的转速都是一分钟几千上万转的,所以一般需要安装减速器。减速比是由减速器的大小齿轮啮合输出转速,多级齿轮啮合,减速比更低,扭矩更大。GM513电机的减速比分别有1:10、1:20、1:30、1:60四种,本例选1:30这款。(2)编码器线数:编码器线数是指编码器的分辨率,即每转发出的脉冲数。MG513电机上嵌有两种不同编码器,一种是GMR编码器,一种是磁电编码器。我们选用的是磁电编码器,编码器线数为13P/R,即电机每转动1圈产生13个脉冲。(3)倍频系数:是通过程序提升编码器的精度的一种数据处理方法,可以有效地最大化提高编码器的精度和测量精度。4倍频则是同时计算A、B两相的每个跳边沿,这样原本在A相计数的一个脉冲周期内就实现了4次计数,从而实现了精度的提升。20STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接HAL_TIM_Encoder_Init()函数用于初始化定时器编码器接口和创建相关处理的函数。(1)函数原型:HAL_StatusTypeDefHAL_TIM_Encoder_Init(TIM_HandleTypeDef*htim, TIM_Encoder_InitTypeDef*sConfig)(2)函数描述:用于初始化编码器接口模式。(3)函数形参形参1:htim:TIM_HandleTypeDef结构体类型指针变量,用于配置定时器基本参数。形参2:sConfig:是TIM_Encoder_InitTypeDef结构体类型指针变量,用于配置编码器模式参数。(4)函数返回值:HAL_StatusTypeDef枚举类型的值。正确返回为HAL_OK;出错返回值为HAL_ERROR等。typedef
struct{uint32_tEncoderMode;//编码器模式uint32_tIC1Polarity;//IC1输入信号的极性uint32_tIC1Selection;//输入通道映射uint32_tIC1Prescaler;//输入捕获预分频器uint32_tIC1Filter;//输入捕获滤波器uint32_tIC2Polarity;//IC2输入信号的极性uint32_tIC2Selection;//输入通道映射uint32_tIC2Prescaler;//输入捕获预分频器uint32_tIC2Filter;//输入捕获滤波器}TIM_Encoder_InitTypeDef;21STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接typedef
struct{uint32_tEncoderMode;//编码器模式uint32_tIC1Polarity;//IC1输入信号的极性uint32_tIC1Selection;//输入通道映射uint32_tIC1Prescaler;//输入捕获预分频器uint32_tIC1Filter;//输入捕获滤波器uint32_tIC2Polarity;//IC2输入信号的极性uint32_tIC2Selection;//输入通道映射uint32_tIC2Prescaler;//输入捕获预分频器uint32_tIC2Filter;//输入捕获滤波器}TIM_Encoder_InitTypeDef;TIM_Encoder_InitTypeDef结构体成员含义:成员变量EncoderMode用来设置编码器模式,我们可以选择仅在TI1或TI2处计数或者在TI1、TI2处均计数。本任务中选择在TI1、TI2处均计数,即TIM_ENCODERMODE_TI12是4倍频。成员变量ICxPolarity在编码器模式下用于设置输入信号是否反相,它设定的是TIMx_CCER寄存器的CCxNP位和CCxP位。本任务不需要输入信号反相,选TIM_ICxPOLARITY_RISING。成员变量ICxSelection用来设置通道映射关系,它设定TIMx_CCMRx寄存器的CCxS[1:0]位的值。在编码器接口模式下,此成员设置为输入模式即可(其他型号芯片不一定),本任务选择TIM_ICxSELECTION_DIRECTTI。成员变量ICxPrescaler用来设置输入捕获的时钟分频系数,本实验不需要分频,所以选择TIM_ICxPSC_DIV1。成员变量ICxFilter用来设置滤波器长度,可选设置0x00至0x0F。它设定TIMx_CCMRx寄存器ICxF[3:0]位的值,本任务中选0。22STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接HAL_TIM_Encoder_Start_IT()函数用于中断方式下启动定时器编码器接口的函数。函数原型:HAL_StatusTypeDefHAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef*htim,uint32_tChannel)函数描述:用于启动定时器的编码器接口模式。函数形参形参1:htim
指向定时器句柄的指针,即定时器句柄的地址。形参2:lChanne是定时器通道,取值范围为TIM_CHANNEL_1到TIM_CHANNEL_4。函数返回值:HAL_StatusTypeDef枚举类型的值。23STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接定时器捕获回调函数HAL_TIM_IC_CaptureCallback()用于处理所有定时器的捕获中断,用户在该函数内编写具体的中断处理任务。函数原型:voidHAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef*htim)形参htim:指向定时器句柄的指针,即定时器句柄的地址。函数返回值:无。24STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接__HAL_TIM_IS_TIM_COUNTING_DOWN()函数调用此函数,可以获得编码器的转向:0为正转,1为反转。宏函数原型:__HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__)宏参__HANDLE__:指向定时器句柄的指针。25STM32F4系列微控制器定时器的编码器接口函数电机测速知识链接__HAL_TIM_GET_COUNTER()函数用于定时器计数值CNT的读取。宏函数原型:#define__HAL_TIM_GET_COUNTER(__HANDLE__)((__HANDLE__)->Instance->CNT)宏参数__HANDLE__:指向定时器句柄的指针。26电机测速任务实施任务实施之前必须准备好表3-38所列的设备/资源。表3-38设备/资源表序号设备/资源数量是否准备到位(√)1STM32F407ZET6最小系统1
2直流电机MG513P30_12V1
3电机固定底座1
4杜邦线6根
512V直流电源(2A输出)1
271.测速电机与STM32F4系列MCU核心板连线图电机测速任务实施直流电机MG513P30_12V共有6根外部接线,其上安装的编码器可输出A、B两相脉冲,另外4根接线分别是电机电源+、电机电源-、编码器VCC和编码器GND。硬件连接如表3-39所示。表3-39直流电机MG513P30_12V与STM32F407核心板连接序号MG513P30_12V直流电源12VSTM32F407ZET6核心板1电机电源++
2电机电源--
3编码器VCC
+5V4编码器GND
GND5A相
PA6(TIM3_CH1)6B相
PA7(TIM3_CH2)282.用CubeMX软件创建基础工程电机测速任务实施为了进行测速,我们需要两个定时器,作用分别是:①定时,确定每次测速的时间间隔。在本例中使用基本定时器TIM7,实现1s定时。②编码器模式下对脉冲进行计数。本例中用定时器TIM3来实现。使用基本定时器TIM7实现1s的定时时间,允许定时器更新中断。因为定时器TIM7挂载在APB1总线上,其TIM_CLK为84MHz,根据公式(3-1),设定PSC=(8400-1),自动重载值ARR=(10000-1),计数方式为向上计数。定时器TIM7的配置结果如图3-46所示。12345292.用CubeMX软件创建基础工程电机测速任务实施TIM3配置为编码器模式即EncoderMode,如图3-47中②所示。1234567在NVICSetting设置中使能TIM3的全局中断,配置结果如图3-48所示89303.添加用户代码电机测速任务实施生成基础工程后,打开manic文件,按如程序清单3-8代码在对应位置修改main.c文件。/*USERCODEBEGINPV*/uint16_tSpeed_Motor=0;//电机转速[单位:rpm即:r/s]uint8_tDirect=0;//电机转向指示=0,正转;=1,反转。uint8_tT1s_Flag=0;//1S时间到标志=1,定时时间到
uint16_tTIM3UP=0;//编码器定时器(计数器)的溢出次数计数器int32_tCaptureNumberA=0;//计数脉冲数/*USERCODEENDPV*/
/*USERCODEBEGIN2*/
HAL_TIM_Base_Start_IT(&htim7);//启动定时器7的更新中断HAL_TIM_Encoder_Start_IT(&htim3,TIM_CHANNEL_ALL);//打开编码器中断
__HAL_TIM_ENABLE_IT(&htim3,TIM_IT_UPDATE);//更新中断用于溢出计数/*USERCODEEND2*/313.添加用户代码电机测速任务实施生成基础工程后,打开manic文件,按如程序清单3-8代码在对应位置修改main.c文件。
while(1) {
/*USERCODEENDWHILE*/
/*USERCODEBEGIN3*/
if(T1s_Flag==1) { T1s_Flag=0;//TIM7产生的1s定时时间到标志位 HAL_TIM_Encoder_Stop(&htim3,TIM_CHANNEL_ALL);//关闭定时器编码 __HAL_TIM_DISABLE_IT(&htim3,TIM_IT_UPDATE);//停止TIM7的更新中断//调用__HAL_TIM_IS_TIM_COUNTING_DOWN函数可以获得编码器的转向0为正、1为负
Direct=__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3); CaptureNumberA=__HAL_TIM_GET_COUNTER(&htim3);
if(Direct==0)//顺时针(正转) { printf("MotorisForward\r\n"); }
else
if(Direct==1) {/*逆时针,会从65535开始向下计数,来一个脉冲,减去一个计数。*/ CaptureNumberA=65535-CaptureNumberA; printf("MotorisReversal\r\n"); }323.添加用户代码电机测速任务实施生成基础工程后,打开manic文件,按如程序清单3-8代码在对应位置修改main.c文件。
CaptureNumberA+=TIM3UP*65535;
Speed_Motor=60*(CaptureNumberA/4)/PULSE_CIRCLE/REDUCTION_RATIO; printf("MotorSpeedis%drpm\r\n",Speed_Motor);
HAL_TIM_Base_Stop(&htim3); __HAL_TIM_SET_COUNTER(&htim3,0); TIM3UP=0; HAL_T
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新教师个人思想工作总结(3篇)
- 第1课时 1~5的认识
- 2026综合岗面试题真题及答案
- 2026年一建市政实务考前核心考点拔高试卷及答案
- 2026年一建民航实务必背考题试卷及答案
- 2026年一建矿业实务考前仿真测评冲刺试卷及答案
- 2026年一建经济考前考点梳理卷试卷及答案
- 2026法治信仰面试题及答案
- 2026高铁导购面试题目及答案
- 2026关于安保方面的面试题及答案
- 2026年演出经纪人考试题库及答案(真题)
- 2026年广西壮族自治区南宁市公安招聘辅警考试真题及答案
- 2026江苏苏州市相城区人民检察院招聘编外人员3人笔试题库及答案详解(新)
- 2026年生产文员测试题及答案
- 2026年全国执业兽医资格证考试题库带答案详解(完整版)
- 2026年学法减分题库和答案
- 2025年投资策略 云开雾散曙光现 高善文演讲速记
- 食品加工厂应急处理预案
- JJF1030-2023温度校准用恒温槽技术性能测试规范
- 《海参中海参多糖的测定 高效液相色谱法》国家标准编制说明
- 慈星全电脑横编织机操作手册
评论
0/150
提交评论