美文网首页
树莓派通过C语言、Python和Labview操作直流电机

树莓派通过C语言、Python和Labview操作直流电机

作者: 刘小白DOER | 来源:发表于2021-02-03 22:29 被阅读0次

    今天下单买了个麦轮小车底盘,包含四个麦克纳姆轮,四个直流电机和一个底盘,有些许激动可以开始搭建树莓派小车了。撑着还没有到货,实验一下树莓派操作直流电机,打个样!

1、接线图

    为什么需要驱动模块呢,树莓派IO输出电压为3.3V,不能提供直流电机运行的电流。

接线图

正转:

电机红色(正极)-------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输出可视化控制,对于人机交互方面十分方便。

正传:

反转:

    但是LINX好像不支持事件结构,本来添加了两个正传和反转按钮通过事件结构来控制正反转,但是按钮没有响应。于是笔者将两个GPIO的高低做成两个按钮来控制。

最后,树莓派GPIO可以设置PWM输出,这样就可以电机调速了,但是自己测试后没有成功,带下次来测试验证吧!

相关文章

网友评论

      本文标题:树莓派通过C语言、Python和Labview操作直流电机

      本文链接:https://www.haomeiwen.com/subject/xwimtltx.html