今天下单买了个麦轮小车底盘,包含四个麦克纳姆轮,四个直流电机和一个底盘,有些许激动可以开始搭建树莓派小车了。撑着还没有到货,实验一下树莓派操作直流电机,打个样!
1、接线图
为什么需要驱动模块呢,树莓派IO输出电压为3.3V,不能提供直流电机运行的电流。
![](https://img.haomeiwen.com/i24447700/161443c2c48d6e77.png)
正转:
电机红色(正极)-------18 pin(BCM编码)-------12 pin(BOARD编码)-------1 pin(GPIO编码)---------高
电机黑色(负极)-------23 pin(BCM编码)-------16 pin(BOARD编码)-------4 pin(GPIO编码)---------低
反转:
电机红色(正极)-------18 pin(BCM编码)-------12 pin(BOARD编码)-------1 pin(GPIO编码)---------低
电机黑色(负极)-------23 pin(BCM编码)-------16 pin(BOARD编码)-------4 pin(GPIO编码)---------高
2、C语言实现正反转
控制正反转的原理就是goip输出的高低电平的控制,正传三秒再反转三秒。
#include <stdio.h>
#include <wiringPi.h>
#include <sys/time.h>
#define pin1 1
#define pin2 4
int main(void)
{
if(wiringPiSetup()==-1)
{
printf("setup wiringPi failed !");
return 1;
}
pinMode(pin1,OUTPUT);
pinMode(pin2,OUTPUT);
while(1)
{
digitalWrite(pin1,HIGH);
digitalWrite(pin2,LOW);
delay(2000);
digitalWrite(pin1,LOW);
digitalWrite(pin2,HIGH);
delay(2000);
}
}
编译:gcc motor.c -o motor -lwiringPi
运行:./motor
3、Python代码实现正反转
#coding:utf-8
import RPi.GPIO as gpio
import time #导入时间模块用于延时
PIN_R = 18 #使用BCM第20脚控制正极(红线)
PIN_B = 23 #使用BCM第21脚控制正极(黑线)
gpio.setwarnings(False) #去掉警告
gpio.setmode(gpio.BCM) #设置BCM编码模式
gpio.setup(PIN_R,gpio.OUT) #设置引脚PIN_R为输出
gpio.setup(PIN_B,gpio.OUT) #设置引脚PIN_B为输出
try:
while 1:
cmd = raw_input('正转请输入g,反转请输入b,停止请输入p,退出输入q:')
if cmd == 'g':#正转
gpio.output(PIN_R,gpio.HIGH) #红线输出高
gpio.output(PIN_B,gpio.LOW) #黑线输出高
elif cmd == 'b': #反转
gpio.output(PIN_R,gpio.LOW) #红线输出低
gpio.output(PIN_B,gpio.HIGH) #黑线输出高
elif cmd == 'p':
gpio.output(PIN_R,gpio.HIGH) #红线输出高
gpio.output(PIN_B,gpio.HIGH) #黑线输出高
gpio.setup(PIN_R,gpio.IN) #设置引脚PIN_R为输入
gpio.setup(PIN_B,gpio.IN) #设置引脚PIN_B为输入
elif cmd == 'q':
break
else:
print('请输入正确的命令....')
#捕获ctrl_c,并停止电机转动
except KeyboardInterrupt:
gpio.output(PIN_R,gpio.HIGH) #红线输出高
gpio.output(PIN_B,gpio.HIGH) #黑线输出高
gpio.setup(PIN_R,gpio.IN) #设置引脚PIN_R为输入
gpio.setup(PIN_B,gpio.IN) #设置引脚PIN_B为输入
运行:python motor.py
4、Labview实现正反转
labview来控制树莓派的搭建请参考我的文章-LabVIEW与树莓派结合,有意思的嵌入式开发。控制正反转的原理就是goip输出的高低电平的控制,注意labview来控制的端口是BOARD编码: 12和16。
Labview就可以实现IO输出可视化控制,对于人机交互方面十分方便。
正传:
![](https://img.haomeiwen.com/i24447700/636562d44b7a3bf3.png)
反转:
![](https://img.haomeiwen.com/i24447700/16722cb3e12284b8.png)
但是LINX好像不支持事件结构,本来添加了两个正传和反转按钮通过事件结构来控制正反转,但是按钮没有响应。于是笔者将两个GPIO的高低做成两个按钮来控制。
![](https://img.haomeiwen.com/i24447700/c7c7a726de3323ea.png)
最后,树莓派GPIO可以设置PWM输出,这样就可以电机调速了,但是自己测试后没有成功,带下次来测试验证吧!
网友评论