Difference between revisions of "PIC Motor Control and Serial Port Example"

From Mech
Jump to navigationJump to search
Line 10: Line 10:


Every 20 milli-seconds, the PIC will sample the encoder and run the feedback control loop. The output from the control loop is then sent to the motor to try to match the motor's speed with the target speed. To set the target speed, commands are sent from a PC's serial port to the USART on the PIC. The PIC will also print the target speed and actual speed of the motor to the terminal window of the PC.
Every 20 milli-seconds, the PIC will sample the encoder and run the feedback control loop. The output from the control loop is then sent to the motor to try to match the motor's speed with the target speed. To set the target speed, commands are sent from a PC's serial port to the USART on the PIC. The PIC will also print the target speed and actual speed of the motor to the terminal window of the PC.

===Building the System===
To build this system, you will need the following:
*PIC18F4431 microcontroller
*ICD2 programmer
*ST-232 RS232 voltage shifter
*7414 Hex inverting Schmitt trigger
*L293D H-bridge
*Maxon DC motor with encoder
*DE9F connector (also known as a DB9F connector)
*PC 9-pin serial cable (one end should be male, the other end female)
*PC with a serial port, and has MPLAB, C18, and HyperTerminal installed. MPLAB and C18 are available on Microchip's website; HyperTerminal usually comes with Windows.

Wire up the various components as shown in the wiring diagram below. An example breadboard layout is provided. Plug one end of the serial cable into the PC's serial port, and the other end into the DE9F connector in the breadboard circuit.


==Project Files==
==Project Files==

Revision as of 19:31, 2 September 2007

Introduction

In this application, we will use a PIC 18F4431 microcontroller to implement a closed-loop lead-lag compensator that controls the velocity of a motor with an encoder. This example will cover the use of:

  • interrupts
  • reading encoders
  • pulse-width modulation
  • USART (Universal Synchronous Asynchronous Receiver/Transmitter)

Every 20 milli-seconds, the PIC will sample the encoder and run the feedback control loop. The output from the control loop is then sent to the motor to try to match the motor's speed with the target speed. To set the target speed, commands are sent from a PC's serial port to the USART on the PIC. The PIC will also print the target speed and actual speed of the motor to the terminal window of the PC.

Building the System

To build this system, you will need the following:

  • PIC18F4431 microcontroller
  • ICD2 programmer
  • ST-232 RS232 voltage shifter
  • 7414 Hex inverting Schmitt trigger
  • L293D H-bridge
  • Maxon DC motor with encoder
  • DE9F connector (also known as a DB9F connector)
  • PC 9-pin serial cable (one end should be male, the other end female)
  • PC with a serial port, and has MPLAB, C18, and HyperTerminal installed. MPLAB and C18 are available on Microchip's website; HyperTerminal usually comes with Windows.

Wire up the various components as shown in the wiring diagram below. An example breadboard layout is provided. Plug one end of the serial cable into the PC's serial port, and the other end into the DE9F connector in the breadboard circuit.

Project Files

Download the MPLAB project here.

This was compiled using MPLAB 7.6 and C18 3.12 (student version). If MPLAB has problems finding files or does not compile, it may be because the directories on your computer are set up differently. In this case, create a new project following these instructions, and copy in the source files.

Wiring Diagram

File:C18 tutorial Motor controller wiring.png
Wiring Diagram for the motor velocity controller example

Wiring Diagram for the motor velocity controller example(PowerPoint)

DE9 Female Connector Wiring

Breadboard Layout

C18 tutorial motor controller breadboard.jpeg

HyperTerminal

Open HyperTerminal by going to Start>All Programs>Accessories>Communications>HyperTerminal. When it prompts you for a name for the connector, you can give it any arbitrary name.