the control of any system depend on some features such as:
a - The accuracy of the its mathematical model: the control will be more better as the model is very close the the real behavior of the system
b - the control schemes: for nonlinear system there are many approaches, the user can choose between a simple algorithm with simple performances or a complex algorithm with better responses.
c : The implementation device: the choice of the target device (DSP, FPGA, up, ....) depends on the complexity of the system, on the control algorithm and on the desired performances. For example, If the control algorithm is very complicated and contains more of mathematical processes that are parallel, the use of FPGA is more suitable.
Your question is too general. (By the way, both linear and non-linear control are intended primarily to deal with the dynamic properties of the plant or system.)
You can implement any (or at least almost) controller with an FPGA as it is highly configurable and very very fast. Therefore the accuracy and performance can be much higher comparing with conventional CPUs/DSPs, especially if counting their ability to run parallel algorithms. So the short answer is - yes, it's completely feasible.
What does it mean to have a nonlinear controller? In one sense it can be a controller that controls a nonlinear object which in turn means that you have a nonlinear mathematical description of this object that entails some special control law which is nonlinear, i.e. at the end you have some nonlinear mathematical function that you have to solve or approximate. And in nature almost every real object is nonlinear. These are the engineers who linearize some mathematical descriptions for the sake of simplicity of the description itself and to easy the implementation of the control logic. Linearization is also oftenly used when you have limited computational resources. Nowadays the nonlinear control obviously becomes more and more popular.
I can give you an example that I have successfully implemented. My doctoral thesis included FPGA-based control of a Switched Reluctance Motor (SRM) which is a highly nonlinear device mainly due to its salient poles. The inductance of this type of motors is a function of two variables - the current that flows through it and the angle of rotation (in fact it depends to some extent on the temperature and some other factors as well). This highly nonlinear magnetic circuit leads to a high level of the torque ripple and some audible noise and therefore have to be compensated. Instead of dealing with the FEM of FFT methods I decided to approximate the inductance with the aid of an artificial neural network (ANN). I first elaborated a Matlab simulation model of the motor and its control, Then, based on the neural network data, I designed an FPGA controller which used this data to determine the advance angle of phase commutation and included several parallel working algorithms. In practice this controller performed very well. The future intention is to embed the whole NN description inside the FPGA and to build a sensorless controller. By the way, earlier, as a bachelor, I had two other interesting projects - I implemented a single artificial neuron in an FPGA and I did a small fuzzy logic controller for a two chains robot, based on CoolRunnerII CPLD.
In other words, one modern way of implementing nonlinear controller in an FPGA may be implementing an artificial neural network or fuzzy logic controller. Of course, there are many other methods.
I think the current discussion may transform to a interesting one on what are the modern digital methods for nonlinear control.
Thank's for your answer, about this question you think I want to design Sliding Mode Controller to control of robot manipulator. This type of controllers are work based on dynamic formulation of robot manipulator. Do you have any idea to implement FPGA-based dynamic formulation based on Lagrangian formulation.
I have very bare knowledge about the Lagrangian formulation (a function that summarizes the dynamics of a system, roughly expressed as the kinetic energy minus the potential energy, right?). One option might be to produce respective look-up tables as the FPGA is a RAM-based device and therefore is comprised of memory cells. I know one powerful algorithm for coordination control is the CORDIC algorithm, that fits fine in an FPGA.
You can use the BlockRAM (i.e. for Xilinx Spartan series) as registered ROM memory by tying the write-enable input to low. You can do this by directly inferring the BlockRAM as ROM in the code and fill-in the coefficients directly or use the Xilinx's CORE Generator system where you can generate a special ".coe" file which initializes the ROM contents and assign it. For example you can check the XAPP463 "Using Block RAM in Spartan-3 Generation FPGAs" application note. Then you can use the memory address as the matrix cell index and the memory contents at this address as matrix cell value. And maybe this will be the fastest and easiest way. And you have various options for the memory organization (for example 4kx4, 1kx16, 256x72 and many others) so you can either write normalized values for that Sine and Cosine functions and use them as integers or write fixed-point arithmetic.
Some example of how to use the RAM/ROM can be found in "FPGA Prototyping by VHDL Examples" by Pong P. Chu (chapter 11.4.3 "ROM"). (His book is also avalaible for Verilog.) I used Xilinx and Verilog but other manufacturers, like Altera and Lattice, offer similar possibilities of implementing a ROM.
If your matrix changes dynamically it may be worth giving a try of the COordinate Rotation DIgital Computer (CORDIC) algorithm which is capable of evaluating many elementary trigonometric functions including Sine and Cosine. I have not personally used it but I know there are few free versions of CORDIC cores at opencores.org website.
Hi Farzin, From System dynamics point of view there could be multi-layered control. At one layer on needs to change parameter values to control the behavior of the system and obtain desired result. At another level one may need to change internal rules to control the behavior. This is the same as changing equations of the system dynamics model. At yet another level the structure of the system itself may have to be changed to control the behavior. System dynamics is based on the premise that behavior of the system is menifestation of its structure and structure is made of feedback loops. Monitoring and control through feedback loop is inherent in sytem dynamics modeling and simulation and policy design.
Most of nonlinear systems are controlled by nonlinear controller but modeling and implement conventional fully digital nonlinear controller is not easy because these controllers have nonlinear dynamic functions. So it is important, how to implement digital controller.