自己动手做个智能小车(4)
CPU是接通了,程序也可以跑了,现在得让程序可以控制电机才行。
前面我们知道,单片机是一个运行程序的芯片,当程序里把变量P0.0变成1时,芯片39接口就变成高电位(5v),变量赋值为0时,接口就变成了低电位(0v),很是方便。
但问题来了,这个如何控制电机呢? 先理一下,我们电机有几种功能:正转、反转、刹车、滑行、调速,这几大功能。现在的问题就是考虑如何用0和1来实现这些功能。
正转、反转,小时候玩过电动机的朋友都知道,将电机的两个引线反过来接,那电机就反过来转了,即正负极决定正反转。好了看下面的电路应该就明白了:
中间一个电机,然后当按下开关A、D时 正转,按下B、C时 电机就反转,这样就简单的多了,不用把电机的两根引线拆下来,反过来接,而是按按开关,就可以实现正转、反转了。
电机转动时,突然把四个按健全打开,发现电机还要转一会儿,那这就是滑行咯。 当然,在转动时,按上面的方法,A、C 或B、D 按下,电机会就突然停止,可以验证刹车功能。
好了,现在功能时还差一个调速,这个先等等。 先想另一个功能,刚才说的这些都是开关按来按去,如果接到单片机上,让其控制呢? 不过,看出来,好像这个开关正好是0和1么。
当三级管的B(基极)通上电时,C(发射极)E(极电极)就会接通,这不就是我们要的功能么,好电路改进下:
改进后,可以看到,当a=1 b=0时Q13 Q16接通,当a=0 b=1时Q14 Q15接通,这正是我们要的功能。
实验证明,失败了(可以看到小车图中中间一堆三极管,其实已经废弃了),这样可能控制电机的正反转,但是小车启动很困难,为什么呢。
我们知道,电动机,是一个感性电路,不是一个纯电阻。简单的说,电机的电阻不是一成不变的,转速越低,电阻越小,转速越高,电阻越大。
所以小车启动过程,就是从低速或零速度开始运作。零速度时,电阻最小,只有零点几欧姆,好了,上面图中,三级管,本身也有内阻,这样,电路简化成这样:
这个想必大家都会算,这个0.1欧的电阻两端会有多少电压,非常小吧,也就零点几。那这么低的电压加到电机上,能转吗? 显然转不了。 所以最后的结果是,小车要手动推一把才能运作。
于是大家应该想到了,既然电动机变不了,能不能先个内阻非常小的三极管不就行了么?
对,找个内阻小的,而且要非常小,后来发现三极管是找不到,于是最终换了场效管:
现在还差个功能,就是调速咯,电压变了,速度就会变,这个我们知道,但是对于单片机来说,只会输出0和1,输出不了多种电压啊。于是考虑这样:
即,输入1时,间歇的输出0,因为频率比较高,输入0时,电机不会立即停。于是当调整t1和t2的比例(称为间歇比)时,电机的速度也就变了下来:
好了,到此为止,我们通过0和1也就可以控制小车的一系列的功能了,达到我们的要求的,组织下电路:
注:这个电路是在Multisim软件中绘制,好处是这个软件可以模拟,就是通上电,上面的电压表,电流表都会有读数,这个可以尽可能模拟电路的真实环境。
这里,电路图上就不绘在一起了。接单片机的,直接选几个引脚一接即可。
当拿到场效管时,有点惊讶,发现非常小,于是没办法,整个电路就围着它来了,而且没有长的引脚,所以只能在万能板的反面焊接先这样排布:
同时,电路中,这两个是不一样的,中间一个进,一个出,所以对就的型号也是A,B两种,所以连接时,不要排错。
写软件时,经常说小步快跑,同样硬件也是, 当这四个管子焊好后,就可以跑一下了,把它当成开关,试着能否控制电机的转动,如果正转、反转都可以,说明这块电路OK,可以继续往下焊了。