Motion Control Intern, National Instruments (Summer 2011)
National Instruments (NI) produces hardware for industrial and educational settings which can be easily integrated into a system by scientists and engineers using the NI LabVIEW graphical programming language. The NI 9502 Brushless DC Servo drive is a hardware module for the CompactRIO, containing an onboard Power PC and FPGA. The motor control algorithms are written onto the FPGA in LabVIEW FPGA. Though the hardware can support many axes of motors, the code required to drive each of the motors cannot fit on the FPGA. My task was to optimize and multiplex the motor control code to allow for multi-axis motor control.
There are many different methods of implementing multiplexing, each with different trade-offs. To create an appropriate implementation for a variety of customers, I needed to understand their operational requirements and constraints. I created an API which separates the state of the program from the motor control code. The state corresponding to each axis can be sent through the same stateless code, saving FPGA resources. The state can be stored in onboard RAM which is often unused in motion control applications.
There are many different methods of implementing multiplexing, each with different trade-offs. To create an appropriate implementation for a variety of customers, I needed to understand their operational requirements and constraints. I created an API which separates the state of the program from the motor control code. The state corresponding to each axis can be sent through the same stateless code, saving FPGA resources. The state can be stored in onboard RAM which is often unused in motion control applications.