Individual Assignment

Add an output device to a microcontroller board you've designed, and program it to do something.

Group Assignment

Measure the power consumption of an output device.


Table of Contents


Hero Shot


Week 9 Work Plan


Professor Neil's lecture on Wednesday kicks off this week. The following day, my instructor, suggested that instead of examining a wide range of output devices, I should focus on one or two that I will be using for my final project. After discussing with my instructors, I realized that it would be difficult to finish my first final project idea—a soft robotic fish—in the allotted time. In the end, I chose to pursue my second project idea—a serial robot.

Selecting Output Device

Two essential output devices that I will be employing for my final project are a stepper motor and a servo motor. Since I can use servo motors to drive my robotic arm's end effector, I made the decision to investigate them. There are two different kinds of servo motors available in our inventory: one with a plastic gear and the other with a metal gear. A stepper motor is an option if I need precision. Unipolar, bipolar, and hybrid stepper motors are the three varieties of stepper motors that are in our inventory.

Servo Motor

What is a Servo Motor? - Understanding the basics of Servo Motor Working
A servo motor is an electrical device which can push or rotate an object with great precision. If you want to rotate and object at some specific angles or distance, then you use servo motor. It is just made up of simple motor which run through servo mechanism.
https://circuitdigest.com/article/servo-motor-working-and-basics

A servo motor is a type of rotary actuator or motor that allows for precise control of angular position, velocity, and acceleration. It consists of a motor coupled with a sensor for feedback, usually a potentiometer or an encoder, which provides information about the motor's current position. This feedback mechanism enables the servo motor to accurately maintain or move to a desired position.

Controlling a Servo

In order to move a servo to a position along its movement arc, or, in the case of continuous rotation servos the speed and direction of the motor, the controller needs to send a precisely timed signal for the servo to interpret. Typical hobby servos expect to see a pulse every 20ms, and the width of this signal determines the position. This width is usually between one and two milliseconds. This type of signal control is frequently referred to as Pulse Width Modulation, abbreviated as PWM. A servo controller will normally be a dedicated piece of hardware that can take inputs from other components like a joystick, potentiometer or sensor feedback to set the control signal for the servo. Other control options include using the PWM-capable pins on a microcontroller to send that signal directly to the servo.

Types of Servos

Standard Hobby Servos

A standard hobby or “closed-loop" servo will have a movement range of 90 or 180 degrees. Standard servos provide feedback for the controller to monitor its position on the movement arc over the control signal wire. This allows you to move the servo to precise locations with the right pulse length from your controller.

Continuous Rotation Servos

Continuous rotation or “open-loop" servos do not work like the standard servo. The control signal only controls direction and speed, not position. These enable you to easily control how fast the drive shaft is moving and in which direction it's going, but there's no feedback for position control.

Servo Motor Torque Calculation

🚨
Servo motors are rated in kg/cm (kilogram per centimeter) most hobby servo motors are rated at 3kg/cm or 6kg/cm or 12kg/cm. This kg/cm tells you how much weight your servo motor can lift at a particular distance. For example: A 6kg/cm Servo motor should be able to lift 6kg if the load is suspended 1cm away from the motors shaft, the greater the distance the lesser the weight carrying capacity.

Calculating the required torque for a servo motor involves considering several factors related to the load and the mechanical system it's operating in.

Load Torque

This is the torque required to move the load. It depends on factors such as the weight of the load, the distance from the pivot point (radius), and any external forces acting on the load. The formula for load torque (T_load) is:

📋
T (load) = F × r

Where:

F is the force acting on the load (in Newtons, N).

r is the distance from the pivot point to the point where the force is applied (in meters, m).

⬇️
To learn about how to determine torque from servo motor follow the link below.
How to Determine What Torque You Need for Your Servo Motors
In this tutorial, I will show you how to calculate how much torque you need for the servo motors (i.e. joints) on a robotic arm you are trying to build. 
https://automaticaddison.com/how-to-determine-what-torque-you-need-for-your-servo-motors/
🧮
Follow the link below for the robotic arm torque calculator.
Robot Arm Torque Calculator | RobotShop Community
The Robot Torque Arm Calculator is intended to help you choose the right motor for each joint of your robotic arm. The torque (T) required at each joint is calculated as a worst case scenario (lifting weight at 90 degrees). Ensure your units are consistent. Most common units are kg-cm and oz-in.
https://community.robotshop.com/tutorials/show/robot-arm-torque-calculator
🚨
A robotic arm torque calculator is a tool used to estimate the torque requirements for a robotic arm based on various parameters such as the arm's dimensions, payload weight, and the desired acceleration or speed of movement.

