花了一个晚上,第一次玩转步进电机的感觉真好!感谢阿莫论坛,特别感谢ada1983所提供的
如题~~~感谢阿莫论坛,特别感谢ada1983所提供的步进电机加速曲线!http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693569OI1XK0.jpg
(1个方向转10圈,然后反向逐步每转一圈停顿一下,转够10圈) (原文件名:步进电机运转中.jpg)
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693570XQ2XCG.jpg
(原文件名:运转前后位置保持一致.jpg)
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693602ZENQJ4.jpg
(原文件名:运转一.jpg)
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693603XYHBRW.jpg
(原文件名:运转二.jpg)
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_693604UG7X98.jpg
(原文件名:停止.jpg)
编辑原因,相片全部更新楼主位.
也拍了视屏,格式不对可能传不上来,是MPG格式的 沙发坐了,楼主佛山那里啊?上门膜拜去! 晕,还得有加速曲线的啊 编辑原因,相片更新到楼主位 呵呵~~这么快就到了3楼了 回复【1楼】21006091 無奈
沙发坐了,楼主佛山那里啊?上门膜拜去!
-----------------------------------------------------------------------
我在平洲这边 回复【2楼】Jigsaw
晕,还得有加速曲线的啊
-----------------------------------------------------------------------
没有的话,直接上高速好像不会转的.等一下再试试 /*---说明---
此程序是用来控制步进马达加减速的测试程序
感谢阿莫论坛,坛友 ada1983 提供的步进电机加速度曲线表
程序设计思路:利用定时器产生脉冲来控制步进电机的运转
本想用24M的,结果下载板上的是18.432M的,以下是按18.432M的晶振算的...
阿莫论坛:zhuisuoji 点?潇洒.
*/
#include "stc12c2052AD.H"
#define PulNumb 200
#define Isp_Addr_H 0x10
unsigned intPulseload; //--脉冲频率初值
unsigned char loadaddr;//--脉冲频率初值地址
unsigned char T0CountOV; //--T0溢出数,每2次溢出计壹个脉冲
unsigned intPulCount;//--脉冲数1(PulCount)=2(T0CountOV);
unsigned char StepCount; //--步数 1(StepCount)=8(PulCount);
unsigned intCycleCount;//--转数 1(CycleCount)=200(StepCount);
//unsigned intPulNumb; //--转数低于
bit AddSub_Speed_f,Direction_f;//--加减速标志,方向标志
sbit key_Input = P1^0;//--启动键
sbit Direction_Out = P3^5;//--方向输出
sbit Pulse_Out = P3^7;//--脉冲输出
/*--原值表说明:8M晶振,2相4线(1.8度)步进电机,2细分,250~3500Hz的加速频率表.
//--(360/1.8)*2=200*2=400个脉冲/转.
//--180脉冲转角度=180*(1.8/2)=180*0.9=162度(达到3500HZ)
//--下表的每个脉冲只走半步,即每半步跳变一次频率,
//--比如:到达250Hz时, 走完一步的频率是 250Hz/2=125Hz
---- 到达3500Hz时,走完一步的频率是 3500Hz/2=1750Hz
unsigned int xdata Pulse180[]={
32000,27352,21959,17755,14987,13241,12003,11065,10321, 9711,
9200, 8762, 8383, 8049, 7753, 7488, 7248, 7031, 6832, 6649,
6480, 6324, 6179, 6043, 5917, 5798, 5686, 5580, 5480, 5386,
5296, 5211, 5129, 5052, 4978, 4907, 4840, 4775, 4712, 4653,
4595, 4540, 4486, 4435, 4385, 4337, 4291, 4246, 4203, 4161,
4120, 4080, 4042, 4005, 3969, 3933, 3899, 3866, 3834, 3802,
3771, 3741, 3712, 3684, 3656, 3629, 3602, 3576, 3551, 3526,
3502, 3478, 3455, 3432, 3410, 3388, 3367, 3346, 3326, 3306,
3286, 3267, 3248, 3229, 3211, 3193, 3176, 3159, 3142, 3125,
3109, 3093, 3077, 3061, 3046, 3031, 3016, 3002, 2988, 2974,
2960, 2946, 2933, 2919, 2906, 2894, 2881, 2869, 2856, 2844,
2832, 2821, 2809, 2798, 2786, 2775, 2764, 2754, 2743, 2733,
2722, 2712, 2702, 2692, 2682, 2672, 2663, 2653, 2644, 2635,
2626, 2617, 2608, 2599, 2591, 2582, 2574, 2565, 2557, 2549,
2541, 2533, 2525, 2517, 2509, 2502, 2494, 2487, 2479, 2472,
2465, 2458, 2451, 2444, 2437, 2430, 2423, 2417, 2410, 2403,
2397, 2391, 2384, 2378, 2372, 2366, 2360, 2354, 2348, 2342,
2336, 2330, 2324, 2319, 2313, 2307, 2302, 2296, 2291, 2286,
};
*/
/*根据上表算出24M,8细分的比较值
计算公式:2细分脉冲频率=8000000/32000=250Hz(半步的频率);
整步频率=250/2=125Hz;
8细分脉冲频率=125*8=1000Hz;
8细分定时器比较值=24000000/1000=24000;
也可以这样算:8细分定时器比较值=((32000*3)*2)/8=24000;
*/
//--24M 8细分的脉冲定时值
//--8细分时每个脉冲走的角度=1.8/8=0.225,走到162度要达到3500Hz,需发脉冲总数为162/0.225=720个8细分脉冲,
//--每个定时值需发脉冲数=720/180=4个8细分脉冲
//--此表每一次中断取反引脚来产生脉冲,二次为一个脉冲周期,
//--每2次中断记录一个脉冲,每4个脉冲换一个定时初值,直到最后一个达到3500Hz的速度,完成启动-->加速-->恒速
//--反之则进行:恒速-->减速-->停止
//--此表是18.432M晶振算的8细分参数,此表加到200个脉冲
unsigned int code PulseTab[]={
56320 , 57659 , 59212 , 60423 , 61220 , 61723 , 62079 , 62349 , 62564 , 62739 ,
62886 , 63013 , 63122 , 63218 , 63303 , 63379 , 63449 , 63511 , 63568 , 63621 ,
63670 , 63715 , 63756 , 63796 , 63832 , 63866 , 63898 , 63929 , 63958 , 63985 ,
64011 , 64035 , 64059 , 64081 , 64102 , 64123 , 64142 , 64161 , 64179 , 64196 ,
64213 , 64228 , 64244 , 64259 , 64273 , 64287 , 64300 , 64313 , 64326 , 64338 ,
64349 , 64361 , 64372 , 64383 , 64393 , 64403 , 64413 , 64423 , 64432 , 64441 ,
64450 , 64459 , 64467 , 64475 , 64483 , 64491 , 64499 , 64506 , 64513 , 64521 ,
64527 , 64534 , 64541 , 64548 , 64554 , 64560 , 64566 , 64572 , 64578 , 64584 ,
64590 , 64595 , 64601 , 64606 , 64611 , 64616 , 64621 , 64626 , 64631 , 64636 ,
64641 , 64645 , 64650 , 64654 , 64659 , 64663 , 64667 , 64671 , 64675 , 64679 ,
64684 , 64688 , 64691 , 64695 , 64699 , 64703 , 64706 , 64710 , 64713 , 64717 ,
64720 , 64724 , 64727 , 64730 , 64734 , 64737 , 64740 , 64743 , 64746 , 64749 ,
64752 , 64755 , 64758 , 64761 , 64764 , 64766 , 64769 , 64772 , 64775 , 64777 ,
64780 , 64782 , 64785 , 64787 , 64790 , 64792 , 64795 , 64797 , 64800 , 64802 ,
64804 , 64806 , 64809 , 64811 , 64813 , 64815 , 64818 , 64820 , 64822 , 64824 ,
64826 , 64828 , 64830 , 64832 , 64834 , 64836 , 64838 , 64840 , 64842 , 64844 ,
64846 , 64847 , 64849 , 64851 , 64853 , 64855 , 64856 , 64858 , 64860 , 64862 ,
64863 , 64865 , 64867 , 64868 , 64870 , 64872 , 64873 , 64875 , 64876 , 64878 ,
64882 , 64884 , 64886 , 64887 , 64889 , 64890 , 64892 , 64893 , 64895 , 64896 ,
64900 , 64902 , 64903 , 64905 , 64906 , 64908 , 64909 , 64911 , 64912 , 64913 ,
};//--此表每个参数T0溢出8次(即8/2个脉冲走半步)更新一次参数.
//---系统初始化
void sys_Initial(void)
{
AUXR= 0xc0;//--1T方式
P1 = 0Xff;
P1M1= 0x00;//
P1M0= 0x00;//
P3 = 0Xff;
P3M1= 0xe0;//1110 0000
P3M0= 0x00;//0000 0000
}
//---------------------------------------------------------------------
//---定时器0初始化
void TMRx_Initial(unsigned int Cycle)
{
Pulseload= 0; //--脉冲频率初值
loadaddr = 0; //--脉冲频率初值地址
T0CountOV= 0; //--T0溢出数,每2次溢出计壹个脉冲
PulCount = 0; //--脉冲数1(PulCount)=2(T0CountOV);
StepCount= 0; //--步数 1(StepCount)=8(PulCount);
CycleCount = Cycle;//--转数 1(CycleCount)=200(StepCount);
AddSub_Speed_f= 1; //--启动加速
// TMOD Bit; 7 6 5 4 3 2 1 0
// GATE1C/T1#M1_1M1_0GATE0C/T0#M0_1M0_0
TMOD = 0x01;
TL0= 0;
TH0= 0;
// TCON Bit; 7 6 5 4 3 2 1 0
// TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
// TCON = 0x10;//TR0= 1;
// IE Bit; 7 6 5 4 3 2 1 0
// EA EPCA_LVD EADC_SPI ES ET1 EX1 ET0 EX0
IE = 0x82;
TR0=1;
while(CycleCount!=0);
}
//---------------------------------------------------------------------
//---延时程序
/*
void dalay_us(unsigned int mid)
{
unsigned int i;
for ( i=0;i<mid;i++)
;
}
*/
void dalay_1ms(void)
{
unsigned inti;
for ( i=0;i<1000;i++)
;
}
void dalay_ms(unsigned intmid)
{
unsigned inti;
for ( i=0;i<mid;i++)
dalay_1ms();
}
//---主程序---
void main(void)
{
unsigned int time_ms,looptime;
sys_Initial();
CycleCount = 0;//--转数 1(CycleCount)=200(StepCount);
while(1)
{
time_ms=50;
loopus:
if(key_Input==0)//--每按一次键,方向取反
{
dalay_1ms();
if(--time_ms!=0)
{
goto loopus;//--消抖查询
}
if(CycleCount==0)
{
TMRx_Initial(10);//--一个方向转10圈
Direction_Out = ~Direction_Out;//--方向
dalay_ms(100);
looptime=10;
do{
TMRx_Initial(1);//--反向每转1圈停顿10ms,转够10圈返回原点
dalay_ms(10);
}while(--looptime!=0);
}
}
}
}//--main_end;
//--------------------------------------------------------------------
void Timer0_Routine(void)interrupt 1
{
static unsigned int th0_buf;
if((CycleCount==1)&&(StepCount==100))//--转到最后半圈时转入减速程式
{
AddSub_Speed_f = 0;//--启动减速
}
if(++T0CountOV>=2)//每2次溢出计一个脉冲输出
{
if(++PulCount>=8)//每8个脉冲计一步,即走了1.8度
{
if(++StepCount>=200)//每200步为一转
{
if(--CycleCount==0)//总转数减1
{
TR0=0;
}
StepCount=0;
}
PulCount=0;
}
T0CountOV=0;//计完一次脉冲后溢出计数清零
}
if(AddSub_Speed_f)
{
if(PulCount==4)
{
if(loadaddr<PulNumb)
{
Pulseload=PulseTab;//--启动时加速
}
}
}
else
{
if(PulCount==4)
{
if(loadaddr>0)
{
Pulseload=PulseTab[--loadaddr];//--停止时减速
}
}
}
loopth0:
th0_buf=TH0;
if(th0_buf!=TH0)
{
goto loopth0;
}
th0_buf = Pulseload +((th0_buf<<8)|TL0);//64878
TH0= th0_buf>>8;
TL0= th0_buf;
Pulse_Out=~Pulse_Out;//--输出脉冲
} 回复【7楼】armok 阿莫
恭喜。
-----------------------------------------------------------------------
老大也来恭喜呵呵~~~ MARK 不错,学习! 一个晚上就能玩转呀,LZ真厉害。
我用M168都搞了一周了 学习了 mark 步进电机驱动 mark!!!!!!!!! 支持下… 不错,单片机在这里不知道起到什么作用? 回复【13楼】wxws 我行我素
一个晚上就能玩转呀,lz真厉害。
我用m168都搞了一周了
-----------------------------------------------------------------------
主要是ada1983所提供的步进电机加速曲线的功劳,三年前定JJ时就想玩步进电机了,由于从来没接触过,所以也买了些此类书籍看过.原理
大概是懂了,但是就是没有着手去玩过,去过广州新赛格电子市场,那次差点就买了电机与驱动器,由于那个MM不会的,我又一知半解的,让
她通电试转了一下,结果电机转得很慢,没几下就发烫的厉害,结果以为是她的质量不好没买成,其实应该是电流没调对,太大了.这样一晃
就是三年多.这不JJ回来了,对这个步进电机的兴趣一下子又上来了,之前也看过ada1983贴子,也是没看懂,后来看到他们的一问一答精彩
讲解后才明白的,然后决定一试... 支持楼主 第一次上传的视屏...
http://v.youku.com/v_show/id_XMzIxMzgzMDky.html 嘿嘿,能帮到别人就好啊:)
题外话,如果电机是小电阻,大电流的高速型的,可以将速度加倍试试的,我提供的那个曲线表其实是整步的速度,即启动的时候就是以第一整个脉冲250Hz启动的,你刚好把它减半处理了。电机及驱动允许的话可以不减半试试,跑的更快,更HIGH,当然实际运用时的效率也就更高了:)
-------------------------------------------------------------------------------------------------------------------
呃,看了下你的视频,感觉速度没减半么,呵呵:) 回复【22楼】ada1983
-----------------------------------------------------------------------
这个视屏是因为太激动了拍的,其实后来运转时我发现它没有按照我的意思来减速处理,还没有减到最低速就已停止了,今天我又花了心思
去改过来了,开始运转一定是由低转起的-->每半步更新参数加速-->到最高速-->根据运转即将结束时剩下200个脉冲时开始进入减速处理
-->根据启动时倒过来更新参数-->直到停止.现在这个程序如果开始到结束不到200个脉冲的,也可实现对半分,一半加速一半减速.正在上
传视屏,请高手鉴定~~~呵呵~~ 以下是C文件,请帮手看看,也不知道对不对,改来改去的,注释部分有点对不上的
点击此处下载 ourdev_694542IK517F.zip(文件大小:4K) (原文件名:12c2052_Test.zip) 回复【22楼】ada1983
嘿嘿,能帮到别人就好啊:)
题外话,如果电机是小电阻,大电流的高速型的,可以将速度加倍试试的,我提供的那个曲线表其实是整步的速度,即启动的时候就是以第一整个脉冲250hz启动的,你刚好把它减半处理了。电机及驱动允许的话可以不减半试试,跑的更快,更high,当然实际运用时的效率也就更高了:)
-------------------------------------------------------------------------------------------------------------------
呃,看了下你的视频,感觉速度没减半么,呵呵:)
-----------------------------------------------------------------------
我的换算法是:[ 32000*2.304(换成18.432M的值)*2 ]/8 = 8细分的(18.432M)频率定时值;由于我采用T0定时溢出产生方波,所以正脉冲只能是频率周期的1/2才是,应该没有减半处理,而且初值还得用65536来减,因T0定时器是向上计时的.
改过后的这个视屏
http://v.youku.com/v_show/id_XMzIxOTI0MDA4.html mark.. 支持下… 曲线这样做,我晕 步进详解,顶 mark 步进电机驱动 回复【22楼】ada1983
-----------------------------------------------------------------------
请高手鉴定~~~
http://v.youku.com/v_show/id_XMzIxOTI0MDA4.html
刚刚测了下这个信浓电机电阻是 2.8 欧姆 ,我手上还有在传真机上拆下来的42电机,电阻是 6.5 欧姆,经测试过也是1.8度的电机,高度大小跟阿莫的信浓电机都一样,只是电阻不一样.
在实际运转过程中,二种电机比较是,电流不变的情况下,信浓电机发热量小,噪音小,而传真机上拆下来的发热大很多,噪音也大点,而且在带动带有阻尼齿轮的情况下有时会出现高速卡死现象.应该是力矩小的原因.下面是传真机的电机图片
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_694685OPYXCN.jpg
(原文件名:岩奇传真机上的2相42步进电机型号.jpg)
http://cache.amobbs.com/bbs_upload782111/files_47/ourdev_694686HWB848.jpg
(原文件名:岩奇传真机上的步进电机共2个.jpg) mark 原来传真拆下来的步进电机型号是:17PM-M012-G4 的可以上高速
而另一个型号是:17PM-M012-G3上不了高速,会出现高速卡住现象.
二电机应该只是出轴长短不一样而已.
修改原因,其实二个电机都一样上不了高速,刚刚又反复测试了一下,也是一样有时会在高速时卡住现象... 晕,步进电机还麻烦哟,原来17PM-M012-G3;17PM-M012-G4 这二个电机一样可以上高速的呀.
在这里说明一下,免得误导人家.刚刚把电流调小试了一下,反复测试高速没有问题的,声音也好听很多.原来步进电机不仅频率要合适,电流也一样要调对 mark 不错,学习! 回复【31楼】zhuisuoji 点?潇洒
-----------------------------------------------------------------------
只要步数正确,加减速可以实现就OK了,正常使用也没问题。
信浓电机是2.8欧的,假设驱动电压大约是6V(一般42恒流电机也差不多就这么大电压),电流应该有2A,电机上高速没什么问题。如果电机内阻很大,算出电流很小,那么可能电机是个恒压型的电机(大致估算,不是绝对的,但是大多数情况下如此)。
至于拆下的那个电机,电阻比较大,估计实际使用时电流在1A左右,太大了肯定发热严重。由于参数的因素,这个电机跑的应该不会比信浓那个快。这个电机适用于低速(或者中速吧)。 mark 回复【37楼】ada1983
回复【31楼】zhuisuoji 点?潇洒
-----------------------------------------------------------------------
只要步数正确,加减速可以实现就ok了,正常使用也没问题。
信浓电机是2.8欧的,假设驱动电压大约是6v(一般42恒流电机也差不多就这么大电压),电流应该有2a,电机上高速没什么问题。如果电机内阻很大,算出电流很小,那么可能电机是个恒压型的电机(大致估算,不是绝对的,但是大多数情况下如此)。
至于拆下的那个电机,电阻比较大,估计实际使用时电流在1a左右,太大了肯定发热严重。由于参数的因素,这个电机跑的应该不会比信浓那个快。这个电机适用于低速(或者中速吧)。
-----------------------------------------------------------------------
是的,那二个拆下来的电机,比信浓电机电流小,如果让它能跑8细分21.28KHz的话,电流还得调小,但半流时就没力了,随便用手都能把它转动,.相比之下信浓电机电流大很多,半流时力矩也很大.这个信浓电机真的很超值!
现就按这曲线表来算的话,速度是 V=21.28KHz/1600=13.3(圈/秒),再化成RPM的话也有798/rpm转了,在实际应该中也不一定能用到这么高,因为力矩是个关键,再高没力也没什么意义了,就现在这个速度能用上已经甚好了.再次感谢你的分享! MARK!! 楼主是空载测试的吧,你如果加负载可能上不去 回复【41楼】ITOP
楼主是空载测试的吧,你如果加负载可能上不去
-----------------------------------------------------------------------
是的,加负载那是肯定要做的,等测了以后再说. 步进电机 细分 启动 太有趣了,有空也玩玩!~ 回复【44楼】tsewon
-----------------------------------------------------------------------
楼主带载测试下,视频放上分享下!有兴趣呀!这贴看了好几次,就是没看明白, 这加速表怎么生成的!还得请教呀! MARK mark 恭喜,我也买了几个,前几个弄了一下,可以转了。因为最近比较忙,等过几天再弄。 不错的步进电机驱动 恭喜同志的功力。 如果要调小电流才能上高速,只能说明这个曲线并不适合那个电机 恭喜哈 mark 跑得还挺欢挺准的,恭喜了 mark!!! 楼主的电机用的是什么驱动芯片?我整了几个二手电机打算照着玩。 回复【56楼】laoerge 劳尔戈
楼主的电机用的是什么驱动芯片?我整了几个二手电机打算照着玩。
-----------------------------------------------------------------------
是A3977,今天在淘宝上刚买了二块TB6560驱动板还没回来 信浓步进电机还是相当不错的。上传一个信浓步进电机的选型手册
当然,需要新的信浓电机可以联系我哦。010-62168098
点击此处下载 ourdev_703581ICCGB4.pdf(文件大小:1.57M) (原文件名:信浓公司产品目录.pdf) mark MARK 楼主,你的电路板太强了!我这样的电路板一般都扔了,看来以后也得看看情况了! 回复【61楼】xslff
楼主,你的电路板太强了!我这样的电路板一般都扔了,看来以后也得看看情况了!
-----------------------------------------------------------------------
能用的干嘛扔呀,我这个还是很新的,只不过上面有很多灰尘而已.以后你不要的集中起来给我好了.哈哈...
对了!还有一个更好的提议,捐入互助会,让有需要的朋友得到帮助. 做个记号!!改天看看 MARK!!! mark mark,学习了 回复【57楼】zhuisuoji点?潇洒
回复【56楼】laoerge 劳尔戈
楼主的电机用的是什么驱动芯片?我整了几个二手电机打算照着玩。
-----------------------------------------------------------------------
是a3977,今天在淘宝上刚买了二块tb6560驱动板还没回来
-----------------------------------------------------------------------
估么要杯具了,TB的驱动没A3977好 回复【67楼】shinehjx
...
估么要杯具了,tb的驱动没a3977好
-----------------------------------------------------------------------
不会吧?能说说为什么呢?
我买TB6560时只考虑到有3A,8细分与16细分倒是没什么关系,现在已经回来测试过空载没有什么问题,
只是现在有个现象是,如果我先开驱动器电源,再开单片机控制器电源,马达会不规则的转动,而A3977那块板不会.
估计是光藕的速度问题引起的.在开控制器电源瞬间给了一些脉冲,这个倒是好解决的.
TB6560(用的是6N137),
A3977 (用的是4N25 ), 哎。。。步进电机。。。我头大了 楼主佛山哪里? 回复【70楼】laujc 大海
楼主佛山哪里?
-----------------------------------------------------------------------
在平洲这边,大海你呢? 回复【31楼】zhuisuoji 点?潇洒
-----------------------------------------------------------------------
这样的步进电机我这里还有,学习你也来玩玩。 好的教程要MARK一下。自己网下试验~! 你好,最近我在做一个迷你的激光雕刻机。小行程的,我想的是用12单片机来处理串口传来的G代码,来控制步进电机,您觉得行的通吗??QQ472283272 mark! 楼主好强大,最近我也在弄步进电机,我的目的是做车速里程表检验仪器,以及车速传感器检测仪 要3000转以上的(对没打错,就是3000转),请问你那个加速曲线是怎么弄的,据我所知,加速好像就是两个转速之间的延时时间吧,如果我要到3000转,那么我是不是要分3000档加速呢,每一档之间的加速时间是怎么确定呢,(肯定不能都按一个速度吧)你提到的ada1983 他的文章给个地址,谢谢! 有空试验下 回复【75楼】WinLiu
mark!
----------------------------------------------------------------------- 回复【76楼】zl_123
楼主好强大,最近我也在弄步进电机,我的目的是做车速里程表检验仪器,以及车速传感器检测仪 要3000转以上的(对没打错,就是3000转),请问你那个加速曲线是怎么弄的,据我所知,加速好像就是两个转速之间的延时时间吧,如果我要到3000转,那么我是不是要分3000档加速呢,每一档之间的加速时间是怎么确定呢,(肯定不能都按一个速度吧)你提到的ada1983 他的文章给个地址,谢谢!
-----------------------------------------------------------------------
我一点也不强大~~~具体怎么算那要问他了ada1983
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4719105&bbs_page_no=1&search_mode=1&search_text=一直&bbs_id=1027 回复【74楼】472283272
你好,最近我在做一个迷你的激光雕刻机。小行程的,我想的是用12单片机来处理串口传来的g代码,来控制步进电机,您觉得行的通吗??qq472283272
-----------------------------------------------------------------------
其实不管你用什么方法都可以一试,我觉得应该行的,就是速度可能会有点慢,因为我现在就是用串口来处理的,反正也是初学阶段嘛,能够联动就已经很大进步了,以后有更好的方式那就是突破了 mark mark下 mark 新手我想请问一下 那个消抖 是怎么弄得
if(--time_ms!=0)
{
goto loopus;//--消抖查询
} mark步进电机 刚注_册,要回5贴第5贴 有没有电路图
回复【86楼】hxly
----------------------------------------------------------------------- LZ 不错,学习了! 【8楼】 zhuisuoji
--8细分时每个脉冲走的角度=1.8/8=0.225,走到162度要达到3500Hz,需发脉冲总数为162/0.225=720个8细分脉冲,
怎么走到162度还是3500HZ 了,你是不是指半步的频率,还有你那个表好象不是 启动频率是250*4=1000HZ,我算了下是2000HZ th0_buf = Pulseload +((th0_buf<<8)|TL0);//64878
这是什么意思为什么不直接th0_buf = Pulseload;是减少误差吗 这个帖子不错,应该给裤子啊。 mark MARK一下! 楼主,你的电机驱动板是什么芯片? 好贴留名,以备后用 好帖 mark lixingling 发表于 2012-2-29 14:00 static/image/common/back.gif
【8楼】 zhuisuoji
--8细分时每个脉冲走的角度=1.8/8=0.225,走到162度要达到3500Hz,需发脉冲总数为162/0 ...
ada1983 网友的原表是针对2细分使用的,我的理解是表中的每一个值代表一个脉冲,那么32000对应的频率就是250Hz.
(2细分)走完一步需要二个脉冲,那么步频率就是125Hz了.其实 ada1983 网友的原表,按<步频率>来说也就是由125Hz~1750Hz而已,
我跟他的表主要区别是在于:
我是用定时器溢出来产生方波的,由于要产生正负半波,溢出频率得加一倍,(8细分)溢出8次即输出4个脉冲,只走半步,所以溢出频率就是2000Hz了,注意是溢出频率,实际方波频率是1000Hz
他的是用比较器B与A来产生正负半波的,MEGA16,8M晶振下,比较器B的值是16000,A的是32000,控制IO口一高一低,刚好完成一个方波. yu_wen 发表于 2012-4-2 11:34 static/image/common/back.gif
楼主,你的电机驱动板是什么芯片?
这个的芯片是3977的,8细分。 这就是单片机的魅力。。。 步进用了很多,程序还没试过,学习一下
页:
[1]
2