打印

我的dsp的成长之路------此贴只赠给我自己

[复制链接]
楼主: meng219902
手机看帖
扫描二维码
随时随地手机跟帖
121
meng219902|  楼主 | 2012-7-5 23:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
今天是我这两周以来可以放松的一个晚上,因为我总结了我买的云台步进电机不转的传说,突然感觉身体好累。。。
这两周来我是查遍关于步进电机的资料(先前我以为那个步进电机是四相五线的,查了两三天后再跟老师的电话交谈中发现可能这个步进电机是四相六线的)
刚开始老师给我了两个步进电机驱动TB6560,这个驱动我也查了两天,查的那些资料没有跟我那个驱动完全的相同的(我查资料就是为了知道怎么连线)。。。(这些好像都说过了)
连好步进电机与驱动的线后,我就开始了控制驱动和“猜”线序的生活,我先用的单片机通过引脚输出0、1来产生方波(我以为这样就可以了,满足驱动的CLK要求),然后就是“猜”线序了,刚开始我还以为有16种线序呢,后来才意识到算错了,是24种,(对了,在连接电路的时候,关于单片机的GND是否与外部电源的GND连在一起想了一阵子,不过还是试试才知道的)第一次试完24种后,给我的感觉就是电机里面有转动的声音,但是外面不转(这个我查过,可能他说的对“线序”问题和驱动连接的问题),有的连上没有那种声音,我就意识到那些没有声音的接法是错的(可能说成接反了吧),期间我还怀疑是不是我输出方波的电压不够呢?3.3V 那个驱动模块需要5V的,我又设计了一个放大电路,但是还是。。。(不对,放大了之后才有电机转动的声音的,但是不动)
这下子我给我弄的没有了信心,我去找老师,希望他能够给我一些指点,但是由于这两周是我们CDIO周,他也很忙,我去了有很多同学围着他,他很无奈的给我另一个驱动和一个步进电机,说这两周我很忙,你先回去自己再弄弄吧,等下周我不忙了,我和你一起看看,我很失落的回来了,这就相当于没有指点。。。
周一拿到了第二个驱动和步进电机,我依然用单片机和原来的程序实验,还是只有声音不转动,那时候我怀疑可能是老师给我的步进电机线序也接错了,但是老师说了,这个线序是对的,所以我相信他,我就开始怀疑我的程序有问题,我一直改。。。但是还是不成功,我在被逼无奈的时候突然奇想,要不就用DSP试试吧,可能我用单片机产生的方波不正规呢?
CCS里面有原来我自己写的PWM,我用GPIO0输出方波,刚开始我担心dsp引脚电压不够是不要放大一下,但是后来老师告诉我不需要,直接连就可以,但是还是。。。我还以为是不是pwm有问题了,我又自己定义了GPIO16,通过1、0来产生方波(跟单片机一样),还是。。。不行
我又一次失落了,但是当我从失落中清醒的那一刻,突发奇想,看到了那个细分的拨码盘,我把细分到最低的,再次打开电源下载程序,打开外接电源,步进电机转了,而且比较快,当时的心情是我终于可以松一口气了,然后我不断的实验,拨动拨码盘,16细分的他转动的更快了,其他的就不转了,就跟刹车了一样。
我以为这样我就可以让云台的步进电机转起来了吧,没想到我试了24种线序后,依然像单片机一样,我再次陷入了沉思,怎么回事?拨码盘的事?。。。我再一次突发奇想,一个方波的占空比我们可以设置,那一个周期的时间呢?(其实我知道,但是忘了,学PWM的时候),我把一个方波的周期变长了(我记得没错的话应该是16倍),然后通电。。。电机缓慢的转动,我看到了希望,然后我把周期变短(4倍),我看到了,原来云台带的板子控制步进电机转动的速度,然后我不断的改变周期时间(6倍、8倍、2倍。。。)和占空比,但是调来调去,还是只能达到那个速度(最快的),我一想买云台的时候就说最快26度/秒,是不是只能这么快啊,等着有时间再问问老师吧。

使用特权

