光电编码器位置检测程序_第1页
光电编码器位置检测程序_第2页
光电编码器位置检测程序_第3页
光电编码器位置检测程序_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、typedefstructint16ElecTheta;int16MechTheta;Uint16DirectionQep;Uint16QepCountIndex;Uint16RawTheta;Uint32MechScaler;Uint16LineEncoder;Uint16PolePairs;int16CalibratedAngle;Uint16IndexSyncFlag;void(*init)();void(*calc)();void(*isr)();1.位置检测,计算过程中的变量的定义/*DefinethestructureoftheQEP(QuadratureEncoder)Drive

2、rObject*/Output:MotorElectricalangle(Q15)/(输出的电角度?)/Output:MotorMechanicalAngle(Q15)/(输出的机械角度?)/Output:Motorrotationdirection(Q0)/(电机转向?)/Variable:Encodercounterindex(Q0)/(编码器输出的脉冲数?)/Variable:RawanglefromTimer2(Q0)/(某一时刻转子对于定子A相的绝对角度?)/Parameter:0.9999/totalcount(Q30)/(每个脉冲所转过的机械角度?)/Parameter:Numb

3、eroflineencoder(Q0)/(编码器每转输出的脉冲个数?)/Parameter:Numberofpolepairs(Q0)/(极对数)/Parameter:Rawangularoffsetbetweenencoder/indexandphasea(Q0)翻译过来是编码器与定子A相之间的角度偏量,但不知道到底这个偏移量是指什么,请教高人/Output:Indexsyncstatus(Q0)(?)/Pointertotheinitfunction/(初始化函数)/Pointertothecalcfunction/(位置测量,计算函数)/Pointertotheisrfunction/(

4、Z信号的捕获中断)QEP;上面的汉语解释不知道对不对,请高人过目,指出问题。2、变量的初始化#defineQEP_DEFAULTS0x0,0x0,0x0,0x0,0x0,0x00020c4A,0x0,4,-1250,0x0,(void(*)(Uint32)F281X_EV1_QEP_Init,(void(*)(Uint32)F281X_EV1_QEP_Calc,(void(*)(Uint32)F281X_EV1_QEP_IsrQEPqep1=QEP_DEFAULTS;/Applied-motionPMSMmotor:24-v,8-pole,2000lineencoder,CalibratedA

5、ngle=-1250/MechScaler=1/8000=0X00020C4A(Q30)主程序里还有QEP模块的初始化,与上面的初始化有一点点重复的地方。/InitializeQEPmoduleqep1.LineEncoder=2000;qep1.MechScaler=_IQ30(0.25/qep1.LineEncoder);qep1.PolePairs=P/2;qep1.CalibratedAngle=-1250;qep1.init(&qep1);此处要请教高手指导的问题就是:CalibratedAngle到底是什么东西?3、功能模块程序3、1在进行正交编码,捕获Z之前对2812的寄

6、存器进行初始化,设置定时器2为QEP电路提供基准时钟voidF281X_EV1_QEP_Init(QEP*p)EvaRegs.CAPCONA.all=0X9004;/SetupcaptureunitsEvaRegs.T2CON.all=0X9870;/SetupcapturetimerEvaRegs.T2PR=4*p->LineEncoder;/InitTimer1periodRegisterEvaRegs.EVAIFRC.bit.CAP3INT=1;/ClearCAP3flagEvaRegs.EVAIMRC.bit.CAP3INT=1;/EnableCAP3InterruptEALLO

7、W;/EnableEALLOWGpioMuxRegs.GPAMUX.all|=0x0700;/SetupthecapturepinstoprimaryfunctionsEDIS;/DisableEALLOW此处要请教高手问题就是:EvaRegs.T2PR=4*p->LineEncoder,根据上面初始化的定义,4*2000=8000个脉冲对应的就应该是一个360度的机械角度,也就该是一个定时周期,此时一个周期计算完毕,超过360度的角度就从新开始?假如此时的角度是200度,是不是对应的脉冲数就该是8000*200/360=4444个脉冲?3、2voidF281X_EV1_QEP_Calc

