URC - Rotor Controller

URC - Ultimate Rotor Controller

The price for the URC is currently (Euro) €795,-

(limited supply!)


This is for a complete unit, assembled and tested, ready to connect to your rotor and encoders. You need a proper 15 to 24 VDC power supply that can deliver enough current for the rotor/motors you will be using (12 VDC operation is

also possible)!


MOD-URC, modbus adapter for HH12, HH12-INC, AS5048A devices and analog input (for potmeter), (Euro) €50,-

(MOD-URC lets you connect cheap absolute encoders like HH12, AS5048A based devices and even an old potmeter to the URC controller via the RS-485 serial Modbus.



Please send any inquiries to the email address listed on "My CV/contact" page.

See the Terms of Purchase for warranty and cancellation details before you order.

Key features of URC:

  • Different position encoders supported (Az/El can use different encoders, does not need to be the same):
    • Direct interface to Incremental encoders on popular slewdrives from Coresun etc. (URC saves the current position during moves, restores it at power on, no loss of encoder position).
    • Support for absolute encoders via direct connection to RS-485 (Modbus):
      • Solar-360M for elevation (modbus RTU version).
      • Briter encoders, single turn and 16 turn, 10 and 15 bits modbus devices.
      • HH12 based (HH12, HH12-INC and similar via small MOD-URC communication module).
      • AS5048 (SPI) based devices via MOD-URC module.
      • SINDT02-485 absolute encoder/inclinometer from WitMotion for elevation.
    • (Future support for potentiometer type (analog voltage) feedback using one or two MOD-URC modules (0..5V))
  • Drives DC motors from 12 to 24VDC, PWM controlled from 0 to 100% speed (or even "on/off" control of AC motors using external relays).
  • Maximum combined motor current is 13 ADC (10A for a single axis).
  • Acceleration, deacceleration, min. start/stop speeds, maximum speed, deadband and hysteresis configurable.
  • Using incremental or absolute multi turn encoders, URC can handle axis's from -xxx° to +yyy° (f.ex -90° to +450°)
  • Capacitive touch, 4.3 inch color display.
  • "Tooltip info", click on any text label and a help text for that item will be shown.
  • Gets it time from NTP (Internet time) or manually set, maintained in battery backed clock for true "mobile or off grid" operations.
  • Interfaces with SimpleCalc. The actual position of the antenna are used for calculations in SimpleCalc (HPBW etc.)
  • Can be controlled by SkyScanner for 3D mapping of noise.
  • VNC support for remote operation (recommended to use VPN if open towards the Internet!)
  • Web server, live dataview/control, settings, upload of new (html) files etc. (recommended to use VPN if open towards the Internet!)
  • Users can upload own webpages to the URC and use the HTTP/JSON commands/status messages, see below to build their own "GUI" via web browser.
  • Firmware updates can be fetched directly from internet (or uploaded via the web interface)
  • Numerous failsafe features, motor overcurrent, stuck encoders/blocked motors, hunting/oscillations.
  • Autonomous high precision tracking of moon and sun.
    • (Please note, the URC are optimized for having the mechanical stops on azimuth in the northern direction!)
  • Settable Park position and three "one touch" preset positions.
  • Support for various protocols for external tracking software:
    • Yaesu GS-232A/B (via RS-232 port)
    • PstRotator
    • URC UDP
    • socket interfaces
    • Rotctld (interfaces to PstRotator)
  • CAN Bus included for future expansion.
  • Supply voltage between 15 and 24VDC (fuse on back of box). Will work down to 12VDC also for portable operations (current consumption at 24VDC from 90 to 200 mA depending on the amount of backlight set).


History

I designed the first revision of the URC Rotor controller back in 2022. The idea was to make a controller for my  own satellite system back then (which later became my 70cm EME system). Since 2025, the URC also controls my 4.8m dish for EME.


Since 2022, I have gotten a lot of requests from people asking if I would make the URC controller generally available for others to purchase at some point. Initially, the URC was only meant to be an "internal project", the design was not really made for production, the mechanics, housing and general design was just not optimized for that.


"Revision B" of the URC is now finished. This version has been optimized, easier to produce etc. The actual design are exactly the same as the "revision A" that have been running for 4 years, doing 10.000+ QSO's on both satellites and EME at my own place.


The URC has from the start, been designed with substantial processing power. The processor is a Cortex M7 (i.MXRT1064 from NXP) running at 528 MHz. On the board is 32 MByte SDRAM, 8 KByte FRAM (for storage of current incremental encoder positions, configuration etc), 128 MByte NAND Flash (disk system), a USB service port interface, SMPS for 3.3V and 12V (for encoders, CAN/RS-485/RS-232 devices etc), 10/100 MBit Ethernet, RS-232 port (for connection to PC ,tracking programs), 2 x incremental encoder interfaces, RS-485 port (for connection to absolute encoders via Modbus), CAN Bus interface and a 4.3 inch capacitive touch TFT display (480 x 272 pixels).


URC interfaces directly with the popular slewdrives from (among others) Coresun in China, feedback comes directly from the Hall effect sensors in the slewdrives, so no extra position sensors are needed in that case. A number of absolute encoders are also supported, ranging from single turn 10 bit to multiturn 15 bit devices, popular "HH12" encoders and even analog potentiometer "encoders" are supported (for legacy rotor systems).


Demo of a SVH3 Az/El slewdrive being driven by a 12V battery for true mobile operation. SVH3 nominal voltage is 24VDC but runs perfectly fine (although slower) at 12V:

Changing settings via web browser:

Help system

When tapping on the text labels on most windows, helpful hints will appear. These hints include information about parameters, settings, and allowed value ranges.


The displayed window exemplifies this by showing the help text related to the "Az deadband" label.

Guidance provided when clicking the text label "My Lat/+N,-S".

Track window

The main window. From here you can activate different tracking targets:

Park: Go to the defined (in "Presets") park position.

Rem: Activate remote tracking, using protocol defined in "Settings".

Sun: Track the sun.

Moon: Track the moon.


You can tap on the Az or El position and a numeric keyboard will show up, allowing direct goto.


Shows the motor current in mA, PWM speed in %, ETA in seconds and the current destination.


On the Manual window you can set a "Nudge offset" (see this section for an explanation).

You can only apply a "nudge offset" on the "Manual" window IF the URC is actively tracking (Sun, Moon or REM).


Whenever a "nudge offset" is effective, it will be shown in green (positive) or blue (negative) text (also show like this on the "Manual" window).

Presets window

From the "Presets" window you can define the "Park" position and three preset positions. Tap on the numbers and a keyboard will show up. You can also do a long press on one of the buttons ("Park", "Preset 1..3") and the current position will be saved as the new preset position.

Manual window

The "Manual" window lets you move the motors manually by pressing the "UP", "DOWN", "CCW" and "CW" buttons. The motors will move as long as the buttons are pressed. 

You can also tap on the Az or El position and a numeric keyboard will show up, allowing direct goto.

The speed can be changed at the two entry fields ("Speed % Az" and "El"). No ramping of the movement are done when moving using "Manual".


At the lower right corner, there is a "Nudge" switch. If a tracking mode is currently selected (Sun, Moon, REM) this switch can be set to "ON". When doing so, the four buttons (CW,CCW,UP,DWN) changes from moving the antenna manually to setting "nudge" offset for the two axis. Every time a button is pressed, the "nudge offset" for that axis is incremented or decremented by 0.1°.


The "nudge offset" is applied to the calculated target, this will offset the antenna with a number of degrees (either positive or negative). As soon as the tracking mode is changed, the "nudge offsets" are reset, the same happens if you change the "nudge" swith to "OFF".


Whenever a "nudge offset" is effective, it will be shown in green (positive) or blue (negative) text (also show like this on the "Track" window).

Limits window

URC operates with two sets of "limits":

"Hard limits" are the positions that are never allowed to be crossed. No matter if URC is running in manual mode or actively tracking an object, if the hard limit is ever to be crossed, the system will stop and go in the "stopped" mode. A popup window will also be shown on the screen with the error message.


"Soft limits" are limits that are allowed to be crossed in manual mode only (either from the "Manual" window or by entering a destination directly. Tracking an object (in "Rem" mode or sun/moon) will not be allowed. For example, if the lower soft limit for elevation is set to 10° while tracking the moon, as soon as the elevation of the moon goes below 10°, the elevation axis will not go below 10° but stay clamped.


The soft limit values can not be "outside" of the hard limits, they have to be "less" or "equal" to the hard limits.


Please note, the URC are optimized for having the mechanical stops on azimuth in the northern direction!

Setup window

The "Setup" window found in the URC stands out as the most sophisticated among all windows. It provides a wide range of parameters and settings that can be customized.

On the left side of the window, you will mostly find "system parameters" such as latitude/longitude, network settings, date/time, remote protocol settings, and more.


The right side are mostly related to the tuning and settings of the azimuth and elevation axis's. Here you can configure the type of encoder each axis uses, maximum speeds, deadband, hysteresis, maximum motor current allow etc.


Left side

  • Brightness, brightness of the screen 5 to 100%
  • Screen saver, time before screen goes into screen saver mode (only in stopped mode)
  • Set date/time, see below
  • Timezone (UTC), the difference from local time to UTC
  • Daylight saving, enable if daylight saving is in effect
  • My Lat/+N,-S, your latitude, positive for northern latitudes, negative for southern
  • My Lon/+E,-W, your longitude, positive for eastern longitude, negative for western
  • Use DHCP, enable to use DHCP, disable to use static IP address on LAN network
  • My IP, the IP address to use if using static IP address
  • Netmask, the IP netmask to use if using static IP address.
  • Gateway, the IP address of the gateway (router) if using static IP address
  • Calibrate az/el position, see below
  • Remote, select the remote protocol to use for "Rem" mode (yaesu GS-232, PstRotator etc)
  • Baudrate, the baudrate to use for the serial remote protocol (Yaesu etc)
  • Rem. port, the socket port to use for remote protocols that use the LAN interface
  • Stay in Rem, when enabled, the URC will stay in "Rem" mode when the object tracked goes below horizon.
  • Always allow VNC, when enabled, incoming VNC clients are always accepted, if not enabled, a popup screen is shown. This allows you to either accept or reject the VNC client. The settings depends on if you are on a private network or not


Right side

  • WDT period, number of mS of watchdog period
  • WDT min.move, number of degrees that must be moved within the WDT period to prevent watchdog timeout
  • Max current mA, this is maximum motor current for each motor before overcurrent alarm is triggered
  • Max speed, this is maximum speed in %
  • Min start speed, this is minimum speed in % used when starting a move.
  • Min stop speed, this is minimum speed in % used when ending a move.
  • Deg Acc/Deacc, number of degrees for the ramp up/down of a movement
  • Az/El deadband, number of degrees for axis to be within before stopping
  • Az/El hysteresis, this is the maximum number of degrees difference between the current position and the target position before a move is initiated, this is effective in "Rem", "Sun" or "Moon" tracking
  • Az/El cnt/deg, ONLY when using incremental encoders. This is the number of counts per degree
  • Az/El type, sets the type of encoder used on the axis. When using absolute encoders via RS.485 modbus, please observe the address used for the encoders (azimuth encoders are always address 1, elevation encoders are always address 2)
  • Modbus baudrate, this is the speed to use on the RS485 modbus for absolute encoders. This MUST match the configured speed of the connected encoder(s)

Set local data and time

Normally the URC gets its time from the internet or its own battery backed real-time clock. If for some reason you need to adjust the date/time manually, you can do so via this window. Enter the data and time, and press the checkmark at the top of the window.

Calibrate azimuth and elevation axis

This window lets you set the current position of the antenna. There are small differences depending on the type of encoder used for each axis.

To set the current position, you simply enter the correct azimuth and/or elevation value, and press the checkmark at the top of the window.


If you are peaking your antenna on the sun (when measuring sun noise), you can simply press the large button to use the current sun position, and press the checkmark.


When an axis uses a absolute encoder, the "Clear offset" button for that axis are enabled. Pressing the button will clear any offset on that axis and set the offset to 0. This will then have the effect that the raw absolute position from the encoder are shown and used.


Clearing the offset for an axis will activate "Disengage motors" automatically, you can engage motors again in "System" window.


Remember you can use the "Disengage" function on the "System" window to prevent any sudden moves by the motors when doing setups like this!

System window

  • SW version, this is the current version of the software running. Pressing the "Update from internet" button will attempt to update the unit with the current firmware version available (requires connection to internet). The unit will restart after the update.
  • IP address, the current assigned IP address of the URC. Using the address "HTTP://URCxxx.local" in a browser will allow you to access the web browser.
  • MAC address, the physical MAC address of the LAN network chip (the line also shows the number of available and used slots for UDP and socket communication)
  • Serial number, this is the serial number of the URC
  • Simulate motors, if incremental encoders are selected for both azimuth and elevation, you can simulate motors and encoders while experimenting with settings
  • Disengage motors, enabling this will prevent motors from moving. Useful when using absolute encoders and testing these
  • Raw encoder/pos, this is the raw incremental encoder positon(s) if used and the current azimuth and elevation position
  • Motor load (mA), this is the current load for each of the two motors
  • Speed (deg/sec), speed in degrees per second of each axis
  • Restart controller, this will restart the URC (only possible when in "stopped" mode
  • Enable track, using this you can select which of the two axis are currently following tracking commands. Default is that both az and el are tracking (for example when doing a sun drift scan with SimpleCalc, you can disable tracking in azimuth (or elevation)
  • Remote service, this will enable connection to a "service desk" at moonbounce.dk. USE ONLY IF INSTRUCTED TO!!!
  • Modbus errors, shows the number of requests, replies and errors from connected absolute encoders (if configured). This enables you to spot any communication errors with the encoders.

Parameters for motor tuning

Below is a simplified drawing of how the various parameters in the "Setup" window controls the ramp up/down, the speeds and the target "lock".

All the "speeds" mentioned are PWM speeds of the motors, this can go from 0 to 100%. The three speed settings are common for both azimuth and elevation motors.


Please notice that most motors will not run at (very) slow speeds, especially when starting/stopping. Both SVH3 and SVH7 slewdrives typically have minimum start and stop speeds of 20%.


The parameters:

  • Max speed (A), this is the maximum speed motors will run at (10..100%)
  • Min start speed (B), this is the minimum speed that will be used when starting a move (5..100%)
  • Min stop speed (C), this is the minimum speed that will be used when trying to reach the final destination (5..100%)
  • Az/El Acc/Deacc (D), this is the number of degrees that are used for the ramp up/down from the "min speeds" to the maximum speed (0.2° to 10.0°).
  • Az/El deadband (E), this is the number of degrees in error from "wanted" to "actual" position that are allowed before motor stops (0.01° to 5.0°).
  • Az/El hysteresis, this is the number of degrees difference between "calculated/should be" to "current" position before a new move is initiated. F.ex when tracking sun/moon, when the object has moved this amount from the current position, a move will be initiated (0.01° to 10.0°).

Parameters for failsafe mechanisms

The URC comes equipped with several failsafe mechanisms, all designed to halt the system in case of any abnormal occurrences. Examples of potential issues include a motor stalling, broken position encoder cables, faulty encoders, or excessively high motor current due to mechanical blockages.


One essential implemented feature is the "Hunt/oscillations" alarm, which activates if an axis repeatedly moves back and forth in a searching manner, making more than three quick movements. This triggers an error message on the LCD screen and halts the system (no settings are available for this feature).


Graphically represented below are two key features: the "movement watchdog" and the "maximum motor current" functions.


The "movement watchdog" includes three parameters:


  • WDT period mS (A): This parameter specifies the time, in milliseconds, during which changes in position are monitored (100 to 5000 mS).
  • WDT min.move (B): This sets the minimum position change required within the WDT period. Failure to meet this criteria will result in the system halting with an audible alarm (0.001° to 1.0°).
  • WDT grace per. (C): The "grace" period is a delay in milliseconds applied to the normal watchdog check if the axis reverses direction from its previous movement. This delay prevents premature triggering of the watchdog due to excessive backlash. Only after the grace period expires does the normal watchdog timer start running. Feature is disabled if set to 0. (0 to 5000 mS).
  • Max current mA (D): This parameter defines the maximum permissible motor current in milliamperes. If this limit is exceeded, the system stops with an audible alarm (0 to 10000 mA).


    Using incremental encoders (slewdrives)

    Using incremental encoders with the URC are straightforward. Below is an example where a SVH3 slewdrive from Coresun is connected to the URC. The Hall sensors on the Coresun drives can be supplied with  5 to 12VDC making them perfect candidate for the URC.


    A Coresun SVH3 slewdrive has two cables, one for azimuth and one for elevation. The cables exits the drive motors on the back of these.

    The cables consists of 6 wires in total, the red/black motor wires are thicker than the 4 remaining wires from the Hall sensor (incremental encoder).


    The thick red/black wires are the motor wires. The four thick wires are connected to the black connector which goes into the "MOTORS" connector on the back of the URC device.


    The brown/blue/orange/gray wires are from the built-in incremental encoders (Hall sensors) on the azimuth and elevation motors, the blue connector with these goes into the "ENCODERS" connector on the back of the URC.


    PLEASE NOTICE that the color coding of the sensor wires (brown/blue/orange/gray) are sometimes different depending on the actual slewdrive you have! Make absolutely sure you are using the right connections, check with the actual datasheet of your drive or the seller.


    The screenshot below is from the SVH3 PDF manual from Coresun, you can see the colors of the wires and what function each wire has. Using this with the description on the back panel of the URC lets you connect the wires correctly to the ENCODER connector. Remember, swapping either the "hall A" and "hall B" OR the "motor -" and "motor +" will reverse the direction of the axis!

    Below follows a description of how to set the "counts per degrees" for an incremental encoder. The example uses a SVH3 slewdrive from Coresun

    For the URC to be able to know what the current azimuth/elevation position is, it needs to know how many pulses it will see for each degree of movement. This setting is in principle the only thing needed for the URC to operate with incremental encoders (and the calibration of the current position the azimuth/elevation).


    The slewdrive consists of two "gears" (simplified picture to the left):

    • The "main gear", this is the large gear that drives the antenna in azimuth or elevation (on azimuth, one full 360° rotation of the main gear/output shaft, will rotate the antenna 360°). Reduction ratio around 50:1 to 80:1.
    • The motor/planetary gear. This is the combo that drives the main gear. The motor/planetary combo typically have a large reduction, sometimes up to 600:1.


    To the left there is a picture of the datasheet for the SVH3 from Coresun. There are two numbers that are interesting with regards to the "pulses per degrees" we need. This is the "Gear ratio" of the main gear, in this case it is 62:1. The other interesting number is the gear ratio of the motor/planetary gear that drives the main gear, in this case 552:1. If we multiply these two numbers:

    62 x 552 = 34224. So one revolution (360°) on the output shaft requires 34224 revolutions on the DC motor.


    In case of the SVH3 drive, the incremental encoder (Hall sensors) are mounted at the rear end of the DC motor. A little simplified, two magnet is mounted to the motor shaft and a Hall sensor is located close to the shaft. Every time the motor rotates one revolution, the Hall sensor will see two "pulses" from the magnets. So now we have:


    2 x 34224 = 68448 pulses pr 360° rotation on the output shaft.


    The way the incremental encoder interface is made on the URC will multiply the pulses from the incremental encoder ("quadrature interface") by four (basically it counts every "edge" of the two signals (Hall A and Hall B).

    So, the end result is then:

    4 x 68448 = 273792 pulses in the URC for 360° rotation on the output shaft.


    Or combined in one formula:

    62 x 552 x 2 x 4 = 273792 pulses


    So every time the output shaft has made a full 360° rotation, the URC will see 273792 pulses.

    This brings us to the value we need to enter in the "Az cnt/deg" and "El cnt/deg" in the "Setup" window on the URC!


    Az/El cnt/deg = 273792 / 360 = 760.53


    As there are small in-accuracies when manufacturing gears, its always a good idea to rotate the output shaft a full 360° (or 180°) and check the actual number of pulses (the raw pulse counts can be seen on the "System" window)!

    In the case of the SVH3 I used for the screenshots above, a more correct number was 760.50 pulses/degrees.


    Using absolute encoders

    THIS SECTION WILL BE UPDATED SOON

    The URC supports a number of absolute encoders, including:

    • Briter single turn and 15 turn 10 and 15 bit encoders (Modbus RS-485) directly connected via the RS-485 bus to the URC.
    • Solar-360M encoder for elevation from Level Developments, directly connected via the RS-485 bus to the URC.
    • HH12 and HH12-INC absolute encoders using the MOD-URC adapter.
    • AS5048A based encoders for both azimuth and elevation using the MOD-URC adapter(s).
    • SINDT02-485 Inclinometer from Wit Motion for elevation (with RS-485 modbus interface).
    • Potentiometer (analog) devices using the MOD-URC(analog) adapter(s).


    Below is shown two "MOD-URC" modules. One MOD-URC connected to a AS5048A based sensor for azimuth, and the other MOD-URC connected to a HH12 based sensor for elevation.

    Remote control using VNC

    You can remote control the URC via a normal VNC client (for example RealVNC etc.).

    In "Setup" window, you can enable or disable the automatic accept of incoming VNC clients. If set to disabled, a popup will show on the LCD display of the URC. It is then possible to accept or ignore the connection request.

    If you are on a network that is open towards the Internet it might be a good idea to keep this setting disabled, otherwise a user trying to gain access via VNC will be able to control the URC!

    Web server

    The URC features an integrated web server for convenient monitoring and operational control through a standard web browser. Access the webpage to initiate sun/moon tracking, position the dish, adjust to specific azimuth and/or elevation angles, and view motor current graphs. By providing your antenna's band and HPBW (-3 dB beamwidth), the calculated sky noise levels (in °K) for both the antenna's direction and the new target direction will be displayed.

    Using the upload feature of the file manager webpage, the user can upload own webpages adding personal features to the system. You will also be able to see the current "self doppler" for the moon (useful when doing EME and checking your own echoes).


    You have the capability to modify all controller settings and manage setting configurations by uploading and saving files directly thru the web interface (the configuration files are simple JSON text files, parameters not included in the files are not modified when doing a "Load from file")

    Main page

    The main web page of the URC allows you to control the operating mode, execute "goto" commands, monitor motor current etc.

    Settings page

    From this webpage you can change most of the parameters of the URC. You can also save/load the current configuration.

    Mobile application

    During the construction of my 4.8M EME dish, I felt the need for some way of remote controlling the rotor controller. I made a small .NET MAUI application for mobile phones (cross platform). This (very) small application lets you control the dish when I stand next to it and the URC controller is located in my shack. Very handy. The mobile application ("RURC") lets me enter target azimuth and/or elevation, park or activate Sun or Moon tracking etc.

    The application also shows a graph of the current (in mA) for each axis when moving.

    Back of URC

    The back of the URC has a number of connectors, please notice that all the "12V" connections shares a common resettable (automatic) fuse of 400mA. Do NOT draw more than 400mA combined on these outputs!


    The URC comes with all connectors included, the DC connector (XT-60) has wires already soldered to it (as shown on the picture above). The blue connectors are "pluggable screw connectors.


    • DC INPUT: This is the main power for the device, it uses 15 to 24VDC (will also run at 12V just fine, just observe the "12V" terminals on the blue connectors will be only around 10V!). Max current 13Amp. The connector used is a XT-60 connector (male connector on the URC).
    • FUSE: This is the main fuse for the DC input, use a fuse of maximum 13A (T). At delivery, a 4A (T) fuse is installed.
    • MOTORS: This connects to the two brushed DC motors (Az/El). Max current is 10A for one motor, maximum 13A total for both motors (set by the fuse).
    • ENCODERS: This is the incremental encoder inputs (directly from the slewdrive).
    • RS485: This is the RS485 communication bus, this is used to interface to absolute encoders (URC has 120 Ohm terminator inside).
    • RS232: A serial port, this can interface to legacy tracking programs that for example use Yaesu GS-232A/B protocols.
    • CAN: Connection to CAN Bus, this is for future expansion and features (URC has 120 Ohm terminator inside).
    • USB port: This is a "service connector" and is NOT for use by the enduser.
    • 10/100 MBit: This connects to your Ethernet/network, supports 10/100 MBit, DHCP or static IP address.


    The 4 pole blue connectors are part number TBP02P1-381-04BE and the 8 pole blue connector is part number TBP02P1-381-08BE both from the company "Same Sky".

    The 4 pole black connector for motor connections are part number 1944350000 from company Weidmuller


    The URC comes with connectors for all the blue connectors, the motor connector and the DC connector.


    Pictures

    Below are some pictures, taken outside in full sunlight. You can clearly see the brightness of the LCD screen. Normal indoor operation will only have the backlight set to 10 %!

    Two complete controllers of "revision A". One is in use in my 70cm EME system and the other in my 4.8m dish for EME.


    2022-08-26 18.31.40
    2022-08-26 16.52.26
    2022-08-26 18.34.40
    2022-08-26 18.31.45
    2022-08-26 16.50.57
    2022-08-26 16.51.01
    2022-08-26 17.27.00
    2022-08-26 17.27.05
    2022-08-26 17.27.08
    2022-08-26 16.51.07

    A short (older) video of the current state of the controller. In the video, the controller is running with simulated motors/encoders

    URC driving a SVH7 Slewdrive for my 4.8 meter dish for EME

    Communication with URC

    This section will be updated soon

    Dynamic data via HTTP GET command

    Using a HTTP GET command, it is possible to get dynamic data from the UTC controller. This is the method the main page (index.html) of URC uses. It requests the data from the URC 30 times each second.


    Data will be returned if you do a HTTP GET:

    http://urc1234.local/dynamic.json


    The format of the data are shown below:


    {
      "NAME": "URC 4.8m Dish",
      "UPTIME": 2824,
      "TIME": "2026-08-05 11:56:27",
      "MODE": 0,
      "AZ": 2.01,
      "EL": 3.01,
      "NEWAZ": 2.01,
      "NEWEL": 3.01,
      "ERRAZ": 0,
      "ERREL": 0,
      "SPEEDAZ": 0,
      "SPEEDEL": 0,
      "LOADAZ": 0,
      "LOADEL": 0,
      "ETAAZ": -1,
      "ETAEL": -1,
      "SUNAZ": 190.97,
      "SUNEL": 50.72,
      "SUNNEXTEVENT": 26191,
      "SUNMAXEL": 50.84,
      "SUNTRANSIT": 84650,
      "MOONAZ": 297.41,
      "MOONEL": 2.31,
      "MOONNEXTEVENT": 1208,
      "MOONMAXEL": 54.95,
      "MOONTRANSIT": 62055,

      "WDTWARNAZ":0,

      "WDTWARNEL":0,

    }


    The individual fields:

    • NAME: This is a symbolic name of the URC, can be set in settings.
    • UPTIME: Number of seconds since URC was powered on/reset
    • TIME: The current UTC time
    • MODE: The current mode the URC is in:
      • 0=stopped
      • 1=Park (moving towards park)
      • 2=Sun (tracking the sun)
      • 3=Moon (tracking the moon)
      • 4=Remote control (using the protocol set in settings)
      • 5=Manual (currently moved using buttons on manual window)
      • 6=Preset 1 (moving towards preset position)
      • 7=Preset 2 (moving towards preset position)
      • 8=Preset 3 (moving towards preset position)
    • AZ/EL: current position in degrees
    • NEWAZ/NEWEL: New target position in degrees
    • ERRAZ/ERREL: Number of degrees difference between target and current position
    • SPEEDAZ/SPEEDEL: Current PWM motor speed in % (0..100) 
    • LOADAZ/LOADEL: Current motor current in mA
    • ETAAZ/ETAEL: Number of seconds before the new target position has been reached (-1 if not moving)
    • SUNAZ/SUNEL: Current azimuth/elevation of sun
    • SUNNEXTEVENT: number of seconds until sun either sets or rises (if SUNEL>0, next event will be set)
    • SUNMAXEL: Maximum elevation of sun (will be at AZ 180 or AZ 0)
    • SUNTRANSIT: Number of seconds before sun is at maximum elevation
    • MOONAZ/MOONEL: Current azimuth/elevation of moon
    • MOONNEXTEVENT: number of seconds until moon either sets or rises (if MOONEL>0, next event will be set)
    • MOONMAXEL: Maximum elevation of moon (will be at AZ 180 or AZ 0)
    • MOONTRANSIT: Number of seconds before moon is at maximum elevation
    • WDTWARNAZ/WDTWARNEL: is an early warning that the watchdog for position change for axis is about to fire


    URC Socket protocol

    I have developed a number of PC applications (SkyScanner, SatTrack etc.) and these supports communication with my URC controller using either UDP or TCP/IP Socket communications. 


    When using the socket protocol, the URC acts as a "server". It creates and accepts (multiple) connections to a socket it creates (port number can be defined in settings). As default, URC will listen on port 1111, but you can freely configure that.


    All messages are formatted as JSON text. Every time you send URC a request, it will reply back with its status message.


    Status message:


    {

      "TICK":143,

      "UPTIME":53,

      "CPULOAD":15.4,

      "VERSION":1.08,

      "MODE":0,

      "AZ":160.02,

      "EL":89.98,

      "NEWAZ":160.02,

      "NEWEL":89.98,

      "SPEEDAZ":0,

      "SPEEDEL":0,

      "LOADAZ":0,

      "LOADEL":0,

      "ETAAZ":-1,

      "ETAEL":-1,

      "SUNAZ":158.82,

      "SUNEL":53.83,

      "MOONAZ":109.48,

      "MOONEL":14.71

    }


    The individual fields:

    • TICK: is just a incrementing sequence number
    • UPTIME: is the time the rotor controller (in sec) has been running
    • CPULOAD: is the current CPU load in %
    • VERSION: is the firmware version
    • MODE: is the current mode of the URC:
      • 0=stopped
      • 1=Park (moving towards park)
      • 2=Sun (tracking the sun)
      • 3=Moon (tracking the moon)
      • 4=Remote control (using the protocol set in settings)
      • 5=Manual (currently moved using buttons on manual window)
      • 6=Preset 1 (moving towards preset position)
      • 7=Preset 2 (moving towards preset position)
      • 8=Preset 3 (moving towards preset position)
    • AZ/EL: is the current position of the antenna
    • NEWAZ/NEWEL: is the target position
    • SPEEDAZ/SPEEDEL: is the speed in % of the motor (0..100)
    • LOADAZ/LOADEL: is the motor current for the motor in mA (negative value is CCW, positive is CW)
    • ETAAZ/ETAEL: is the number of seconds before motor has reached its new destination
    • SUNAZ/SUNEL: is the current position of the sun
    • MOONAZ/MOONEL: is the current position of the moon



    Commands the URC can receive:

    The status message above is sent back from URC on every command it receives.


    {"POLL"}

    POLL is just a request for current information (typically Az/El position is needed)


    {"GOTO":[35.42,10.52]}

    GOTO will send a new Az/El position to the URC. If the URC is in "REM" mode, the antenna will move to this position.


    {"MANAZ":[160.42]}

    This will move the azimuth to the defined position


    {"MANEL":[12.54]}

    This will move the elevation to the defined position


    {"STOP":[]}

    Stop all movement


    {"PARK":[]}

    Activate the park function (same as pressing "PARK" on the "Track" window


    {"SUN":[]}

    Activate tracking of sun (same as pressing "SUN" on the "Track" window


    {"MOON":[]}

    Activate tracking of moon (same as pressing "MOON" on the "Track" window


    {"PRESET1":[]}, {"PRESET2":[]}, {"PRESET3":[]}

    Move to Preset 1/2/3 position (same as pressing "Preset1/2/3" on the "Presets" window


    {"UPDATE"}

    Same as pressing "update from internet" in System window. Will fetch new firmware from internet (from moonbounce.dk)



    UDP broadcast message from URC

    The URC broadcasts status messages (as JSON) 10 times per second on UDP port 30201 to the local network.


    The format is as follows:


     {

       "uptimeURC":21,
       "serial":1044955607,
       "az":155.09,
       "el":80.08,
       "azLoad":0,
       "elLoad":0,
       "azPWM":0,
       "elPWM":0
     }


    The individual fields:

    • uptimeURC: is the number of seconds since URC was powered on
    • serial: is the serial number of the URC
    • az/el: is the current position
    • azLoad/elLoad: is the motor current in mA
    • azPWM/elPWM: is the PWM commanded speed (0..100%) for motor

    Release notes



    2026-09-11 Version 1.11

    • Added "nudge" function. Using this, WHEN in active tracking mode, you can adjust az/el in 0.1 deg steps from the "Manual" window (activate the switch at the bottom of the Manual screen). When tracking mode is changed, nudge offset gets reset
    • Better handling of Ethernet reconnect situations (ARP monitoring, link up/down, mDNS etc)
    • Added support for WitMotion SINDT02-485 inclinometer sensor for elevation (via modbus)


    2026-09-01 Version 1.10

    • Developed a VNC server from scratch and added it for remote access (using RealVNC, TightVNC etc. clients). VNC can be enabled by default via "Settings" -> "Always allow VNC", otherwise need to be accepted for each session.
    • Added support for remote support (via system tab, ONLY when instructed by OZ9AAR !!)

    • Improved Sun/Moon calculations, much more precise
    • Acceleration/Deacc. distance in degrees are now separate for azimuth/elevation

    • Update to same fw version number will now be carried out
    • When tracking sun or moon, the time to next event (rise/set) will be shown in the status line at the bottom of LCD screen f.ex: "Track moon (S 07H 18M)" means that moon is being tracked and it will set in 7 hours and 18 minutes from now
    • Sending current status info out as UDP broadcast messages on port 30201 (10 times per second), used by SimpleCalc noise window
    • Added web server with support for SSI, HTTP GET etc.
    • Better handling of deadband in Axis controller, more precise arrival
    • mDNS added, lets you find a URC on the network by using "URC1234.local" where "1234" is the 4 last digits of the devices serial number (see back of URC unit).
    • In System tab, it is possible to enable only Az or El tracking (for Sun, Moon and REM modes). Default is both Az and El enabled. Useful for sun drift scans etc.
    • Added a lot of commands that can be sent with GET HTTP, f.ex HTTP://URC5607.local/index.html?gotoaz=180
    • Added support for settings.html page (parameters set via GET command(s))
    • Added support for "file_manager.html" page, allows listing, delete and upload of multiple files via HTTP POST (except a file with same name as the "file_manager.html" (or whatever name it is using) page)
    • Added "files.json" to web interface, returns all files and their size: "http://urc1554.local/files.json"
    • Added possibility to delete one or more files: "http://urc1554.local/files.json?delete=file64k.bin&delete=file128k.bin"
    • When starting tracking (REM, Sun, Moon) azimuth and elevation axis will be clamped to the soft limits if target is currently outside these limits
    • Added detection and alarm messages for "hunt/oscillation" detection on an exis (if f.ex the deadband or "minimum stopping speed" are too aggressive).
      This is overruled by "WDT grace period" (in mS) for movements in opposite direction (for taking up backlash)
    • Improved simulation mode (accessible via the "System" menu. It is now safe to activate/deactivate the simulation mode, the physical motors and encoders "stays in place". In simulation mode, also the motor current is simulated (PWM value * 6 in mA)
    • Added support for absolute encoders. Support for Solar-360M, Briter single/multiturn and MOD-URC (supports HH12, HH12-INC, AS5048 and potentiometer), all via RS-485 modbus.

    • Added "disengage" motors on "System" menu. Motors will not move, useful for checking absolute encoders etc.
    • Sends out "R R" on CW during poweron
    • Added support for Rotctld protocol (via Socket). Interfaces to PstRotator etc.
    • Added "tooltip" help texts on all labels (setup etc).
    • Baud rate for modbus can be set in "Settings" window.


    2025-07-05 Version 1.06

    • Added PARK, PRESET1, PRESET2, PRESET3, STOP, MANAZ and MANEL commands on URC socket


    2025-06-13 Version 1.05

    • Fixed error when watchdog timeout on movement.


    2025-04-10 Version 1.04

    • Changed error on overcurrent, both axis are stopped if one of them sees overcurrent
    • On UDP remote interface, Az/El is returned with 2 decimal places (was 1 before)


    2025-02-26 Version 1.03

    • Added 2 decimals to values on "manual" tab.
    • Changed Az/El display to 0.01 deg resolution on all screens
    • Az and El can now be entered manually with decimals (before only integer values)


    2024-12-25 Version 1.00

    • Added socket remote communication protocol
    • New firmware downloads via HTTP now


    2024-07-27 Version 0.97

    • Added UDP responses to commands as well as "POLL" command.


    2023-12-25 Version 0.96

    • Added "stay in remote on LOS" setting. Stays in REM mode if a satellite/object has LOS. This allows URC to continue tracking a satellite/object once it again has AOS (will follow azimuth until rise). If stayInRemoteOnLOS is active, REM button will be pink when in remote mode, otherwise it is green


    2022-11-21 Version 0.93

    • Change in detection of overcurrent in AxisController.c


    2022-10-31 Version 0.91

    • First version


    Third-party open source software used in URC

    The URC uses a number of open source products in its firmware, details are here: