This Project must develop with your feedback. I am working alone, for now, so I am proposing the specifications, but I am open to your comments. I am waiting for your help…
Do you have a specification for your proposed esc? Even basic specs would be interesting at this point. Max voltage, max current, sensors or sensorless, control inputs and outputs, feedback variables, protection types, environmental limits (temp, humidity, altitude, depth, vibration, shock, cooling required, etc.), target cost,and form factor.
For now I only have the block diagram at http://bldc.wikidot.com/project-avr-esc. This site is about sensorless three-phase BLDC motors.
I want to define only the specifications that can guarantee the software work as expected. So we can project later several different form factor, environmental limits, max current, etc. A small form factor could be done with a 4 layer PCB and surface mount components. Better environmental limits could be achieved with the physical protection of the electronics. Bigger currents could be achieved with a different power stage (and a different current detection). These different "projects" could share the hardware block structure, the software, the control.
For now I want only to define the structure of the ESC and as soon as it is completely published we can build a variety of hardwares, with different specifications, that will have the same behavior with the same software.

Hi Fernando,
What a nice project you have here! I came accross this site through the German forums when I was browsing for BLDC motor control. I would be very much interested in porting this stuff to the PIC architecture with which I work regularly and more comfortably. Even though this is not one of the main objectives of this project, I would be glad to share with you whatever I come up with.
After reading the sources for the startup program, it struck me that it contains many comments in Portuguese. If you want your code to be understandable by everyone, perhaps it would be a good idea to translate those to English. A better formatting of the text would also help a lot, even if that code is still on the test bench. Perhaps it would also be a good idea to include some minimal comments about the theory of operation.
Update: after I first wrote this, I tryied to implement the rotor position detection with a PIC16F876A. This was relatively easy to do. The rest of the hardware is very similar to yours. Unfortunately it seems that my implementation is rather noisy and I cannot get a correct position. Your explanation of the method seems to be interesting, but not fully documented elsewhere on this site. Could you please provide a better description?
Regards,
Waldeck
DM/UFSCar, Brazil
Hi,
I am from Portugal but I will try to write this in English.
Sorry to answer only now but I am very busy.
What hardware are you using? And the motor? The way I am exploring the theme is not universal. It only works if there is magnetic saturation with the current pulses. It works very well with laser motors (polygon mirror motors) and hard disk motors. With low inductance motors I think this hardware (with this software) is not very good. I am still exploring this case.
Regards
Fernando
Hi Fernando,
I have motors from cd-roms and from (not so old) hdds. They all seem to be equivalent to 12 pole motors.
I've implemented the current-pulse method and as I reported before it was quite noisy, albeit my circuit is mounted on breadboard. I was able to compensate for the noise by averaging over a large amount of samples. With 256 samples there was no noticeable noise in the data, but I ended up working with just 32 samples with good results.
I send both a positive and a negative pulse on each phase pair and take the difference between them, thus obtaining 3 signals. These signals look like sine waves when plotted along different mechanical rotor positions. From this it was easy to identify the closest (natural) rotor position just by inspecting the signs of each signal. After having figured this out, I realized the method was patented. I hope that for non-commercial use this won't be a problem.
After identifying the position, I perform the motor acceleration according to Newton's laws. The moment of inertia has to be guessed, but it does work. It obviously depends on the load attached to the rotor. A nice improvement would be to somehow measure this load before accelerating.
My hardware is basically a mosfet h-bridge inverter controlled by a pic16f876a, and a resistor network just like in microkopter to aquire the analog motor signals. This pic has a single pwm generator and an a/d module, but it is quite limited in processing power. I should probably go up to a pic18 or even dsPIC. Since I have other less-demanding applications in mind other than modelling, I'll stick with the simpler pic16 for some time.
The next step is figuring out how to drive by bemf. It seems tricky with the present hardware. I'm considering adding comparators which are not present in my pic.
Cheers,
Waldeck
Waldeck,
Let's answer your mails.
I am very glad you enjoyed this site. If you want I can help (try to help) to port the algorithms to the PIC. If you do that it would be nice to create a PIC page on my site.
The text is quite well formatted if you use the AVR STUDIO for editing/compiling the source. I will try to put all the sources more readable but now it is not a priority.
The work I do could be more documented but for me the most important is to allow the duplication of the experiments, so I identify the hardware, the environment I use, and I publish the working software.
About your 27 December post:
I think that CD-ROM motor or Hard-Disk motors are quite the same but now I use HD motors and laser printer motors im my experiences. The number of poles is not important.
There is no noise (at least the usual working noise) when you are preparing the startup. After the beginning of the pulse you must wait a little, but not too much, before starting the ADC reading.
http://bldc.wikidot.com/local--files/downloads/HDPos.xls is the Excel file I got with the values of the ADC at the different rotor positions with an hard disk motor. The differences are not sine waves but I am reading the voltages at a different place: you probably are reading it at the resistor that is used to control the maximum current.
Did you get the identification or the link of the patent you are mentioning? Put it here because all the data related to this project is interesting.
To measure the load before the acceleration is a nice idea but I need time to evaluate it and I can not afford to enter very complex solutions: I have no time, no fun and no hardware to cope with complex calculus. I will decide later.
You can contact me with the e-mail you find in http://bldc.wikidot.com/contact
Do you live in Brazil?
Cheers,
Fernando
(Lisbon/Portugal)
Hi Fernando,
I think the relevant US-patents are the following: 6441572, 6650082, 7053583 and 7235941. I found them all on www.freepatentsonline.com. I also accumulated quite an extense literature on the subject, which I will be glad to share with you if you like, but I'd rather post it somewhere else due to it's sheer volume (some 30-35 PDF files).
The problem with my project is probably due to the fact it's mounted on breadboard. Since high frequencies are involved, this setup is not surprisingly very noisy. I should probably try and make a compact PCB before I continue. I'm also considering moving up to a more powerful uC like the dsPICF30F2010, which is much faster, has built-in motor support peripherals, and is fairly cheap.
Best,
Waldeck
PS: Yes, I live in São Carlos, SP, Brazil, where the weather is quite nice all year round. Not too hot, not too cold, just right. I visited Lisbon some 20 years ago and I recently learned from my friends that it's quite a different place nowadays. Still my memories from that trip are very good and I hope I can visit again sometime in the near future.
Thank you. The site www.freepatentsonline.com is very useful.
I briefly read the patents and I think that 7053583 and 7235941 are not related to the sensorless position detection problem.
I am still working on this subject.
About the startup and sensorless position detection subject:
6441572
5841252
5854548
6650082
About bldc control:
7053583
7235941
I am beginning a ESC PCB schema with Eagle with 2 modules: control and power. I never used Eagle so it's another tool to learn…
Best regards
Fernando

Hi!
I've got some questions about sensorless position detection.
You give a voltage pulse with 2ms twice to each phase, once positive and once negative.
Than you messure the voltage on the free phase, right?
How long do you wait after starting the pulse, to messure the voltage?
After getting values of the other phases, i have 6 values. But how can i calculate with these values the position of the rotor?
Thanks for your help.
Regards
Matthias
