Saturday, September 29, 2018

To Control Stepping Motor using Python with a Raspberry

In this tutorial, I will show you how to setup a stepper motor with a Raspberry Pi. I’m using a 40 pin Raspberry Pi 3 (same for 28 pin) and Kumantech Motor Stepper kit.



When I got started with Stepper Motors I followed this well explained video below. There is no written portion or at least as of now, the link in the description no longer works. I’m simply providing my code sample and more images of my setup.

Connecting

The first step will be connecting to your Pi. I recommend plugging in your Pi to a monitor, just to verify everything is correctly setup. You will need to be connected to the internet. You will also have to run the command below to get the IP address to SSH into:
hostname -I
With that IP address, on your personal computer (I’m using OSx), run ssh pi@___YOUR_PI_IP_ADD___ in the terminal app. This will allow me to program on my Pi through my personal computer. The password is probably raspberry .

Software

The software is explained in the video below. You will have to create a file on the command line so I ran:
cd Desktop
nano test_stepper.py
Copy and paste the following code, then save and exit.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BOARD)
control_pins = [7,11,13,15]
for pin in control_pins:
  GPIO.setup(pin, GPIO.OUT)
  GPIO.output(pin, 0)
halfstep_seq = [
  [1,0,0,0],
  [1,1,0,0],
  [0,1,0,0],
  [0,1,1,0],
  [0,0,1,0],
  [0,0,1,1],
  [0,0,0,1],
  [1,0,0,1]
]
for i in range(512):
  for halfstep in range(8):
    for pin in range(4):
      GPIO.output(control_pins[pin], halfstep_seq[halfstep][pin])
    time.sleep(0.001)
GPIO.cleanup()
This code won’t work yet because we still have to connect our Pi with the stepper motor.

Hardware

A very useful aspect of the video was it didn’t matter if you used a 40 pin Pi or a 28 pin, the GPIO’s were the same. I’ve included a diagram below of both and we will be using GPIO 04 (Pin 7), GPIO 17 (Pin 11), GPIO 27 (Pin 13), and GPIO 22 (Pin 15).
The following is images of my hardware setup and the wire mappings are as follows:
  • In1 to Pin 7 (Blue wire)
  • In2 to Pin 11 (Green wire)
  • In3 to Pin 13 (Yellow wire)
  • In4 to Pin 15 (Orange wire)
  • 12v to Pin 4 (Red wire)
  • 5- to Pin 6 (Black wire)



If you are following the video above, wiring mapping is:
  • In1 to Pin 7 (Purple wire)
  • In2 to Pin 11 (Orange wire)
  • In3 to Pin 13 (Yellow wire)
  • In4 to Pin 15 (Green wire)
  • Same power setup as mine.

Running

Now that you have the code living on the Pi and the hardware setup, run:
python test_stepper.py
And you should see something similar.

Saturday, September 15, 2018

How to Configure a Stepper Motor and Driver

You can follow these steps to configure your motion stepper driver and test a step motor: 
  1. Open the Measurement & Automation Explorer (MAX)
  2. Navigate to your NI Motion Device
    1. In the Configuration panel, expand the My System tree
    2. Expand the Devices and Interfaces tree
    3. Expand the NI Motion Devices tree
    4. Expand the PCI-73xx tree
    5. Expand the Default 73xx Settings tree
  3. ​Configure your stepper settings
    1. Go to the Axis Configuration option, under the desired axis (e.g. Axis 1)
    2. In the Axis Configuration tab, set Type to Stepper.
    3. In the Stepper Settings tab (near the bottom of the screen), select your Stepper Steps Per Revolution, Stepper Loop Mode, Stepper Polarity, Stepper Output Mode, and Pull-in Tries
      Note: For P-Command motors, select P-Command for Stepper Loop Mode
  4. For now, disable your inhibit, home, and limit signals
    1. Select the Motion I/O Settings option under the axis tree 
    2. Disable all the signals in this tab (Limit Filters, Forward Limit Switches, Reverse Limit Switches, Home Switch, Forward Software Limit, Reverse Software Limit, Inhibit Output)
  5. Initialize your motion controller with your current MAX settings by click on the Initialize button

  6. Test your stepper settings with your stepper motor
    1. Expand the Interactive tree
    2. Select 1-D Interactive
    3. Set Stepper Loop Mode to Open Loop
    4. Set Velocity, Acceleration, and Deceleration to values slow enough for your motor to perform
    5. Set Operation Mode to Relative Position
    6. Set Target Position to the number of your Stepper Steps Per Revolution (as set in Step 2c)
    7. Click the Start button
      1. Your motor should move one full revolution. If the motor moves but goes over or under one revolution, then most likely the Stepper Steps Per Revolution is incorrect.
      2. Your motor should rotate in the forward direction (if Target Position is a positive value). If the motor rotates in the wrong direction, then you may need to switch either phase A and A- or B and B- (effectively reversing directions) leads from your drive to your motor, as it is possible to Determine My Stepper Motor Wiring without the Stepper Motor Pinout.
  7. If you are using feedback in your motion system, proceed to step 8. If you are not using an encoder, you are done configuring and testing your open loop stepper system.
  8. Configure your feedback settings
    1. Follow the instructions below if you are using a two-phase quadrature encoder for feedback
      1. In the Axis Configuration option, set Type of Feedback to Encoder
      2. Go to the Encoder Settings option
      3. Enter your encoder counts per revolution

        Note 1: If you can kill your motor and rotate the motor manually, then you can determine the correct encoder counts per revolution by steps here

        Note 2: To increase feedback accuracy, NI motion controllers read every edge of an encoder feedback signal. With a quadrature encoder, this results in four edges (rising and falling on lines A and B) for every quadrature pulse of the encoder. Thus, if your quadrature encoder is rated at 2000 quadrature pulses per revolution, the controller will actually read 8000 edges per revolution – and each of these is considered a "count".

        When setting the Encoder counts per revolution input in MAX, it is common to mistake this value for the encoder's physical resolution. Instead, this setting needs to hold the corresponding number of counts read by the controller, which is four times that resolution.  Following Error in a Motion System can result from this being improperly set.
    2. If you are using analog feedback, you can set up Analog Feedback with a Stepper Motor.
  9. Initialize your motion controller with your current MAX settings by click on the Initialize button
  10. Test your encoder settings
    1. Go to the Main tab of 1-D Interactive 
    2. Set Stepper Loop Mode to Closed Loop
    3. Set Velocity, Acceleration, and Deceleration to values slow enough for your motor to perform
    4. Set Operation Mode to Absolute Position
    5. Click the Reset Position button to reset the Current Trajectory Data Position to 0.
    6. Set Target Position to the number of your Stepper Steps Per Revolution (see Step 3c)
    7. Click the Start button
      1. Your motor should move one full revolution
      2. The Current Trajectory Data’s Position should match the Target Position
  11. Re-enable the inhibit, home, and limit signals that you will be using
    1. Go to the Motion I/O tab
    2. Enable the signals that you will be using and configure the correct polarity for each
  12. Configure the rest of options in MAX as is necessary
    1. Click on the Show Help button to display the MAX Help sidebar

    2. Use the MAX help for more information on the rest of the settings. Hover your mouse over a setting to populate the MAX Help with a description.



      Note: You do not need to configure anything in the Control Loop Settings tab for a cheap stepper motor.
  13. Initialize your motion controller with your final MAX settings by click on the Initialize button

Motion Controller and Driver Selection Tips You Should Know

Motion Controller The first thing that should be checked when selecting a motion controller is compatibility with other system components ...