步进电机加速度程序分析
程序功能是用定时器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;
}
自己UP下 步进电机本身有频率上限的,如果接近这个限制往往会丢步。如果超过就转不起来。 顶! 搬个板凳看美女楼主 电机频率10K都可以的 。 78E58速度有限,在脉冲频率比较高时定时器会消耗很多时间,查表最省时,而且还可以得到比较复杂加速度方式 6楼说的有道理问题解决了 把赋初值那段程序放到中断服务程序外面去做,就可以了 楼主换马甲了? mark 在中断里修改变量的方法是不行的,你可以用指针操作。 TMC428和TMC223 芯片自带加减速控制功能
www.trinamic.com 同样困惑中,16KHz是不是有点高了啊 加高点驱动电压可以提高频率上限 学习 谁又把luck_girl顶起来了? 这个是这样滴,我想,步进电机有个起步转速,一般是10--100RPM,对于步距是0.9度的电机,脉冲周期是1.5--15ms,那也就有个频率范围。QQ243237113,希望大家多交流。 学习 你可以用示波器测一下,看出来的信号的频率是多少啊? 学习 首先,得看你选用的步进电机最大能跑多快,有个矩频特性曲线的,快了以后,转矩下降,带不动负载就没意义了;
然后是变速,从低速开始,每一次变完速度之后,需要有个稳定步数。比如你从50Hz起步,走x步,变到60Hz,再走y步之后才能变到70Hz,否则电机跟不上的。越往后,稳定步数越得多,比如50到60,中间走个10个脉冲就行,500到550,中间可能就得走1000个脉冲了;
最后是速度上限,你在中断里临时计算初值,是很费时间的,即使在外面计算初值也一样费时间,这样就导致你不可能产生很高频率的脉冲,1K基本就是极限值了。将定时器设定在自动重装模式,然后将所有初值全部算好了(比如50Hz对应的初值,55Hz对应的初值,每隔5Hz或多少初值都算好),做成一张表,通过算法去表中取合适的值,即能方便变速,又能达到比较高的频率。 现在你的电机最高能跑多少rpm? 我C语言不太行,不过从你这个程序看,问题出在你的那个运算上,定时器的值要做成表的形式,用的时候直接读取,这样输出的频率会高很多 程序问题出在定时器赋值那一块!运用变量改变定时器值,非常耗时间,所以导致频率上不去 kiracl 发表于 2012-2-26 17:17 static/image/common/back.gif
首先,得看你选用的步进电机最大能跑多快,有个矩频特性曲线的,快了以后,转矩下降,带不动负载就没意义了 ...
高手正解! 学习中…… 学习中! 嗯,学习了 谢谢了 学习了 中断里的任务越少越好,一般都是设置标志位,在主程序外面实现
页:
[1]