prozm 发表于 2009-12-9 20:45:50

做过步进电机驱动器的麻烦看一下,看别人的方案都是CPLD,难道一定要CPLD吗?

我用的方案是单片机,因为还有其他液晶等控制,打算一个芯片搞定,而且对步进精度要求不高,就是转速要求比较高,要达到10转/秒,电机是75的三相反应式步进电机(15/7.5),现在正在调试,遇到一些问题,问一下各位了,我用的是7.5的步距角,一开始没有经验,没有接电压比较器LM339,就直接用PWM控制电流了,速度差不多6转最高了,今天刚接了一个电路,图片大致如下
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_512485.jpg
(原文件名:QQ截图未命名.jpg)
就是4148和VR3组成的致回没接,电源是24V的,其他都一样,单片机用STC最新的1T的,用了32M晶振,内部定时器中断使用10US中断一次,主要就是这个问题,程序基本和原来一样,就是基准改成了10US一次,但是速度还是6转上不来,LM339一检测到电流过大,最多就10US内肯定关断这一相电流了,等到电流小于3A了重新打开,最想不通的就是,我每次换拍是0.9MS,就是进入中断90次,按照理论算下来应该有23转/秒,实际只有6转,还转的很好,也不像有失步,下面是程序,

还有一个奇怪的问题BJ_SPEED_NOW和BJ_SPEED_MAX是起始速度和最大速度,我都设置成了90没有问题,感觉这个速度下电机不用加速时间

基准时间请放心,STC是1T的而且我用的是32M晶振,算下来应该没有错的

//*****************************************中断1,定时器0中断*****************************//
/*
功能:10US中断一次,为系统提供时间基准
全局变量:变量看列表
输入变量:无
输出变量:无
局部变量:无
*/

void Funtime (void) interrupt 1 using 0
{
        TF0=0;
        TH0=0xfe;
        TL0=0xc0;                //使用定时器0,周期10US;

        BJ_CYCLE++;                                        //基准时间,每次增加100US,给加速递增稳定周期使用
        BJ_ADDCYCLE++;                                //基准时间,给加速递减周期使用

        if(BJ_CYCLE>=BJ_ZCYCLE)                        //加速过程使用,目的每BJ_ZCYCLE个周期速度递减,保证每次递减均匀
        {
                BJ_CYCLE=0;
                BJ_SPEED_NOW--;
                if(BJ_SPEED_NOW<=BJ_SPEED_MAX){BJ_SPEED_NOW=BJ_SPEED_MAX;}
        }
        if(BJ_ADDCYCLE>=BJ_SPEED_NOW)                //根据匀速递减后的速度,确定每次换拍的时间       
        {
                BJ_ADDCYCLE=0;
                BJ_BEAT++;if(BJ_BEAT>6){BJ_BEAT=0;}

        }

        switch(BJ_BEAT)//改变时序
        {
        case 0:                {OUT_STEPA=IN_STEPA;        OUT_STEPB=1;        OUT_STEPC=1;}                break;
        case 1:                {OUT_STEPA=IN_STEPA;        OUT_STEPB=IN_STEPB;        OUT_STEPC=1;}                break;
        case 2:                {OUT_STEPA=1;        OUT_STEPB=IN_STEPB;        OUT_STEPC=1;}                break;
        case 3:                {OUT_STEPA=1;        OUT_STEPB=IN_STEPB;        OUT_STEPC=IN_STEPC;}break;
        case 4:                {OUT_STEPA=1;        OUT_STEPB=1;        OUT_STEPC=IN_STEPC;}break;
        case 5:                {OUT_STEPA=IN_STEPA;        OUT_STEPB=1;        OUT_STEPC=IN_STEPC;}break;
        }
}

TRINAMIC 发表于 2009-12-9 22:16:51

推荐楼主一个3相步进驱动芯片TMC332
http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_512537.gif
(原文件名:TMC332.gif)

点击此处下载 ourdev_512538.pdf(文件大小:614K) (原文件名:tmc332_datasheet.pdf)

xiaole01 发表于 2009-12-10 00:21:54

我这有十几个步进电机,之前有一个驱动器,被我给费了,

谁有驱动器资料,发一个上来,最简单的,(5V 1A)

yunfengren 发表于 2009-12-10 06:16:56

L297.L298的.简单驱动电流也大

prozm 发表于 2009-12-10 08:17:12

谢谢楼上的,大致看了一下,L297,L298是两相四相的控制芯片,我的电机是三相的,用不了

hetao7241 发表于 2009-12-10 08:19:13

1楼的东西好像价格可观。

prozm 发表于 2009-12-10 08:25:13

是的,估计不太买的到得

astudent 发表于 2009-12-10 08:26:42

没看到CPLD相关的问题啊!
页: [1]
查看完整版本: 做过步进电机驱动器的麻烦看一下,看别人的方案都是CPLD,难道一定要CPLD吗?