As mentioned before in the presentation, you are not constrained by time. This is accomplished as such:

Your control commands act as a “clock signal” for the simulator. Once the simulator receives this signal, it will instantly perform the simulation for the sampling time specified in the settings tab. It will then display the result and wait for the next signal to come. Thus, the duration between the clock signals are treated as if it was sampling time long, regardless of the actual time span.

Simulator and controller timing diagram for both-axes control

Simulator and controller timing diagram for elevation-only control

Characteristics of Electric Motors

This graph shows the envelope of the torque applied by the motor, i.e. the Torque/Speed graph when maximum torque command is applied:

Motor Torque / Speed graph when maximum torque command is applied

The motor is able to yield any torque from 0 to Tmax up to the rated speed ωr (constant torque region) and beyond that point the maximum torque provided by the motor is inversely proportional to the angular speed (constant power region) until the motor reaches its maximum speed ωp.

In reality, past ωp there is another region called “natural mode region” where the motor keeps running but magnetic fields within the motor start to break down. Here, the maximum torque of the motor is inversely proportional to the square of the angular speed. In applications, motors are rarely pushed into this region. In Cadmus, this region is completely ignored and the motor will not be able to go past ωp.

Regarding Cadmus

Cadmus is the name of a Phoenician prince who founded the Greek city of Thebes and is said to introduce the alphabet to the Greeks. In mythology, he is the grandson of Poseidon, God of the Sea.

Cadmus is developed using C# programming language. It depends on .NET Framework 2.0 and XNA Framework 3.1. Operating systems other than Windows are currently not supported.

Cadmus is currently closed-source mainly because the code is not very tidy. However, I plan to make it open-source in the future (probably after rewriting some of it). In the meantime, do not hesitate to ask for pieces of code that you're curious of.

The satellite has a simplified orbital model and its position around Earth is calculated using sine and cosine functions. There is no dynamic model involved for the satellite. Once its position is calculated, further vector math yields azimuth and elevation angles relative to a coordinate near Ankara, Turkey.

The antenna has two axes with two dynamic shaft models in each axis. In each axis, one shaft receives torque from the motor, the other receives disturbance torque from wind, and the shafts are connected via two gears having backlash. The motors have simplified torque envelope equations and do not have detailed dynamic and electrical models.

The wind force acting on the antenna dish is calculated from a polynomial fitted to modified values from empirical data by Peterka et al. (SERI/STR-253-3431). This force is converted to torque through a moment arm.

The state equations for the antenna axes are solved using a fixed-step Runge-Kutta integrator of 4th order.

If you're interested in some more information about Cadmus, here is a paper presented at the TOK'08 conference: Çevrimiçi Donanım Benzetimi için Yeni bir Yazılım Paketi: Cadmus