在线时间63 小时
UID132190
注册时间2009-6-1
NXP金币0
TA的每日心情 | 慵懒 2020-2-14 09:42 |
---|
签到天数: 196 天 连续签到: 1 天 [LV.7]常住居民III
高级会员

- 积分
- 695
- 最后登录
- 2024-1-24
|
本帖最后由 sagitattoo 于 2016-7-12 22:01 编辑
1、电机驱动
此次小车采用了4个两端口的直流电机驱动,马力强劲 ,4驱无阻啊。
这种电机的驱动很简单,只需两个GPIO即可。当两端口A和B输入电压相等时,电机停止转动;当一端的电压高于另外一端时,电机会转动,那么是正转,还是反转,取决于哪一个端口高,哪一个端口低。当然啦,电机的旋转还需要大电流,由于K64F的GPIO输出电流有限,需要外接电机驱动模块,才能真正使电机转动起来。
这里的驱动模块采用小车界出镜率很高的L289N解决方案作为后轮驱动,体积较小的L9110模块作为前轮驱动,电源使用7.2V,1300mAh的电池组。其中L289N模块电源输入来自电池组,并且能够输出两路5V电压,一路驱动L9110模块,一路供给K64F开发板。
电机正转反转的测试代码核心部分如下:
- #define MOTO_1A_GPIO GPIOB
- #define MOTO_1B_GPIO GPIOB
- #define MOTO_1A_GPIO_PIN 2U
- #define MOTO_1B_GPIO_PIN 3U
- #define HIGH 1
- #define LOW 0
- GPIO_WritePinOutput(MOTO_1A_GPIO,MOTO_1A_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_1B_GPIO,MOTO_1B_GPIO_PIN,LOW);
复制代码
2、小车驱动
了解了电机的驱动方法,就可以进行小车驱动的编写,也就是将四个电机的驱动配合起来使用。
小车的驱动最基本的就是停车、直行(向前、向后)、转弯(左转,右转),当然还有个车速控制。
停车操作最容易,直接将所有GPIO口置零,电机就不转了,小车也不跑了;
- #define MOTO_1A_GPIO GPIOB
- #define MOTO_1B_GPIO GPIOB
- #define MOTO_1A_GPIO_PIN 2U
- #define MOTO_1B_GPIO_PIN 3U
- #define MOTO_2A_GPIO GPIOB
- #define MOTO_2B_GPIO GPIOB
- #define MOTO_2A_GPIO_PIN 10U
- #define MOTO_2B_GPIO_PIN 11U
- #define MOTO_3A_GPIO GPIOC
- #define MOTO_3B_GPIO GPIOC
- #define MOTO_3A_GPIO_PIN 16U
- #define MOTO_3B_GPIO_PIN 17U
- #define MOTO_4A_GPIO GPIOB
- #define MOTO_4B_GPIO GPIOB
- #define MOTO_4A_GPIO_PIN 5U
- #define MOTO_4B_GPIO_PIN 7U
- #define HIGH 1
- #define LOW 0
- GPIO_WritePinOutput(MOTO_1A_GPIO,MOTO_1A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_1B_GPIO,MOTO_1B_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_2A_GPIO,MOTO_2A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_2B_GPIO,MOTO_2B_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_3A_GPIO,MOTO_3A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_3B_GPIO,MOTO_3B_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_4A_GPIO,MOTO_4A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_4B_GPIO,MOTO_4B_GPIO_PIN,LOW);
复制代码
直行操作需要将四个轮子设置为同一转动方向即可,全速前进的速度还是挺快的;
- GPIO_WritePinOutput(MOTO_1A_GPIO,MOTO_1A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_1B_GPIO,MOTO_1B_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_2A_GPIO,MOTO_2A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_2B_GPIO,MOTO_2B_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_3A_GPIO,MOTO_3A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_3B_GPIO,MOTO_3B_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_4A_GPIO,MOTO_4A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_4B_GPIO,MOTO_4B_GPIO_PIN,HIGH);
复制代码
转弯操作将一边的轮子设为停止,另外一边向同一方向转动,车身就可以向轮子停止的那一侧转动了。
- GPIO_WritePinOutput(MOTO_1A_GPIO,MOTO_1A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_1B_GPIO,MOTO_1B_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_2A_GPIO,MOTO_2A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_2B_GPIO,MOTO_2B_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_3A_GPIO,MOTO_3A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_3B_GPIO,MOTO_3B_GPIO_PIN,HIGH);
- GPIO_WritePinOutput(MOTO_4A_GPIO,MOTO_4A_GPIO_PIN,LOW);
- GPIO_WritePinOutput(MOTO_4B_GPIO,MOTO_4B_GPIO_PIN,LOW);
复制代码
3、总结
小车的驱动是硬件和软件共同作用的结果,小车的电机需要大电流驱动,因此硬件部分要选取稳定的驱动模块并配以足够的电源功率输出,软件的编写则要规划好四个轮子的旋转方向,使小车能够正常行驶,完成既定动作。
|
|