Improving Mazda MX-5 ND Soft Top Functionality

The Mazda MX‑5 ND already has a great soft‑top design. Putting the roof up takes just a few seconds, but folding it down does require a bit of force to lock it in place. It’s easy enough when you’re standing outside the car, but from the driver’s seat it can turn into an awkward shoulder move. As I’ve gotten older, that last push has started to bother me. So I decided to add a small assist mechanism to my 2024 MX‑5 ST/GT to make that final step effortless, letting the roof drop into place on its own.

The main idea was to implement a motorized hook that would lower the top to the locking position. I had several simulations using SolidWorks, but to test these ideas, we (with my friend) built a roof mockup. I found an eBay roll bar and roof frame. This mockup was very helpful for figuring out all the mounting options and testing some components. Many parts of this assembly were 3D-printed, but load-bearing parts machined on a CNC machine.

Initial version testing

When the top is locked down, the motor releases the cable so that, once unlocked, nothing obstructs the top from being raised. Activating the top‑lock switch makes the motor lower the slider, hiding it from the rear view. Unlocking the top latch reactivates the electronics, prompting the motor to release the cable again. This allows two Constant Force Strip Springs to return the slider and hook to their active position. When the top engages with the hook, the limit switch triggers, the motor pulls the mechanism downward, and once the top locks, the motor releases the cable again. The electronics then return to sleep mode.

This project came with plenty of challenges, mainly because the space inside this car is extremely limited. I wanted the system to be as simple and clean as possible, using plug‑and‑play electrical components like I do in most of my builds. Some of the existing holes in the car were too large, so I designed extra parts to properly mount the motor and main panel. Another key requirement was that the manual operations had to work even if the automatic system failed or the battery died. And overall, I aimed to make the smallest changes possible to the car itself.

After multiple iterations, I finally made a reliable mechanism.

There are a couple of unavoidable alterations to the car’s plastic panels; one is a new hole in the plastic back cover (seat back bar lower ganish) for the hook/slider. This panel is not very expensive, and I got a new Mazda part to modify it. Second is a hole through the glove box compartment, which was easy to drill with a 36m Hole Saw. I 3D-printed a cylinder to insert into this hole, so that inside the glove box, it covers the holes. Other than this, everything else uses existing mounting holes. Motor secured by two M5 nuts, main assembly by two M4 screws

I chose the motor from the 2014 Mazda 3 window regulator mostly for its slim design, so it can fit easily under the cover panel. It also uses the same stall-sensor implementation as the MX-5, so I could reuse my window-controller design for the MX-5 with the exact same electronics. Of course, I have to design new firmware for this application.

The only new thing I have to design is a harness connecting the motor, controller, and sensors from the top lock (on top of the windshield), along with a sensor from the back side of the roof mechanism, and the power line. Fortunately, all these wires are available on the back side of the car, on the car radio amplifier unit (with Bose system). I made a male/female harness for an amplifier for a real plug-n-play setup. Controller connected to a constant Battery power line and goes to sleep mode after 30 seconds of any action. This allows us to operate with the top in any situation, whether the car is turned on or off.

The installation process was time-consuming because we had to remove many plastic panels to access the roll bar. There are only 4 screw to remove, and everything else is on plastic hooks and clips. But in the end, it was easy to put all the panels back. Probably a couple of hours to install and an hour to put everything back. Mazda has detailed instructions for removing all the panels, available online here.

This was a very challenging but exciting project because it involved mechanical design, electrical engineering, and firmware development. Special thanks to a member of Miata.net, Jumperthumper, for assisting with the initial mockup.

AT Sport mode auto activation

With an automatic transmission, selecting Sport mode makes driving more enjoyable, but this mode resets with each start and must be manually selected. I created a small harness that can counteract this behavior. The car will always start with Sport mode enabled if it was enabled before the car was shut down. and I can reset it manually using the switch.

Electronics is very simple, implemented on the smallest Microchip microprocessor. This is a plug-and-play device that is easy to install.

Updated 7/22/2025

Heated steering wheel

For a couple of years, my car was parked in a carport. Even in California, winter nights are frigid. I have always wanted a heated steering wheel feature in my Miata. Finally, I made it.

I ordered a custom steering wheel from GardianDesign and asked them to put nichrome wire under the leather wrap.

The most complicated part is bringing power to this heating wire. The ND1/ND2 car has one unused space in the clockspring connector, which I was going to use. But in ND3, this space was used for something else, probably radar control buttons. There is one wire for LED illumination, which I did not care about, so I reused that wire (black wire) for my heating element. The ground wire was just bolted directly to the wheel frame.

From the other side of the clock spring, I installed a short harness with 14-pin male/female connectors to power this pin location. To reduce the current going through the clock spring, the heating element is powered by 36V (0.8A). I used a small sealed DC-DC converter. Power is provided from the fuse box, using a fuse jumper in the ACC power position.

The current implementation is controlled by a button, but I’m thinking of making it automatic based on cabin temperature. So, heating will turn on when the cabin temperature is below a certain point and turn off when it is warmed up to normal. It takes 3-4 minutes to heat up the wheel to 35 °C

Speed Correction Module

I recently decided to change the tires on my car to Michelin 215/45ZR-17 MICHELIN PILOT SPORT 4S because the original size 205 was not in stock anywhere. After more research, I think size 215 will look better. However, the downside of this is that the diameter of that tire is 0.3″ bigger, which will cause incorrect odometer counting. Here is the calculation using the Miata.net calculator:

This means that the speedometer will show 60mph, while the actual speed is 60.9mph and the odometer will show a lower value over time (150miles less for every 10,000). It is not a big deal, but for sake of accuracy, I decided to correct this with one of my devices. In the Mazda MX-5, the Instrument Cluster gets information about speed via CAN bus, from message ID 0x202. I used these messages for my digital speedometer implementation. So, to correct the speed information all we need is to intercept this CAN message and recalculate in real-time, according to the Tire Size Calculator. My RF roof controller is basically doing the same thing with speed info, to override the default speed limit of 6mph. I can reuse the same hardware design for correcting speed in the Instrument Cluster. All that’s needed is a new plug-n-play harness attached between the Instrument Cluster and the main harness. I think this device will be useful for people who want to/or have changed wheels size or any non-OEM size tires.