lucky_girl 发表于 2010-6-10 13:52:23

步进电机加速度程序分析

程序功能是用定时器0定时,通过修改定时器初值,达到加速的功能。程序试验过程中已经有加速过程,但是最大只能到500HZ ,步知道什么原因。本来想让信号从100HZ一直慢慢加速到16KHZ   .程序如下,请各位大侠帮分析一下,程序问题出在哪里?
#include<W78E58B.H>
#define uchar unsigned char
#define uint unsigned int
sbit dir=P1^0;
sbit en=P1^1;
sbit clk=P1^2;
sbit start=P1^3;   
sbit stop=P1^4;
uint rate;
uchar flag1,flag2;
uint i=50000;

void main()
{

EA=1;
ET0=1;
TR0=1;
TMOD=0X01;
TH0=(65536-i)/256;
TL0=(65536-i)%256;   
while(1)
       {
    ;
   }
}

void t0(void) interrupt 1 using 0
{

TH0=(65536-i)/256;
TL0=(65536-i)%256;
if(i>40)   
{
    i=i-20;
}

   
else
   {
   i=20;                  
}   

    clk=~clk;
}


 

lucky_girl 发表于 2010-6-10 14:53:57

自己UP下

somethingfly 发表于 2010-6-10 14:59:18

步进电机本身有频率上限的,如果接近这个限制往往会丢步。如果超过就转不起来。

18455668 发表于 2010-6-10 15:39:52

顶!

dreampet 发表于 2010-6-10 15:45:51

搬个板凳看美女楼主

bulk 发表于 2010-6-10 18:52:32

电机频率10K都可以的 。

5880527 发表于 2010-6-11 13:34:22

78E58速度有限,在脉冲频率比较高时定时器会消耗很多时间,查表最省时,而且还可以得到比较复杂加速度方式

bulk 发表于 2010-6-13 13:22:06

6楼说的有道理问题解决了 把赋初值那段程序放到中断服务程序外面去做,就可以了

5880527 发表于 2010-6-17 16:52:30

楼主换马甲了?

8s209 发表于 2010-7-7 21:55:51

mark

CRGTOM 发表于 2010-7-13 10:48:25

在中断里修改变量的方法是不行的,你可以用指针操作。

TRINAMIC 发表于 2010-8-7 22:41:38

TMC428和TMC223 芯片自带加减速控制功能
www.trinamic.com

yikewk 发表于 2010-8-13 08:44:56

同样困惑中,16KHz是不是有点高了啊

tbbt 发表于 2010-8-13 10:58:02

加高点驱动电压可以提高频率上限

tongyf 发表于 2010-11-20 16:52:03

学习

mcu_001 发表于 2010-11-20 17:21:24

谁又把luck_girl顶起来了?

yun_yue 发表于 2011-12-29 09:28:58

这个是这样滴,我想,步进电机有个起步转速,一般是10--100RPM,对于步距是0.9度的电机,脉冲周期是1.5--15ms,那也就有个频率范围。QQ243237113,希望大家多交流。

zzz1367 发表于 2011-12-29 09:47:37

学习

tdyso_zmh 发表于 2011-12-29 12:43:21

你可以用示波器测一下,看出来的信号的频率是多少啊?

cj85 发表于 2012-1-15 11:54:03

学习

kiracl 发表于 2012-2-26 17:17:34

首先,得看你选用的步进电机最大能跑多快,有个矩频特性曲线的,快了以后,转矩下降,带不动负载就没意义了;

然后是变速,从低速开始,每一次变完速度之后,需要有个稳定步数。比如你从50Hz起步,走x步,变到60Hz,再走y步之后才能变到70Hz,否则电机跟不上的。越往后,稳定步数越得多,比如50到60,中间走个10个脉冲就行,500到550,中间可能就得走1000个脉冲了;

最后是速度上限,你在中断里临时计算初值,是很费时间的,即使在外面计算初值也一样费时间,这样就导致你不可能产生很高频率的脉冲,1K基本就是极限值了。将定时器设定在自动重装模式,然后将所有初值全部算好了(比如50Hz对应的初值,55Hz对应的初值,每隔5Hz或多少初值都算好),做成一张表,通过算法去表中取合适的值,即能方便变速,又能达到比较高的频率。

cocom 发表于 2012-8-23 15:40:53

现在你的电机最高能跑多少rpm?

yuanjingjie 发表于 2012-8-23 16:01:30

我C语言不太行,不过从你这个程序看,问题出在你的那个运算上,定时器的值要做成表的形式,用的时候直接读取,这样输出的频率会高很多

zhuyl456 发表于 2013-3-19 13:45:07

程序问题出在定时器赋值那一块!运用变量改变定时器值,非常耗时间,所以导致频率上不去

PRO 发表于 2013-3-20 10:16:48

kiracl 发表于 2012-2-26 17:17 static/image/common/back.gif
首先,得看你选用的步进电机最大能跑多快,有个矩频特性曲线的,快了以后,转矩下降,带不动负载就没意义了 ...

高手正解!

lujian19871214 发表于 2013-7-10 08:35:08

学习中……

rayingpx 发表于 2013-10-9 23:50:59

学习中!

zhdo1983 发表于 2013-10-10 23:03:42

嗯,学习了

xou822 发表于 2013-10-11 09:10:34

谢谢了 学习了

zxd08 发表于 2013-10-11 10:01:46

中断里的任务越少越好,一般都是设置标志位,在主程序外面实现
页: [1]
查看完整版本: 步进电机加速度程序分析