For vector control the rotor position information is necessary. I am using a contactless hall effect position sensor and due to mechanical errors there are magnitude and phase errors. Any references on compensation methods will greatly help.
I have attached a file of the simulation. In the simulation i have included the errors that are caused by mechanical mis-alignments. Hence the two signals(sine/cosine) from the sensor, have magnitude and phase errors. By taking arctan(sin/cos), result in a position information with errors (the ramp is not straight but has some ripple).
The main problem is that the hall sensor is about 90º out of phase from voltage one. A easy way but not elegant to solve it is to change the position of the sensor
The elegant way is to use a PLL phase locked. You could use a micropic microcontroller, it exists a lot of open source C++ code to do it.
I have a simple comparison algorithm that could use samples from a microcontroller ADC, it is not needed to use floating point variable. Inside you can find the C++ source code. I recommend to move the acquired data from hall sensor again the power supply data, do not mind about different offset or amplitude as long as the algorithm compensates them.
Here is the article:
Article XDX21: A novel high speed algorithm for image recognition an...
I am generating two signals from my sensor, a sine and a cosine signal. I need them to have same magnitude and be exactly 90^0 out of phase (i.e. sine and cosine) to be able to calculate the correct position (arctan(sin/cos)). Due to errors in my mechanical mounting, their magnitudes are not the same and they are also not exactly 90^0 out of phase. The paper you provided does not address this problem. I have used a PLL but it does not compensate completely and its causes delays. Thank you Javier for your willingness to help me.
I understand that my paper does not do all the work, the algorithm only generates a signal corresponding of matching of the two waves. You must design the PLL and include the algorithm in it.
Do you have always the same delay or it changes with the load?
If you have always the same delay it is easy to solve, you must introduce a delay to the acquired data until it works.
If the delay is not the same you must add a better filter or change the pll algorithm
Do you work with labview? I used plls included in labview but it did not work in the control of a very unstable oven. At least I made a new one (see attached file) : It will not work right with your motor because oven are slow, but changing the timescale it will work and solve the problem. I hope it works.
I use Opal-RT/dspace for my experiments, the software is Matlab/Simulink. Is it possible to save the labview file in another format either as .pdf or something that i can read. I have attached the PLL method i am using...thanks...
I will try to write here the filter that I used, but it worked with INTEGRATED DATA, not at realtime.
I used the following filter. It is a very easy but powerful one that could be written in a microcontroller:
If I(t) is the acquired data with noise and you want to obtain a filtered one I'(t) (in order to remove noise and to avoid controller oscillations)
I'(0)=I(0)
Where I(t)=c*V(t), V(t) is the input voltage
You must obtain the constant K that depends on the time response of the PLL. If you want that the PLL respond to 95% of the desired current in less than t=100milliseconds, and you acquire data at 10ksamples/second (100us)
K=0.05^(100us/100ms)=0.997
Loop:
V(t)=Iobjective/I(t)/c where I is the measured current at t