Servo Motor with Eagle Board

⬇️
To learn more about Eagle Board check out the link below.
Rayan Abdul Gafoor - Fab Academy
© 2024 Rayan Abdul Gafoor. All rights reserved. Students Agreement.
https://fabacademy.org/2024/labs/kochi/students/rayan-abdul/week08.html
🚨
I'm excited to experiment with attaching a servo motor to my Eagle Board, which I created in week eight. In order to connect external components, I included header pins for VCC, GND, and a few digital pins when I was creating the board.

Circuit Connection

Servo Motor VCC ➡️ Eagle Board VCC

Servo Motor GND ➡️ Eagle Board GND

Servo Motor Control Pin ➡️ Eagle Board Pin 2

😃
Final Result

Servo motor code

#define SERVO_PIN 2  // Define the pin connected to the servo

// Function to initialize the servo motor
void servo_init() {
    pinMode(SERVO_PIN, OUTPUT);
}

// Function to set servo angle
void servo_set_angle(uint8_t angle) {
    // Map angle to pulse width (usually between 1000 to 2000 microseconds)
    // Adjust these values according to your servo motor's specifications
    uint16_t pulse_width = map(angle, 0, 180, 1000, 2000);

    // Generate PWM signal with the calculated pulse width
    // You can use the built-in Arduino Servo library to control the servo
    // For simplicity, we can use a delay loop instead

    // Set pin high for the pulse width duration
    digitalWrite(SERVO_PIN, HIGH);
    delayMicroseconds(pulse_width);

    // Set pin low for the rest of the period
    digitalWrite(SERVO_PIN, LOW);
    delayMicroseconds(20000 - pulse_width); // Assuming 20ms period (50 Hz)
}

void setup() {
    // Initialize the servo
    servo_init();
}

void loop() {
    // Rotate servo to 0 degrees
    servo_set_angle(0);
    delay(1000);
    // Rotate servo to 180 degrees
    servo_set_angle(180);
    delay(1000);
}

Stepper Motor

A stepper motor is a type of electric motor that moves in discrete steps, as opposed to continuous rotation like conventional motors. Each rotation is divided into a certain number of steps, and the motor must be sent a separate pulse for each step. The motor's position can be controlled precisely, without any feedback mechanism, as long as the motor is sized correctly to the task.

How Stepper Motors Work - Electric motor
Stepper motors. How electric motors work, stepper motors explained. Learn how they work and why they are used from the basics. Learn the main parts, how it works, controller, driver, stepper motor types, what is a step, hybrid stepper motor, permanent magnet stepper motor, variable reluctance stepper motor, how are stepper motors controlled, wave drive, full step, half step, micro step.
https://www.youtube.com/watch?v=09Mpkjcr0bo
Unipolar and Bipolar Stepper Motors
For more information, visit http://www.microchip.com/motor
https://www.youtube.com/watch?v=vxxnPJBxG3M
Stepper Motor Basics - 6 Wires Unipolar / Bipolar Motor
How stepper motor, stepper controller, and stepper driver work - 6 wires unipolar / bipolar motor example.
https://www.youtube.com/watch?v=hHe4Fc6uuBs

Stepper motors usually come with four, five, six, or eight wires.

⚠️
The number of wires doesn't always directly tell you the type of stepper motor. It's still important to refer to the datasheet of the specific motor to understand its wiring and operation.

Unipolar Stepper Motor

A unipolar stepper motor is a type of stepper motor that operates with a single winding per phase. Each phase has a center tap usually connected to a common power supply. This configuration allows the direction of current flow through the winding to be reversed, changing the magnetic field polarity and allowing for precise control of the motor's position in discrete steps. This makes unipolar stepper motors suitable for applications that require precise positioning and speed control.

Five-wire stepper motor: This is typically a unipolar stepper motor. It has one winding per phase and a common wire.

Bipolar Stepper Motor

