Difference between revisions of "Motor Driver HAT"

From Waveshare Wiki
Jump to: navigation, search
Line 123: Line 123:
 
<br />
 
<br />
  
== CODE ANALYSIS ==
 
We provide three demo codes for Raspberry Pi, which are based on BCM2835, WiringPi and python libraries separately.<br/>
 
 
=== BCM2835 ===
 
<br/>
 
PROJECT DIRECTORY AND FILES<br />
 
 
----
 
<br />
 
[[File:Example14.png]]<br />
 
<pre>
 
/bin:
 
    .o files generated by makefile
 
Makefile: makefile is used to tell the compiler how to compile your project/code.
 
motor: executable file, which you can execute to run the code
 
/Obj: workspace of project
 
    Debug.h: heard files of debug function, you can use DEBUG() to print debug information like printf() by change USE_DEBUG to 1
 
    DEV_Config.c(h): Defines PINS used and communication type, different between BCM2835 and WiringPi.
 
    PCA9685.c(h): Drive code of PCA9685 chip. Could output 16-channel PWM signal via I2C interface
 
    MotorDriver.c(.h): Drive code of TB6612FNG chip, control two motors.
 
    main.c: main function
 
</pre>
 
<br />
 
 
==Install Libraries==
 
==Install Libraries==
 
*Install BCM2835 libraries
 
*Install BCM2835 libraries

Revision as of 02:56, 21 January 2022

Motor Driver HAT
Motor-Driver-HAT-intro.JPG

Raspberry Pi Expansion Board, DC Motor
{{{name2}}}

{{{name3}}}

{{{name4}}}

{{{name5}}}

Introduction

Raspberry Pi Expansion Board, DC Motor , i2c interface

OVERVIEW

This module is a motor driver board for Raspberry Pi. Use I2C interface, could be used for Robot applications.

FEATURES

  • Compatible with Raspberry Pi,compatible with Raspberry Pi Zero/Zero W/Zero WH/2B/3B/3B+.
  • I2C interface. Slave address hardware configurable makes your pi able to connect 32 motors at the same time
  • Integrate PCA9685, supports 12bits PWM output
  • Integrate TB6612FNG, efficient work, not easy to heat.
  • Integrate 5V regulator, output current up to 3A.
  • Pins out I2C interface, could connect to other development board
  • Come with sample codes and user manual

SPECIFICATIONS

Operating voltage: 6V~12V (VIN port)
Logic voltage: 3.3V
PWM controller: PCA9685
Interface: I2C
Motor controller: TBA6612FNG
Dimension: 65mm x 30mm
Holes size: 3.0mm

INTERFACES

Example1.png] Example2.png]

PIN Description
5V 5V
3V3 3.3V
GND Ground
SDA I2C Data
SCL I2C Clock
VIN Driver voltage for motor(6-12V)
A1 positive pole of motor A
A2 negative pole of motor A
B1 positive pole of motor B
B2 negative pole of motor B

HARDWARES

The module includes three part in hardware: Power, PWM and Motor driver

POWER



Example3.png]
MP1854 regulator is used to convert the input voltage (VIN_USER), has wide 4.5V to 28V input range, could provide 3A output. Even the chip supports 28V input, however, VIN_USER is also the power supply for motor, so the actual working voltage of this module is 6-12V.
MP1854 outputs stable 5V, which is used to power Raspberry Pi, and supplies 3.3V logic level for PWM and motor driver via RT9193-33. Example4.png]


PWM



Raspberry Pi only has one hardware PWM pin (GPIO.1), and the software PWM of WiringPi and Python will cost CPU resources. This module, we use PCA9685, I2C bus controlled, support 16-channel 12-bits PWM output. The frequency range of PWM is 40Hz to 1000Hz.
It is very simply to use, to output PWM signal you only need to control corresponding registers value of chip. Example5.png]
Refer the recommend circuit, LED0-LED5 are motor control pins.
A0-a4 is the address of the slave device that controls PCA9685.
From Page6 to Page8 of datasheet:
Example6.png]
The slave address of I2C bus is 7-bits, highest is fixed 1. A5-A0 are hardware selectable.
This Motor Driver HAT, A5 is connected to ground (0) by default, you can change resistors of A0-A4 to configure the slave address. If you weld a resistor or short it, means 1, otherwise 0. The address range from 0x40 to 0x5F.
Example7.png]
For example:

  • A5 is 0, A0-A4 are disconnected (don’t weld), so they are 0 as well. The final I2Cslave address is 0x40
  • Welding 0Ω resistors to A0-A4 or shorting them, the final I2C slave address is 0x5F. You can use i2cdetect tool to detect i2C devices on Raspberry Pi as below: execute command: i2cdetect -y 1

