【精选】光电编码器位置检测程序.doc-1

上传人:豆浆 文档编号:897364 上传时间:2017-05-20 格式:DOC 页数:5 大小:25.50KB
返回 下载 相关 举报
【精选】光电编码器位置检测程序.doc-1_第1页
第1页 / 共5页
【精选】光电编码器位置检测程序.doc-1_第2页
第2页 / 共5页
【精选】光电编码器位置检测程序.doc-1_第3页
第3页 / 共5页
【精选】光电编码器位置检测程序.doc-1_第4页
第4页 / 共5页
【精选】光电编码器位置检测程序.doc-1_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《【精选】光电编码器位置检测程序.doc-1》由会员分享,可在线阅读,更多相关《【精选】光电编码器位置检测程序.doc-1(5页珍藏版)》请在金锄头文库上搜索。

1、1.位置检测,计算过程中的变量的定义/*-Define the structure of the QEP (Quadrature Encoder) Driver Object -*/typedef struct int16 ElecTheta; / Output: Motor Electrical angle (Q15) /(输出的电角度?)int16 MechTheta; / Output: Motor Mechanical Angle (Q15) /(输出的机械角度?)Uint16 DirectionQep; / Output: Motor rotation direction (Q0)/

2、(电机转向?)Uint16 QepCountIndex; / Variable: Encoder counter index (Q0) /(编码器输出的脉冲数?)Uint16 RawTheta; / Variable: Raw angle from Timer 2 (Q0)/(某一时刻转子对于定子 A 相的绝对角度?)Uint32 MechScaler; / Parameter: 0.9999/total count (Q30) /(每个脉冲所转过的机械角度?)Uint16 LineEncoder; / Parameter: Number of line encoder (Q0)/(编码器每转

3、输出的脉冲个数?) Uint16 PolePairs; / Parameter: Number of pole pairs (Q0) /(极对数)int16 CalibratedAngle; / Parameter: Raw angular offset between encoder /index and phase a (Q0)/翻译过来是编码器与定子 A 相之间的角度偏量,/但不知道到底这个偏移量是指什么,请教高人Uint16 IndexSyncFlag; / Output: Index sync status (Q0) (?)void (*init)(); / Pointer to t

4、he init function /(初始化函数)void (*calc)(); / Pointer to the calc function /(位置测量,计算函数)void (*isr)(); / Pointer to the isr function /(Z 信号的捕获中断) QEP;上面的汉语解释不知道对不对,请高人过目,指出问题。2、变量的初始化#define QEP_DEFAULTS 0x0, 0x0,0x0,0x0,0x0,0x00020C4A,0x0,4,-1250,0x0, (void (*)(Uint32)F281X_EV1_QEP_Init, (void (*)(Uint

5、32)F281X_EV1_QEP_Calc, (void (*)(Uint32)F281X_EV1_QEP_Isr QEP qep1 = QEP_DEFAULTS;/ Applied-motion PMSM motor: 24-v, 8-pole, 2000 line encoder, CalibratedAngle = -1250/ MechScaler = 1/8000 = 0x00020C4A (Q30) 主程序里还有 QEP 模块的初始化,与上面的初始化有一点点重复的地方。/ Initialize QEP moduleqep1.LineEncoder = 2000;qep1.MechS

6、caler = _IQ30(0.25/qep1.LineEncoder);qep1.PolePairs = P/2;qep1.CalibratedAngle = -1250;qep1.init(&qep1);此处要请教高手指导的问题就是:CalibratedAngle 到底是什么东西?3、功能模块程序3、1 在进行正交编码,捕获 Z 之前对 2812 的寄存器进行初始化,设置定时器 2 为 QEP 电路提供基准时钟void F281X_EV1_QEP_Init(QEP *p)EvaRegs.CAPCONA.all = 0X9004; / Set up capture unitsEvaRegs.

7、T2CON.all = 0X9870; / Set up capture timerEvaRegs.T2PR = 4*p-LineEncoder; / Init Timer 1 period Register EvaRegs.EVAIFRC.bit.CAP3INT = 1; / Clear CAP3 flagEvaRegs.EVAIMRC.bit.CAP3INT = 1; / Enable CAP3 InterruptEALLOW; / Enable EALLOWGpioMuxRegs.GPAMUX.all |= 0x0700; / Set up the capture pins to pri

8、mary functionsEDIS; / Disable EALLOW此处要请教高手问题就是:EvaRegs.T2PR = 4*p-LineEncoder,根据上面初始化的定义,4*2000=8000 个脉冲对应的就应该是一个 360 度的机械角度,也就该是一个定时周期,此时一个周期计算完毕,超过 360 度的角度就从新开始?假如此时的角度是 200 度,是不是对应的脉冲数就该是 8000*200/360=4444 个脉冲?3、2void F281X_EV1_QEP_Calc(QEP *p)int32 Tmp;/ Check the rotational direction p-Direct

9、ionQep = 0x4000&EvaRegs.GPTCONA.all; /(GPTCONA 的第 14 位为定时器 2 的状态,只读,如果是递增记数就是电机正转,递减就是电机反转?和 4000 相与就是为了只保留第 14 位信号?)p-DirectionQep = p-DirectionQep14; /得到电机的转向,是 0 是 1 就知道是正转还是反转?/ Check the timer 2 counter for QEP p-RawTheta = EvaRegs.T2CNT + p-CalibratedAngle;/按照定义 RawTheta 为转子即时的位置对应的脉冲,那就应该是转子对

10、应定子 A 相的初始位置的角度+转过的相对角度,在 TI 的例程里定义/的转子对应定子 A 相的初始位置的角度为 0 吗?如果是那此处就应该是 p-RawTheta = EvaRegs.T2CNT+0。为何有 CalibratedAngle?/ Compute the mechanical angle in Q15Tmp = _qmpy32by16(p-MechScaler,p-RawTheta,31); / Q15 = Q30*Q0 p-MechTheta = (int16)(Tmp); / Q15 - Q15p-MechTheta &= 0x7FFF; / Wrap around 0x07

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

12、 Q15p-ElecTheta = p-PolePairs*p-MechTheta; / Q0*Q15 = Q15/计算电角度,电角度=极对数*机械角度p-ElecTheta &= 0x7FFF; / Wrap around 0x07FFFvoid F281X_EV1_QEP_Isr(QEP *p)p-QepCountIndex = EvaRegs.T2CNT; / Get the timer 2 counter for one mechanical revolution EvaRegs.T2CNT = 0; / Reset the timer 2 counterp-IndexSyncFlag

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

14、做为初始角度去计算?/转子初始定位 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)InitAngl

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号