A bipolar stepper motor is a type of stepper motor with two coils (phases) that are driven by a bipolar drive circuit. This means the electric current can flow in both directions, allowing the motor to have a higher torque at high speeds compared to a unipolar stepper motor. The two phases are used to create a magnetic field, which rotates the motor shaft to precise positions. Unlike unipolar stepper motors, bipolar motors only have one winding per phase, meaning they require more complex control circuitry.

Four-wire stepper motor: This is usually a bipolar stepper motor. It has two windings and no common wire.

Hybrid Stepper Motor

Hybrid Stepper Motors are a type of stepper motor that combine the best features of both unipolar and bipolar stepper motors. They are designed with a rotor that is magnetized and has teeth, which align with the teeth on the stator to provide better positioning and torque than either unipolar or bipolar stepper motors alone. The hybrid design allows for greater precision and performance.

Six-wire stepper motor: This could be a unipolar or a bipolar stepper motor. It has two windings per phase and a center tap on each winding, which is used for unipolar operation and ignored for bipolar operation.

Unipolar Stepper Motor with Eagle Board

🚨
Initially, I decided to explore a unipolar stepper motor with my Eagle board. For operating the unipolar stepper motor, a special driver is required.
😃
Final Result
⚠️Do not try to attempt using twizers to test the motor shaft.It is not recommended.

Stepper motor code

#define STEPPER_PIN1 2  // Define pin 1 for stepper motor
#define STEPPER_PIN2 14  // Define pin 2 for stepper motor
#define STEPPER_PIN3 15  // Define pin 3 for stepper motor
#define STEPPER_PIN4 31  // Define pin 4 for stepper motor

#define STEPS_PER_REVOLUTION 200  // Number of steps per revolution of your stepper motor

// Define the sequence of steps for full stepping mode
const int step_sequence[4][4] = {
    {1, 0, 0, 1},
    {1, 1, 0, 0},
    {0, 1, 1, 0},
    {0, 0, 1, 1}
};

// Function to initialize stepper motor pins
void stepper_init() {
    pinMode(STEPPER_PIN1, OUTPUT);
    pinMode(STEPPER_PIN2, OUTPUT);
    pinMode(STEPPER_PIN3, OUTPUT);
    pinMode(STEPPER_PIN4, OUTPUT);
}

// Function to step the motor by one step
void stepper_step(int step) {
    for (int i = 0; i < 4; i++) {
        digitalWrite(STEPPER_PIN1, step_sequence[step][0]);
        digitalWrite(STEPPER_PIN2, step_sequence[step][1]);
        digitalWrite(STEPPER_PIN3, step_sequence[step][2]);
        digitalWrite(STEPPER_PIN4, step_sequence[step][3]);
        delay(2); // Adjust delay as needed for your motor speed
    }
}

// Function to rotate the stepper motor by a specified number of steps
void stepper_rotate(int steps, bool direction) {
    // Direction: true = clockwise, false = counterclockwise
    for (int i = 0; i < abs(steps); i++) {
        if (direction)
            stepper_step(i % 4);
        else
            stepper_step((4 - i % 4) % 4);
    }
}

void setup() {
    // Initialize stepper motor
    stepper_init();
}

void loop() {
    // Rotate stepper motor 360 degrees clockwise
    stepper_rotate(STEPS_PER_REVOLUTION, true);
    delay(1000);

    // Rotate stepper motor 360 degrees counterclockwise
    stepper_rotate(STEPS_PER_REVOLUTION, false);
    delay(1000);
}

Designing a New Board

🚨
This week, I decided to develop a new board for exploring output devices. By designing a new board, I will get the best of both worlds by gaining expertise in PCB design using KiCAD.

Selecting  Motor

🚨
The initial step for me was to select the motor that would be required for my final project. I used to refer to documents and videos to find the best motor suitable for the robotic arm, and finally I decided to opt for a NEMA 17 stepper motor and a servo motor.

NEMA 17 Stepper Motor

⬇️
The link mentioned below will provide an overview of the NEMA 17 stepper motor.
NEMA 17 - The High Torque Stepper Motor Working Principle
Stepper motors have a sophisticated appearance as we just mentioned, they work on a simple premise. Stepper motors allow users to boost the precision and efficiency of programmed movements across many applications and sectors. They are very versatile, dependable, affordable, and accurate
https://robocraze.com/blogs/post/nema-17-the-high-torque-stepper-motor-working-principle

