Main page
The main web page of the URC allows you to control the operating mode, execute "goto" commands, monitor motor current etc.
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.
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:
A number of parameters can be configured on the URC. Below are screenshots of the various screens, all parameters ,with a few exceptions, can also be set from the web interface (see above).
The values shown are those that I use on my 4.8m EME dish. The dish is controlled by a SVH7 slewdrive from Coresun.
At the top of the screen, you can select the different windows. Swiping left and and right lets you also scroll thru the different windows. Some of the windows are higher than the screen, on these you can pan up and down with your finger (navigation is similar to how you navigate a normal smartphone).
At the bottom of the screen a status line is shown. This will show the current mode the URC is in (stopped, tracking remote, tracking sun/moon etc. The current azimuth and elevation is shown as well as the last commanded destination. Local date/time is also shown.
The statusline will also show special modes, in the example below is shown that the sun is being tracked (the sun sets in 11 hours and 13 minutes) and the system is running in "Simulation" mode (enabled via the "System" window).
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".
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).
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).
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!
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.
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!
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:
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:
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):
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.
THIS SECTION WILL BE UPDATED SOON
The URC supports a number of absolute encoders, including:
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.
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!
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")
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.
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.
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.
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.
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
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:
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.
{
"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:
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)
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:
2026-09-11 Version 1.11
2026-09-01 Version 1.10
Added support for remote support (via system tab, ONLY when instructed by OZ9AAR !!)
Acceleration/Deacc. distance in degrees are now separate for azimuth/elevation
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.
Baud rate for modbus can be set in "Settings" window.
2025-07-05 Version 1.06
2025-06-13 Version 1.05
2025-04-10 Version 1.04
2025-02-26 Version 1.03
2024-12-25 Version 1.00
2024-07-27 Version 0.97
2023-12-25 Version 0.96
2022-11-21 Version 0.93
2022-10-31 Version 0.91
The URC uses a number of open source products in its firmware, details are here:
Projects and information on this website is licensed under Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).
To view a copy of this license, visit https://creativecommons.org/licenses/by-nc/4.0/