Menu

728x90

468x60

Navbar

Wednesday, May 20, 2020

PIC16F887 interface to a bipolar stepper motor

A bipolar stepper motor commonly found in a numerical control machine, or a 3D printing machine. It gives a precise stepping angle and high torque. Its power varies with its physical size. For more information, let see this post.

In this example, I use PIC16F887 to control the bipolar stepper motor speed and direction. The direction is determined by a switch connects to RD7.

PIC16F887 interface to a bipolar stepper motor
Schematic diagram.
Pin RD0 to RD3 drive the bipolar stepper motor.
Pin RD7 set the stepping direction.
We assume that the motor working voltage
is 24 V.

Source code is written in XC8.

#include<xc.h>

// PIC16F887 Configuration Bit Settings
// CONFIG1
#pragma config FOSC = XT
#pragma config WDTE = OFF
#pragma config PWRTE = OFF
#pragma config MCLRE = ON
#pragma config CP = OFF
#pragma config CPD = OFF
#pragma config BOREN = ON
#pragma config IESO = ON
#pragma config FCMEN = ON
#pragma config LVP = ON

// CONFIG2
#pragma config BOR4V = BOR40V
#pragma config WRT = OFF
#define _XTAL_FREQ 4000000

#define stepTime 100

//clock wise stepping
void stepCW(){
 PORTD=0b00001100;
 __delay_ms(stepTime);
 PORTD=0b00000110;
 __delay_ms(stepTime);
 PORTD=0b00000011;
 __delay_ms(stepTime);
 PORTD=0b00001001;
 __delay_ms(stepTime);
}

//counter clock wise stepping
void stepCCW(){
 PORTD=0b00001001;
 __delay_ms(stepTime);
 PORTD=0b00000011;
 __delay_ms(stepTime);
 PORTD=0b00000110;
 __delay_ms(stepTime);
 PORTD=0b00001100;
 __delay_ms(stepTime);
}

void main(){
    /*Clear PortD*/
    PORTD=0x00;
    /*RD7 input*/
    TRISD=0x80;
    while(1){
        if(RD7==0) stepCCW();
        else stepCW();
    }
}

Let see the screen shot of the testing program.

PIC16F887 interface to a bipolar stepper motor
A screen shot of the simulation program.

Back to main tutorials page.

No comments:

Post a Comment

336x280

Search This Blog

Labels

23K256 (1) 24C16B (2) 25AA010A (2) 8051 (7) 93AA46B (1) ADC (34) Analog Comparator (1) Arduino (16) ARM (13) AT89C52 (7) ATMega32 (58) ATMega644P (27) AVR (87) AVR PCB (2) Bootloader (1) CCS PICC (31) Change Notify Interrupt (CNI) (2) DAC (2) DHT11 (4) Display (133) Distance Sensor (3) ds1307 (10) DS18B20 (5) ds3231 (1) ds3232 (2) dsPIC (5) dsPIC30F1010 (3) dsPIC30F2010 (5) EEPROM (5) Environment Sensor (5) ESP32 (1) esp8266 (1) Graphical LCD (2) I2C (38) ILI9341 (1) Input/Output (76) Interrupt (22) IoT PCB (1) Keil (5) Keypad (16) KS0108 (2) LCD (75) LM35 (3) Master/Slave (2) MAX7221 (1) MCP23017 (8) MCP23S17 (7) MCP4921 (1) MCP4922 (2) Meter (3) MikroC (2) Module PCB (1) Motor (15) MPLABX (73) Nokia 5110 LCD (4) OLED (2) One-Wire (7) Oscillator (8) PCB (10) PCD8544 (3) PCF8574 (10) PIC (108) PIC12F (3) PIC16 (105) PIC16F628A (3) PIC16F630 (2) PIC16F716 (4) PIC16F818 (11) PIC16F818/819 (3) PIC16F84A (16) PIC16F876A (2) PIC16F877A (9) PIC16F88 (2) PIC16F887 (60) PIC18 (19) PIC18F1220 (5) PIC18F2550 (5) PIC18F4550 (12) PICKit2 (1) PICMicro PCB (4) Pin Change Interrupt (1) PWM (12) RTC (12) SBN0064G (1) Sensor (13) SH1106 (3) Shift Register (13) Shift Registers (10) Software TWI (2) SPI (39) ST7735 (1) STM32 (11) STM32 Black Pill (1) STM32 Blue Pill (12) STM32 HAL (5) STM32CubeIDE (13) STM32F103C8T6 (9) STM32F401CCU6 (1) SysTick (4) temperature sensor (13) TFT (1) TG12864A (1) Thermometer (22) Timer/Counter (32) TM1637 (2) twi (10) UART (8) Ultrasonic (4) Voltmeter (7) WDT (1) XC16 (2) XC8 (96)