A NEMA17 stepper motor is a stepper motor with a 1.7 x 1.7 inch (43.2 x 43.2 mm) faceplate. This motor is commonly used in many machines such as 3D printers and CNC machines, thanks to its compact size and reliable performance. The Nema 17 stepper motor operates by dividing a full rotation into a large number of steps, which allows for precise control of rotation, making it ideal for applications where precise positioning is required.

NEMA 17 is a hybrid stepper motor, but it comes with 4 pins as well.

⬇️
The image below illustrates the pinout of the NEMA 17 stepper motor.

Selecting  Motor Driver

🚨
The next step is to select a motor driver for the NEMA 17 stepper motor. By searching for motor drivers, I found the A4988 driver. However, by probing further, I realized that the A4988 driver has a few issues with its working because various clones are available on the market and it is not reliable. So I decided to go for the DRV8825 motor driver. 

DRV8825 Motor Driver

The DRV8825 is a motor driver that is commonly used to control bipolar stepper motors. It is characterized by its high output capacity and ability to drive up to 2.5A of current from each output. The DRV8825 offers features such as adjustable current limiting, overcurrent and overtemperature protection, and six microstep resolutions (down to 1/32-step). It also has a simple step and direction control interface.

⬇️
Follow the link below to learn how to control the NEMA 17 stepper motor with the DRV8825 motor driver.
Stepper Motor with DRV8825 and Arduino Tutorial (4 Examples)
In this tutorial you will learn how to control a stepper motor with DRV8825, AccelStepper and Arduino. Wiring diagram and code included!
https://www.makerguides.com/drv8825-stepper-motor-driver-arduino-tutorial/
⬇️
The image below illustrates the pinout of the DRV8825 stepper motor driver.

Microstep settings

Microstepping is a method of controlling stepper motors, typically used to achieve higher resolution or smoother motion at low speeds. In the case of the DRV8825 driver, it supports up to 1/32 microsteps. This means that for every single step the motor takes, the DRV8825 can make it take up to 32 microsteps instead, resulting in smoother and more precise movement.

Stepper motors typically have a step size of 1.8° or 200 steps per revolution, this refers to full steps. A microstepping driver such as the DRV8825 allows higher resolutions by allowing intermediate step locations.

Selecting  Microcontroller

🚨
There are many different microcontrollers available on the market, but I think the ATtiny1614, which is in our inventory, will work well for this week's test. I therefore choose to use ATtiny1614.

ATtiny1614

The ATtiny1614 is a high-performance, low-power 8-bit AVR RISC-based microcontroller that combines 16KB ISP flash memory, 256B EEPROM, 2KB SRAM, and operates up to 20 MHz. It offers a broad range of features including 18 general purpose I/O lines, 32 general purpose working registers, three flexible timer/counters with compare modes, internal and external interrupts, a serial programmable USART, a byte-oriented 2-wire serial interface, a 10-bit ADC with 10 channels, a programmable watchdog timer with internal oscillator, and five software-selectable power saving modes.

Schematic in KiCAD

⬇️
Check out the link below to learn more about PCB design using KiCAD.
Rayan Abdul Gafoor - Fab Academy
© 2024 Rayan Abdul Gafoor. All rights reserved. Students Agreement.
https://fabacademy.org/2024/labs/kochi/students/rayan-abdul/week08.html
🚨
The schematic diagram of the new board is shown below.

PCB Layout in KiCAD

🚨
Since the stepper motors are operated at 12 volts, the track width of the power increased to 0.6 mm, and the track width of the rest was set to 0.4 mm.

PCB Trace Width Calculator

A PCB Trace Width Calculator is a tool used in the design of printed circuit boards (PCBs). It calculates the appropriate trace width for a specified current, and vice versa, based on the material properties and thickness of the PCB. This tool helps designers ensure that the PCB can handle the expected electrical load, thereby preventing overheating and potential failure of the board.

⬇️
Follow the link below for the trace width calculator.
PCB Trace Width Calculator - PCB Prototype the Easy Way - PCBWay
By formulas from IPC-2221, PCB Trace Width Calculator can estimate the width of copper PCB boards and the trace required under the given current, and at the same time keep the rise in trace temperature not to exceed the limit. Note: The trace on the inner layer need to be much wider than the trace on the outer surface of the board. The results are estimates, actual results may vary depending on application conditions.
https://www.pcbway.com/pcb_prototype/trace-width-calculator.html