评论回复
122
meng219902|  楼主 | 2012-7-5 23:22 | 只看该作者
程序

QQ截图20120705232122.png (25.72 KB )

QQ截图20120705232122.png

使用特权

评论回复
123
fredcong| | 2012-7-6 13:57 | 只看该作者
谢谢楼主了!

使用特权

评论回复
124
meng219902|  楼主 | 2012-7-7 22:32 | 只看该作者
我现在的任务就是控制脉冲个数从而控制步进电机转动的角度,我不知道我的那个步进电机减速比是多少的,但是我估算了一下10秒转1圈,一个脉冲周期是80us,所以说转一度需要347个脉冲,我的驱动细分是0.9度的。
我写了一个关于PWM中断的程序,但是那个中断不产生,我不知道是怎么回事,接下来我将把这个问题弄明白,
#include"DSP28x_Project.h"

interrupt void epwm1_timer_isr(void);
void InitEPwm1Example(void);
void delay_loop(int16 m)
{
        while(m--);
}

Uint32 Epwm1TimerIntCount;

void main(void)
{
        InitSysCtrl();
        InitEPwm1Gpio();
       
        EALLOW;
                GpioCtrlRegs.GPAMUX2.bit.GPIO16=0;
                GpioCtrlRegs.GPADIR.bit.GPIO16=1;
        EDIS;
       
        DINT;
        InitPieCtrl();
        IER=0x0000;
        IFR=0x0000;
        InitPieVectTable();
        EALLOW;
                PieVectTable.EPWM1_INT=&epwm1_timer_isr;
        EDIS;
        EALLOW;
                SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
        EDIS;
        InitEPwm1Example();
        EALLOW;
                SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
        EDIS;
        Epwm1TimerIntCount=0;
        IER|=M_INT3;
        PieCtrlRegs.PIEIER3.bit.INTx1=1;
        EINT;
        ERTM;
       
        while(1)
        {
/*                GpioDataRegs.GPADAT.bit.GPIO16=1;
                delay_loop(10000);
                GpioDataRegs.GPADAT.bit.GPIO16=0;
                delay_loop(10000);
                */
        }
}

void InitEPwm1Example(void)
{
        EPwm1Regs.TBPRD=500;
        EPwm1Regs.CMPA.half.CMPA=410;

        EPwm1Regs.TBPHS.half.TBPHS=0;
        EPwm1Regs.TBCTR=0;
        EPwm1Regs.TBCTL.bit.CTRMODE=0;  //TB_COUNT_UP
        EPwm1Regs.TBCTL.bit.PHSEN=0; //TB_DISABLE
        EPwm1Regs.TBCTL.bit.PRDLD=0;  //TB_SHADOW
        EPwm1Regs.TBCTL.bit.SYNCOSEL=0;
        EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0x3;       // Clock ratio to SYSCLKOUT
          EPwm1Regs.TBCTL.bit.CLKDIV = 0x2;
    EPwm1Regs.ETSEL.bit.INTSEL = 0x4;     // Select ET_CTRU_CMPA
    EPwm1Regs.ETSEL.bit.INTEN = 0;  // Enable INT
    EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;

   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
   
   EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;             // Set PWM1A on Zero
        EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
}

interrupt void epwm1_timer_isr(void)
{
        Epwm1TimerIntCount++;
        if(Epwm1TimerIntCount==9000)
        {
                Epwm1TimerIntCount=0;
                EALLOW;
                SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
                EDIS;
                GpioDataRegs.GPADAT.bit.GPIO16=1;
        }
        EPwm1Regs.ETCLR.bit.INT = 1;

   PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
}

使用特权

评论回复
125
meng219902|  楼主 | 2012-7-7 22:36 | 只看该作者
如果哪位前辈看出来我哪里写的不对,请指点一下
我对于PWM怎么开始产生到结束,不知道怎么控制,请前辈指点
  是  SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0/1;就可以控制PWM的产生和结束了吗?
还有我感觉我配置的中断还可以啊,怎么没有产生中断呢?

使用特权

