Interests and experiences
I designed my 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 got a lot of requests from people asking if I would make the URC controller 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 not optimized for that.
I have now decided to make a "revision B" of the URC. This version has been optimized, easier to assemble, all connectors are on the PCB board etc. The actual design (electronics and software) 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.
The URC has from the start, been designed with substantial processing power. The processor is a Cortex M7 (i.MXRT1064 from NXP) running at 600 MHz. On the board is 32 MByte SDRAM, 512 Byte FRAM (for storage of current incremental encoder positions), 128 MByte NAND Flash (disk system), a USB service port interface, SMPS for 3.3V and 12V (for encoders, CAN/RS485/RS23 devices etc), 10/100 MBit Ethernet, RS232 port (for connection to PC ,tracking programs), 2 x incremental encoder interfaces, RS485 port (for connection to f.ex absolute encoders etc), CAN Bus interface and a 4.3 inch capacitive touch TFT display (480 x 272 pixels).
The motor drivers can deliver close to 13 amp (the actual devices used on the board are rated to 50 Amp). They will deliver 24 VDC to the Az/El motors (PWM controlled individually for speed ramping etc).
The URC controller contains a webserver and a VNC server (for remote control), more info/video below.
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.
PLEASE NOTICE that the following pictures and descriptions will change over the coming weeks as small tweaks and additions are being made to the URC!
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:
There is a number of parameters that can be configured on the URC. Below are screenshots of the various screens. The values shown are those that I use on my 4.8m EME dish, this is controlled by a SVH7 slewdrive from Coresun.
You can remote control the URC via a normal VNC client
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 have the capability to modify all controller settings and manage setting configurations by uploading and saving files directly through the web interface.
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!
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:
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/