+ All Categories
Home > Documents > 3-Axis Stepper Motor Controlww1.microchip.com/downloads/en/Appnotes/00003353A.pdfAN3353 3-Axis...

3-Axis Stepper Motor Controlww1.microchip.com/downloads/en/Appnotes/00003353A.pdfAN3353 3-Axis...

Date post: 20-Feb-2020
Category:
Upload: others
View: 11 times
Download: 0 times
Share this document with a friend
28
AN3353 3-Axis Stepper Motor Control Using an 8-Bit PIC ® Microcontroller Introduction Author: Maria Loida Canada, Microchip Technology Inc. Three-axis control applications, such as on a CNC machine, robotics and dispensing machines, are widely used in the industry. Most often, each motor has a dedicated controller that facilitates its speed control and sets its movement limitations. The use of multiple controllers in the development of the control system implies a higher cost. This project is created to develop a solution that can control up to three motors simultaneously. Utilizing a single PIC ® MCU with its Core Independent Peripherals (CIPs), driving the motors can be performed without additional burden to the core. The developed cost-effective solution provides an accurate linear motor movement. The PIC ® device can be used solely with the positions data embedded in its firmware or can be used as a slave for the applications requiring more sophisticated control. © 2020 Microchip Technology Inc. DS00003353A-page 1
Transcript
  • AN3353 3-Axis Stepper Motor Control Using an 8-Bit PIC®

    Microcontroller

    Introduction

    Author: Maria Loida Canada, Microchip Technology Inc.

    Three-axis control applications, such as on a CNC machine, robotics and dispensing machines, are widely used inthe industry. Most often, each motor has a dedicated controller that facilitates its speed control and sets its movementlimitations. The use of multiple controllers in the development of the control system implies a higher cost.

    This project is created to develop a solution that can control up to three motors simultaneously. Utilizing a single PIC®

    MCU with its Core Independent Peripherals (CIPs), driving the motors can be performed without additional burden tothe core. The developed cost-effective solution provides an accurate linear motor movement. The PIC® device can beused solely with the positions data embedded in its firmware or can be used as a slave for the applications requiringmore sophisticated control.

    © 2020 Microchip Technology Inc. DS00003353A-page 1

  • Table of Contents

    Introduction.....................................................................................................................................................1

    1. Overview................................................................................................................................................. 3

    2. Stepper Motor Control.............................................................................................................................4

    2.1. Control Overview..........................................................................................................................42.2. Drive Circuit and Control Process................................................................................................ 52.3. 16-Bit High Resolution PWM for Control Signal...........................................................................62.4. Data Transfer................................................................................................................................6

    3. Stepper Motor Control Characteristics.................................................................................................... 7

    3.1. Torque Consideration................................................................................................................... 73.2. Stepping Rate...............................................................................................................................7

    4. Step Mode Implementation..................................................................................................................... 8

    4.1. Full-Step Drive..............................................................................................................................84.2. Half-Step Drive........................................................................................................................... 114.3. Microstepping.............................................................................................................................14

    5. Firmware Flow Diagram........................................................................................................................ 16

    6. 3-Axis Control Performance.................................................................................................................. 18

    7. Conclusion............................................................................................................................................ 20

    8. Appendix A: Schematics....................................................................................................................... 21

    9. Appendix B: MPLAB® Code Configurator (MCC) Peripheral Initialization.............................................23

    10. Appendix C: Source Code Listing......................................................................................................... 25

    The Microchip Website.................................................................................................................................26

    Product Change Notification Service............................................................................................................26

    Customer Support........................................................................................................................................ 26

    Microchip Devices Code Protection Feature................................................................................................ 26

    Legal Notice................................................................................................................................................. 26

    Trademarks.................................................................................................................................................. 27

    Quality Management System....................................................................................................................... 27

    Worldwide Sales and Service.......................................................................................................................28

    AN3353

    © 2020 Microchip Technology Inc. DS00003353A-page 2

  • 1. OverviewThis application note describes a practical solution for controlling three motors independently. This application uses asingle PIC18F-Q43 device to control the drive signal being fed to the driver of stepper motors in 3-axes. With the useof a single 8-bit microcontroller, the implementation cost is substantially reduced.

    This application has the following key features:

    • Full-step, half-step, and microstepping (1/4 and 1/16) modes• Configurable steps/coordinate resolution• Speed and direction control of each motor• Up to three motors simultaneously controlled• Motor control using Core Independent Peripherals (CIPs)

    The interconnection of peripherals to control the signals used for driving the motors is shown in Figure 1-1. The CIPsused in this design are the new 16-bit high-resolution PWM, Complementary Waveform Generator (CWG) and DirectMemory Access (DMA). The full-bridge driver is used for bipolar stepper motor control. The integration of on-chipperipherals like TMR0 and a conventional PWM with the firmware, enables the system to reliably perform 3-axiscontrol with minimum software overhead.

    Figure 1-1. 3-Axis Motor Control Block Diagram

    FULL BRIDGEDRIVER

    (WINDING A)

    FULL BRIDGEDRIVER

    (WINDING B)

    Winding B

    Winding A

    TMR0

    I/O

    PIC18FXXQ43

    VMOTOR

    FULL BRIDGEDRIVER

    (WINDING A)

    FULL BRIDGEDRIVER

    (WINDING B)

    I/O

    Winding B

    FULL BRIDGEDRIVER

    (WINDING A)

    I/O

    FULL BRIDGEDRIVER

    (WINDING B)

    STEPPERMOTOR 3

    STEPPERMOTOR 1

    VMOTOR

    FIRMWARE(Step Mode Selection,

    Step Count, Stepping Algorithm)

    CWG1

    CWG3

    PWM3

    CWG2

    PWM2

    16-bit PWM3

    16-bit PWM2

    4

    PWM1

    Step RateGenerator

    Winding B

    Winding A

    STEPPERMOTOR 2

    16-bit PWM1

    1.8°/Step

    1.8°/Step

    1.8°/Step

    DMA Controller

    4

    4

    MEMORY(PWM Modulation)

    Note:  For this application, Leadshine 42HS03 motors were used.

    AN3353Overview

    © 2020 Microchip Technology Inc. DS00003353A-page 3

  • 2. Stepper Motor ControlA stepper motor is a type of motor that rotates in discrete steps. It divides a full rotation into a number of equal stepsand moves through it, one at a time. It converts the input digital pulses into mechanical shaft rotation. It can be drivento rotate a specific number of steps and stop precisely when triggered to stop. For an in-depth discussion about thefundamentals of stepper motors, refer to AN907: Stepping Motors Fundamentals.

    2.1 Control OverviewFigure 2-1 shows a block diagram of the generic system used for controlling the three stepper motors. TMR0 acts asa step rate generator, which is primarily responsible for controlling the speed of the motors. Every time the TMR0 rollsover, the stepping sequence in the firmware is loaded to the CWG and GPIO registers, while loading the PWM valuesthrough the DMA. Bipolar motor control circuit, which is composed of two H-bridge drivers, is used for driving eachmotor in a clockwise or counterclockwise direction. The drive signal for each motor is a combination of CWG andGPIO signals along with the 16-bit PWM output. Lastly, the firmware dictates the limitation of movement, dependingon the specified position.Figure 2-1. 3-Axis Motor Control Diagram

    FIRMWARE(Stepping

    Algorithm)

    TMR0(Step Rate Generator)

    PWM3

    16-bit PWM3

    16-bit PWM1

    CWG3

    16-bit PWM2

    CWG1PWM1

    CWG2PWM2

    M1 H-BRIDGE DRIVER

    (WINDING A)

    M1 H-BRIDGE DRIVER

    (WINDING B)

    M2 H-BRIDGE DRIVER

    (WINDING A)

    M2 H-BRIDGE DRIVER

    (WINDING B)

    M3 H-BRIDGE DRIVER

    (WINDING A)

    M3 H-BRIDGE DRIVER

    (WINDING B)

    A

    A’

    A

    A’

    A

    A’

    B

    B’

    B

    B’

    B

    B’

    PROGRAM

    MEMORY

    I/O

    I/O

    I/O

    DMA2

    DMA3

    DMA1

    DMA4

    DMA5

    DMA6

    Change in CWG1 Mode Signal

    Change in CWG2 Mode Signal

    Change in CWG3 Mode Signal

    Current Modulation

    Current Modulation

    Current Modulation

    Current Modulation

    Current Modulation

    Current Modulation

    4

    4

    4

    4

    4

    4

    Change in drive signal mode

    Change in drive signal mode

    Change in drive signal mode

    Drive CircuitsControl Signals

    Data Transfer

    AN3353Stepper Motor Control

    © 2020 Microchip Technology Inc. DS00003353A-page 4

    http://ww1.microchip.com/downloads/en/Appnotes/00907a.pdf

  • 2.2 Drive Circuit and Control ProcessThe rotating magnetic field and varying magnetic pole polarity (North/South) on the stator causes the rotor to spin.The magnetic field and magnetic polarity variation are produced by electrically energizing the two stepper motorwindings (Winding A and B). The energization is controlled by the CWG and PWM signals through the use of an H-bridge circuit. Figure 2-2 depicts the current flow through the half-bridge circuit during Forward and Reverse mode.The naming convention of Forward and Reverse mode are adopted from the modes of CWG and will be usedthroughout the document to indicate the state of Winding mode.

    When Winding A is in Forward mode, the current is flowing through MOSFETs Q1 and Q4 down to ground, whileensuring that Q2 and Q3 are OFF. Otherwise, when it operates in Reverse mode, the current flows through Q2 andQ3, while keeping Q1 and Q4 OFF. The same principle applies to the MOSFETs Q5, Q6, Q7 and Q8 on Winding B.The switching of the MOSFETs in Winding B is implemented through the use of CWG Forward and Reverse-FullBridge modes, while the MOSFETs in Winding A are controlled by GPIO output and 16-bit PWM. Thus, the drivemethod for each motor is a combination of firmware and peripheral drive, to assure that all the motors are exposed tosimilar control factors. Refer to TB3118: Complementary Waveform Generator, for more details about the CWGperipheral. For the drive circuits used, refer to section Appendix A: Circuit Schematics.Figure 2-2. Drive Circuits and Control Signals

    Vmotor

    Winding AA A’

    Q1

    Q2

    Q3

    Q4

    LATxy1

    LATxy2(16-bit PWM)

    LATxy3

    LATxy4(16-bit PWM)

    Vmotor

    Winding BB B’

    Q5

    Q6

    Q7

    Q8

    CWGxA

    CWGxB

    CWGxC

    CWGxD

    FORWARD MODE REVERSE MODE

    AN3353Stepper Motor Control

    © 2020 Microchip Technology Inc. DS00003353A-page 5

    http://ww1.microchip.com/downloads/en/appnotes/90003118a.pdf

  • 2.3 16-Bit High Resolution PWM for Control SignalThe 16-bit Pulse-Width Modulator can produce a high-resolution modulation at low frequency. In this application, thedrive resolution will be mainly determined by the step mode implementation. The switching frequency must be highenough to operate beyond the audio frequency. The arrangement was made by choosing the PWM to operate in 10-bit, having a 62.5 kHz switching frequency, which is within the range of typical driver switching frequency.

    The 16-bit PWM is used for driving the low-side MOSFETs of Winding A for all motors. It is connected to both low-side MOSFETs through Peripheral Pin Select (PPS), but it is never intended to turn on both sides simultaneously.The 16-bit PWM has an independent 16-bit period timer, which is chosen to be HFINTOSC or equivalent to 64 MHzin this application. The PWMOUT is in Left-Aligned mode. For proper PWM operation, the registers PWMxPR andPWMxSaP1 must be properly configured. The requested frequency can be attained by setting up the PWMxPRregister. The value of this register is equivalent to the number of PWM clock periods in the PWM period or it can beexpressed as shown in Equation 2-1.

    The PWMxSaP1 register determines the active period of slice “a”, parameter 1 output. The duty cycle shown in Equation 2-2 can then be calculated by getting the ratio of PWMxSaP1 to the PWMxPR value.

    The automatic loading of the PWMxSaP1 register is enabled through setting the respective DMAx as the auto-loadtrigger source in the PWMxLDS register. For more information about the 16-bit PWM, refer to the device data sheet.Equation 2-1. PWM Period Register Value������ = �������� ����������� ���� ��Equation 2-2. Duty Cycle Calculation���� ����� = ������1������ × 100%

    2.4 Data TransferThe Look-Up Table of modulation values is initially stored in Programmable Flash Memory. The DMA is utilized fortransferring the modulation values to PWM registers without the CPU intervention, freeing up the core for doing othertasks. DMA1 is used for transferring the values from the program memory to the Slice 1 Output of 16-bit PWM1defined by the PWM1S1P1L and PWM1S1P1H registers, illustrated in Figure 2-1, while DMA2 is used for passing onthe modulation data from the program memory to the conventional PWM1 registers: CCPR1L and CCPR1H. EachDMA channel is tied to its specific PWM peripheral to ensure that the transfer will simultaneously take placewhenever a transfer trigger is received.

    All the DMA channels are configured to start the data transfer when TMR0 interrupt is triggered. The TMR0 isselected as a trigger for starting the data transfer through the DMAnSIRQ (DMA Start Interrupt Request SourceSelection) register. But for the interrupt source to take effect, the SIRQEN (Start of Transfer Interrupt RequestEnable) register of each DMA must be enabled.

    This application provides a drive implementation in 1/4 and 1/16 microstepping. It is important to note that the arraysize of PWM modulation values for 1/4 and 1/16 microstepping are different and the respective DMA source sizeregister must be correctly initialized to transfer all the data necessary to complete a full step. Since the DMA isoperating in 8-bit, the DMA source size must be equivalent to twice the number of array elements. For 1/4microstepping, the step resolution is 16, which means that the DMA source size register must be equivalent to 32 or0x20; and for 1/16 microstepping with step resolution of 64 the DMA source size must be 128 or 0x80. To learn moreinformation about DMA, refer to TB3164: Direct Memory Access on 8-bit PIC® Microcontrollers and refer to the devicedata sheet for proper peripheral configuration.

    AN3353Stepper Motor Control

    © 2020 Microchip Technology Inc. DS00003353A-page 6

    http://ww1.microchip.com/downloads/en/AppNotes/TB3164-Direct%20Memory-Access-on-8-bit-PIC-MCU-DS90003164B.pdf

  • 3. Stepper Motor Control CharacteristicsFor proper operation, stepper motor characteristics must be carefully considered. Characteristics to consider aretorque, speed and stepping rate. This section discusses about how these characteristics affect the steppingimplementation.

    3.1 Torque ConsiderationStepper motor maintains torque at relatively low speed. The torque required to move the load must be met by thestepper motor specifications. Stepping motor manufacturers will specify several torques in their data sheets for theirmotors. The torque magnitude depends on the driving technique, stepping rate, and winding current.

    3.2 Stepping RateStep rate refers to the speed at which the hardware-firmware combination can send step pulses to the stepper motordriver. It is expressed in PPS (Pulse Per Second) and dictates the speed of the motor. To know more about how it isimplemented using a PIC microcontroller, refer to the Stepping Rate section of AN2326: High-Torque/High PowerBipolar Stepper Motor using 8-bit PIC® MCUs.

    AN3353Stepper Motor Control Characteristics

    © 2020 Microchip Technology Inc. DS00003353A-page 7

    http://ww1.microchip.com/downloads/en/AppNotes/00002326A.pdfhttp://ww1.microchip.com/downloads/en/AppNotes/00002326A.pdf

  • 4. Step Mode ImplementationStep mode is a drive technique used to rotate a stepper motor. It indicates the magnitude of a step angle taken inevery energization of the stator windings. Each mode has a corresponding stepping resolution and output torque. Thestep modes that can be implemented in 3-axis control using a PIC18F-Q43 microcontroller are:

    • Full-step Drive• Half-step Drive• Microstepping Drive (1/4 and 1/16)

    The step mode implementation used in this application is referenced in AN2326: High-Torque/High Power BipolarStepper Motor using 8-bit PIC® MCUs. The principle of the stepping mode used is the same, only the actualimplementation using the PIC18FXXQ43 device will be shown here. Likewise, the implementation is applicable to allthree motors in 3-axis.

    4.1 Full-Step DriveOn this drive, two phases are energized at the same time. The drive circuit implementation is shown in Figure 4-1.The CWG controls the Winding B while the Winding A is controlled by toggling the output of GPIO depending onstepping algorithm. Meanwhile, Figure 4-2 illustrates the algorithm used for stepping the motor. The individual outputstate of each pin is shown to properly move the shaft’s position into its equivalent full-step angle.

    Figure 4-3 shows the firmware execution used in controlling the signals. Every time the TMR0 interrupt is triggered,stepCounter variables are incremented. stepCounter signifies that the specific mode used is full-step and resetsto 0 whenever it reaches 4. stepCounter2Mx are compared to their corresponding MxdesiredStep. If the counterexceeds the desired step, the motor will be stopped and axis_movementDone will be set. The definition of theaxis can be x, y or z, depending on the specific motor movement it resembles. After all theaxis_movementDone are set, the TMR0 is disabled to make sure that it will not count and to avoid an interrupt to beimproperly triggered. All the stepCounter2Mx are cleared to ensure that the counting for the succeeding positionsbegins at zero. The movementDone variable is used in the main program to determine if all the motor movementsare finished and gives the signal to prepare the system for another movement.

    The switch case determined by the motorDir variable decides on which direction the motors will rotate. The motorsare designed to be driven simultaneously, so at every Interrupt event, the motorDir will command which case toexecute. Each case contains the direction of the motors and all the motors that used the drive table for clockwise andcounterclockwise direction. The drive table requires a specific set of IO and CWG for each motor.

    Figure 4-1. Full-Step Drive

    H-Bridge

    H-BridgeCWGx

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    H-Bridge

    H-BridgeCWGx

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 8

    http://ww1.microchip.com/downloads/en/AppNotes/00002326A.pdfhttp://ww1.microchip.com/downloads/en/AppNotes/00002326A.pdf

  • Figure 4-2. Full-Step Drive Stepping Algorithm in Clockwise Direction

    Q1LATxy1

    Q2 LATxy2

    Q3 LATxy3

    Q4 LATxy4

    Q5 CWGxA

    Q6 CWGxB

    Q7 CWGxC

    Q8 CWGxD

    Win

    din

    g A

    CWG Drive

    STEP 1 STEP 2 STEP 3 STEP 4 STEP 1 STEP 2 STEP 3

    Forward Forward ReverseReverse Forward Forward ReverseReverse

    Win

    din

    g B

    Forward Reverse ForwardReverse Forward Reverse ForwardReverseWindingMode

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 9

  • Figure 4-3. Full-Step Drive Stepping Algorithm Flowchart

    Step_One: LATxbits.LATxy1   =  0TRISxbits.TRISxy2 =  0LATxbits.LATxy3   =  1TRISxbits.TRISxy4 =  1CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Two: LATxbits.LATxy1   =  1TRISxbits.TRISxy2 =  1LATxbits.LATxy3   =  0TRISxbits.TRISxy4 =  0CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Three: LATxbits.LATxy1   =  1TRISxbits.TRISxy2 =  1LATxbits.LATxy3   =  0TRISxbits.TRISxy4 =  0CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Four: LATxbits.LATxy1   =  0TRISxbits.TRISxy2 =  0LATxbits.LATxy3   =  1TRISxbits.TRISxy4 =  1CWGxCON0bits.MODE0 = 0 (Forward)

    FULL STEP DRIVE TABLE CLOCKWISE DIRECTION

    Step_One: LATxbits.LATxy1   =  1TRISxbits.TRISxy2 =  1LATxbits.LATxy3   =  0TRISxbits.TRISxy4 =  0CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Two: LATxbits.LATxy1   =  0TRISxbits.TRISxy2 =  0LATxbits.LATxy3   =  1TRISxbits.TRISxy4 =  1CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Three: LATxbits.LATxy1   = 0TRISxbits.TRISxy2 = 0LATxbits.LATxy3   = 1TRISxbits.TRISxy4 = 1CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Four: LATxbits.LATxy1   =  1TRISxbits.TRISxy2 =  1LATxbits.LATxy3   =  0TRISxbits.TRISxy4 =  0CWGxCON0bits.MODE0 = 0 (Forward)

    FULL STEP DRIVE TABLE COUNTERCLOCKWISE DIRECTION

    TMR0 Interrupt

    stepCounter2M1 > M1desiredStep?

    stepCounter2M1 = 0;M1stop();

    x_movementDone = 1;

    YES

    NO

    stepCounter2M2 > M2desiredStep?

    stepCounter2M2 = 0;M2stop();

    y_movementDone = 1;

    YES

    NO

    stepCounter2M3 > M3desiredStep?

    stepCounter2M3 = 0;M3stop();

    z_movementDone = 1;

    YES

    NOstepCounter == 4?

    stepCounter++;stepCounter2M1++;stepCounter2M2++;stepCounter2M3++;

    Return

    Clear stepCounterYES

    NO

    x_movementDone && y_movementDone && z_movementDone?

    case 0:    M1CWFull(); M2CWFull(); M3CWFull(); case 1:    M1CCWFull(); M2CWFull(); M3CWFull(); case 2:    M1CWFull(); M2CCWFull(); M3CWFull(); case 3:    M1CCWFull(); M2CCWFull(); M3CWFull();  case 4:    M1CWFull(); M2CWFull(); M3CCWFull(); case 5:    M1CCWFull(); M2CWFull(); M3CCWFull(); case 6:    M1CWFull(); M2CCWFull(); M3CCWFull();  case 7:    M1CCWFull(); M2CCWFull(); M3CCWFull(); 

    switch motorDir

    TMR0_StopTimer(); stepCounter2M1 = 0;stepCounter2M2 = 0;stepCounter2M3 = 0;movementDone = 1;

    YES

    NO

    NO

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 10

  • 4.2 Half-Step DriveHalf-step drive alternates between two phases on and a single phase on. It increases the resolution of the angle byhalving the basic step angle, thus causing a smoother rotation than full-step. Figure 4-4 shows the drive circuitimplementation with the control signals coming from CWG and GPIO output. While, Figure 4-5 illustrates the steppingalgorithm used in this drive technique.

    Figure 4-6 shows the firmware execution similar to the firmware flow in Figure 4-3. The value of the stepCounterdoubled, which clearly states that the algorithm used is twice as long as the full-step algorithm. The drive table inclockwise and counterclockwise direction for all the steps are also shown.Figure 4-4. Half-Step Drive Circuit

    H-Bridge

    H-BridgeCWGx

    H-Bridge

    H-BridgeCWGx

    H-Bridge

    H-BridgeCWGx

    H-Bridge

    H-BridgeCWGx

    STEP 1 STEP 2

    STEP 3 STEP 4

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    LATxy1

    LATxy2

    LATxy3

    LATxy4

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 11

  • Figure 4-5. Half-Step Drive Stepping Algorithm

    Q1LATxy1

    Q2 LATxy2

    Q3 LATxy3

    Q4 LATxy4

    Q5 CWGxA

    Q6 CWGxB

    Q7 CWGxC

    Q8 CWGxD

    Win

    din

    g A

    CWG Drive

    STEP 1 STEP 2 STEP 3 STEP 4 STEP 5 STEP 6 STEP 7

    OFF Forward ForwardForward OFF Reverse ReverseReverse

    Win

    din

    g B

    WindingMode

    Forward Forward ReverseOFF Reverse Reverse ForwardOFF

    STEP 8 STEP 1 STEP 2

    ForwardForward

    ForwardOFF

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 12

  • Figure 4-6. Half-Step Drive Firmware Execution

    TMR0 Interrupt

    stepCounter2M1 > M1desiredStep?

    stepCounter2M1 = 0;M1stop();

    x_movementDone = 1;

    YES

    NO

    stepCounter2M2 > M2desiredStep?

    stepCounter2M2 = 0;M2stop();

    y_movementDone = 1;

    YES

    NO

    stepCounter2M3 > M3desiredStep?

    stepCounter2M3 = 0;M3stop();

    z_movementDone = 1;

    YES

    NO

    stepCounter == 8?

    stepCounter++;stepCounter2M1++;stepCounter2M2++;stepCounter2M3++;

    Return

    Clear stepCounterYES

    NO

    case 0:    M1CWHalf(); M2CWHalf(); M3CWHalf(); case 1:    M1CCWHalf(); M2CWHalf(); M3CWHalf(); case 2:    M1CWHalf(); M2CCWHalf(); M3CWHalf(); case 3:    M1CCWHalf(); M2CCWHalf(); M3CWHalf();  case 4:    M1CWHalf(); M2CWHalf(); M3CCWHalf(); case 5:    M1CCWHalf(); M2CWHalf(); M3CCWHalf(); case 6:    M1CWHalf(); M2CCWHalf(); M3CCWHalf();  case 7:    M1CCWHalf(); M2CCWHalf(); M3CCWHalf(); 

    switch motorDir

    Step_One:     LATxbits.LATxy1   = 1       TRISxbits.TRISxy2 = 1       LATxbits.LATxy3   = 0       TRISxbits.TRISxy4 = 0       CWGxCON0bits.EN = 0 (OFF)

    Step_Two:     LATxbits.LATxy1   = 1       TRISxbits.TRISxy2 = 1       LATxbits.LATxy3   = 0       TRISxbits.TRISxy4 = 0       CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Three:   LATxbits.LATxy1   = 0       TRISxbits.TRISxy2 = 1       LATxbits.LATxy3   = 0       TRISxbits.TRISxy4 = 1       CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Four:     LATxbits.LATxy1   = 0       TRISxbits.TRISxy2 = 0       LATxbits.LATxy3   = 1       TRISxbits.TRISxy4 = 1       CWGxCON0bits.MODE0 = 0 (Forward)

    HALF STEP DRIVE TABLE CLOCKWISE DIRECTION

    Step_Five:      LATxbits.LATxy1   = 0       TRISxbits.TRISxy2 = 0       LATxbits.LATxy3   = 1       TRISxbits.TRISxy4 = 1       CWGxCON0bits.EN =0 (OFF)

    Step_Six:        LATxbits.LATxy1   = 0       TRISxbits.TRISxy2 = 0       LATxbits.LATxy3   = 1       TRISxbits.TRISxy4 = 1       CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Seven:   LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 1        LATxbits.LATxy3   = 0        TRISxbits.TRISxy4 = 1        CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Eight:     LATxbits.LATxy1   = 1        TRISxbits.TRISxy2 = 1        LATxbits.LATxy3   = 0        TRISxbits.TRISxy4 = 0        CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_One:       LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 0        LATxbits.LATxy3   = 1        TRISxbits.TRISxy4 = 1        CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Two:      LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 1        LATxbits.LATxy3   = 0        TRISxbits.TRISxy4 = 1        CWGxCON0bits.MODE0 = 0 (Forward)

    Step_Three:    LATxbits.LATxy1   = 1        TRISxbits.TRISxy2 = 1          LATxbits.LATxy3   = 0         TRISxbits.TRISxy4 = 0

    TRISxbits.TRISxy2  = 1          LATxbits.LATxy3 = 0          TRISxbits.TRISxy4  = 0          CWGxCON0bits.EN = 0 (OFF)

    HALF STEP DRIVE TABLE COUNTERCLOCKWISE DIRECTION

    Step_Five:       LATxbits.LATxy1   = 1        TRISxbits.TRISxy2 = 1        LATxbits.LATxy3   = 0        TRISxbits.TRISxy4 = 0        CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Six:         LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 1        LATxbits.LATxy3   = 0        TRISxbits.TRISxy4 = 1        CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Seven:   LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 0        LATxbits.LATxy3   = 1        TRISxbits.TRISxy4 = 1        CWGxCON0bits.MODE0 = 1 (Reverse)

    Step_Eight:     LATxbits.LATxy1   = 0        TRISxbits.TRISxy2 = 0        LATxbits.LATxy3   = 1        TRISxbits.TRISxy4 = 1        CWGxCON0bits.EN = 0 (OFF)

    x_movementDone && y_movementDone && z_movementDone?

    TMR0_StopTimer(); stepCounter2M1 = 0;stepCounter2M2 = 0;stepCounter2M3 = 0;movementDone = 1;

    YES

    NO

      CWGxCON0bits.MODE0 = 0 (Forward) Step_Four:    LATxbits.LATxy1   = 1

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 13

  • 4.3 MicrosteppingMicrostepping is a manner of moving the stator flux of a stepper motor smoothly. One type of microstepping isconstant-torque, which is used in this application. Constant-torque microstepping is achieved by simultaneouslyvarying the current in both windings of a stepper motor.

    The drive circuit used in this stepping mode is identical to the full-step and half-step circuits. However, the controlsignals are modulated instead of supplying a full-on or full-off signals. The currents can be varied by changing thePWM percent modulation in accordance with the Equation 4-1 and Equation 4-2.Equation 4-1. Winding A Current Formula�� = ���� × sin ���� ������ × 360���� ����������Equation 4-2. Winding B Current Formula�� = ���� × cos ���� ������ × 360���� ����������Using the 1/16 microstepping, assume that IMAX is equivalent to one and the drive is in step number one. The sin of360° multiplied by the present step number divided by 64 (1/16 microstepping resolution) results to 0.098. Thisrepresents that the modulation of current in Winding A must only be 9.8% of the maximum current. The modulation ofWinding A and Winding B for the remaining 63 steps is calculated and plotted in Figure 4-7. The step resolution of 64makes the torque graph resemble a sinusoid. The stepping algorithm used in 1/16 microstepping is shown on Figure4-8.Figure 4-7. Phase Diagram and Torque Response of Constant Torque 1/16 Microstepping

    STEP 64(0% IA,

    100% IB)

    IA(%)

    IB(%)

    STEP 16(100% IA,

    0% IB)

    STEP 48(-100% IA,

    0%IB)

    Winding ATorque

    Winding BTorque

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 14

  • Figure 4-8. Constant-Torque Microstepping Drive Signal

    Q1LATxy1

    Q2 PWMx

    Q3 LATxy3

    Q4 PWMx

    Q5 CWGxA

    Q6 CWGxB

    Q7 CWGxC

    Q8 CWGxD

    Win

    din

    g A

    CWG Drive

    STEPSW

    ind

    ing

    B

    WindingMode

    ForwardModulated

    OFF ReverseModulated

    Reverse OFFReverseModulated

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

    ForwardModulated

    Forward

    OFF ReverseModulated

    ReverseModulated

    OFFReverse ForwardForwardModulated

    ForwardModulated

    AN3353Step Mode Implementation

    © 2020 Microchip Technology Inc. DS00003353A-page 15

  • 5. Firmware Flow DiagramThis section explains the firmware design implemented for successfully driving the three motors in 3-axis.Figure 5-1. Firmware Flowchart

    START

    System_Initialize();

    FeedingData();

    SetPosition();

    positionSet = 0;positionSet?

    Motor_Driver();

    Interrupt Initialize

    dataFeedDone? dataFeedDone = 0;

    StartMotorDrive();

    positionSet?

     movementDone?      __delay_ms(15);            startDataFeed = 1;

    YES

    YES

    YES

    NO

    NO

    NO

    Motor_Driver();

    //Pick one type of drive//    Full_Setup();//    Half_Setup();//    Microstep4_Setup();    Microstep16_Setup();  

     

    EXIT

    FeedingData();

    startDataFeed?

    startDataFeed = 0;

            coordInd++;x_coordinate = x_position[coordInd];        y_coordinate = y_position[coordInd];        z_coordinate = z_position[coordInd];

    x_buffer = x_coordinate;y_buffer = y_coordinate;z_buffer = z_coordinate;

    coordInd > max?

    StopMotorDrive();

    EXIT

    YES

    NO

    YES

    NO

    dataFeedDone = 1;

    The firmware flow starts with the SYSTEM_Initialize() routine. This routine initializes pin configuration, oscillatorand all the peripherals used in the application. It is followed by enabling interrupts to address the functions requiringinterrupts. The Motor_Driver() function contains the different drive implementation. Pick one type of drive-byuncommenting the function of the chosen drive. The selected drive will assign the value ofstepping_mode_constant, which will be used for calculating the number of steps required to rotate in a distinctposition. Notice that the type of drive will only be setup once at the beginning of the program, and the type of drivethat will be used will depend on the application requirement and user’s discretion.

    After all the initialization is done, the program will undergo a continuous loop, executing the functions necessary tosuccessfully move the motors in predefined positions. The FeedingData() function contains the commands foracquiring and processing the desired position. The positions initialized at the beginning of the program are placed inthe axis_coordinate parameters for later processing. The condition that tests coordInd against max variabletells if the end position has been reached and signifies that the motors will be stopped if the condition is satisfied.Otherwise, the dataFeedDone variable will be set to be used as a test variable for the next instruction.When the dataFeedDone test variable is satisfied, the SetPosition() function will be executed. This functionserves a vital role in the 3-axis motion control. This function consists of checking if the individual motor movementsare completed through testing the axis_movementDone variable. Provided that the previous movement is finished,the current axes coordinate will be tested against the previous axes coordinate. If the current and previouscoordinates are not equal, two conditional statements will be tested consequently. The first condition tests if thecurrent coordinate is less than the previous coordinate; if so, the resulting current coordinate will be the previous

    AN3353Firmware Flow Diagram

    © 2020 Microchip Technology Inc. DS00003353A-page 16

  • coordinate less the current coordinate shown in Equation 5-1. The Mxdirection is set to the counterclockwisedirection and the DMA is initialized for transferring the modulation data necessary for moving in the counterclockwisedirection. However, if the current coordinate is greater than the previous coordinate, the resulting current coordinatewill be the current coordinate less the previous coordinate, as shown in Equation 5-2. Furthermore, theMxdirection will be set to the clockwise direction and the DMA source is initialized to transfer the modulation datafor clockwise direction.

    The resulting current coordinate will be used to compute for the motor’s desired step, which is shown in Equation 5-3.The constant variable STEPS_PER_COORDINATE may take any value, depending on the tool used for convertingrotational to linear motion. This variable is introduced for flexibility in the application. The meaning of axis inaxis_coordinate can be x, y or z, depending on the coordinate, and the x in MxDesiredStep can be 1, 2 or 3,depending on the motor number. The pairs created in this control scheme are as follows: x_coordinate to M1,y_coordinate to M2 and z_coordinate to M3.Equation 5-1. axis_coordinate < axis_prevCoordinate�������������� = ������������������− ��������������Equation 5-2. axis_coordinate > axis_prevCoordinate�������������� = ��������������− ������������������Equation 5-3. Motor Desired Step������������� = ����_���������� × �����_���_���������� × ��������_����_������� �Subsequently, the previous coordinate equates to the current coordinate to be the reference for successive positions.Then, the motor drive is enabled by clearing the auto-shutdown feature of CWG and setting the drive pins as output.The positionSet variable is set, which primarily indicates that the setting of position is done.Consequently, the function StartMotorDrive() will be implemented, which literally starts the drive of the threemotors. The testing of movementDone variable implies that all the motors must be moved to their destination beforefeeding the next sets of data for the subsequent movements. The loop will be continually running, executing the tasksmentioned above until coordinate movements were completed. Refer to section Appendix C: Source Code Listing forthe complete source code.

    AN3353Firmware Flow Diagram

    © 2020 Microchip Technology Inc. DS00003353A-page 17

  • 6. 3-Axis Control PerformanceIn order to show that the microcontroller can provide drive signals simultaneously, a logic analyzer is used to capturethe drive signal when operating in different stepping modes.

    Figure 6-1. Drive Signals for Three Motors from MCU Captured using Logic Analyzer

    A. Full-Step B. Half-Step

    C. ¼ Microstepping D. 1/16 Microstepping

    M1WA

    M1WB

    M2WA

    M2WB

    M3WA

    M3WB

    M1WA

    M1WB

    M2WA

    M2WB

    M3WA

    M3WB

    M1WA

    M1WB

    M2WA

    M2WB

    M3WA

    M3WB

    M1WA

    M1WB

    M2WA

    M2WB

    M3WA

    M3WB

    LEGEND:M1WA – Motor 1 Winding AM1WB – Motor 1 Winding BM2WA – Motor 2 Winding A

    M2WB – Motor 2 Winding BM3WA – Motor 3 Winding AM3WB – Motor 3 Winding B

    Figure 6-2. Drive Signal Step Mode Comparison

    A. Full-Step B. Half-Step

    C. ¼ Microstepping C. 1/16 Microstepping

    MxWA

    MxWB

    MxWAAnalog Signal

    MxWBAnalog Signal

    MxWA

    MxWB

    MxWAAnalog Signal

    MxWBAnalog Signal

    MxWA

    MxWB

    MxWAAnalog Signal

    MxWBAnalog Signal

    MxWA

    MxWB

    MxWAAnalog Signal

    MxWBAnalog Signal

    Figure 6-3. Data Coordinates Feed to the Motor

    AN33533-Axis Control Performance

    © 2020 Microchip Technology Inc. DS00003353A-page 18

  • Figure 6-1 shows the movement of motors in 3-axis in terms of number of steps driven at full-step, half-step andmicrostepping (1/4 and 1/16) with the speed of 180 RPM. It can be observed that the time elapsed for all step modeimplementations is uniform because they all operate at 180 RPM. But, it can be seen in Figure 6-2 that the requiredPPS (Pulse per Second) for each drive is different to retain the speed of 180 RPM. The drive signals shown are fromthe control signals of low-side MOSFETs of bipolar drive circuits.

    An example is shown in Figure 6-3, in which the positions are defined as an array of coordinates. At an instance, thepositions having the same element order for all the axis will be processed by the firmware using Equations 5-1 or 5-2depending on the preceding coordinate before passing onto Equation 5-3. Table 6-1 shows the data of how thedesired steps are calculated for all the motors with STEPS_PER_COORDINATE of 100, based on the coordinate givenin Figure 6-3.Table 6-1. Step Calculation for Three Motors in Full-Step Mode

    n Xn |Xn+1 - Xn| M1desiredStep Yn |Yn+1 - Yn| M2desiredStep Zn |Zn+1 - Zn| M3desiredStep

    0 0 0 0

    1 3 3(CW) 300 11 11(CW) 1100 5 5(CW) 500

    2 12 9(CW) 900 8 3(CCW) 300 3 2(CCW) 200

    3 8 4(CCW) 400 12 4(CW) 400 9 6(CW) 600

    4 2 6(CCW) 600 5 7(CCW) 700 2 7(CCW) 700

    AN33533-Axis Control Performance

    © 2020 Microchip Technology Inc. DS00003353A-page 19

  • 7. ConclusionPIC18F-Q43 devices have the capacity to provide control signals for 3-axis stepper motor control. Aside fromproviding control signals, it is also capable of setting the movement limitation to accurately move the motors to thedefined positions. Different modes of stepping drive such as full-step, half-step, 1/4 and 1/16 microstepping can beimplemented to achieve the desired resolution. The CIPs such as CWG, 16-bit PWM and DMA significantly reducedthe burden on the core, enabling the CPU to process data for motor control movements.

    AN3353Conclusion

    © 2020 Microchip Technology Inc. DS00003353A-page 20

  • 8. Appendix A: SchematicsFigure 8-1. Circuit Schematics

    POWER

    R4510kΩ

    8

    12

    7

    5

    34

    6

    R4610kΩ

    12

    DC+

    R4710kΩ

    8

    12

    7

    5

    34

    6

    R4810kΩ

    R30100mΩ

    M1WA1

    M1WA2

    M1WA2

    BHOM1WA

    BLOM1WA

    ALOM1WA

    AHOM1WA

    SHUNT_M1WA

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC20

    IC20

    IC23

    IC23

    J13811‐S1‐002‐10‐017101

    Motor 1 Drive Circuit PIC18FxxQ

    43

    RA0RA1RA2RA3RA4RA5RE0

    RB7RB6RB5RB4RB3RB2RB1RB0

    RE1RE2VDDAVSSRA7RA6

    AVDDVSSRD7RD6RD5RD4

    CWG3B

    RC0RC1RC2RC3RD0RD1

    RC7RC6RC5RC4RD3RD2

    123456789

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    40

    39

    38

    37

    36

    35

    34

    33

    32

    31

    30

    29

    28

    27

    26

    25

    24

    23

    22

    21

    CWG3CCWG3DLATA3

    LATB7PWM1CWG1ACWG1CCWG1DCWG1BPWM1LATB0

    PWM3PWM2PWM2

    PWM3CWG2D

    LATA4

     LATE0LATE1

    CWG2ACWG3A

    CWG2BCWG2C

    87654321

    910111213

    16

    1415

    BHOBHSBLOVSSVDDALOAHS

    BHBENBHIBLIALIAHINC

    AHBAHO

    BHOM1WBBHSM1WBBLOM1WB

    AGNDVDDM1WBALOM1WBAHSM1WBAHOM1WB

    BHBM1WB+5V

    AHBM1WB

    MIC4606

    IC16

    12

    C200.1µF

    C190.1µF

    +15V

    J27811‐S1‐002‐10‐017101

    VDDM1WB

    C91µF

    C101µF

    CWG1DCWG1C

    CWG1BCWG1A

    910111213

    16

    1415

    PWM1

    BHBENBHIBLIALIAHINC

    BHOBHSBLOVSSVDDALOAHSAHOAHB

    BHOM1WABHSM1WABLOM1WAAGND

    VDDM1WAALOM1WAAHSM1WAAHOM1WA

    BHBM1WA+5V

    LATB7

    PWM1LATB0

    AHBM1WA

    MIC4606

    87654321

    IC15

    C71µF

    C81µF

    12

    C180.1µF

    C170.1µF

    +15V

    J21811‐S1‐002‐10‐017101

    VDDM1WA

    R4910kΩ

    8

    12

    7

    5

    34

    6

    R5010kΩ

    12

    DC+

    R5110kΩ

    8

    12

    7

    5

    34

    6

    R5210kΩ

    R104100mΩ

    M1WB1

    M1WB2

    M1WB2

    BHOM1WB

    BLOM1WB

    ALOM1WB

    AHOM1WB

    SHUNT_M1WB

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC22

    IC22

    IC24

    IC24

    J14811‐S1‐002‐10‐017101

    1 32

    IN

    GND_NO PAD GND_TAB

    OUT IN

    GROUND_1

    OUT

    GROUND_2

    12

    12

    12

    12

    RAPC722X

    J2C29100µF

    C210.1µF

    IC19MC7815CD2TG

    C280.1µF

    C447µF

    J1811‐S1‐002‐10‐017101

    J10811‐S1‐002‐10‐017101

    J11811‐S1‐002‐10‐017101

    J12811‐S1‐002‐10‐017101

    IC21MC7805CDTG

    C3647µF

    C370.1µF

    R271kΩ

    LED15SML‐D12Y1WT86

    R401Ω

    C450.1µF

    C46100µF

    TP15014

    TP25014

    TP235014

    +15V +5V AVDD

    C3470µF

    C300.1µF

    R260Ω

    DC+

    Microcontroller 

    +5V

    MCLR

    AN3353Appendix A: Schematics

    © 2020 Microchip Technology Inc. DS00003353A-page 21

  • Figure 8-2. Motor 2 and 3 Drive Circuit Schematics

    R6110kΩ

    8

    12

    7

    5

    34

    6

    R6210kΩ

    12

    DC+

    R6310kΩ

    8

    12

    7

    5

    34

    6

    R6410kΩ

    R32100mΩ

    M3WA1

    M3WA2

    M3WA2

    BHOM3WA

    BLOM3WA

    ALOM3WA

    AHOM3WA

    SHUNT_M3WA

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC31

    IC31

    IC32

    IC32

    J17811‐S1‐002‐10‐017101

    Motor 3 Drive Circuit 

    87654321

    910111213

    16

    1415

    BHOBHSBLOVSSVDDALOAHS

    BHBENBHIBLIALIAHINC

    AHBAHO

    BHOM3WBBHSM3WBBLOM3WB

    AGNDVDDM3WBALOM3WBAHSM3WBAHOM3WB

    BHBM3WB+5V

    AHBM3WB

    MIC4606

    IC30

    12

    C340.1µF

    C330.1µF

    +15VJ31

    811‐S1‐002‐10‐017101

    VDDM3WB

    C311µF

    C321µF

    CWG3DCWG3C

    CWG3BCWG3A

    910111213

    16

    1415

    BHBENBHIBLIALIAHINC

    BHOBHSBLOVSSVDDALOAHSAHOAHB

    BHOM3WABHSM3WABLOM3WAAGNDVDDM3WAALOM3WAAHSM3WAAHOM3WA

    BHBM3WA+5V

    AHBM3WA

    MIC4606

    87654321

    IC29

    C151µF

    C161µF

    12

    C270.1µF

    C260.1µF

    +15VJ30

    811‐S1‐002‐10‐017101

    VDDM3WA

    PWM3LATA4

    PWM3LATA3

    R5310kΩ

    8

    12

    7

    5

    34

    6

    R5410kΩ

    12

    DC+

    R5510kΩ

    8

    12

    7

    5

    34

    6

    R5610kΩ

    R31100mΩ

    M2WA1

    M2WA2

    M2WA2

    BHOM2WA

    BLOM2WA

    ALOM2WA

    AHOM2WA

    SHUNT_M2WA

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC25

    IC25

    IC26

    IC26

    J15811‐S1‐002‐10‐017101

    Motor 2 Drive Circuit

    87654321

    910111213

    16

    1415

    BHOBHSBLOVSSVDDALOAHS

    BHBENBHIBLIALIAHINC

    AHBAHO

    BHOM2WBBHSM2WBBLOM2WB

    AGNDVDDM2WBALOM2WBAHSM2WBAHOM2WB

    BHBM2WB+5V

    AHBM2WB

    MIC4606

    IC18

    12

    C250.1µF

    C240.1µF

    +15VJ28

    811‐S1‐002‐10‐017101

    VDDM2WB

    C111µF

    C111µF

    CWG2DCWG2C

    CWG2BCWG2A9

    10111213

    16

    1415BHBEN

    BHIBLIALIAHINC

    BHOBHSBLOVSSVDDALOAHSAHOAHB

    BHOM2WABHSM2WABLOM2WAAGNDVDDM2WAALOM2WAAHSM2WAAHOM2WB

    BHBM2WA+5V

    AHBM2WA

    MIC4606

    87654321

    IC17

    C111µF

    C481µF

    12

    C230.1µF

    C220.1µF

    +15VJ29

    811‐S1‐002‐10‐017101

    VDDM2WA

    PWM2LATE1

    PWM2LATE0

    R5710kΩ

    8

    12

    7

    5

    34

    6

    R5810kΩ

    12

    DC+

    R5910kΩ

    8

    12

    7

    5

    34

    6

    R6010kΩ

    R105100mΩ

    M2WB1

    M2WB2

    M2WB2

    BHOM2WB

    BLOM2WB

    ALOM2WB

    AHOM2WB

    SHUNT_M2WB

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC27

    IC27

    IC28

    IC28

    J16811‐S1‐002‐10‐017101

    R6510kΩ

    8

    12

    7

    5

    34

    6

    R6610kΩ

    12

    DC+

    R6710kΩ

    8

    12

    7

    5

    34

    6

    R6810kΩ

    R106100mΩ

    M3WB1

    M3WB2

    M3WB2

    BHOM3WB

    BLOM3WB

    ALOM3WB

    AHOM3WB

    SHUNT_M3WB

    FDS3992

    FDS3992

    FDS3992

    FDS3992

    IC33

    IC33

    IC34

    IC34

    J18811‐S1‐002‐10‐017101

    STEPPERMOTOR 1

    M1WA1

    M1WA2

    M1WB1

    M1WB2

    STEPPERMOTOR 2

    M2WA1

    M2WA2

    M2WB1

    M2WB2

    STEPPERMOTOR 3

    M3WA1

    M3WA2

    M3WB1

    M3WB2

    Winding A

    Winding B

    Winding A

    Winding B

    Winding A

    Winding B

    AN3353Appendix A: Schematics

    © 2020 Microchip Technology Inc. DS00003353A-page 22

  • 9. Appendix B: MPLAB® Code Configurator (MCC) PeripheralInitializationMPLAB® Code Configurator (MCC) is an easy-to-use plugin tool for MPLAB® X IDE that generates codes forcontrolling the peripherals of Microchip microcontrollers, based on the settings made in its Graphical User Interface(GUI). MCC is utilized to easily configure the peripherals used in this motor control application. Refer to the MPLAB®

    Code Configurator User’s Guide (DS40001725) for further information on how to install and set up the MCC inMPLAB® X IDE.

    The step-by-step process of using MCC in this application is listed below.

    1. In the system module, set the clock to HFINTOSC with the highest available frequency of 64 MHz.2. Timer2 is used as a clock source for CCP1/2/3. For the CCP to produce PWM, the Timer2 clock source must

    be set to FOSC/4. Enable the Timer.3. Configure the Timer0 in 16-bit Timer mode with MFINTOSC clock source, having a requested period of 1.5 ms.

    Enable the Timer interrupt and let the Timer0 be initially disabled.4. For Motor 1 drive, configure PWM1, CCP1, CWG1, DMA Channel 1 and DMA Channel 2.

    4.1. Set up the PWM1 with HFINTOSC clock source, having a requested frequency of 62.5 kHz and dutycycle of 50%. Enable the PWM module.

    4.2. CCP1 module must be in PWM mode with Timer2 as the selected Timer, having a duty cycle of 50%.4.3. CWG1 must be configured with CCP1_OUT as an input source, with Output mode in Forward Full-

    Bridge mode and HFINTOSC as the selected clock source. Enable CWG1.5. For Motor 2 drive, configure PWM2, CCP2, CWG2, DMA Channel 3 and DMA Channel 4.

    5.1. Set up the PWM2 with HFINTOSC clock source, having a requested frequency of 62.5 kHz and dutycycle of 50%. Enable the PWM module.

    5.2. CCP2 module must be in PWM mode with Timer2 as the selected Timer, having a duty cycle of 50%.5.3. CWG2 must be configured with CCP2_OUT as an input source, with Output mode in Forward Full-

    Bridge mode and HFINTOSC as the selected clock source. Enable CWG2.6. For Motor 3 drive, configure PWM3, CCP3, CWG3, DMA Channel 5 and DMA Channel 6.

    6.1. Set up the PWM3 with HFINTOSC clock source, having a requested frequency of 62.5 kHz and dutycycle of 50%. Enable the PWM module.

    6.2. CCP3 module must be in PWM mode with Timer2 as the selected Timer, having a duty cycle of 50%.6.3. CWG3 must be configured with CCP3_OUT as an input source, with Output mode in Forward Full-

    Bridge mode and HFINTOSC as the selected clock source. Enable CWG3.7. The DMA channels are configured by following these series of steps:

    7.1. In the DMAxCON0 register, enable the SIRQEN bit of DMA Channel 1 and clear the EN bit (disable).7.2. Define the DMAxDSZL size to 0x02, which means that the destination is 2 bytes wide.7.3. Configure the DMAxSIRQ to TMR0. Depending on the microstepping resolution, DMAxSSZL will be

    0x80 if the mode will be 1/16 microstepping and 0x20 if it will operate in 1/4 microstepping. Thesource and destination addresses are defined in the firmware, depending on the direction of themotor and motor number. Leave the configuration of other registers not mentioned here, as is.

    8. In the Pin Manager configuration, set up the input/output pins of all the peripherals as shown in Figure B-1.9. After configuring all the peripherals, click the “Generate Code” button next to the Project Resources tab name

    in the top left corner. This will generate a main.c file to the project automatically. It will also initialize themodule and leave an empty while(1) loop for custom code entry.

    AN3353Appendix B: MPLAB® Code Configurator (MCC)...

    © 2020 Microchip Technology Inc. DS00003353A-page 23

    http://ww1.microchip.com/downloads/en/devicedoc/40001725b.pdfhttp://ww1.microchip.com/downloads/en/devicedoc/40001725b.pdf

  • Figure 9-1. PIC18FXXQ43 Pin Manager Configuration

    AN3353Appendix B: MPLAB® Code Configurator (MCC)...

    © 2020 Microchip Technology Inc. DS00003353A-page 24

  • 10. Appendix C: Source Code ListingThe latest software version can be downloaded from the Microchip website (www.microchip.com). The user will findthe source code attached to the electronic version of this application note. The latest version is v1.0.

    AN3353Appendix C: Source Code Listing

    © 2020 Microchip Technology Inc. DS00003353A-page 25

    http://www.microchip.com

  • The Microchip WebsiteMicrochip provides online support via our website at http://www.microchip.com/. This website is used to make filesand information easily available to customers. Some of the content available includes:

    • Product Support – Data sheets and errata, application notes and sample programs, design resources, user’sguides and hardware support documents, latest software releases and archived software

    • General Technical Support – Frequently Asked Questions (FAQs), technical support requests, onlinediscussion groups, Microchip design partner program member listing

    • Business of Microchip – Product selector and ordering guides, latest Microchip press releases, listing ofseminars and events, listings of Microchip sales offices, distributors and factory representatives

    Product Change Notification ServiceMicrochip’s product change notification service helps keep customers current on Microchip products. Subscribers willreceive email notification whenever there are changes, updates, revisions or errata related to a specified productfamily or development tool of interest.

    To register, go to http://www.microchip.com/pcn and follow the registration instructions.

    Customer SupportUsers of Microchip products can receive assistance through several channels:

    • Distributor or Representative• Local Sales Office• Embedded Solutions Engineer (ESE)• Technical Support

    Customers should contact their distributor, representative or ESE for support. Local sales offices are also available tohelp customers. A listing of sales offices and locations is included in this document.

    Technical support is available through the website at: http://www.microchip.com/support

    Microchip Devices Code Protection FeatureNote the following details of the code protection feature on Microchip devices:

    • Microchip products meet the specification contained in their particular Microchip Data Sheet.• Microchip believes that its family of products is one of the most secure families of its kind on the market today,

    when used in the intended manner and under normal conditions.• There are dishonest and possibly illegal methods used to breach the code protection feature. All of these

    methods, to our knowledge, require using the Microchip products in a manner outside the operatingspecifications contained in Microchip’s Data Sheets. Most likely, the person doing so is engaged in theft ofintellectual property.

    • Microchip is willing to work with the customer who is concerned about the integrity of their code.• Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code

    protection does not mean that we are guaranteeing the product as “unbreakable.”

    Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protectionfeatures of our products. Attempts to break Microchip’s code protection feature may be a violation of the DigitalMillennium Copyright Act. If such acts allow unauthorized access to your software or other copyrighted work, youmay have a right to sue for relief under that Act.

    Legal NoticeInformation contained in this publication regarding device applications and the like is provided only for yourconvenience and may be superseded by updates. It is your responsibility to ensure that your application meets with

    AN3353

    © 2020 Microchip Technology Inc. DS00003353A-page 26

    http://www.microchip.com/http://www.microchip.com/pcnhttp://www.microchip.com/support

  • your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHEREXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION,INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY ORFITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchipdevices in life support and/or safety applications is entirely at the buyer’s risk, and the buyer agrees to defend,indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from suchuse. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights unlessotherwise stated.

    TrademarksThe Microchip name and logo, the Microchip logo, Adaptec, AnyRate, AVR, AVR logo, AVR Freaks, BesTime,BitCloud, chipKIT, chipKIT logo, CryptoMemory, CryptoRF, dsPIC, FlashFlex, flexPWR, HELDO, IGLOO, JukeBlox,KeeLoq, Kleer, LANCheck, LinkMD, maXStylus, maXTouch, MediaLB, megaAVR, Microsemi, Microsemi logo, MOST,MOST logo, MPLAB, OptoLyzer, PackeTime, PIC, picoPower, PICSTART, PIC32 logo, PolarFire, Prochip Designer,QTouch, SAM-BA, SenGenuity, SpyNIC, SST, SST Logo, SuperFlash, Symmetricom, SyncServer, Tachyon,TempTrackr, TimeSource, tinyAVR, UNI/O, Vectron, and XMEGA are registered trademarks of Microchip TechnologyIncorporated in the U.S.A. and other countries.

    APT, ClockWorks, The Embedded Control Solutions Company, EtherSynch, FlashTec, Hyper Speed Control,HyperLight Load, IntelliMOS, Libero, motorBench, mTouch, Powermite 3, Precision Edge, ProASIC, ProASIC Plus,ProASIC Plus logo, Quiet-Wire, SmartFusion, SyncWorld, Temux, TimeCesium, TimeHub, TimePictra, TimeProvider,Vite, WinPath, and ZL are registered trademarks of Microchip Technology Incorporated in the U.S.A.

    Adjacent Key Suppression, AKS, Analog-for-the-Digital Age, Any Capacitor, AnyIn, AnyOut, BlueSky, BodyCom,CodeGuard, CryptoAuthentication, CryptoAutomotive, CryptoCompanion, CryptoController, dsPICDEM,dsPICDEM.net, Dynamic Average Matching, DAM, ECAN, EtherGREEN, In-Circuit Serial Programming, ICSP,INICnet, Inter-Chip Connectivity, JitterBlocker, KleerNet, KleerNet logo, memBrain, Mindi, MiWi, MPASM, MPF,MPLAB Certified logo, MPLIB, MPLINK, MultiTRAK, NetDetach, Omniscient Code Generation, PICDEM,PICDEM.net, PICkit, PICtail, PowerSmart, PureSilicon, QMatrix, REAL ICE, Ripple Blocker, SAM-ICE, Serial QuadI/O, SMART-I.S., SQI, SuperSwitcher, SuperSwitcher II, Total Endurance, TSHARC, USBCheck, VariSense,ViewSpan, WiperLock, Wireless DNA, and ZENA are trademarks of Microchip Technology Incorporated in the U.S.A.and other countries.

    SQTP is a service mark of Microchip Technology Incorporated in the U.S.A.

    The Adaptec logo, Frequency on Demand, Silicon Storage Technology, and Symmcom are registered trademarks ofMicrochip Technology Inc. in other countries.

    GestIC is a registered trademark of Microchip Technology Germany II GmbH & Co. KG, a subsidiary of MicrochipTechnology Inc., in other countries.

    All other trademarks mentioned herein are property of their respective companies.© 2020, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.

    ISBN: 978-1-5224-5479-3

    Quality Management SystemFor information regarding Microchip’s Quality Management Systems, please visit http://www.microchip.com/quality.

    AN3353

    © 2020 Microchip Technology Inc. DS00003353A-page 27

    http://www.microchip.com/quality

  • AMERICAS ASIA/PACIFIC ASIA/PACIFIC EUROPECorporate Office2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7200Fax: 480-792-7277Technical Support:http://www.microchip.com/supportWeb Address:http://www.microchip.comAtlantaDuluth, GATel: 678-957-9614Fax: 678-957-1455Austin, TXTel: 512-257-3370BostonWestborough, MATel: 774-760-0087Fax: 774-760-0088ChicagoItasca, ILTel: 630-285-0071Fax: 630-285-0075DallasAddison, TXTel: 972-818-7423Fax: 972-818-2924DetroitNovi, MITel: 248-848-4000Houston, TXTel: 281-894-5983IndianapolisNoblesville, INTel: 317-773-8323Fax: 317-773-5453Tel: 317-536-2380Los AngelesMission Viejo, CATel: 949-462-9523Fax: 949-462-9608Tel: 951-273-7800Raleigh, NCTel: 919-844-7510New York, NYTel: 631-435-6000San Jose, CATel: 408-735-9110Tel: 408-436-4270Canada - TorontoTel: 905-695-1980Fax: 905-695-2078

    Australia - SydneyTel: 61-2-9868-6733China - BeijingTel: 86-10-8569-7000China - ChengduTel: 86-28-8665-5511China - ChongqingTel: 86-23-8980-9588China - DongguanTel: 86-769-8702-9880China - GuangzhouTel: 86-20-8755-8029China - HangzhouTel: 86-571-8792-8115China - Hong Kong SARTel: 852-2943-5100China - NanjingTel: 86-25-8473-2460China - QingdaoTel: 86-532-8502-7355China - ShanghaiTel: 86-21-3326-8000China - ShenyangTel: 86-24-2334-2829China - ShenzhenTel: 86-755-8864-2200China - SuzhouTel: 86-186-6233-1526China - WuhanTel: 86-27-5980-5300China - XianTel: 86-29-8833-7252China - XiamenTel: 86-592-2388138China - ZhuhaiTel: 86-756-3210040

    India - BangaloreTel: 91-80-3090-4444India - New DelhiTel: 91-11-4160-8631India - PuneTel: 91-20-4121-0141Japan - OsakaTel: 81-6-6152-7160Japan - TokyoTel: 81-3-6880- 3770Korea - DaeguTel: 82-53-744-4301Korea - SeoulTel: 82-2-554-7200Malaysia - Kuala LumpurTel: 60-3-7651-7906Malaysia - PenangTel: 60-4-227-8870Philippines - ManilaTel: 63-2-634-9065SingaporeTel: 65-6334-8870Taiwan - Hsin ChuTel: 886-3-577-8366Taiwan - KaohsiungTel: 886-7-213-7830Taiwan - TaipeiTel: 886-2-2508-8600Thailand - BangkokTel: 66-2-694-1351Vietnam - Ho Chi MinhTel: 84-28-5448-2100

    Austria - WelsTel: 43-7242-2244-39Fax: 43-7242-2244-393Denmark - CopenhagenTel: 45-4450-2828Fax: 45-4485-2829Finland - EspooTel: 358-9-4520-820France - ParisTel: 33-1-69-53-63-20Fax: 33-1-69-30-90-79Germany - GarchingTel: 49-8931-9700Germany - HaanTel: 49-2129-3766400Germany - HeilbronnTel: 49-7131-72400Germany - KarlsruheTel: 49-721-625370Germany - MunichTel: 49-89-627-144-0Fax: 49-89-627-144-44Germany - RosenheimTel: 49-8031-354-560Israel - Ra’ananaTel: 972-9-744-7705Italy - MilanTel: 39-0331-742611Fax: 39-0331-466781Italy - PadovaTel: 39-049-7625286Netherlands - DrunenTel: 31-416-690399Fax: 31-416-690340Norway - TrondheimTel: 47-72884388Poland - WarsawTel: 48-22-3325737Romania - BucharestTel: 40-21-407-87-50Spain - MadridTel: 34-91-708-08-90Fax: 34-91-708-08-91Sweden - GothenbergTel: 46-31-704-60-40Sweden - StockholmTel: 46-8-5090-4654UK - WokinghamTel: 44-118-921-5800Fax: 44-118-921-5820

    Worldwide Sales and Service

    © 2020 Microchip Technology Inc. DS00003353A-page 28

    http://www.microchip.com/supporthttp://www.microchip.com

    IntroductionTable of Contents1. Overview2. Stepper Motor Control2.1. Control Overview2.2. Drive Circuit and Control Process2.3. 16-Bit High Resolution PWM for Control Signal2.4. Data Transfer

    3. Stepper Motor Control Characteristics3.1. Torque Consideration3.2. Stepping Rate

    4. Step Mode Implementation4.1. Full-Step Drive4.2. Half-Step Drive4.3. Microstepping

    5. Firmware Flow Diagram6. 3-Axis Control Performance7. Conclusion8. Appendix A: Schematics9. Appendix B: MPLAB® Code Configurator (MCC) Peripheral Initialization10. Appendix C: Source Code ListingThe Microchip WebsiteProduct Change Notification ServiceCustomer SupportMicrochip Devices Code Protection FeatureLegal NoticeTrademarksQuality Management SystemWorldwide Sales and Service


Recommended