PCB Milling

⬇️
Check out the links below to learn about PCB milling using the Modela MDX-20.
Rayan Abdul Gafoor - Fab Academy
© 2024 Rayan Abdul Gafoor. All rights reserved. Students Agreement.
https://fabacademy.org/2024/labs/kochi/students/rayan-abdul/week04.html
Rayan Abdul Gafoor - Fab Academy
© 2024 Rayan Abdul Gafoor. All rights reserved. Students Agreement.
https://fabacademy.org/2024/labs/kochi/students/rayan-abdul/week08.html
⬇️
I have used the Gerber2Png web app to convert a Gerber file to a PNG format. Check out the link below.
Gerber2Png | Fablab Kerala
https://gerber2png.fablabkerala.in/
🚨
The photo below depicts the board just after milling the tracks.

Bill of Materials

🚨
KiCAD itself generated the BOM for me, giving me a comprehensive component list along with its numbers and values. Later, I requested the components from the inventory using the FabStash web app created by FabLAb Kerala. The web app immediately generated an organised BOM that I could print off.
FabStash | Fablab Inventory
6 Position Receptacle Connector 0.100" (2.54mm) Surface Mount, Right Angle Gold
https://inventory.fablabkerala.in/?page=2

Soldering the Board

🚨
Check out the link below to learn more about soldering.
Rayan Abdul Gafoor - Fab Academy
© 2024 Rayan Abdul Gafoor. All rights reserved. Students Agreement.
https://fabacademy.org/2024/labs/kochi/students/rayan-abdul/week04.html
🚨
While designing the board, I found connecting two tracks in a single layer required a few 0 ohm resistors, so I decided to route in a second layer, and while milling, I chose a single-layer PCB and decided to connect the vias using copper wires.

🚨
Result after soldering.

FTDI to UPDI Converter

🚨
For programming the ATtiny1614 using XIAO, I need a FTDI to UPDI converter. So I decided to mill a converter. I referred to my current schematic and PCB layout to check the pin position.
🚨
The schematic diagram of the FTDI to UPDI converter is shown below.
🚨
Afterwards, I discovered that my instructor had the converter, and he advised me to solder those boards.
🚨
The photo below shows the FTDI to UPDI converter and other components.
🚨
The photo below shows the FTDI to UPDI converter after soldering.
🚨
The photo below shows the connection between the XIAO development board, converter, and new board.
🚨
The board had a number of issues, which I fixed and mentioned in the sections on “Challenges and debugging”.
🚨
The XIAO board is connected to the PC, and the new board is powered via the XIAO board’s VCC.

Programming ATtiny 1614 using UPDI

🚨
To use the XIAO Quentorres Board as a programmer for the ATtiny 1614, I need to convert it to a programmer.
⬇️
Follow the link below to convert the QT board to a programmer.
🔗
https://gitlab.fabcloud.org/pub/programmers/quentorres
🚨
Open the Arduino IDE and go to “Preference” and paste the link mentioned below.
🔗
http://drazzy.com/package_drazzy.com_index.json
🚨
Click on “OK”
🚨
From the board manager, search for ”megaTinyCore” and install it.
🚨
Go to “Tools” ➡️ “Board” ➡️ “megaTinyCore” ➡️ select 1614, which is mentioned below.
🚨
From “Chip” select ATtiny 1614.
🚨
From ”Tools”➡️ “ programmer” select “SerialUPDI-SLOW:57600 baud”.
🚨
From ”Tools” select “Burn Bootloader”

Programming the ATtiny 1614 using a programmer

Servo with New Board

🚨
For connecting the servo motor, I have allocated male header pins on the board. I chose a meta-geared servo motor to test my board.
🚨
The picture below depicts the servo motor and board connection.

Servo Sweep Code

