深圳市恩智伟业科技有限公司
新闻资讯
新闻资讯
最新资讯
联系我们

中国 - 深圳
深圳市恩智伟业科技有限公司
电话:0755-21004079
传真:0755-33199876
手机:13823391409
Q  Q:51826469
邮箱:
pengcheng1984521@163.com
网址:
www.szezwy.com
地址:深圳市龙华区观澜镇福城街道樟阁路爱立基工业园A栋5楼

公司新闻

首页 > 公司新闻

发现步进电机定位不准怎么办


一、问题现象及分析 问题经常通过以下编程表现出来:

 //X发出脉冲后,等待脉冲发完后再做其它事情
d1000_start_t_move( 0, 6400, 3200, 6400, 0.1 );
 while( d1000_check_done(0) == 0 ); 老版本的库函数如下:

d1000_start_tr_move( 0, 6400, 3200, 6400, 0.1 );
 while( d1000_check_done(0) == 0 ); 或者:
d1000_wait_done( 0 ); 此函数内部实际上包含类似于while( d1000_check_done(0) == 0 );的语句 以上可以看出,在检测脉冲是否发完时,此段代码的执行完全独占了CPU分配给当前进程的所有时间, 因而也排挤了其它消息的响应,当然也就不能响应定时器读取位置,或其它停止操作等. 二、解决方法 解决此问题关键是让while循环时能检测系统消息,以下分别介绍在VB,VC,CB下的解决措施: 注:以下编程全以DMC1000最新的驱动库函为参考

1.VB编程
d1000_start_t_move 0, 6400, 3200, 6400, 0.1
 DO
 DoEvents
 LOOP WHILE (d1000_check_done(0) = 0)

 2.VC编程 在VC下编程关键是要解决类似于VB的DoEvnets函数

void DoEvents()
 {
 static MSG msg;
 if( ::PeekMessage(&msg,NULL,0,0,PM_NOREMOVE) ){
 ::TranslateMessage( &msg );
 ::DispatchMessage( &msg );
 }