Example8.png]


MOTOR DRIVER



Example9.png
TB6612FNG is a driver IC for DC motor with high performance.
VIN_USER is input voltage, in theory, motor speed up if this voltage is increased. Recommend input voltage is 6~12V.
PWMA and PWMB control speed of motors, AIN1 and AIN2, BIN1 and BIN2 control rotate direction of motors. A1 and A2, B1 and B2 are connect to positive/negative poles of two motors separately.

HOW TO USE


ENABLE I2C INTERFACE



To works with Raspberry Pi, you should first enable I2C interface as below:

sudo raspi-config
Then choose Interfacing Options -> I2C -> Yes<br />

Example10.png
Example11.png
Example12.png
Then restart the Raspberry Pi:

sudo reboot


Install Libraries

  • Install BCM2835 libraries
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.70.tar.gz
tar zxvf bcm2835-1.70.tar.gz 
cd bcm2835-1.70/
sudo ./configure
sudo make && sudo make check && sudo make install
#For more information, please refer to the official website http://www.airspayce.com/mikem/bcm2835/
  • Install wiringPi libraries
sudo apt-get install wiringpi
#For raspberry PI systems after May 2019 (those earlier may not need to be implemented), an upgrade may be required:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
#If gPIO -v is not installed, the 2.52 version will appear
  • Install Python libraries
#python2
sudo apt-get updata
sudo apt-get install python-pip 
sudo pip install RPi.GPIO
sudo apt-get install python-smbus
#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install RPi.GPIO
sudo apt-get install python3-serial

Download the sample program and unzip it to the specified directory

sudo apt-get install p7zip
wget http://www.waveshare.net/w/upload/9/9a/Motor_Driver_HAT_Code.7z
7zr x Motor_Driver_HAT_Code.7z -r -o./Motor_Driver_HAT_Code
sudo chmod 777 -R Motor_Driver_HAT_Code
cd Motor_Driver_HAT_Code/Raspberry\ Pi/

Run the test routine

  • c
cd c/
make clean 
make
sudo ./main
  • python
cd python/
sudo python3 main.py

Jetson Nano

Install Libraries


Install the library



  • Open the terminal interface and enter the following command to install the corresponding function library
sudo apt-get update
sudo apt-get install python3-pip
sudo pip3 install Jetson.GPIO
sudo groupadd -f -r gpio
sudo usermod -a -G gpio your_user_name
sudo cp /opt/nvidia/jetson-gpio/etc/99-gpio.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger

[Note]Your_user_name is the username you use, such as waveshare

  • Install I2C
sudo apt-get install python-smbus
  • Install image processing library:
sudo apt-get install python3-pil
sudo apt-get install python3-numpy

Download the sample program and unzip it to the specified directory

sudo apt-get install p7zip
wget http://www.waveshare.net/w/upload/9/9a/Motor_Driver_HAT_Code.7z
7zr x Motor_Driver_HAT_Code.7z -r -o./Motor_Driver_HAT_Code
sudo chmod 777 -R Motor_Driver_HAT_Code
cd Motor_Driver_HAT_Code/Jetson\ Nano/

Run the test routine

  • python2
cd python2/
sudo python main.py
  • python
cd python3/
sudo python3 main.py

Resources

Examples

Related Guides

FAQ

 Answer:
If the error is reported by the program, it may be a problem with the bcm library, try using the latest bcm library:
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.70.tar.gz
tar zxvf bcm2835-1.70.tar.gz 
cd bcm2835-1.70/
sudo ./configure
sudo make && sudo make check && sudo make install
# For more information, please refer to the official website: http://www.airspayce.com/mikem/bcm2835/
{{{3}}}
{{{4}}}

{{{5}}}


Support

Support

If you require technical support, please go to the Support page and open a ticket.