/* Sweep
  by BARRAGAN <http://barraganstudio.com>
  This example code is in the public domain.

  modified 8 Nov 2013
  by Scott Fitzgerald
  http://www.arduino.cc/en/Tutorial/Sweep
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
// twelve servo objects can be created on most boards

int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(1);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}
🚨
After successfully burning the bootloader, to upload the program, go to “sketch” and select “Upload Using Programmer”.
😃
Final Result

NEMA 17 with New Board

🚨
Before connecting the stepper motor, current limit need to be set on the motor driver.
🚨
This step is not very complicated but absolutely necessary to protect your stepper motor and the driver.
🚨
If you do not set an appropriate current limit, your motor can draw more current than it or your driver can handle, this is likely to damage one or both of them.
🚨
To set the current limit you need to measure a reference voltage and adjust the on-board potentiometer accordingly.
🚨
To measure the reference voltage, the driver needs to be powered. The DRV8825 only needs power via VMOT (8.2-45 V) and you need to apply 5 V to RST and SLP otherwise, the driver won’t turn on. It’s best to disconnect the stepper motor while you do this. Also, make sure the fault pin is set to high.

Current limit formula

💠
Current Limit = Vref × 2
🚨
To select the right current limit, take a look at the datasheet of your stepper motor. In my case I = 1.2 A, so Vref = 0.6 V
🚨
Now you will need to measure the reference voltage (Vref) between the potentiometer and ground and adjust it to the value you calculated (for me, it is 0.6V).
🚨
The picture below depicts the stepper motor and board connection.
😃
Final Result

Stepper motor code

const int dirPin = 0;
const int stepPin = 10;
const int faultPin = 8;
const int enablePin = 9;
const int stepsPerRevolution = 200;
 
void setup()
{
  // Declare pins as Outputs
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(faultPin, INPUT);
  digitalWrite(faultPin, HIGH);
}
void loop()
{
  // Set motor direction clockwise
  digitalWrite(dirPin, HIGH);
 
  // Spin motor slowly
  for(int x = 0; x < stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
  }
  delay(1000); // Wait a second
  
  // Set motor direction counterclockwise
  digitalWrite(dirPin, LOW);
 
  // Spin motor quickly
  for(int x = 0; x < stepsPerRevolution; x++)
  {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000); // Wait a second
}

Challenges and Debugging

⚠️
In this section, I would like to discuss all the challenges faced this week.

Solder Jumper Footprint Edit

⚠️
Initially, I connected the M0, M1, and M2 pins to the digital pins to control the steps per revolution from the programme itself, but my instructor suggested I connect to GND via a solder jumper instead of connecting to the digital pins. The gap between the pads of the solder pad is less than 0.4 mm, and as a result, the milling operation was unable to be performed, so I decided to edit the footprint and increase the pad width. 

The sacrificial layer is not levelled properly

⚠️
The milling operation failed because the end mill was not properly positioned in the milling machine's collet. I forgot to set the dpi to “1000” and started to mill in the wrong position. Upon my third attempt, I observed that the milling of the tracks was successful on one side but not on the other. This is because of the sacrificial layer. The sacrificial layer is not levelled properly, and I stopped the operation and pressed the down button to mill properly on all sides of the board.

Via below the horizontal socket pins

⚠️
I failed to notice that the a via is placed below the horizontal socket. My plan was to solder the copper wire; as a result, I had to place and solder the socket on top of the soldered via.

Smoking Voltage Regulator🚭🚭🚭

⚠️
I used the FTDI to UPDI converter to link the new board to the XIAO in order to programme it. After then, smoke from the voltage regulator begins to appear.
⚠️
To resolve this issue, I added a Schottky diode to the voltage regulator output side. Since I am also using a servo motor, I chose a 1A, 100V Schottky diode.

DRV8825 Wrong Footprint

⚠️
The DRV8825's actual footprint was a through hole. It was necessary to alter the through-hole header pin in order to convert it to an SMD footprint. One side of the footprint's numbers was inverted during editing, and this was only noticed after the components had been milled and soldered. As a result, I had to physically cut the traces and use jumper wires and 0 ohm resistors to correct them.
⚠️
The picture below illustrates the wrong pins and the correct pins in the side white blocks.

Group Assignment Result

📌
For the group assignment page click here.

Reference

📌 Adrián Torres

📌 Mufeed Mohamed

📌 Jogin Francis

📌 Nadieh

📌 Quentin Bolsee

Resources and Downloads

📁 Gerber Files

📁 KiCAD File

📁 Schematic