From: Jeff H. <sou...@gm...> - 2012-10-03 02:42:59
|
I've added stepper motor support to StandardFirmata in the stepper branch on github: https://github.com/firmata/arduino/tree/stepper. This builds on the stepper protocol proposed by Chris Coleman a little over a year ago (thread here: http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel ). I have changed his protocol slightly to add support for 2-wire and 4-wire stepper drivers in addition to EasyDriver (step + direction). The protocol I've implemented is described here (see 2nd stepper proposal): http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal I had to add a FirmataStepper class to the StandardFirmata folder. This was initially suggested by Paul Stoffregen (see 8/30/11 post in thread referenced above). The FirmataStepper implementation is non blocking and I can drive a stepper at max RPM (about 220 for my particular motor) from my firmata client application without any jitter. I also weighed the option of updating the existing Arduino Stepper library to be non-blocking and include EasyDriver support. However, this did not seem possible without changing the existing interface (which would break backwards compatibility for people who use the existing Stepper library). Since the client does not actually control the pins required to drive the stepper, no new pin type was not necessary. The pins are set to digital out in StandardFirmata. The only change that would be necessary for Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h (currently this is defined in StandardFirmata). This compiled size for StandardFirmata including the stepper code is currently 13,186 bytes (on an Arduino Uno). I have successfully tested using an EasyDriver as well as using each of the bipolar drive circuits referenced here: http://arduino.cc/en/Reference/StepperBipolarCircuit I have also tested driving a stepper in the 4-wire configuration while simultaneously sweeping a servo continuously, reading an analog input, driving an RGB led, driving a blinkM, reading 2 buttons and reading an i2c digital compass with no apparent performance hit. An example client implementation of the stepper protocol is available here: https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js And example applications: https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) The only thing I'd consider changing is increasing the size of the step count value. Currently it's 14 bits, which is not a lot if you use an EasyDriver because the EasyDriver uses 8 microsteps by default (so for a 200 step/rev motor it will take 1600 microsteps to turn one rev which only allows 10 revolutions max at 14 bits). A sysex message is sent upon completion of a step sequence (see lines 682 - 685 in StandardFirmata) so it's possible to set a lower step count and listen for the sysex message to continue rotation (at the cost of slight pause). However, I could also increase the step count value to 21 or 28 bits. Thoughts? Any interest in moving this into the main branch? I'd also like to push a shift in/out implementation forward. There are currently 2 pull requests for Shift In/Out implementations ( https://github.com/firmata/arduino/pulls). -jeff |
From: Christopher C. <chr...@gm...> - 2012-10-03 03:06:51
|
Jeff, this is great! Thank you for getting this rolled out - I have been offering a patchwork solution and I know this will provide a much tighter integration. I do think we should go with a 21bit for steps. I would also add that as I have been offering this over the last year in my patchwork form, several ppl requested some simple ramping capabilities for speed, so when you set the speed you also set a value that determines how many steps or milliseconds it takes to ramp up to the speed from 0. It does than add whether or not you have ramp modes for exponential or linear or?? Thanks again! Chris [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] Christopher Coleman chr...@gm... Associate Professor, Digital Media Studies University of Denver www.digitalcoleman.com On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...> wrote: > I've added stepper motor support to StandardFirmata in the stepper branch > on github: https://github.com/firmata/arduino/tree/stepper. > > This builds on the stepper protocol proposed by Chris Coleman a little > over a year ago (thread here: > http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel > ). > > I have changed his protocol slightly to add support for 2-wire and 4-wire > stepper drivers in addition to EasyDriver (step + direction). The protocol > I've implemented is described here (see 2nd stepper proposal): > http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal > > I had to add a FirmataStepper class to the StandardFirmata folder. This > was initially suggested by Paul Stoffregen (see 8/30/11 post in thread > referenced above). The FirmataStepper implementation is non blocking and I > can drive a stepper at max RPM (about 220 for my particular motor) from my > firmata client application without any jitter. I also weighed the option of > updating the existing Arduino Stepper library to be non-blocking and > include EasyDriver support. However, this did not seem possible without > changing the existing interface (which would break > backwards compatibility for people who use the existing Stepper library). > > Since the client does not actually control the pins required to drive the > stepper, no new pin type was not necessary. The pins are set to digital out > in StandardFirmata. The only change that would be necessary for Firmata.cpp > or Firmata.h is to add #define Stepper 0x72 to Firmata.h (currently this is > defined in StandardFirmata). This compiled size for StandardFirmata > including the stepper code is currently 13,186 bytes (on an Arduino Uno). > > I have successfully tested using an EasyDriver as well as using each of > the bipolar drive circuits referenced here: > http://arduino.cc/en/Reference/StepperBipolarCircuit > > I have also tested driving a stepper in the 4-wire configuration > while simultaneously sweeping a servo continuously, reading an analog > input, driving an RGB led, driving a blinkM, reading 2 buttons and reading > an i2c digital compass with no apparent performance hit. > > An example client implementation of the stepper protocol is available here: > https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js > > And example applications: > https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) > > https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) > > The only thing I'd consider changing is increasing the size of the step > count value. Currently it's 14 bits, which is not a lot if you use an > EasyDriver because the EasyDriver uses 8 microsteps by default (so for a > 200 step/rev motor it will take 1600 microsteps to turn one rev which only > allows 10 revolutions max at 14 bits). A sysex message is sent upon > completion of a step sequence (see lines 682 - 685 in StandardFirmata) so > it's possible to set a lower step count and listen for the sysex message to > continue rotation (at the cost of slight pause). However, I could also > increase the step count value to 21 or 28 bits. > > Thoughts? Any interest in moving this into the main branch? > > I'd also like to push a shift in/out implementation forward. There are > currently 2 pull requests for Shift In/Out implementations ( > https://github.com/firmata/arduino/pulls). > > -jeff > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > _______________________________________________ > Firmata-devel mailing list > Fir...@li... > https://lists.sourceforge.net/lists/listinfo/firmata-devel > > |
From: Jeff H. <sou...@gm...> - 2012-10-03 03:27:13
|
You can also start with a speed of 0 and increase the speed from the client to achieve the same effect although it would be more accurate to do it on the Arduino. I'll look into adding ramp modes (preferably adding as few bytes as possible). -jeff On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < chr...@gm...> wrote: > Jeff, this is great! > Thank you for getting this rolled out - I have been offering a patchwork > solution and I know this will provide a much tighter integration. > I do think we should go with a 21bit for steps. > I would also add that as I have been offering this over the last year in > my patchwork form, several ppl requested some simple ramping capabilities > for speed, so when you set the speed you also set a value > that determines how many steps or milliseconds it takes to ramp up to the > speed from 0. It does than add whether or not you have ramp modes for > exponential or linear or?? > Thanks again! > Chris > > [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] > > Christopher Coleman > > chr...@gm... > > Associate Professor, Digital Media Studies > > University of Denver > > www.digitalcoleman.com > > > > On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: > >> I've added stepper motor support to StandardFirmata in the stepper branch >> on github: https://github.com/firmata/arduino/tree/stepper. >> >> This builds on the stepper protocol proposed by Chris Coleman a little >> over a year ago (thread here: >> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >> ). >> >> I have changed his protocol slightly to add support for 2-wire and 4-wire >> stepper drivers in addition to EasyDriver (step + direction). The protocol >> I've implemented is described here (see 2nd stepper proposal): >> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >> >> I had to add a FirmataStepper class to the StandardFirmata folder. This >> was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >> referenced above). The FirmataStepper implementation is non blocking and I >> can drive a stepper at max RPM (about 220 for my particular motor) from my >> firmata client application without any jitter. I also weighed the option of >> updating the existing Arduino Stepper library to be non-blocking and >> include EasyDriver support. However, this did not seem possible without >> changing the existing interface (which would break >> backwards compatibility for people who use the existing Stepper library). >> >> Since the client does not actually control the pins required to drive the >> stepper, no new pin type was not necessary. The pins are set to digital out >> in StandardFirmata. The only change that would be necessary for Firmata.cpp >> or Firmata.h is to add #define Stepper 0x72 to Firmata.h (currently this is >> defined in StandardFirmata). This compiled size for StandardFirmata >> including the stepper code is currently 13,186 bytes (on an Arduino Uno). >> >> I have successfully tested using an EasyDriver as well as using each of >> the bipolar drive circuits referenced here: >> http://arduino.cc/en/Reference/StepperBipolarCircuit >> >> I have also tested driving a stepper in the 4-wire configuration >> while simultaneously sweeping a servo continuously, reading an analog >> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >> an i2c digital compass with no apparent performance hit. >> >> An example client implementation of the stepper protocol is available >> here: >> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >> >> And example applications: >> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >> >> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >> >> The only thing I'd consider changing is increasing the size of the step >> count value. Currently it's 14 bits, which is not a lot if you use an >> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >> allows 10 revolutions max at 14 bits). A sysex message is sent upon >> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >> it's possible to set a lower step count and listen for the sysex message to >> continue rotation (at the cost of slight pause). However, I could also >> increase the step count value to 21 or 28 bits. >> >> Thoughts? Any interest in moving this into the main branch? >> >> I'd also like to push a shift in/out implementation forward. There are >> currently 2 pull requests for Shift In/Out implementations ( >> https://github.com/firmata/arduino/pulls). >> >> -jeff >> >> >> ------------------------------------------------------------------------------ >> Don't let slow site performance ruin your business. Deploy New Relic APM >> Deploy New Relic app performance management and know exactly >> what is happening inside your Ruby, Python, PHP, Java, and .NET app >> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >> http://p.sf.net/sfu/newrelic-dev2dev >> _______________________________________________ >> Firmata-devel mailing list >> Fir...@li... >> https://lists.sourceforge.net/lists/listinfo/firmata-devel >> >> > |
From: Jeff H. <sou...@gm...> - 2012-10-28 02:09:35
|
I have a new branch of StandardFirmata with stepper motor support in the repo. Check out the stepper branch: https://github.com/firmata/arduino/tree/stepper I've added acceleration and deceleration support as suggested by Chris Coleman. This took me a few weekends... my math skills aren't so good anymore. I based the implementation on this paper and it's associated sample code: http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf. The stepper code (FirmataStepper) would make a nice stand-alone stepper library as well for anyone who needs a simple non-blocking stepper library with accel/decel support. I've also updated the stepper protocol on the firmata.org wiki: http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal (it's the 2nd stepper proposal). Note that speed is in 0.01 * radians/sec (a value of 1050 = 10.50 radians) and acceleration and deceleration are in 0.01 * rads/sec^2 (so 2100 = 21.0 rads/sec^2). This is to help to reduce the number of floating point values. The compiled StandardFirmata sketch including the FirmataStepper library is now around 16k so it's too large for older Arduinos. I'm not sure what the overall consensus is around abandoning support for boards with less than 16k of memory so I've created a separate repo that builds on StandardFirmata to add additional features (and thus requires boards with > 16k of memory): https://github.com/soundanalogous/AdvancedFirmata If anyone tries the stepper code, let me know if you encounter any issues. I only have one stepper motor so I haven't been able to test run multiple motors simultaneously yet. best, -jeff On Tue, Oct 2, 2012 at 11:27 PM, Jeff Hoefs <sou...@gm...>wrote: > You can also start with a speed of 0 and increase the speed from the > client to achieve the same effect although it would be more accurate to do > it on the Arduino. I'll look into adding ramp modes (preferably adding as > few bytes as possible). > > -jeff > > > On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < > chr...@gm...> wrote: > >> Jeff, this is great! >> Thank you for getting this rolled out - I have been offering a patchwork >> solution and I know this will provide a much tighter integration. >> I do think we should go with a 21bit for steps. >> I would also add that as I have been offering this over the last year in >> my patchwork form, several ppl requested some simple ramping capabilities >> for speed, so when you set the speed you also set a value >> that determines how many steps or milliseconds it takes to ramp up to the >> speed from 0. It does than add whether or not you have ramp modes for >> exponential or linear or?? >> Thanks again! >> Chris >> >> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] >> >> Christopher Coleman >> >> chr...@gm... >> >> Associate Professor, Digital Media Studies >> >> University of Denver >> >> www.digitalcoleman.com >> >> >> >> On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: >> >>> I've added stepper motor support to StandardFirmata in the stepper >>> branch on github: https://github.com/firmata/arduino/tree/stepper. >>> >>> This builds on the stepper protocol proposed by Chris Coleman a little >>> over a year ago (thread here: >>> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >>> ). >>> >>> I have changed his protocol slightly to add support for 2-wire and >>> 4-wire stepper drivers in addition to EasyDriver (step + direction). The >>> protocol I've implemented is described here (see 2nd stepper proposal): >>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >>> >>> I had to add a FirmataStepper class to the StandardFirmata folder. This >>> was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >>> referenced above). The FirmataStepper implementation is non blocking and I >>> can drive a stepper at max RPM (about 220 for my particular motor) from my >>> firmata client application without any jitter. I also weighed the option of >>> updating the existing Arduino Stepper library to be non-blocking and >>> include EasyDriver support. However, this did not seem possible without >>> changing the existing interface (which would break >>> backwards compatibility for people who use the existing Stepper library). >>> >>> Since the client does not actually control the pins required to drive >>> the stepper, no new pin type was not necessary. The pins are set to digital >>> out in StandardFirmata. The only change that would be necessary for >>> Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h >>> (currently this is defined in StandardFirmata). This compiled size for >>> StandardFirmata including the stepper code is currently 13,186 bytes (on an >>> Arduino Uno). >>> >>> I have successfully tested using an EasyDriver as well as using each of >>> the bipolar drive circuits referenced here: >>> http://arduino.cc/en/Reference/StepperBipolarCircuit >>> >>> I have also tested driving a stepper in the 4-wire configuration >>> while simultaneously sweeping a servo continuously, reading an analog >>> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >>> an i2c digital compass with no apparent performance hit. >>> >>> An example client implementation of the stepper protocol is available >>> here: >>> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >>> >>> And example applications: >>> >>> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >>> >>> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >>> >>> The only thing I'd consider changing is increasing the size of the step >>> count value. Currently it's 14 bits, which is not a lot if you use an >>> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >>> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >>> allows 10 revolutions max at 14 bits). A sysex message is sent upon >>> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >>> it's possible to set a lower step count and listen for the sysex message to >>> continue rotation (at the cost of slight pause). However, I could also >>> increase the step count value to 21 or 28 bits. >>> >>> Thoughts? Any interest in moving this into the main branch? >>> >>> I'd also like to push a shift in/out implementation forward. There are >>> currently 2 pull requests for Shift In/Out implementations ( >>> https://github.com/firmata/arduino/pulls). >>> >>> -jeff >>> >>> >>> ------------------------------------------------------------------------------ >>> Don't let slow site performance ruin your business. Deploy New Relic APM >>> Deploy New Relic app performance management and know exactly >>> what is happening inside your Ruby, Python, PHP, Java, and .NET app >>> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >>> http://p.sf.net/sfu/newrelic-dev2dev >>> _______________________________________________ >>> Firmata-devel mailing list >>> Fir...@li... >>> https://lists.sourceforge.net/lists/listinfo/firmata-devel >>> >>> >> > |
From: Christopher C. <chr...@gm...> - 2012-10-28 03:25:22
|
Jeff, this looks quite good, I will give it a go later this week for a few steppers and let you know how it does. Your acceleration solution seems curious, im interested in how it function in the real world since my math also doesn't quite compute what you have done. As to the older arduoino capability, we are really only talking about the 168 chips being a problem right? I am in argentina now teaching an arduino workshop and even here I think they are past the 168 chips on their freeduinos and such. I would vote for moving forward and keeping a "classic" or "skinny" version for the older chips. I would recommend putting the stepper driver library out there as a standalone arduino library for sure - when i rolled my own for the alpha stepperFirmata a year or two ago I posted the library ( http://www.maxuino.org/stepperdriver ) and have seen it fairly well used. This would be a fantastic upgrade. Let me know if you want me to take on posting that and doing the documentation and such or I can link to where you do it. Thanks for the hard work! Chris [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] Christopher Coleman chr...@gm... Associate Professor, Digital Media Studies University of Denver www.digitalcoleman.com On Sat, Oct 27, 2012 at 11:09 PM, Jeff Hoefs <sou...@gm...>wrote: > I have a new branch of StandardFirmata with stepper motor support in the > repo. Check out the stepper branch: > https://github.com/firmata/arduino/tree/stepper > > I've added acceleration and deceleration support as suggested by Chris > Coleman. This took me a few weekends... my math skills aren't so good > anymore. I based the implementation on this paper and it's associated > sample code: http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf. > The stepper code (FirmataStepper) would make a nice stand-alone stepper > library as well for anyone who needs a simple non-blocking stepper library > with accel/decel support. > > I've also updated the stepper protocol on the firmata.org wiki: > http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal (it's the 2nd > stepper proposal). > Note that speed is in 0.01 * radians/sec (a value of 1050 = 10.50 radians) > and acceleration and deceleration > are in 0.01 * rads/sec^2 (so 2100 = 21.0 rads/sec^2). This is to help to > reduce the number of floating point values. > > The compiled StandardFirmata sketch including the FirmataStepper library > is now around 16k so it's too large for older Arduinos. I'm not sure what > the overall consensus is around abandoning support for boards with less > than 16k of memory so I've created a separate repo that builds on > StandardFirmata to add additional features (and thus requires boards with > > 16k of memory): > https://github.com/soundanalogous/AdvancedFirmata > > If anyone tries the stepper code, let me know if you encounter any issues. > I only have one stepper motor so I haven't been able to test run multiple > motors simultaneously yet. > > best, > > -jeff > > > On Tue, Oct 2, 2012 at 11:27 PM, Jeff Hoefs <sou...@gm...>wrote: > >> You can also start with a speed of 0 and increase the speed from the >> client to achieve the same effect although it would be more accurate to do >> it on the Arduino. I'll look into adding ramp modes (preferably adding as >> few bytes as possible). >> >> -jeff >> >> >> On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < >> chr...@gm...> wrote: >> >>> Jeff, this is great! >>> Thank you for getting this rolled out - I have been offering a patchwork >>> solution and I know this will provide a much tighter integration. >>> I do think we should go with a 21bit for steps. >>> I would also add that as I have been offering this over the last year in >>> my patchwork form, several ppl requested some simple ramping capabilities >>> for speed, so when you set the speed you also set a value >>> that determines how many steps or milliseconds it takes to ramp up to the >>> speed from 0. It does than add whether or not you have ramp modes for >>> exponential or linear or?? >>> Thanks again! >>> Chris >>> >>> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] >>> >>> Christopher Coleman >>> >>> chr...@gm... >>> >>> Associate Professor, Digital Media Studies >>> >>> University of Denver >>> >>> www.digitalcoleman.com >>> >>> >>> >>> On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: >>> >>>> I've added stepper motor support to StandardFirmata in the stepper >>>> branch on github: https://github.com/firmata/arduino/tree/stepper. >>>> >>>> This builds on the stepper protocol proposed by Chris Coleman a little >>>> over a year ago (thread here: >>>> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >>>> ). >>>> >>>> I have changed his protocol slightly to add support for 2-wire and >>>> 4-wire stepper drivers in addition to EasyDriver (step + direction). The >>>> protocol I've implemented is described here (see 2nd stepper proposal): >>>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >>>> >>>> I had to add a FirmataStepper class to the StandardFirmata folder. This >>>> was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >>>> referenced above). The FirmataStepper implementation is non blocking and I >>>> can drive a stepper at max RPM (about 220 for my particular motor) from my >>>> firmata client application without any jitter. I also weighed the option of >>>> updating the existing Arduino Stepper library to be non-blocking and >>>> include EasyDriver support. However, this did not seem possible without >>>> changing the existing interface (which would break >>>> backwards compatibility for people who use the existing Stepper library). >>>> >>>> Since the client does not actually control the pins required to drive >>>> the stepper, no new pin type was not necessary. The pins are set to digital >>>> out in StandardFirmata. The only change that would be necessary for >>>> Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h >>>> (currently this is defined in StandardFirmata). This compiled size for >>>> StandardFirmata including the stepper code is currently 13,186 bytes (on an >>>> Arduino Uno). >>>> >>>> I have successfully tested using an EasyDriver as well as using each of >>>> the bipolar drive circuits referenced here: >>>> http://arduino.cc/en/Reference/StepperBipolarCircuit >>>> >>>> I have also tested driving a stepper in the 4-wire configuration >>>> while simultaneously sweeping a servo continuously, reading an analog >>>> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >>>> an i2c digital compass with no apparent performance hit. >>>> >>>> An example client implementation of the stepper protocol is available >>>> here: >>>> >>>> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >>>> >>>> And example applications: >>>> >>>> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >>>> >>>> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >>>> >>>> The only thing I'd consider changing is increasing the size of the step >>>> count value. Currently it's 14 bits, which is not a lot if you use an >>>> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >>>> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >>>> allows 10 revolutions max at 14 bits). A sysex message is sent upon >>>> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >>>> it's possible to set a lower step count and listen for the sysex message to >>>> continue rotation (at the cost of slight pause). However, I could also >>>> increase the step count value to 21 or 28 bits. >>>> >>>> Thoughts? Any interest in moving this into the main branch? >>>> >>>> I'd also like to push a shift in/out implementation forward. There are >>>> currently 2 pull requests for Shift In/Out implementations ( >>>> https://github.com/firmata/arduino/pulls). >>>> >>>> -jeff >>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Don't let slow site performance ruin your business. Deploy New Relic APM >>>> Deploy New Relic app performance management and know exactly >>>> what is happening inside your Ruby, Python, PHP, Java, and .NET app >>>> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >>>> http://p.sf.net/sfu/newrelic-dev2dev >>>> _______________________________________________ >>>> Firmata-devel mailing list >>>> Fir...@li... >>>> https://lists.sourceforge.net/lists/listinfo/firmata-devel >>>> >>>> >>> >> > |
From: Jeff H. <sou...@gm...> - 2012-10-28 23:06:13
|
I don't fully understand all the math either. I derived it from the paper I referenced. I think the lastest version of AccelStepper is based on an earlier version of the same paper. The trick is figuring out the initial step delay, from there the math is much simpler since you just need to increase the frequency until the target speed is achieved (but checking to see if you will ever meet the desired speed before you must start decelerating). I also first tested the algorithms by creating a simulation using node.js to ensure the acceleration and deceleration ramps were correct. Now if I could only find the time to catch up on my math skills... I've also hosted FirmataStepper as a standalone library with a few examples: https://github.com/soundanalogous/FirmataStepper. It will be easier to test in that form. best, -jeff On Sat, Oct 27, 2012 at 11:24 PM, Christopher Coleman < chr...@gm...> wrote: > Jeff, > this looks quite good, I will give it a go later this week for a few > steppers and let you know how it does. Your acceleration solution seems > curious, im interested in how it function in the real world since my math > also doesn't quite compute what you have done. As to the older arduoino > capability, we are really only talking about the 168 chips being a problem > right? I am in argentina now teaching an arduino workshop and even here I > think they are past the 168 chips on their freeduinos and such. I would > vote for moving forward and keeping a "classic" or "skinny" version for the > older chips. > I would recommend putting the stepper driver library out there as a > standalone arduino library for sure - when i rolled my own for the alpha > stepperFirmata a year or two ago I posted the library ( > http://www.maxuino.org/stepperdriver ) and have seen it fairly well used. > This would be a fantastic upgrade. Let me know if you want me to take on > posting that and doing the documentation and such or I can link to where > you do it. > Thanks for the hard work! > Chris > > [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] > > Christopher Coleman > > chr...@gm... > > Associate Professor, Digital Media Studies > > University of Denver > > www.digitalcoleman.com > > > > On Sat, Oct 27, 2012 at 11:09 PM, Jeff Hoefs <sou...@gm...>wrote: > >> I have a new branch of StandardFirmata with stepper motor support in the >> repo. Check out the stepper branch: >> https://github.com/firmata/arduino/tree/stepper >> >> I've added acceleration and deceleration support as suggested by Chris >> Coleman. This took me a few weekends... my math skills aren't so good >> anymore. I based the implementation on this paper and it's associated >> sample code: >> http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf. The >> stepper code (FirmataStepper) would make a nice stand-alone stepper library >> as well for anyone who needs a simple non-blocking stepper library with >> accel/decel support. >> >> I've also updated the stepper protocol on the firmata.org wiki: >> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal (it's the 2nd >> stepper proposal). >> Note that speed is in 0.01 * radians/sec (a value of 1050 = 10.50 >> radians) and acceleration and deceleration >> are in 0.01 * rads/sec^2 (so 2100 = 21.0 rads/sec^2). This is to help to >> reduce the number of floating point values. >> >> The compiled StandardFirmata sketch including the FirmataStepper library >> is now around 16k so it's too large for older Arduinos. I'm not sure what >> the overall consensus is around abandoning support for boards with less >> than 16k of memory so I've created a separate repo that builds on >> StandardFirmata to add additional features (and thus requires boards with > >> 16k of memory): >> https://github.com/soundanalogous/AdvancedFirmata >> >> If anyone tries the stepper code, let me know if you encounter any >> issues. I only have one stepper motor so I haven't been able to test run >> multiple motors simultaneously yet. >> >> best, >> >> -jeff >> >> >> On Tue, Oct 2, 2012 at 11:27 PM, Jeff Hoefs <sou...@gm...>wrote: >> >>> You can also start with a speed of 0 and increase the speed from the >>> client to achieve the same effect although it would be more accurate to do >>> it on the Arduino. I'll look into adding ramp modes (preferably adding as >>> few bytes as possible). >>> >>> -jeff >>> >>> >>> On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < >>> chr...@gm...> wrote: >>> >>>> Jeff, this is great! >>>> Thank you for getting this rolled out - I have been offering a >>>> patchwork solution and I know this will provide a much tighter integration. >>>> I do think we should go with a 21bit for steps. >>>> I would also add that as I have been offering this over the last year >>>> in my patchwork form, several ppl requested some simple ramping >>>> capabilities for speed, so when you set the speed you also set a value >>>> that determines how many steps or milliseconds it takes to ramp up to the >>>> speed from 0. It does than add whether or not you have ramp modes for >>>> exponential or linear or?? >>>> Thanks again! >>>> Chris >>>> >>>> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] >>>> [] >>>> >>>> Christopher Coleman >>>> >>>> chr...@gm... >>>> >>>> Associate Professor, Digital Media Studies >>>> >>>> University of Denver >>>> >>>> www.digitalcoleman.com >>>> >>>> >>>> >>>> On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: >>>> >>>>> I've added stepper motor support to StandardFirmata in the stepper >>>>> branch on github: https://github.com/firmata/arduino/tree/stepper. >>>>> >>>>> This builds on the stepper protocol proposed by Chris Coleman a little >>>>> over a year ago (thread here: >>>>> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >>>>> ). >>>>> >>>>> I have changed his protocol slightly to add support for 2-wire and >>>>> 4-wire stepper drivers in addition to EasyDriver (step + direction). The >>>>> protocol I've implemented is described here (see 2nd stepper proposal): >>>>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >>>>> >>>>> I had to add a FirmataStepper class to the StandardFirmata folder. >>>>> This was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >>>>> referenced above). The FirmataStepper implementation is non blocking and I >>>>> can drive a stepper at max RPM (about 220 for my particular motor) from my >>>>> firmata client application without any jitter. I also weighed the option of >>>>> updating the existing Arduino Stepper library to be non-blocking and >>>>> include EasyDriver support. However, this did not seem possible without >>>>> changing the existing interface (which would break >>>>> backwards compatibility for people who use the existing Stepper library). >>>>> >>>>> Since the client does not actually control the pins required to drive >>>>> the stepper, no new pin type was not necessary. The pins are set to digital >>>>> out in StandardFirmata. The only change that would be necessary for >>>>> Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h >>>>> (currently this is defined in StandardFirmata). This compiled size for >>>>> StandardFirmata including the stepper code is currently 13,186 bytes (on an >>>>> Arduino Uno). >>>>> >>>>> I have successfully tested using an EasyDriver as well as using each >>>>> of the bipolar drive circuits referenced here: >>>>> http://arduino.cc/en/Reference/StepperBipolarCircuit >>>>> >>>>> I have also tested driving a stepper in the 4-wire configuration >>>>> while simultaneously sweeping a servo continuously, reading an analog >>>>> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >>>>> an i2c digital compass with no apparent performance hit. >>>>> >>>>> An example client implementation of the stepper protocol is available >>>>> here: >>>>> >>>>> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >>>>> >>>>> And example applications: >>>>> >>>>> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >>>>> >>>>> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >>>>> >>>>> The only thing I'd consider changing is increasing the size of the >>>>> step count value. Currently it's 14 bits, which is not a lot if you use an >>>>> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >>>>> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >>>>> allows 10 revolutions max at 14 bits). A sysex message is sent upon >>>>> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >>>>> it's possible to set a lower step count and listen for the sysex message to >>>>> continue rotation (at the cost of slight pause). However, I could also >>>>> increase the step count value to 21 or 28 bits. >>>>> >>>>> Thoughts? Any interest in moving this into the main branch? >>>>> >>>>> I'd also like to push a shift in/out implementation forward. There are >>>>> currently 2 pull requests for Shift In/Out implementations ( >>>>> https://github.com/firmata/arduino/pulls). >>>>> >>>>> -jeff >>>>> >>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Don't let slow site performance ruin your business. Deploy New Relic >>>>> APM >>>>> Deploy New Relic app performance management and know exactly >>>>> what is happening inside your Ruby, Python, PHP, Java, and .NET app >>>>> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >>>>> http://p.sf.net/sfu/newrelic-dev2dev >>>>> _______________________________________________ >>>>> Firmata-devel mailing list >>>>> Fir...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/firmata-devel >>>>> >>>>> >>>> >>> >> > |
From: Christopher C. <chr...@gm...> - 2013-05-20 18:25:06
|
All, is there any news on when Firmata gets packaged out with Arduino 1.5? Also was there ever any movement on integrating stepper control into Standard Firmata or packaging Advanced Firmata into the main firmata distribution? Im at CMU this week trying to overhaul a couple of the firmata interpreters for the i2c and stepper updates... Chris [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] Christopher Coleman chr...@gm... Associate Professor, Digital Media Studies University of Denver www.digitalcoleman.com On Sun, Oct 28, 2012 at 5:06 PM, Jeff Hoefs <sou...@gm...>wrote: > I don't fully understand all the math either. I derived it from the paper > I referenced. I think the lastest version of AccelStepper is based on an > earlier version of the same paper. The trick is figuring out the initial > step delay, from there the math is much simpler since you just need to > increase the frequency until the target speed is achieved (but checking to > see if you will ever meet the desired speed before you must start > decelerating). I also first tested the algorithms by creating a simulation > using node.js to ensure the acceleration and deceleration ramps were > correct. Now if I could only find the time to catch up on my math skills... > > I've also hosted FirmataStepper as a standalone library with a few > examples: https://github.com/soundanalogous/FirmataStepper. It will be > easier to test in that form. > > best, > > -jeff > > On Sat, Oct 27, 2012 at 11:24 PM, Christopher Coleman < > chr...@gm...> wrote: > >> Jeff, >> this looks quite good, I will give it a go later this week for a few >> steppers and let you know how it does. Your acceleration solution seems >> curious, im interested in how it function in the real world since my math >> also doesn't quite compute what you have done. As to the older arduoino >> capability, we are really only talking about the 168 chips being a problem >> right? I am in argentina now teaching an arduino workshop and even here I >> think they are past the 168 chips on their freeduinos and such. I would >> vote for moving forward and keeping a "classic" or "skinny" version for the >> older chips. >> I would recommend putting the stepper driver library out there as a >> standalone arduino library for sure - when i rolled my own for the alpha >> stepperFirmata a year or two ago I posted the library ( >> http://www.maxuino.org/stepperdriver ) and have seen it fairly well >> used. This would be a fantastic upgrade. Let me know if you want me to >> take on posting that and doing the documentation and such or I can link to >> where you do it. >> Thanks for the hard work! >> Chris >> >> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] >> >> Christopher Coleman >> >> chr...@gm... >> >> Associate Professor, Digital Media Studies >> >> University of Denver >> >> www.digitalcoleman.com >> >> >> >> On Sat, Oct 27, 2012 at 11:09 PM, Jeff Hoefs <sou...@gm...>wrote: >> >>> I have a new branch of StandardFirmata with stepper motor support in the >>> repo. Check out the stepper branch: >>> https://github.com/firmata/arduino/tree/stepper >>> >>> I've added acceleration and deceleration support as suggested by Chris >>> Coleman. This took me a few weekends... my math skills aren't so good >>> anymore. I based the implementation on this paper and it's associated >>> sample code: >>> http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf. The >>> stepper code (FirmataStepper) would make a nice stand-alone stepper library >>> as well for anyone who needs a simple non-blocking stepper library with >>> accel/decel support. >>> >>> I've also updated the stepper protocol on the firmata.org wiki: >>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal (it's the 2nd >>> stepper proposal). >>> Note that speed is in 0.01 * radians/sec (a value of 1050 = 10.50 >>> radians) and acceleration and deceleration >>> are in 0.01 * rads/sec^2 (so 2100 = 21.0 rads/sec^2). This is to help to >>> reduce the number of floating point values. >>> >>> The compiled StandardFirmata sketch including the FirmataStepper library >>> is now around 16k so it's too large for older Arduinos. I'm not sure what >>> the overall consensus is around abandoning support for boards with less >>> than 16k of memory so I've created a separate repo that builds on >>> StandardFirmata to add additional features (and thus requires boards with > >>> 16k of memory): >>> https://github.com/soundanalogous/AdvancedFirmata >>> >>> If anyone tries the stepper code, let me know if you encounter any >>> issues. I only have one stepper motor so I haven't been able to test run >>> multiple motors simultaneously yet. >>> >>> best, >>> >>> -jeff >>> >>> >>> On Tue, Oct 2, 2012 at 11:27 PM, Jeff Hoefs <sou...@gm...>wrote: >>> >>>> You can also start with a speed of 0 and increase the speed from the >>>> client to achieve the same effect although it would be more accurate to do >>>> it on the Arduino. I'll look into adding ramp modes (preferably adding as >>>> few bytes as possible). >>>> >>>> -jeff >>>> >>>> >>>> On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < >>>> chr...@gm...> wrote: >>>> >>>>> Jeff, this is great! >>>>> Thank you for getting this rolled out - I have been offering a >>>>> patchwork solution and I know this will provide a much tighter integration. >>>>> I do think we should go with a 21bit for steps. >>>>> I would also add that as I have been offering this over the last year >>>>> in my patchwork form, several ppl requested some simple ramping >>>>> capabilities for speed, so when you set the speed you also set a value >>>>> that determines how many steps or milliseconds it takes to ramp up to the >>>>> speed from 0. It does than add whether or not you have ramp modes for >>>>> exponential or linear or?? >>>>> Thanks again! >>>>> Chris >>>>> >>>>> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] >>>>> [] >>>>> >>>>> Christopher Coleman >>>>> >>>>> chr...@gm... >>>>> >>>>> Associate Professor, Digital Media Studies >>>>> >>>>> University of Denver >>>>> >>>>> www.digitalcoleman.com >>>>> >>>>> >>>>> >>>>> On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: >>>>> >>>>>> I've added stepper motor support to StandardFirmata in the stepper >>>>>> branch on github: https://github.com/firmata/arduino/tree/stepper. >>>>>> >>>>>> This builds on the stepper protocol proposed by Chris Coleman a >>>>>> little over a year ago (thread here: >>>>>> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >>>>>> ). >>>>>> >>>>>> I have changed his protocol slightly to add support for 2-wire and >>>>>> 4-wire stepper drivers in addition to EasyDriver (step + direction). The >>>>>> protocol I've implemented is described here (see 2nd stepper proposal): >>>>>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >>>>>> >>>>>> I had to add a FirmataStepper class to the StandardFirmata folder. >>>>>> This was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >>>>>> referenced above). The FirmataStepper implementation is non blocking and I >>>>>> can drive a stepper at max RPM (about 220 for my particular motor) from my >>>>>> firmata client application without any jitter. I also weighed the option of >>>>>> updating the existing Arduino Stepper library to be non-blocking and >>>>>> include EasyDriver support. However, this did not seem possible without >>>>>> changing the existing interface (which would break >>>>>> backwards compatibility for people who use the existing Stepper library). >>>>>> >>>>>> Since the client does not actually control the pins required to drive >>>>>> the stepper, no new pin type was not necessary. The pins are set to digital >>>>>> out in StandardFirmata. The only change that would be necessary for >>>>>> Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h >>>>>> (currently this is defined in StandardFirmata). This compiled size for >>>>>> StandardFirmata including the stepper code is currently 13,186 bytes (on an >>>>>> Arduino Uno). >>>>>> >>>>>> I have successfully tested using an EasyDriver as well as using each >>>>>> of the bipolar drive circuits referenced here: >>>>>> http://arduino.cc/en/Reference/StepperBipolarCircuit >>>>>> >>>>>> I have also tested driving a stepper in the 4-wire configuration >>>>>> while simultaneously sweeping a servo continuously, reading an analog >>>>>> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >>>>>> an i2c digital compass with no apparent performance hit. >>>>>> >>>>>> An example client implementation of the stepper protocol is available >>>>>> here: >>>>>> >>>>>> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >>>>>> >>>>>> And example applications: >>>>>> >>>>>> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >>>>>> >>>>>> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >>>>>> >>>>>> The only thing I'd consider changing is increasing the size of the >>>>>> step count value. Currently it's 14 bits, which is not a lot if you use an >>>>>> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >>>>>> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >>>>>> allows 10 revolutions max at 14 bits). A sysex message is sent upon >>>>>> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >>>>>> it's possible to set a lower step count and listen for the sysex message to >>>>>> continue rotation (at the cost of slight pause). However, I could also >>>>>> increase the step count value to 21 or 28 bits. >>>>>> >>>>>> Thoughts? Any interest in moving this into the main branch? >>>>>> >>>>>> I'd also like to push a shift in/out implementation forward. There >>>>>> are currently 2 pull requests for Shift In/Out implementations ( >>>>>> https://github.com/firmata/arduino/pulls). >>>>>> >>>>>> -jeff >>>>>> >>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Don't let slow site performance ruin your business. Deploy New Relic >>>>>> APM >>>>>> Deploy New Relic app performance management and know exactly >>>>>> what is happening inside your Ruby, Python, PHP, Java, and .NET app >>>>>> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >>>>>> http://p.sf.net/sfu/newrelic-dev2dev >>>>>> _______________________________________________ >>>>>> Firmata-devel mailing list >>>>>> Fir...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/firmata-devel >>>>>> >>>>>> >>>>> >>>> >>> >> > |
From: Jeff H. <sou...@gm...> - 2013-05-20 18:41:24
|
I added a pull request to add support for Arduino Due and Teensy 3.0 yesterday: https://github.com/firmata/arduino/pull/58. I'd also like to get a new version of Firmata into Arduino for the 1.5.3 release so if anyone has anything to add, please open an issue on github ( https://github.com/firmata/arduino) or replay here and I'll add them to github and prioritize them. I'd also like to add some version of this proposal to support the different analog settings for the Due: http://firmata.org/wiki/Proposals#Extended_Configuration_Proposal. Regarding Stepper motor support. We are experimenting with a new "configurable" firmata sketch that enables users to import only the modules they need in their sketch. This will enable us to support a greater number of features. You can see the progress here and pull the configurable branch (https://github.com/firmata/arduino/tree/configurable) if you'd like to experiment (you can alternatively use AdvancedFirmata). Stepper support is working in the configurable branch. We've also added OneWire support and a Scheduler as optional features in the configurable branch and I have a Shift In/Out feature in the works as well: https://github.com/firmata/arduino/pull/51. The idea here is to maintain StandardFirmata as is (to keep it backwards compatible), but for anyone wanting to use new features they should use the ConfigurableFirmata sketch. I don't have a timeline for when configurable gets merged into master. I also plan to create a simple GUI app that allows users to generate a new firmware by checking boxes to select the features they want to use. The app would then generate an .ino file. -jeff On Mon, May 20, 2013 at 2:24 PM, Christopher Coleman < chr...@gm...> wrote: > All, is there any news on when Firmata gets packaged out with Arduino 1.5? > Also was there ever any movement on integrating stepper control into > Standard Firmata or packaging Advanced Firmata into the main firmata > distribution? Im at CMU this week trying to overhaul a couple of the > firmata interpreters for the i2c and stepper updates... > Chris > > [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] > > Christopher Coleman > > chr...@gm... > > Associate Professor, Digital Media Studies > > University of Denver > > www.digitalcoleman.com > > > On Sun, Oct 28, 2012 at 5:06 PM, Jeff Hoefs <sou...@gm...>wrote: > >> I don't fully understand all the math either. I derived it from the paper >> I referenced. I think the lastest version of AccelStepper is based on an >> earlier version of the same paper. The trick is figuring out the initial >> step delay, from there the math is much simpler since you just need to >> increase the frequency until the target speed is achieved (but checking to >> see if you will ever meet the desired speed before you must start >> decelerating). I also first tested the algorithms by creating a simulation >> using node.js to ensure the acceleration and deceleration ramps were >> correct. Now if I could only find the time to catch up on my math skills... >> >> I've also hosted FirmataStepper as a standalone library with a few >> examples: https://github.com/soundanalogous/FirmataStepper. It will be >> easier to test in that form. >> >> best, >> >> -jeff >> >> On Sat, Oct 27, 2012 at 11:24 PM, Christopher Coleman < >> chr...@gm...> wrote: >> >>> Jeff, >>> this looks quite good, I will give it a go later this week for a few >>> steppers and let you know how it does. Your acceleration solution seems >>> curious, im interested in how it function in the real world since my math >>> also doesn't quite compute what you have done. As to the older arduoino >>> capability, we are really only talking about the 168 chips being a problem >>> right? I am in argentina now teaching an arduino workshop and even here I >>> think they are past the 168 chips on their freeduinos and such. I would >>> vote for moving forward and keeping a "classic" or "skinny" version for the >>> older chips. >>> I would recommend putting the stepper driver library out there as a >>> standalone arduino library for sure - when i rolled my own for the alpha >>> stepperFirmata a year or two ago I posted the library ( >>> http://www.maxuino.org/stepperdriver ) and have seen it fairly well >>> used. This would be a fantastic upgrade. Let me know if you want me to >>> take on posting that and doing the documentation and such or I can link to >>> where you do it. >>> Thanks for the hard work! >>> Chris >>> >>> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [] >>> >>> Christopher Coleman >>> >>> chr...@gm... >>> >>> Associate Professor, Digital Media Studies >>> >>> University of Denver >>> >>> www.digitalcoleman.com >>> >>> >>> >>> On Sat, Oct 27, 2012 at 11:09 PM, Jeff Hoefs <sou...@gm...>wrote: >>> >>>> I have a new branch of StandardFirmata with stepper motor support in >>>> the repo. Check out the stepper branch: >>>> https://github.com/firmata/arduino/tree/stepper >>>> >>>> I've added acceleration and deceleration support as suggested by Chris >>>> Coleman. This took me a few weekends... my math skills aren't so good >>>> anymore. I based the implementation on this paper and it's associated >>>> sample code: >>>> http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf. The >>>> stepper code (FirmataStepper) would make a nice stand-alone stepper library >>>> as well for anyone who needs a simple non-blocking stepper library with >>>> accel/decel support. >>>> >>>> I've also updated the stepper protocol on the firmata.org wiki: >>>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal (it's the 2nd >>>> stepper proposal). >>>> Note that speed is in 0.01 * radians/sec (a value of 1050 = 10.50 >>>> radians) and acceleration and deceleration >>>> are in 0.01 * rads/sec^2 (so 2100 = 21.0 rads/sec^2). This is to help >>>> to reduce the number of floating point values. >>>> >>>> The compiled StandardFirmata sketch including the FirmataStepper >>>> library is now around 16k so it's too large for older Arduinos. I'm not >>>> sure what the overall consensus is around abandoning support for boards >>>> with less than 16k of memory so I've created a separate repo that builds on >>>> StandardFirmata to add additional features (and thus requires boards with > >>>> 16k of memory): >>>> https://github.com/soundanalogous/AdvancedFirmata >>>> >>>> If anyone tries the stepper code, let me know if you encounter any >>>> issues. I only have one stepper motor so I haven't been able to test run >>>> multiple motors simultaneously yet. >>>> >>>> best, >>>> >>>> -jeff >>>> >>>> >>>> On Tue, Oct 2, 2012 at 11:27 PM, Jeff Hoefs <sou...@gm...>wrote: >>>> >>>>> You can also start with a speed of 0 and increase the speed from the >>>>> client to achieve the same effect although it would be more accurate to do >>>>> it on the Arduino. I'll look into adding ramp modes (preferably adding as >>>>> few bytes as possible). >>>>> >>>>> -jeff >>>>> >>>>> >>>>> On Tue, Oct 2, 2012 at 11:06 PM, Christopher Coleman < >>>>> chr...@gm...> wrote: >>>>> >>>>>> Jeff, this is great! >>>>>> Thank you for getting this rolled out - I have been offering a >>>>>> patchwork solution and I know this will provide a much tighter integration. >>>>>> I do think we should go with a 21bit for steps. >>>>>> I would also add that as I have been offering this over the last year >>>>>> in my patchwork form, several ppl requested some simple ramping >>>>>> capabilities for speed, so when you set the speed you also set a value >>>>>> that determines how many steps or milliseconds it takes to ramp up to the >>>>>> speed from 0. It does than add whether or not you have ramp modes for >>>>>> exponential or linear or?? >>>>>> Thanks again! >>>>>> Chris >>>>>> >>>>>> [] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] [ ] >>>>>> [] >>>>>> >>>>>> Christopher Coleman >>>>>> >>>>>> chr...@gm... >>>>>> >>>>>> Associate Professor, Digital Media Studies >>>>>> >>>>>> University of Denver >>>>>> >>>>>> www.digitalcoleman.com >>>>>> >>>>>> >>>>>> >>>>>> On Tue, Oct 2, 2012 at 8:42 PM, Jeff Hoefs <sou...@gm...>wrote: >>>>>> >>>>>>> I've added stepper motor support to StandardFirmata in the stepper >>>>>>> branch on github: https://github.com/firmata/arduino/tree/stepper. >>>>>>> >>>>>>> This builds on the stepper protocol proposed by Chris Coleman a >>>>>>> little over a year ago (thread here: >>>>>>> http://sourceforge.net/mailarchive/forum.php?thread_name=DAA86858-7ED9-4BE1-9B92-C5047397DBE6%40at.or.at&forum_name=firmata-devel >>>>>>> ). >>>>>>> >>>>>>> I have changed his protocol slightly to add support for 2-wire and >>>>>>> 4-wire stepper drivers in addition to EasyDriver (step + direction). The >>>>>>> protocol I've implemented is described here (see 2nd stepper proposal): >>>>>>> http://firmata.org/wiki/Proposals#Stepper_Motor_Proposal >>>>>>> >>>>>>> I had to add a FirmataStepper class to the StandardFirmata folder. >>>>>>> This was initially suggested by Paul Stoffregen (see 8/30/11 post in thread >>>>>>> referenced above). The FirmataStepper implementation is non blocking and I >>>>>>> can drive a stepper at max RPM (about 220 for my particular motor) from my >>>>>>> firmata client application without any jitter. I also weighed the option of >>>>>>> updating the existing Arduino Stepper library to be non-blocking and >>>>>>> include EasyDriver support. However, this did not seem possible without >>>>>>> changing the existing interface (which would break >>>>>>> backwards compatibility for people who use the existing Stepper library). >>>>>>> >>>>>>> Since the client does not actually control the pins required to >>>>>>> drive the stepper, no new pin type was not necessary. The pins are set to >>>>>>> digital out in StandardFirmata. The only change that would be necessary for >>>>>>> Firmata.cpp or Firmata.h is to add #define Stepper 0x72 to Firmata.h >>>>>>> (currently this is defined in StandardFirmata). This compiled size for >>>>>>> StandardFirmata including the stepper code is currently 13,186 bytes (on an >>>>>>> Arduino Uno). >>>>>>> >>>>>>> I have successfully tested using an EasyDriver as well as using each >>>>>>> of the bipolar drive circuits referenced here: >>>>>>> http://arduino.cc/en/Reference/StepperBipolarCircuit >>>>>>> >>>>>>> I have also tested driving a stepper in the 4-wire configuration >>>>>>> while simultaneously sweeping a servo continuously, reading an analog >>>>>>> input, driving an RGB led, driving a blinkM, reading 2 buttons and reading >>>>>>> an i2c digital compass with no apparent performance hit. >>>>>>> >>>>>>> An example client implementation of the stepper protocol is >>>>>>> available here: >>>>>>> >>>>>>> https://github.com/soundanalogous/Breakout/blob/stepper/src/io/Stepper.js >>>>>>> >>>>>>> And example applications: >>>>>>> >>>>>>> https://github.com/soundanalogous/Breakout/tree/stepper/examples/actuators(see stepper.html, stepper_2wire and stepper_4wire) >>>>>>> >>>>>>> https://github.com/soundanalogous/Breakout/blob/stepper/examples/boards/uno.html(this the kitchen sink example referenced above) >>>>>>> >>>>>>> The only thing I'd consider changing is increasing the size of the >>>>>>> step count value. Currently it's 14 bits, which is not a lot if you use an >>>>>>> EasyDriver because the EasyDriver uses 8 microsteps by default (so for a >>>>>>> 200 step/rev motor it will take 1600 microsteps to turn one rev which only >>>>>>> allows 10 revolutions max at 14 bits). A sysex message is sent upon >>>>>>> completion of a step sequence (see lines 682 - 685 in StandardFirmata) so >>>>>>> it's possible to set a lower step count and listen for the sysex message to >>>>>>> continue rotation (at the cost of slight pause). However, I could also >>>>>>> increase the step count value to 21 or 28 bits. >>>>>>> >>>>>>> Thoughts? Any interest in moving this into the main branch? >>>>>>> >>>>>>> I'd also like to push a shift in/out implementation forward. There >>>>>>> are currently 2 pull requests for Shift In/Out implementations ( >>>>>>> https://github.com/firmata/arduino/pulls). >>>>>>> >>>>>>> -jeff >>>>>>> >>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Don't let slow site performance ruin your business. Deploy New Relic >>>>>>> APM >>>>>>> Deploy New Relic app performance management and know exactly >>>>>>> what is happening inside your Ruby, Python, PHP, Java, and .NET app >>>>>>> Try New Relic at no cost today and get our sweet Data Nerd shirt too! >>>>>>> http://p.sf.net/sfu/newrelic-dev2dev >>>>>>> _______________________________________________ >>>>>>> Firmata-devel mailing list >>>>>>> Fir...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/firmata-devel >>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > |