Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Microstepping with 16F877A and CCS C

Status
Not open for further replies.

probus

Newbie level 4
Joined
Aug 4, 2011
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,338
Hello Dear All,

I have a unipolar 5V stepper motor and I want to drive it with a 16f877a.
I have connected 2 pieces of tc4427 mosfet drivers and 4 pieces of IRF2807 to the pic and, as I see they are working properly.

I supply 50V to the motor and I am trying to use microstepping techniques. Because the motor is 5V, pwm output of the pic never exceeds 10%.

My schema is same with the schema in this document (https://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf page 19, figure 23) (plus mosfet drivers).

My problem is that, I can only drive the motor very slowly. When I trying to increase the speed, motor is just vibrating.

Here is my some code parts:
Code:
int msTable[] = {0, 2, 4, 6, 7, 8, 9, 10, 8, 6, 4, 3, 2, 1}; //Microstepping look up table


Code:
setup_timer_2(T2_DIV_BY_1,101,1); //49.02 khz


Code:
void takeStep(unsigned int16 stepCount){
static int iCcp1 = 7;
static int iCcp2 = 0;
static int16 i;
static int1 swCcp1 = true;
static int1 swCcp2 = true;

for(i = 0; i < stepCount; i++){

set_pwm1_duty(msTable[iCcp1++]);
if(swCcp1) output_high(PIN_CCP1_SW); else output_low(PIN_CCP1_SW);
set_pwm2_duty(msTable[iCcp2++]);
if(swCcp2) output_high(PIN_CCP2_SW); else output_low(PIN_CCP2_SW);

if(iCcp1 > MAX_MS_TABLE_INDEX){
iCcp1 = 0;
swCcp1 = !swCcp1;
} else if(iCcp2 > MAX_MS_TABLE_INDEX){
iCcp2 = 0;
swCcp2 = !swCcp2;
}

delay_us(1000);
}

}


I am regulating speed by changing the sleep time. Sleep time 1000 and above works fine(but very slowly). When I decrease it, motor is starting to vibrate.

Here is some details of the motor:

3A, 1,66ohm, 7.5mH, nema 24, unipolar.

I have just checked the circuit with a oscilloscope. It works fine at high and low speed.

Please help me :/
 
Last edited:

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top