Avatar
MY OPEN SOURCE ESC
Nov 01st, 2023 | by: ELECTRONOOBS | Views 7221
Views 7221

I've been trying to make a good ESC for years. My first prototype 3 years ago was working "good". It was very big and the BEMF was not that good. It could reach decent speeds and you ahve that tutorial here on this page. Now, with my final version I have all taht I wanted. High speed, good BEMF detection and that means good torque, PWM control of the speed and small size. The board is programed in Arduino.

1. Intro

So what is an ESC? Well, electronic speed controllers are used to control brushless motors, in thisc ase the motor has a triple phase input. To control this input, the ESC must apply a special sequence of LOWs and HIGHs signals in a predefined order. It has to conmutate very fast and by taht rotate the rotor of the motor. In this tutorial we will see how to control the rotation, the speed, detect the BEMF and by that know when to make the switch to the next step of the sequence. So this is a sensorless brushless motor speed controller since it uses no sensor to detect the rotor position. We will learn: 

  • - The schematic and why we need each part
  • - Triple phase MOSFET bridge control
  • - BEMF detection and 0 cross
  • - Interrumprions and internal comparator of ATMEGA328
  • - PWM control
2. Schematic

 

Now the schematic might look complicated but is not. First things first, we have a power block. This is a buck converter circuit that will give 5V for all the digital parts. The main input could be from 11 to 18V but this block will aloways give 5V. The next block is the triple phase bridge. These are 6 MOSFETs in a bridge configurations that are used to energise the coils of the motor. Each of these MOSFETs has a driver control with the IR2101 which is a dual driver so it could control both the high and low sides of the bridge.

We have the BEMF voltage dividers block. The voltage from the motor will be higher than the maximum voltage that the ATmega328 could tahe as input, in this case 5V. So for that, using some resistors of 10K and 33K we lower the voltage so the analog input of the ATmega328 could read that. This inputs will be used to detect the position of the rotor and know when to switch to next step of the rotating sequence. We also have the ATmega328 microcontroller, the CH340 programmer so we could upload codes with the USB connector and a few more extra components such as buzzer, LEDs and pads.

Schematic for this project V2.0
3. The PCB

The PCB I've designed is 60 by 35 mm. In the photo below you can see the first version of the PCB in red but also the final version with black soldermask. The V1.0 had some errors such as some bad GND connections, wrong pin for the Buzzer and also the power tracks were covered by the soldermask. For version V2.0 now all the problems are fixed and the big tracks are exposed so I could fill those with solder for more current. You can download the gerber files from below. When you will download the GERBERS file above you will have a .zip file. Go to JLCPCB or any other professional PCB manufacturer, uplaod the .zip file and order your boards. In my case 10 PCBs cost me just 2 dollars plus shipping which for spain was 6 more dollars. I 7 days, I receive the next boards with a great look. You have silklayer for all the components so soldering the components should be easy. The PCB thickness is 1.6mm, signal tracks are 0.2mm and power tracks are 2mm. This red board has no exposed power tracks but the GERBER file you can download from above, is with the final version so don't worry.

PCB for the project
4.1 Soldering parts - Buck cconverter

The first part we solder is the power block. This will be a buck converter circuit that will lower the voltage from 12V to 5V for the microcontroller and other digital parts. Why we do this part first? Well, if we first solder the digital part and then the power block and by mistake the output of the buck converter is not 5V but 12V, well, taht will burn all the digital part.

 

Buck converter circuit



4.2 Soldering parts - The ATmega328

Second step is to solder the microcontroller basic configuration. That is the ATmega328p-AU chip, the 16MHz crystal, the R23 resistor of 1M ohm, the R1 resistor of 10K ohm, the C6 capacitor of 100nF. These components are mandatory for the microcontroller to work. Once you've soldered all these parts, we can test if we can upload something to the chip.

 

Once you have soldered all the parts for the basic configuration connect the FTDI external programmer to the RX DTR and TX pads but also Vcc and GND. Now open Arduino IDE and uplaod the next test code that will increas the "x" value each second and print that on the serial monitor. If you can see the number increasing, that means the IC was well soldered and it is working with no problem.


int x = 0;

void setup() {

Serial.begin(9600);

}

void loop() {

x = x + 1;

Serial.println(x);

delay(1000);

}


Add the microcontroller
4.3 SOLDERING PARTS - FTDI CH340

