西莫电机圈

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

查看: 3030|回复: 2

基于dsp的三相异步电机的速度检测算法的程序懂的来看一下

[复制链接]

该用户从未签到

发表于 2010-4-9 23:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
基于dsp的三相异步电机的速度检测算法的程序(QEP测速部分)
我用的是给CAP1,CAP2两路互差90度的方波信号。进入dsp自动四倍频(这样可以在每个四倍频的上升沿检测到CAP1和CAP2的上升或下降沿)后作为定时器T2的时基,也就是说,一旦cap1,cap2使用了qep,T2的定时计数器每增一或者减一都是由四倍频后的脉冲上升沿触发的。至于是增加一还是减少一,是由cap1先于cap2(增计数),还是后于cap2(减计数)控制的。
    对于速度的计算,我用的是两个脉冲用了多少时间来计算的。当在QEP单元捕获到第一个脉冲时,把定时器1计数器的值放入一个变量中,我设为T1CNT0,等到QEP捕获到下个脉冲时,把定时器1计数器的值放入T1CNT1。这样(T1CNT1-TICNT0)/f_T1=t,这里f_T1是定时器T1的计数频率,t就是qep两个脉冲之间所用的时间。你可以算出qep(T2计数器)两个脉冲所走的角度(如:一圈光电编码盘会产生6个脉冲,四倍频后就是24个脉冲,两个脉冲之间就是360/24=15度),这样就可以算出角速度了。
    在这里你需要控制的是两个量,一个是定时器T2的计数器,一个是定时器T1的计数器:
1)定时器T2的计数器,每增加一个(假设CAP1超前于CAP2),则表示转过了15度(如:一圈光电编码盘会产生6个脉,四倍频后就是24个脉冲,两个脉冲之间就是360/24=15度)。
你还需要考虑到两次采样正好卡在T2计数器到FFFF的情况,所以T2计数器两次采样后要进行一下比较,如果后者大于前者,说明,两次采样没有卡在FFFFh之间,反之则要T2CNT1-T2CNT0+65535.
2)定时器T1的计数器,定时器T1计数器是用来测量两次捕获时间用的。要考虑到两次捕获中T1可能已经过了好几个周期,所以(T1CNT1-TICNT0+65535*count)/f_T1=t,count是计算两次捕获中T1过了几个周期。可以通过中断的方式给count计数,每到T1的周期中断,count=count+1。在每次计算完速度后让count为0。
3)这里还有个地方需要注意,我测试中发现,如果用0xffff*count得不到正确的数值,可能是与16进制数有关,所以建议使用65535*count。(这地方我也不清楚,希望知道的朋友给说说)
下面是我的寄存器的相关设置,大家可以参考一下
void InitEv(void)
{
// Initialize EVA Timer 1:
    EvaRegs.GPTCONA.all = 0;   
    EvaRegs.T1PR = 0xffff;      
    EvaRegs.T1CMPR = 0x0000;     
    EvaRegs.EVAIMRA.bit.T1PINT = 1;//允许周期中断
    EvaRegs.EVAIFRA.bit.T1PINT = 1;//复位中断标志位
    EvaRegs.T1CNT = 0x0000;
    EvaRegs.T1CON.all = 0x1742;// T1高速时钟128分频,使能比较f=75000000/128
      
// Initialize EVA Timer 2:
    EvaRegs.T2PR = 0xffff;        
    EvaRegs.EVAIMRB.bit.T2PINT = 1;//允许周期中断
    EvaRegs.EVAIFRB.bit.T2PINT = 1;   
    EvaRegs.T2CNT = 0x0000;// Clear the counter for GP timer 2
    EvaRegs.T2CON.all =0x1872; // 工作在定向增减计数模式,允许比较操作
   
// Initialize EVA CAP 1/2/3:   
    EvaRegs.CAPCON.bit.CAPRES=0;
    EvaRegs.CAPCON.bit.CAPQEPN=0;
    EvaRegs.CAPCON.bit.CAP3EN=1;
    EvaRegs.CAPCON.bit.CAP3TSEL=1;
    EvaRegs.CAPCON.bit.CAP12TSEL=0;
    EvaRegs.CAPCON.bit.CAP3TOADC=0;
    EvaRegs.CAPCON.bit.CAP3EDGE=1;
    EvaRegs.CAPFIFO.all=0;//清除FIFO
    EvaRegs.EVAIMRC.all=0x0004;//使能CAP3的中断
    EvaRegs.EXTCON.bit.QEPIE=0;
    EvaRegs.EXTCON.bit.QEPIQEL=0;

}        
这里还有个地方需要注意,我测试中发现,如果用0xffff*count得不到正确的数值,可能是与16进制数有关,所以建议使用65535*count。(这地方我也不清楚,希望知道的朋友给说说)

這個我來說下,我的理解是  CCS吧0XFFFF定義為一個16位的數據類型,而吧65535定義為32位的類型
这个程序谁能帮我完善?我个人水平有限完不成了,好心的也好,有偿的也要,都帮我看看,我QQ377279379。邮箱377279379@qq.com。有想法的可以联系我
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过

该用户从未签到

 楼主| 发表于 2010-4-10 20:34 | 显示全部楼层
就是QEP测速模块的整个程序,哪个大大帮帮我
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

该用户从未签到

发表于 2010-4-11 16:55 | 显示全部楼层
不好意思,我用的是汇编。爱莫能助!!!!!!!!!
西莫电机论坛微信公众平台正式上线!★详情请点击★ 西莫电机论坛会员交流专用群欢迎您西莫电机论坛加群请注明论坛用户名及所从事专业,否则不予通过
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|西莫电机圈 ( 浙ICP备10025899号-3 浙公网安备:33028202000436号

GMT+8, 2024-11-24 10:59 , Processed in 0.094518 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表