Shop Learn P1 Docs P2 Docs
using multiple frequencies to control a stepper motor. - Page 3 — Parallax Forums

using multiple frequencies to control a stepper motor.



  • It's saying that PWM_FREQ is not defined. Look at your declaration for PWM_FREQ in the CON section. It has two underscores instead of one.
  • bbrienbbrien Posts: 526
    edited 2020-12-17 21:58
    Fixed the double underscore , now I get error "expected ",". " on line for Step.Synth( SIDE_RATE) at closing ")". New program follows
  • In the OBJ Stepper.spin can I use a decimal in the scale.
  • Dave HeinDave Hein Posts: 6,347
    edited 2020-12-18 00:20
    No, but we can change the way the frequency is computed to make it more precise. I'll take a look at it.
  • I modified the telescope mount program so that it passes the frequency scaled by 10 to the stepper.set_speed routine. I defined the constant RA_RATE to set the base value for the RA speed. This should be set to the frequency needed to generate the sidereal speed. The value is currently set to 9_5, which corresponds to 9.5 Hz.

    The SCALE value in stepper.spin must be changed to a value of 4 so that it divides the parameter received in set_speed by 10 to get the right frequency.
  • bbrienbbrien Posts: 526
    edited 2020-12-21 19:43
    OK now it's working like a champ. I got it down to 8Hz and the orion mount is tracking about one minute slow in 30 minutes. The meade mount uses a larger gear on the RA axis which is good news. Thanks for all your help. Willl include picture
    2560 x 1920 - 907K
  • Hello from Thailand. I am working on the big scope using Dh 14 program and I ran into a snag here. When I use7 as the SIDE_RATE, I get a frequency of 7Hz but when I use 7_5 I do not get 7.5Hz like before. I wonder what is going on.

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-06-12 19:38

    If you use 7 for 7 Hz, you cannot use 7_5 (which is 75) for 7.5 Hz. The problem is easily fixed by changing the SCALE constant in the stepper object from 40 to 4, and then always setting the speed in 0.1Hz units, so 7_0 is 7.0 Hz and 7_5 is 7.5Hz.

    Note: The Propeller compiler ignores the _ in numbers -- this is not a replacement for a decimal point. Many of us use this style to indicate that the value doesn't represent whole units.

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-06-13 16:18

    Note: The way Dave wrote that stepper code means you can only ever run one instance of it in a program. If you decide you need two steppers, you'll need to move the values that are in the dat section to a var section. All instances of a given class share the dat and code sections from the class.

  • I don't quite understand what you said . To run two steppers should I run two instances and put data from both DAT sections in a VAR or run one instance and put DAT into a VAR.

  • bbrienbbrien Posts: 526
    edited 2022-09-14 19:00

    can somebody please help me? in this thread post number 70 JonnyMac suggests that I move the data from the DAT section to the VAR section but what else should I also do with the stepper object. am including the file for stepper.spin.

  • JonnyMacJonnyMac Posts: 8,312

    If you're going to have multiple copies of the same object running in an application and the parameters for each need to be unique, put them into RAM. If they're in a DAT section they will be shared among all copies of the object class, and the last object configured will control the parameters for all.

  • If I am using two steppers labeled step1 and step2 can I use two objects labeled stepper and stepper2 , I can copy and "save as" on stepper2

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-09-16 18:30

    @bbrien said:
    If I am using two steppers labeled step1 and step2 can I use two objects labeled stepper and stepper2 , I can copy and "save as" on stepper2

    You could, but that's not wise -- you'd have two files doing the same thing. Since you won't do it yourself, I updated Dave's stepper driver so that you can run multiple copies without conflicts. Note that this is updated and styled to the way I write Spin, but it works exactly like Dave's version. I've added "dh_" to the name so you can have both versions in your library. A small change is that my update always has the stepper output pin return to low when you stop the motor.



    Dave used a local variable in the pulse-generator cog that I didn't think was necessary. Looking at that code again, he may have used that to prevent a possible race condition. I have updated my version of the code to guard against that as well. Please use the version that is dated 16 SEP 2022.

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-09-16 18:14

    (deleted by JM)

  • Ok Jon I am assuming that these are Objects and I don't have to change any of the coding other than the startups. Will make the changes and start testing tomorrow. Will let you know in a few days.

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-09-16 02:42

    Make your life easy
    -- download and save "dh_stepper.spin" into your Library folder
    -- in you app, change "stepper" to "dh_stepper"

    My version of Dave's code runs exactly like his, but allows multiple instances to run, each using their own pin set. Once you get that running you may be happy. If at a later time you want to save the two cogs, you can use jm_daul_step-dir.spin, but that takes more code changes, so save it for later.

  • bbrienbbrien Posts: 526
    edited 2022-09-16 18:00

    Thanks for the clarification, will do both. Ah, one more point: do I use"" dh_stepper.start(RA_SPEED, RA_DIR, DEC_SPEED, DEC_DIR) "" in the start-up codes

  • JonnyMacJonnyMac Posts: 8,312
    edited 2022-09-16 18:15

    do I use"" dh_stepper.start(RA_SPEED, RA_DIR, DEC_SPEED, DEC_DIR) "" in the start-up codes

    No. As I stated, all you need to do is download dh_stepper.spin to your Library folder, and then change

      step1 : "stepper"                                             ' stepper motor driver
      step2 : "stepper"


      step1 : "dh_stepper"                                          ' stepper motor driver
      step2 : "dh_stepper"

    That's it. The new object is 100% compatible with the old so you don't have to make any other changes.

    Please... DO NOT download the other object (I removed it from this thread). It's quite clear that you don't yet know enough about Spin programming to deal with the changes required to use that object in your app. Right now, getting your code to work is a greater priority than having efficient code.

  • JonnyMacJonnyMac Posts: 8,312

    Important: I looked at Dave's original version and concluded he made a deliberate choice about the use of a local variable. I have updated my version of Dave's object to do the same. Please, download the latest version and make sure that the date inside the file is listed as 16 SEP 2022.

  • Ok , now I have compiled the program. Now I can get back to programming the new hand controller . Chat with you later

  • bbrienbbrien Posts: 526
    edited 2022-12-06 05:27

    New program is working and is almost perfect, only problem is the speed at RA = 7_2, mount gains about 19 minutes and at 7_1 looses about 22 minutes. I need to change increments from 0.1Hz to 0.01Hz. Need Help. Reference post #81.I have included the object "dh_stepper" if this helps.

Sign In or Register to comment.