Once the voltage is 5V and the ATmega chip is working, we can keep soldering parts. Next part is the CH340 FTDI programmer. This chip will make the connection between and USB connector from a PC and our ATmega chip. So solder the CH340C, the C7 capacitor and the R18 aND R19 resitors of 1k. Also solder the USB connector. Make sure the FTDI chip is the CH340C not the CH340G, because that will also need a crystal. Once you solder the chip and the connector, try to upload the same code as before but this time with the USB connector on the board. If it works we are good to go.

UART connection
4.4 SOLDERING PARTS - Solder the rest

Now that everything works, we can solder the BEMF resistors, the MOSFET drivers with the diode and capacitors and the MOSFETs on the back for the triple phase bridge. Also solder the LEDs and the buzzer. Finally, we solder 3 wires with female connectors to the GND, Vcc and PWM pads. These will be the input signal from the radio receiver, just as any other commercial ESC.

All components
5. Code

Now the code is a bit long and difficult to understand. That's why each line has a comment. So download the code from the link below. Then read each line in order to understand why I do each part. The code will have the main.ino but also s secondary code for the EEPROM write/read. The code starts by defining the variables to use in the code. In the Setup loop we first check if the first position of the EEPROM memory is 1. If not that means it is the first time we run the code so we save the min and max values of the PWM input signal and also write a "1" on the first EEPROM adress.

Then, still in the Setup loop we configure all the registers. We set the pins as outputs/inputs, we set the PWM registers and alos set digital pin D8 to be able to create pin state change interrumptions. This pin is used to read the input PWM width in microseconds.

After the register configuration there are some loops that will detect if the ESC should enter configuration mode or not. If the input PWM signal is above a certain value when the ESC is powered on, then it should enter config mode where you could set the max and min range of the PWM input. If not, it will jump to the motor rotation loop.

Then we have a bunch of functions and ISRs to detect the PWM input value, to change the pins for the MOSFET drivers to high or low or to PWM or not PWM and also to change the comparator input on pin D6. With this input we read the BEMF and on each step of the sequence we need to change that input from BEMF_A, to BEMF_B or BEMF_C. The Armega328 has this comparator on pin D6. The negative input if this comparator will be the COM line, which is the summ of all back electromotive foces of A, B and C. Then the positive input of the comparator will then be selected in the code with the line:


  DDRD  |= B00011100;           // Configure pins 2, 3 and 4 as outputs
  PORTD  = B00000000;           //pins 0 to 7 set to LOW
  DDRB  |= B00001110;           // Configure pins 9, 10 and 11 as outputs
  PORTB  &= B00110001;          //B00110001    D9, D10 and D11 to LOW
  // Timer1
  TCCR1A = 0;
  TCCR1B = 0x01;
  // Timer2
  TCCR2A = 0;
  TCCR2B = 0x01;
  // Comparator on pin D6
  ACSR   = 0x10;           // Clear flag comparator interrupt
  //Set D8 (PWM in) to trigger interrupt (we use this to read PWM input)
  PCICR |= (1 << PCIE0);    //enable PCMSK0 scan                                                 
  PCMSK0 |= (1 << PCINT0);  //Set pin D8 trigger an interrupt on state change.								

Test

Once you uploaded the code and connected power, the motor and the PWN input we can test this. Make sure the PWM joystick is low and then connect power. When you increase the PWM signal the motor should spin. If you want to set a new range of PWM and calibrate the ESC, just put the joystick in the middle position before powering the ESC. Power the ESC and you will hear the config beeps. After the beeps put the joystick to the maximum value and then to the minimum value and it will get stored to the EEPROM. That's it.

New title

Once you uploaded the code and connected power, the motor and the PWN input we can test this. Make sure the PWM joystick is low and then connect power. When you increase the PWM signal the motor should spin. If you want to set a new range of PWM and calibrate the ESC, just put the joystick in the middle position before powering the ESC. Power the ESC and you will hear the config beeps. After the beeps put the joystick to the maximum value and then to the minimum value and it will get stored to the EEPROM. That's it.

