jugg456 发表于 2009-6-10 01:33:47

[深夜求教]为什么我的电机只能动一下,必须加delay才能转(已解决)(aozima 残剑饮血和Goah

电机的代码如下
void motor( unsigned char dir)
{
dir = dir << 6; // dir为电机转动方向:正、反、停三种。
PORTD = (PIND&0x3F)|dir; //此处读取PIND管脚电平,然后将其置0。
}

电路接法跟论坛中的类似:PD5和PD6接LB1836M的两路输入,由LB1836M驱动电机两极。

为什么在main函数中调用motor( )后,电机只是微微地振动了一下?
而为什么在motor( )后面接上delay( )延时后,电机就能正常转动,并且转动的时间跟delay的时间差不多?


难道是驱动电压不够?还是PD6和PD7输出后引脚的电平自动恢复成低电平?

恳请高手们指点一下!

aozima 发表于 2009-6-10 01:37:07

电机能当LED使? 无延时起停换向?
还有据你的描述:你的 main() 没有while(1);

Goahead 发表于 2009-6-10 02:09:21

1楼正解,估计是没有循环,程序执行一下就完成了,没有循环执行;而且,单片机的执行时间在微秒级甚至是纳秒级,电机可没这么快的反应速度。

jugg456 发表于 2009-6-10 03:03:26

电机程序motor()中设置了PD5和PD6的值后,没有再更改啊。的确,再main()函数中没有while(1)这样的死循环,但是,main()在调用motor()后,并没有对PD5和PD6的电平做任何的修改啊,为什么电机就不可以转动呢?

jugg456 发表于 2009-6-10 03:05:05

对两位的深夜回贴指导表示深深的感谢!!!

jugg456 发表于 2009-6-10 03:19:57

已经解决,是main()函数后面的一个退出程序在作怪!

kingofkings 发表于 2009-6-10 16:19:03

以下蓝色文字由版主:kingofkings 于:2009-06-10,16:19:03 加入。<font color=black>请发贴人注意:本贴放在这分区不合适,即将移走
原来分区:AVR32技术论坛
即将移去的分区:AVR (原ourAVR.com) 技术论坛
移动执行时间:自本贴发表0小时后
任何的疑问或咨询,请可随时联系站长。谢谢你的支持!</font>
页: [1]
查看完整版本: [深夜求教]为什么我的电机只能动一下,必须加delay才能转(已解决)(aozima 残剑饮血和Goah