作者WolfLord (呆呆小狼)
看板ASM
标题Re: [问题] C++求救!不知道问题在哪里!!
时间Sat Jul 18 22:30:58 2009
本来有点懒得用回文的
不过有几点你要先想清楚
从ASM来看
1.马达的动作是靠延迟来决定的。
2.
马达驱动後需要有HOLD TIME
3.
动作需要交叉驱动
但是你的C却是
1.持续一次给了一个马达的动作量,然後才驱动第二个。
2.
完成後没有HOLD TIME
结果可能第一个被呼叫的因为改叫第二个的时间而动作
而第二个马达却没有足够的时间ACTIVE
您就仔细想想差异在哪吧?
你一直说电路都一样,但是事实上就是改变了。但是改变之後是不是
符合马达特性?你是否有确认?
另外,你的描述很差劲,马达到底是STEP还是SERVO?
SETP除非有其他COUNT电路,不然不会只给脉冲就好。但是给脉冲的话
控制角度的原理也不是这样。至於SERVO则是需要搭配回授脉冲与计时
微分。你的程式看不出来你如何处理回受脉冲。
一模一样的程式有不一样的答案,绝对是电路/硬体无法配合。可能是
你弄错马达特性,也可能是修改後的电路有问题。 不要信誓旦旦地保
证电路不会有错误, 如果您无法细心的检查我想您可能到被当掉都找
不出原因。
※ 引述《wayn12342000 (阿菁)》之铭言:
: ※ [本文转录自 C_and_CPP 看板]
: 作者: wayn12342000 (阿菁) 看板: C_and_CPP
: 标题: [问题] C++求救!不知道问题在哪里!!
: 时间: Sat Jul 18 21:40:13 2009
: 目前正在进行专题,
: 遇到一个很奇怪的问题,
: 我描述一下情况:
: 目前从学长那继承一个由伺服马达控制的机器人,
: 原有的控制方式是组语,
: 後来改用C控制,
: 但发生副程式无法动作的情况,
: 下面是控制方式
: 范例(组语):
: 略...
: mov r2,#50 ;给值50
: loop0:
: mov p2,00000001;丢值进P2.0 控制motor1
: call delay15 ;延迟1.5ms(角度一)
: mov p2,00000010;丢值进P2.1 控制motor2 同时将P2.0值=0
: call delay20 ;延迟2.0ms(角度二)
: call delay200 ;延迟20ms (满足周期 驱动马达动作)
: djnz r2,loop0
: 略...
: void hd1( int );宣告各部位副程式 头
: void lh2( int ); 手
: 略...
: main()
: {
: int i;
: for(i=0;i<50;i++)
: {
: hd1( 45 );要求移向的角度
: }
: for(i=0;i<50;i++)
: {
: lh2( 45 );
: }
: }
: void hd1( int angle )
: {
: p1=00000001;
: angledelay( angle );
: }
: void lh2( int angle )
: {
: p1=00000010;
: angledelay( angle );
: }
: void angledelay( int angle )
--
作别人不愿作的事,是好人!。 作别人不敢作的事,是坏人!。
作别人不能作的事,是天才!。 作别人不会作的事,是…脑残!!
WolfLord
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.46.205.90
1F:推 wayn12342000:我一次给予一个动作量是为了做基本测试,目前就是单纯 07/18 22:36
2F:→ wayn12342000:lf2这个副程式无法动作,不知问题在哪,我也将程式先後 07/18 22:37
3F:→ wayn12342000:顺序改变过,但无论谁先动谁後动,lh2就是不动,hd1动的 07/18 22:38
4F:→ wayn12342000:状况很好 07/18 22:38
5F:推 wayn12342000:目前电路完全从学长那控制版复制而来,就只有在程式内 07/18 22:41
6F:→ wayn12342000:改变控制脚位再以插PIN位置修正,我回答第一第二点了, 07/18 22:41
7F:→ wayn12342000:至於没有清楚解释是步进马达还是伺服马达是我的错误, 07/18 22:42
那到底是哪一种马达?
※ 编辑: WolfLord 来自: 114.46.205.90 (07/18 22:46)
8F:推 wayn12342000:伺服 07/18 22:47
9F:→ wayn12342000:上一届使用组语方式控制并没有遇到这些问题 07/18 22:48
伺服马达并不是靠时间区隔驱动的喔~~
另外,把示波器接上去看,如果P1.1有信号,那就是你的马达驱动方式有问题
如果P1.1没信号,那就是线路有短路
※ 编辑: WolfLord 来自: 114.46.205.90 (07/18 22:53)