评论回复
126
Hlijun| | 2012-7-12 13:14 | 只看该作者
bump up.

使用特权

评论回复
127
meng219902|  楼主 | 2012-7-12 22:55 | 只看该作者
129# hkjc556888

使用特权

评论回复
128
meng219902|  楼主 | 2012-7-12 22:55 | 只看该作者
130# meng219902

???

使用特权

评论回复
129
meng219902|  楼主 | 2012-7-12 23:08 | 只看该作者
129# hkjc556888

???
您的意思是?

使用特权

评论回复
130
meng219902|  楼主 | 2012-7-12 23:10 | 只看该作者
128# Hlijun

您的意思我有点看不懂(因为我才学DSP,有些术语还没有看到,不懂)请您说清楚点,好吗

使用特权

评论回复
131
meng219902|  楼主 | 2012-9-1 08:59 | 只看该作者
已经很久没有写了,应该快两个月了,前一个月颓废了(各种原因吧),我是离 开学半个月前开始我这个项目的继续设计(主要是编程),中间呢,遇到了很多“编程”上的问题,有的是求助咱们论坛,有的是从GOOGLE搜的,还有的就是TI论坛那里,他们给了我很多帮助,我也知道了很多(应该说懂,因为可能这些问题对于你来说是小问题,但是对于我来说---其实也是小问题,但是我不懂,我经过查资料对“编程”有了更深的了解,也知道了---哦,原来我从前的想法是错误的啊)。
现在呢,这个项目的“轮廓”(就是当初我设想的最简单的能达到的结果)已经出来了,但是由于这个步进电机没有什么可以反馈的数据,这导致我程序编写的与它实际走的角度存在误差(虽然我已经用程序减小了误差产生的机率,但是他还会有的),这样很头疼,你总不能想那些大型或者精密的步进电机装一个光传感器然后用PID系统来处理这个误差,我倒是想,但是对于一个云台来说,对于一个很普通的步进电机来说,这。。。有点。。。(说不出来)。
下一步,我打算看看有没有这样可以减小误差的方法,如果不能我将对这个项目延伸,加I2C(SCI)让上位机控制,再加一个手柄控制的,看看能不能用网络控制(对于SPI,eCAN这些通信传输的。。。怎么叫他们呢?那我就叫他们“协议”吧,因为我对那些有一定规律(就是开始需要怎么写,发送什么能告诉单片机,或者DSP他们已经开始了,还有接收的时候。。。。)传输数据的方法都叫他“协议”)。
这就是我现在要完成的任务。

使用特权

评论回复
132
捏乒乓球| | 2012-9-19 20:51 | 只看该作者
不要太关注于DSP寄存器的操作编程,尽量用现有的API函数,应用人员重点关注算法实现。

使用特权

评论回复
133
meng219902|  楼主 | 2012-9-20 14:00 | 只看该作者
132# 捏乒乓球 xi


谢谢你的指点,API函数?这个名词我还是第一次听过呢?

使用特权

评论回复
134
meng219902|  楼主 | 2012-10-10 20:26 | 只看该作者
为找工作发愁中。。。
希望老天再能帮我一次。。。

使用特权

评论回复
135
angerbird| | 2012-10-11 17:04 | 只看该作者
我新手,跟楼主学习经验了啊,多谢分享的

使用特权

评论回复
136
meng219902|  楼主 | 2012-10-16 19:02 | 只看该作者
还有一步我就可以成功了,还有一步我就完成了这个小项目了

使用特权

评论回复
137
cy19891119| | 2012-10-16 20:58 | 只看该作者
楼主加油,我现在也开始学DSP,你给了我动力!

使用特权

评论回复
138
meng219902|  楼主 | 2012-10-24 17:16 | 只看该作者
现在的我一边在网上投着简历,一边是继续补充对DSP的了解。。。
                                       -----------大四的我们好忙

使用特权

评论回复
139
gibenlin| | 2012-10-24 17:43 | 只看该作者
努力成长吧 加油

使用特权

评论回复
140
lasbell2012| | 2012-10-24 18:24 | 只看该作者
楼主加油,支持你

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则