8、(QEP*p)int32Tmp;/Checktherotationaldirectionp->DirectionQep=0x4000&EvaRegs.GPTCONA.all;/(GPTCONA的第14位为定时器2的状态,只读,如果是递增记数就是电机正转,递减就是电机反转?和4000相与就是为了只保留第14位信号?)p->DirectionQep=p->DirectionQep>>14;/得到电机的车t向,是0是1就知道是正转还是反转?/Checkthetimer2counterforQEPp->RawTheta=EvaRegs.T2CNT+p->

9、;CalibratedAngle;/按照定义RawTheta为转子即时的位置对应的脉冲,那就应该是转子对应定子A相的初始位置的角度+转过的相对角度,在TI的例程里定义的转子对应定子A相的初始位置的角度为0吗?如果是那此处就应该是p->RawTheta=EvaRegs.T2CNT+0。为何有CalibratedAngle?/ComputethemechanicalangleinQ15Tmp=_qmpy32by16(p->MechScaler,p->RawTheta,31);/Q15=Q30*Q0p->MechTheta=(int16)(Tmp);/Q15->Q15p

10、->MechTheta&=0x7FFF;/Wraparound0X07FFF/_qmpy32by16()我好象没找到是什么含义,理解起来应该是p->MechScaler*p->RawTheta,再转换格式对吧?能否请高人说下/p->MechTheta为何要和0X7FFF相与?按我的理解,TMP已经计算得到了即时的机械角/度,消除第0到11位,保留高位的15为,这样不仅对整个角度的大小没有大的影响,并/且转换成了Q15格式,而Q15格式里,7FFF最大,代表360度,也代表的是1,相与是是为了将大于360度的角度转换过来。此处我还是不大清楚。烦请高人解释下下。/C

11、omputetheelectricalangleinQ15p->ElecTheta=p->PolePairs*p->MechTheta;计算电角度,电角度=极对数*机械角度p->ElecTheta&=0x7FFF;)/Q0*Q15=Q15/Wraparound0x07FFFvoidF281X_EV1_QEP_Isr(QEP*p)(p->QepCountIndex=EvaRegs.T2CNT;revolution/Getthetimer2counterforonemechanical/Resetthetimer2counter/Settheindexflag

12、EvaRegs.T2CNT=0;p->IndexSyncFlag=0x00F0;/p->IndexSyncFlag是个什么信号?按照道理,PMSM应该有个初始定位的过程,采用最简单的6个区的定位,也就是针对编码器发出的UVW信号判断在哪个60度的区,然后再给定角度完事,这段程序应该放在主程序里系统初始化之后吧?假设此时UVW信号为101,这时候转子在第一个区,也就是0-60度范围之内,那么就设定转子在相对于定子A相30度的地方,这样做有最大30度的误差,会导致电机可能不会以最大转矩启动,但启动是没问题。此时是不是应该把这些角度转换为脉冲个数,送给EvaRegs.T2CNT做为初始角

13、度去计算?转子初始定位if(GpioDataRegs.GPADAT.bit.GPIOA8=1&&GpioDataRegs.GPADAT.bit.GPIOA9=0&&GpioDataRegs.GPADAT.bit.GPIOA10=1)InitAngle=30度;if(GpioDataRegs.GPADAT.bit.GPIOA8=1&&GpioDataRegs.GPADAT.bit.GPIOA9=0&&GpioDataRegs.GPADAT.bit.GPIOA10=0)InitAngle=90;if(GpioDataRegs.GPADAT.bit.GPIOA8=1&&GpioDataRegs.GPADAT.bit.GPIOA9=1&&GpioDataRegs.GPADAT.bit.GPIOA10=0)InitAngle=150;if(GpioDataRegs.GPADAT.bit.GPIOA8=0&&GpioDataRegs.GPADAT.bit.GPIOA9=1&&GpioDataRegs.GPADAT.bit.GPIOA10=0)InitAngle=210;if(GpioDataRegs.GPADAT.bit.GPIOA8=0&&Gpio

温馨提示

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

评论

0/150

提交评论