16 Comments

  • David Morreres Viladegut

    about 4 years ago

    Hola amigo, Recienteme he visto la versión española de este proyecto y me asalta una duda que seguro me podrás aclarar. Como se hace en easyEda para que no te serigrafie por encima de las pistas que soportan más corriente para poder reforzarlas con estaño. Seguro que es muy fácil pero no encuentro la manera de hacerlo. Gracias de antemano.

    Noob 19129

    about 5 months ago

    Please try a hrefhttpswwwgooglecomGooglea before asking about a hrefhttpswww63gametopforumphpmodviewthreadtid289700pid433480page1extrapid433480Top Rated Product Websitea 579875

    Noob 19129

    about 2 months ago

    Please try a hrefhttpswwwgooglecomGooglea before asking about a hrefhttpsbonuscloudclubviewtopicphpf52t5283p273296p273296Great Product Guidea aa023d9

    Noob 19129

    about 1 month ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpelymbmxcommybbshowthreadphptid354pid6810pid6810New Product Infourl 23d94c5

    Noob 19129

    about 21 days ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttplieyanjicomforumphpmodviewthreadtid13086pid6827427page1extrapid6827427High Rated Product Guideurl a705798

    Noob 19129

    about 12 days ago

    Please try urlhttpswwwgooglecomGoogleurl before asking about urlhttpsbiomedtalkorgshowthreadphptid5642pid38071pid38071High Rated Product Guideurl 5f79e0b

  • Ricardo Salazar 1983

    about 4 years ago

    Hola amigo he probado tu primer sieno con los ir2301 y los mosfet irf3205 pero no me jala he puesto el codigo el arduino y no logro sacar nada por los transitores lo he simulado en proteus y no me fuciona

  • Noob 19290

    about 3 months ago

    Papa's Pizzeria is a simulation game where you assume control of the restaurant operations in Papa's absence and offer delectable pizzas. https://papaspizzeriagame.io

  • Noob 22221

    about 2 months ago

    hi

  • Noob 22221

    about 2 months ago

    Delhi Escorts are quite sensual, and you may cuddle up with them on your lap. If you’re up for some other kind of experiment, you can have it your way with our sweetest and still the hottest Escort in Delhi . Only you and I will make me incredibly happy. It’s important to keep in mind that all the females in Delhi are just like oneself women looking to have a great time if you take it easy and trust us, they’ll take you somewhere quiet where you and your lover may gaze at the stars in pleasure.

  • Noob 22221

    about 2 months ago

    Delhi Escorts are quite sensual, and you may cuddle up with them on your lap. If you’re up for some other kind of experiment, you can have it your way with our sweetest and still the hottest Escort in Delhi . Only you and I will make me incredibly happy. It’s important to keep in mind that all the females in Delhi are just like oneself women looking to have a great time if you take it easy and trust us, they’ll take you somewhere quiet where you and your lover may gaze at the stars in pleasure.

  • Noob 22221

    about 2 months ago

    Delhi Escorts are quite sensual, and you may cuddle up with them on your lap. If you’re up for some other kind of experiment, you can have it your way with our sweetest and still the Escort in Delhi . Only you and I will make me incredibly happy. It’s important to keep in mind that all the females in Delhi are just like oneself women looking to have a great time if you take it easy and trust us, they’ll take you somewhere quiet where you and your lover may gaze at the stars in pleasure.

  • Noob 26229

    about 1 month ago

    I appreciate you writing such a fantastic article. I’m eagerly anticipating your next posts. Visiting this blog is a pleasurable experience. I appreciate you telling me that. gacha life game

  • Noob 26606

    about 1 month ago

    [Google](https://www.google.com) google3 [http://www.google.com|google4 ] [http://www.google.com google5 ] [url=https://www.google.com]google[/url] [google7|http://www.google.com] "google8":www.google.com FF [google10](http://www.google.com/) [http://www.google.com|google11] [Lighthouse12](http://lighthouseapp.com/ "Lighthouse12") [13google->http://www.google.com/] [google14]url:http://www.google.com

  • Noob 26606

    about 1 month ago

    Are you guys seeking young, gorgeous female companions in the capital region, Aerocity? We ask this because we are eligible to conduct high-profile and beautiful Escort in Aerocity for your enjoyment. Your time has started if you have been alone for a long time. We are here to introduce the most essential services in Aerocity to you. Yes, we are discussing escort services in Aerocity, which has an empire of the cutest girls in the town.

  • Noob 21717

    about 28 days ago

    A student portal provides an immersive learning environment as it serves as a central hub for all applications, data, and content. All the information required for your online courses is provided by UNICCM

Login or Sign Up to post comments on this tutorial.