控制部分主要是电机的控制,我们已经有了现成的电机驱动模块,因此,只要针对该模块编写驱动即可.
电机驱动模块如下
图中, 两边两个蓝色的双口接线口分别接两个电机,下面的一个三口接线口从标示可以看到,分别接输入电源,地和一个5V的输出,两边两排杜邦线接口接控制信号,分别控制两个电机.
当我们给IN1高电平,IN2低电平,左边电机正转,而给IN1低电平,IN2高电平,电机反转.
由于S3C6410可以引出两路PWM信号,因此我们让两路PWM信号分别控制两个电机,然后每一路加一个GPIO信号控制电机方向
上图是其中一路的控制电路, PWM1和EINT4是从S3C6410引出的PWM信号和方向信号,这两个信号经过一片74LS00处理,其功能为,当EINT4为0时, M1_PWM0 = PWM1, M1_PWM1 = 0,当EINT4为1时, M1_PWM0 = 0, M1_PWM1 = PWM1.
还有一个重要的问题就是,车上有两个编码器, 因此我们需要两个计数器来对其进行计数,然而悲剧的是,S3C6410总共才有4个计数器,我们已经用了两个,而且外部时钟输入只有一个,因此,不可以用S3C6410对编码器进行计数.
于是,我借助外部计数器D8253对编码器进行计数,再把D8253连入S3C6410的系统总线.
原理图如下
图中P5,P6是用来连接两个编码信号的,将编码器的信号作为D8253的两个时钟信号,这样就可以对编码器进行计数了,EINT19和EINT20是两个中断信号,表示计数器完了,需要重新置数.