1. For downloading SimTools plugins you need a Download Package. Get it with virtual coins that you receive for forum activity or Buy Download Package - We have a zero Spam tolerance so read our forum rules first.

    Buy Download Package Now!
  2. Do not try to cheat our system and do not post an unnecessary amount of useless posts only to earn credits here. We have a zero spam tolerance policy and this will cause a ban of your user account. Otherwise we wish you a pleasant stay here! Read the forum rules
  3. We have a few rules which you need to read and accept before posting anything here! Following these rules will keep the forum clean and your stay pleasant here. Do not following these rules will lead to permanent exclusion from this website: Read the forum rules.

Innovative Voice Coil

Discussion in 'Motor actuators and drivers' started by Ponch, Oct 19, 2014.

  1. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Hi everybody,
    I am Ponch' from France.

    I am looking for how to build a GSeat.
    Since I wasn't completely convinced about the technical choices of commercial GSeat. The position control of the motor instead of torque control (SimXperience GS4 for exemple) or the need to counteract the motion to feel the forces (Gecko GS105) are things I wanted to avoid.

    I tried to find the best "easy" way to transmit true forces to the pilot. I first tried to use stepper motor with spring and cable but the result wasn't that good with a low cut off frequency. A spring mass system is the best way to low filter the forces.
    In a proper GSeat, the pilot do not have to be moved or constrained to a special position when a force is applied. So standard geared DC or AC motors cannot be used since they are not freely reversible.

    One kind of motor seams to reach all of my requirements, the Voice Coil Motor. It is a brushless linear DC motor. To be synthetic, it is like a bass-shaker but with an axes to transmit the effort.
    The main issue is the price...Generally used in industrial context, it is difficult to find a suitable motor for less than USD1000.

    So I decided to make my own ! It took time to really understand all the keys of the design of such a system but I end with a working prototype with results very close to my calculations.

    Here some pictures of the build :
    [​IMG]
    [​IMG]
    [​IMG]
    [​IMG]

    And finally, a quick video of one of the first firing !



    It looks very promising with a 0-150Hz usable bandwidth, 24V 4A (12A max), 100N continuous force and 300N at 10% duty cycle, 30mm stroke. Enough for a GSeat.
    The force is proportionnal to the current (about 25N/A) so it is very easy to control the force via the PWM input of a standard low cost DC motor driver. And I design it to be compatible with audio amplifier too.

    It can be both a bass-shaker and an actuator at the same time...Hold-on!
    • Winner Winner x 6
    • Like Like x 3
    • Creative Creative x 1
  2. noorbeast

    noorbeast VR - The Next Generation Staff Member Moderator

    Joined:
    Jul 13, 2014
    Messages:
    12,611
    Occupation:
    Innovative tech specialist for NGOs
    Location:
    St Helens, Tasmania, Australia
    Balance:
    96,465Coins
    Ratings:
    +8,106 / 40 / -2
    My Motion Simulator:
    3DOF, DC motor, JRK
    A very interesting approach @Ponch, and great craftsmanship in putting it together. I will look forward to seeing your Gseat project progress.
  3. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Thank you @noorbeast !
    I will show you progress time to time. Tonight I will hook it to Simtools. I don't know yet if Simtools allows to send both accelerations and dash datas (RPM especially) to the same COM port. If someone knows how to do it ?

    I would like to be able to separate left, right, front and rear accelerations using the suspension travel . At the moment, only acceleration of the gravity center can be used. It may be possible to extrapolate it from angular accelerations.
  4. RacingMat

    RacingMat Well-Known Member Gold Contributor

    Joined:
    Feb 22, 2013
    Messages:
    1,927
    Location:
    Marseille - FRANCE
    Balance:
    18,057Coins
    Ratings:
    +1,847 / 16 / -2
    My Motion Simulator:
    2DOF, DC motor, Arduino
    Good job Ponch'
    Congrats for this successful first step for voice coil actuator :)

    Maybe @yobuddy could answer to your question?
    Yours
    Mat
  5. RufusDufus

    RufusDufus Well-Known Member

    Joined:
    Jul 21, 2013
    Messages:
    681
    Location:
    Adelaide Australia
    Balance:
    12,797Coins
    Ratings:
    +933 / 7 / -1
    @Ponch, very nice design and neatly constructed as well. :thumbs

    I'm very interested in learning more about it!
  6. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Salut Mat'
    I just installed GameDash to understand how it works. I do not find so much documentation but it seems like GameDash shares the interface of the Game Engine so it should be ok.

    I am too tired and lazy to test it tonight but will do tomorrow.

    I have been told that a special app for bass-shakers is under beta-test. It could be interesting for my project to have some more details about main features. Such app may offers the best way to drive the voice coils with low cost 6 ways class D audio amp.
    Last edited: Oct 20, 2014
  7. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,316
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    24,978Coins
    Ratings:
    +3,357 / 10 / -0
    left, right, front and rear accelerations using the suspension travel would be for the buttkickers I believe?
    While "what you ride" is the feedback from the cars gforces / accelerations?
    So I'm not sure you would want to mix them?

    yobuddy
  8. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Thank you for your answer @yobuddy.
    I won't use separate buttkickers to create vibrations. The voice coils will be used for both vibrations and GForces.
    I would like to use suspensions travels to compute a left/right and a front/rear ratio which should allow to localize the vibration source. I may be wrong and anyway it won't be the very next step. I have a lot more to do before that.
    • Like Like x 1
  9. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    My Arduino has a strange behavior when I send Hexadecimal datas. I remember it was the same with the mbed when I was working with stepper motors. Everything was ok when I change to "Decimal", but it hugely reduce the bandwidth.

    I am trying to control the rumble frequency with the axis testing tool. The sent data is proportionnal to the RPM. Everything seems to work between about -87% and +100%. But between -100% and -87%, the rumble frequency browse the total range many times. As far as I know, nothing to do with the part of the code in charge of creating periodic forces since I tried to manually fix the value through the whole range without any issue.

    Could someone explain to me what is exactly sent to the COM port when "Hex" is selected ? As I understand, the hex value of the current axis position is sent as ascii code.
    Ex :
    8bits : (range : 0 to 255)
    value to send = 120 = 0x78 -> byte #1 = 55 , byte #2 = 56
    16bits : (range : 0 to 65535)
    value of the axis = 20000 = 0x4E20 ->byte #1 = 52 , byte#2 = 69 , byte#3 = 50 , byte#4 = 48

    I partially use the @RacingMat 's code to convert ascii to integer but it does not work as expected.
    • Agree Agree x 1
  10. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,316
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    24,978Coins
    Ratings:
    +3,357 / 10 / -0
    @Ponch,

    Maybe I don't understand, but if these things are going to push you around, then you don't want to ride the shocks acceleration data.
    I believe you want to ride the GForces from the car itself.
    What's happening to the shocks is not what the rider is feeling in the car seat.
    If they are just for vibrations then I don't think you need the GForce data.

    So I don't think you want to do this is all I'm saying....
    "The voice coils will be used for both vibrations and GForces"

    yobuddy
  11. bsft

    bsft

    Balance:
    Coins
    Ratings:
    +0 / 0 / -0
    My guess is the designer is making a version of a dbox actuator.
    As thats what dbox units do ""The voice coils will be used for both vibrations and GForces"
    • Informative Informative x 1
  12. RufusDufus

    RufusDufus Well-Known Member

    Joined:
    Jul 21, 2013
    Messages:
    681
    Location:
    Adelaide Australia
    Balance:
    12,797Coins
    Ratings:
    +933 / 7 / -1
    Hi Ponch, I don't use Hex myself but this is my understanding:

    First, your examples look correct. The thing you may not be aware of though is when I did some testing quite a while ago I noticed the Hex output didn't have leading zero padding! (I haven't checked recently so you should confirm yourself) Depending on how you format the output string and process it in the controller this may cause an issue.

    For example using 8bits resolution, values above 15Dec will be output as two hex Digits -> 10 through to FF
    values 15 or less will be output with one hex digit -> 0 through to F

    If your controller is just assuming a fixed number of digits it will get lost when values are in the low end of the scale unless you have some other mechanism for determining the packet length.

    Hope that helps.
    • Agree Agree x 2
  13. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Thank you for your answers!

    The code I use takes care of the zero padding issue. But it doesn't work as expected. It assumes that a Carrier Return is sent instead of the second byte of data. In fact, in my case, a 'R' is sent...It is, I assume, because I ask Simtools to send R<Dash1>.
    So, now it seems to work as expected.

    @bsft you are right. But the aim of a GSeat is to transmit the consequence of the accelerations, that is to say the force pushing you on your seat. Not the acceleration itself like the DBox.

    What I was saying about the shared interface between Game Manager and Game Dash is false. Both use independant interface so I need to use two Com ports to mix Game Manager and Game Dash datas...
    • Informative Informative x 1
  14. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,316
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    24,978Coins
    Ratings:
    +3,357 / 10 / -0
    "Hex output didn't have leading zero padding!"
    Yes this is True, If we need it let me know...
    yobuddy
  15. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    Yes @yobuddy, it could be a good idea to take care of that on the Simtools' side.

    Especially, we do not know what is exactly sent after the LSB when the value is lower than 0x11. In my case, a 'R' but in other cases a Carrier return.

    Could you explain what Ascii is sent ?
  16. RacingMat

    RacingMat Well-Known Member Gold Contributor

    Joined:
    Feb 22, 2013
    Messages:
    1,927
    Location:
    Marseille - FRANCE
    Balance:
    18,057Coins
    Ratings:
    +1,847 / 16 / -2
    My Motion Simulator:
    2DOF, DC motor, Arduino
    Yes! It would be usefull to add padding function like you did in Gamedash :)
  17. yobuddy

    yobuddy Well-Known Member Staff Member Moderator SimAxe Beta Tester SimTools Developer Gold Contributor

    Joined:
    Feb 9, 2007
    Messages:
    3,316
    Occupation:
    Computer Technician
    Location:
    Portland, Oregon - USA
    Balance:
    24,978Coins
    Ratings:
    +3,357 / 10 / -0
    First we have to see if anyone is using hex output or we break their projects communication.
  18. Ponch

    Ponch New Member

    Joined:
    May 28, 2014
    Messages:
    12
    Balance:
    289Coins
    Ratings:
    +18 / 0 / -0
    @RacingMat ton dernier code fonctionne. Les caractères 'R' et 'L' ont été rajoutés au Retour chariot initial.

    @yobuddy, if the guys use the same function as in RacingMat's code, it should be without any consequence, isn't it ? The function won't be called anymore, that is all.
    Last edited: Oct 22, 2014
  19. RacingMat

    RacingMat Well-Known Member Gold Contributor

    Joined:
    Feb 22, 2013
    Messages:
    1,927
    Location:
    Marseille - FRANCE
    Balance:
    18,057Coins
    Ratings:
    +1,847 / 16 / -2
    My Motion Simulator:
    2DOF, DC motor, Arduino
    @Ponch : I'm glad my code works fine for you!

    @yobuddy : in order to not disturb existing setups, can't you add the function as optional text to add in the command line? Or a checkbox to activate the function?
  20. ferslash

    ferslash Active Member

    Joined:
    Feb 8, 2011
    Messages:
    475
    Balance:
    4,601Coins
    Ratings:
    +171 / 2 / -0
    Dear @Ponch:

    1. how much money did you invested in your voice coils?
    2. where did you got the magnets?
    3. did you have to do custom "machinery" of the metal piezes or they are out of the shelf commercial parts?

    --- you got me thinking about your voice coils, since i had never seen them... and they look really nice, small and silence.

    best regards

    :D

    fer