Problem with Steeper Motor Programming

Discussions on anything that isn't Phidgets related will be moved here.
Post Reply
tvmkamal
Fresh meat
Posts: 1
Joined: Thu Oct 13, 2016 10:11 pm
Contact:

Problem with Steeper Motor Programming

Post by tvmkamal »

Hi,

I have NEMA Hybrid Stepper motor, I am using a M542T driver to drive the stepper motor with Arduino Uno. I have LCD displaying the count of the rotation. I programmed the to achieve 1600 steps delivering 100 RPM. So for every 1600 step it will count and display the count on a LCD. The PWM on off time i calculated as 365 micro second for the stepper. The code execution time for LCD is 24 milli seconds. So after every 1600 steps the motor stops for a few millisecond and the starts. So the rotation is not smooth at all.

If there is a way for me to overcome the problem please help me.

Thanks in advance.

My Sketch:

#include <Adafruit_GFX.h> // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library

#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0

#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
#define BLUE 0x3498DB
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
//Variable Initialization
int i = 0;
int a = 0;
int b=0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Serial.println(F("TFT LCD test"));

uint16_t identifier = tft.readID();
tft.begin(identifier);
pinMode(10, OUTPUT); // Step Pin
pinMode(11, OUTPUT) ; // Dir Pin
digitalWrite(10, LOW);
digitalWrite(11, LOW);

tft.setRotation(1);
tft.fillScreen(BLACK);
unsigned long start = micros();
tft.setCursor(90, 0);
tft.setTextColor(BLUE);
tft.setTextSize(4);
tft.println("SENTIAL");
tft.println();
tft.setTextColor(GREEN);
tft.setTextSize(3);
tft.println("Operation Mode: 3");
tft.println();
tft.println();
tft.setTextColor(RED);
tft.setTextSize(3);
tft.print("Rate:");
}

void loop() {

// put your main code here, to run repeatedly:

i = i + 1;
digitalWrite(10, HIGH);
delayMicroseconds(375);
digitalWrite(10, LOW);
if(i<1600)
{
delayMicroseconds(375);
}
if (i == 1600)
{
b=displayRate(b);
}
}

int displayRate(int a)
{
a = a + 1;
tft.fillCircle(126, 136, 40, BLACK);
tft.setCursor(96, 134);
tft.print(a);
i = 0;
return a;
}
User avatar
mparadis
Site Admin
Posts: 660
Joined: Fri Oct 28, 2011 12:17 pm
Contact:

Re: Problem with Steeper Motor Programming

Post by mparadis »

Normally, a programmer would use multithreading in order to overcome the long wait times associated with I/O tasks like printing to an LCD screen. The Uno doesn't support multithreading, but a quick google search brings up this article as a good starting point.
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests