CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to support@ccsinfo.com

Calculation of Stepper Motor Ramp Profile (Linear or S-Ramp)

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

Calculation of Stepper Motor Ramp Profile (Linear or S-Ramp)
PostPosted: Tue Aug 26, 2014 2:13 am     Reply with quote

Hello,

I want to create a pulse profile which should be send via an output to motor driver IC.

I have pre-calculated profile and filled to an array and when i want to start my motor i am collecting delay values from that array.
Code:

unsigned int const periods[117]={2449,1015,779,656,578,523,481,447,420,397,378,361,346,333,322,311,302,293,285,277,271,264,258,253,247,243,238,234,229,226,222,
218,215,212,209,206,203,200,197,195,192,190,188,186,184,182,180,178,176,174,172,171,169,167,166,164,163,162,160,159,157,156,155,154,152,151,150,149,148,147,
146,145,144,143,142,141,140,139,138,137,136,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,
107,106,105,104,103,102,101,100};   
 
//delay_us values. start from 2449us and reaching maximum speed at 100us delay.
//for(i=0,i<117,i++)
//{
//output_high(pin)
//delay_us(periods[next])
//output_low(pin)
//}

The problem is, my new system has different speed profiles which will be given by user that is why ramp profile of movement changes time to time and i should re-calculate that ramp profile every start of movement.

Do you have any algorithm to help me to calculate and fill that array?

I will have max speed delay value, distance to move(in pulse) and steps to reach max speed values.

Thank you
Mike Walne



Joined: 19 Feb 2004
Posts: 1785
Location: Boston Spa UK

View user's profile Send private message

PostPosted: Tue Aug 26, 2014 8:07 am     Reply with quote

You have not given me enough to work on.

1) How are you controlling the 'OFF' period?
2) Do you HAVE to use an array?

Mike
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Tue Aug 26, 2014 9:32 am     Reply with quote

a reminder:
the largest value that can fit into a CCS unsigned int is ??????
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

PostPosted: Tue Aug 26, 2014 9:42 am     Reply with quote

mike,
1_i am planing to create pulse via timer interrupt. 1us duration pulse is enough. i think 2us period timer will be ok.

2_i don't have to use array but the problem is i am driving my stepper motor in 256 microstepping mode and i need high speeds. My desired speed is 4us period(250khz) pulse. I have 32 MHz oscillator and this is not enough to make calculations on-fly i think? Do you have any suggestions?.


ASMBOY,
length of my array is around approximately 32000 values. Each value is between 1300-0. Do you think ROM will be problematic with this kind of huge array (int16)?
asmboy



Joined: 20 Nov 2007
Posts: 2128
Location: albany ny

View user's profile Send private message AIM Address

PostPosted: Tue Aug 26, 2014 9:55 am     Reply with quote

lets try again:
your array is UNSIGNED INT
SO.....
when reading the MANUAL for CCS C ,
what is the largest integer value that can
fit into a CCS unsigned int i??????
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

PostPosted: Tue Aug 26, 2014 12:04 pm     Reply with quote

Bro as you can see , i wrote int16
temtronic



Joined: 01 Jul 2010
Posts: 9125
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Aug 26, 2014 12:42 pm     Reply with quote

from the OP...

unsigned int const periods[117]={2449,1015,779,656,578,523,481,447,420,397

that ain't 16 bits !!!

jay
Mike Walne



Joined: 19 Feb 2004
Posts: 1785
Location: Boston Spa UK

View user's profile Send private message

PostPosted: Tue Aug 26, 2014 2:58 pm     Reply with quote

This is like pulling teeth.
You're working on a need to know basis and only giving us a fraction of what we need.

In the OP you describe a conventional(ish) DC motor drive, then later declare it's a stepper.
Like I said before I don't know where to start trying to help you.

So. lets have a complete picture.

Mike
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

PostPosted: Mon Sep 01, 2014 4:28 am     Reply with quote

temtronic, 16bit can save up to 32767. as you can see my largest value is 2449!? so where is the problem.

thank you

temtronic wrote:
from the OP...

unsigned int const periods[117]={2449,1015,779,656,578,523,481,447,420,397

that ain't 16 bits !!!

jay
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

PostPosted: Mon Sep 01, 2014 4:31 am     Reply with quote

Hello Mike,

I am just trying to generate a indexer pulse to my stepper motor driver IC. I had need to code a ramp function which will calculate frequency on the fly. i found something and made some coding. i will share my results and final code here after testings.

Mike Walne wrote:
This is like pulling teeth.
You're working on a need to know basis and only giving us a fraction of what we need.

In the OP you describe a conventional(ish) DC motor drive, then later declare it's a stepper.
Like I said before I don't know where to start trying to help you.

So. lets have a complete picture.

Mike
temtronic



Joined: 01 Jul 2010
Posts: 9125
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Mon Sep 01, 2014 5:23 am     Reply with quote

your problem is this...

"unsigned int "

For some reason you think an unsigned integer is 16 bits, which it is NOT.

Please consult the CCS C Help files (press F11 in an open project), read the 'data definitions' section.

You'll see that unsigned int is defined as an 8 bit data NOT 16.

I'm assuming that the other version of C you've worked with had defaulted to 16 bit unsigned integers. Me, I always think of micro data as 0 to 255, 8 bits as data busses I started with were all 8 bits wide, except the Moto 1 bit wide micro.

jay
erhane



Joined: 01 Jul 2014
Posts: 41

View user's profile Send private message Send e-mail

PostPosted: Mon Sep 01, 2014 6:16 am     Reply with quote

Oh you are right, i corrected it. Thank you =)

temtronic wrote:
your problem is this...

"unsigned int "

For some reason you think an unsigned integer is 16 bits, which it is NOT.

Please consult the CCS C Help files (press F11 in an open project), read the 'data definitions' section.

You'll see that unsigned int is defined as an 8 bit data NOT 16.

I'm assuming that the other version of C you've worked with had defaulted to 16 bit unsigned integers. Me, I always think of micro data as 0 to 255, 8 bits as data busses I started with were all 8 bits wide, except the Moto 1 bit wide micro.

jay
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group