Antenna Rotor - Part 2

Continuing the tracker project, I managed to make some significant progress. As Demilson (PY2UEP) had cut the original motors, I did the same. The azimuth motor was too rusted and I eventually destroyed one of the coils (which I wanted to salvage the wire), but in the end the shaft went out.


After removing the shaft, I broke the magnet with a hammer until there was any piece left. That way, the only thing that would be left there is the shaft and the hexagon magnet support.

Hexagon Magnet Support 1 Hexagon Magnet Support 2 Hexagon Magnet Support 3Motor shaft showing the hexagon support

For the elevation motor, I made a cut in a circular mark around the exit of the shaft. That way I could use the same support for coupling with the reduction gears.

"lid" of the elevation motor after cut“lid” of the elevation motor after cut Lid + Reduction GearsLid + Reduction Gears Motor PiecesMotor Pieces

For the shaft, it was nescessary to reduce its size and made a bevel so I could fit it better in a 3D Printed part. To do so, I use two plywood pieces to hold the shaft while me and my father cut it. For the bevel, we used a grinder.

Plywood and cutted shaftPlywood and cutted shaft Cutted Shaft on motor headCutted Shaft on motor head

With that, I could then start the 3D Drawings for the adapters.

3D Prints

After A LOT of trial and error, I managed to make good fittings between the shafts. But then I realized a problem: The space for the azimuth axis was extremelly limited, in the way that my 40 mm NEMA17 motors were too big for it.

Azimuth Adapter Azimuth AdapterAzimuth Adapter

Then I had to buy some “slim” motors to use in that place. I got a bit concerned with the final torque, but my attempts to make gears and other stuff were all failed. The motors I bought in Aliexpress (see links in the end of this post)

While the motor wasn’t arriving, I started optimizing the adapters to be the shortest as possible, saving all space I could. I use FreeCAD for being free and where I can do faster / better drawings. But don’t assume I’m a 3D Designer, because I’m not. My parts are only “functional”.

Azimuth Shaft AdapterAzimuth Shaft Adapter Azimuth SupportAzimuth Support Elevation Shaft AdapterElevation Shaft Adapter Elevation AdapterElevation Adapter

And the first axis to work was the elevation. To do so I used 40 mm NEMA17 motors (link in end of this post), which came with a closed-loop magnetic encoder driver. But in the end I went to use a TMC2209 to control instead the board that came in because it was easier and quieter.

After the new azimuth motors arrived, I just tried to fit everything. And it did! se ia caber. E coube!

Azimuth Azimuth Motor in place

And also working!

After everything was working, I did some tests to check what was the final resolution and reduction for both axis. To do so, I used the following code with an ESP32 to control the TMC2209 drivers, and for angle measurement I used my phone attached to the elevation base.

#include <TMCStepper.h>

#define STEP_PIN         12 // Step
#define EN_PIN           23 // Enable

#define SERIAL_PORT Serial2 // TMC2208/TMC2224 HardwareSerial port
#define DRIVER_ADDRESS 0b00 // TMC2209 Driver address according to MS1 and MS2

#define R_SENSE 0.11f 

TMC2209Stepper driver(&SERIAL_PORT, R_SENSE, DRIVER_ADDRESS);

void setup() {
  pinMode(STEP_PIN, OUTPUT);
  pinMode(EN_PIN, OUTPUT);
  digitalWrite(EN_PIN, LOW);
  
  SERIAL_PORT.begin(115200);      // HW UART drivers
  Serial.begin(115200);

  driver.begin();                 // UART: Init SW UART (if selected) with default 115200 baudrate
  driver.toff(10);                // Enables driver in software
  driver.rms_current(1000);       // Set motor RMS current
  driver.microsteps(2);           // Set microsteps to 1/16th

  driver.en_spreadCycle(false);    // Toggle spreadCycle on TMC2208/2209/2224
  driver.pwm_autoscale(true);      // Needed for stealthChop

  Serial.println("OK");
  digitalWrite(EN_PIN, HIGH);
}

bool shaft = false;

void loop() {
//  Serial.println("TURN");
  if (Serial.available() > 0) {
    int z = Serial.read();
    if (z == 'a') {
      Serial.println("Stepping 10000");
      digitalWrite(EN_PIN, LOW);
      for (uint32_t i = 10000; i>0; i--) {
        digitalWrite(STEP_PIN, HIGH);
        delayMicroseconds(350);
        digitalWrite(STEP_PIN, LOW);
        delayMicroseconds(350);
      }
      digitalWrite(EN_PIN, HIGH);
    } else if (z == 'b') {
      shaft = !shaft;
      Serial.print("Shaft direction: ");
      Serial.println(shaft);
      driver.shaft(shaft);
    }
  }
}

The results were:

The results looks promissing and, if everything goes right, will be enough for tracking satellites!

The next step is to code / assemble the required software/hardware to control it through network!

The 3D Models (Both freecad and STL) are available in Thingverse (see links section)