Electronics > RF, Microwave, Ham Radio

Converting FM320 CB radio to 80 channel

(1/2) > >>

hpssb:
Totally uneconomic job today - converting an old (mid 70's era) UHF CB radio from the the 1980's 40 channel system to the current 80 channel allocation.   The radio's owner boss had given us a lot of "real" work over the last couple of years and when we mentioned we owed him a big favor, instead of the usual alcohol / chocolate / shopping vouchers he asked "Can you convert an old 40 channel radio to 80 channels" so we said "sure, but it'll be a strictly spare time job".  He then gives us the radio (actually three identical radios, two like new and other well used but functional), and says that as far as he knows such a conversion has never been done before.  Challenge accepted, worst case would be we'd say it's impossible and give him the usual Jack Daniels and a box of Roses.

Radio was a Phillips FM320, designed in the mid 70's but our examples were dated somewhere near 1982.

Three radios were supplied - the well used one was used for development / testing, the other two were done afterwards.  The owner only wanted the two in nice condition returned.

These are Australian made and were the first synthesized UHF radio for mass consumer usage.  There was also an amateur radio version made (FM321) which was pretty much the same except for the frequency range covered.   The radios used two PLLs - one analog using discrete digital logic (no microcontrollers or programmable devices), somewhat archaic by today's standards but this would have been state of the art when it was designed - all other UHF commercial and amateur service radios back then used a pair of crystals per channel, not really practical / economic for a 40 channel design.

The radio uses discrete CMOS logic, which is limited to 5 or 10 MHz, nowhere near the 476 MHz required. A "HF loop" is used to generate a signal from 4 to 5 MHz in 25 KHz steps  (i.e. 1MHz coverage, 25KHz x 40 channels = 1 MHz).   

A pair of crystals - one for receive and one for transmit - is also used, with several multiplier stages, to create a signal near 471 MHz, which is then fed into one side of a mixer.   The other input to the mixer comes from the UHF local oscillator, and the difference signal (4 to 5 MHz) is filtered out and in turn fed to one of the inputs of the analog PLL.   The other input of the analog PLL comes from the HF loop.

The analog PLL then creates an error signal which is used to control the frequency of the UHF oscillator, and therefore the operating frequency of the radio.  By setting the HF synthesizer to a frequency of 4.025 to 5.000 MHz, the operating frequency can be set to any of the then 40 channel allocations that ranged from 476.425 (channel 1) to 477.400 (channel 40).   In other words, the radio operates exactly 472.400 MHz above whatever frequency the HF loop is set to.

A decade after it was made, repeaters were allowed on CB frequencies, which dramatically increased the operating range, especially when operating from a vehicle.  This required a 750KHz transmit offset (i.e. 30 channels) to access them and operated from channels 1 to 8 Rx, so therefore 31 to 38 Tx. New radios included this as standard, and the manufacturers also sold a "repeater kit" that could be retrofitted to existing sets.

A decade later again, the ACMA increased the channel allocation to 80, but to conserve the bandwidth needed, they didn't just add another 1 MHz going up.  Instead, they offset by half a channel and started at the bottom again, so 41 is half way between 1 and 2, 42 is is half way between 2 and 3, and so on.  By doing this, they doubled the number of channels for only an additional 12.5KHz of band allocation (as 80 is half a channel above 40).

In addition, they designated channels 22 and 23 as data only for applications such as signalling and telemetry, and prohibited normal voice transmission on them.  Channels 61, 62, and 63 are also locked out for transmission as using these could interfere with 25KHz wide digital signals of devices operating on channels 22 and 23.

Also, the number of channels allowed for repeaters was doubled, with channels 41 to 48 Rx (and therefore71 to 78 Tx) added.

Step 1 - Get radio working correctly as a stock unit

Any noisy switches / pots were cleaned, and any bad components replaced, mostly electrolytic capacitors as these are in the 40 to 50 year old range.  Any repeater offset addons were removed, which meant "uncutting" two cut tracks (only 1 cut trace in later rev boards).   Check radio operates as a normal 40 channel (ignore "NOM"/"RPT" switch positions for now) was done, and a basic alignment done.  Radio now operates correctly as a standard 40 channel unit.

Step 2 - Get the radio to operate on all of the 80 allocation channels

Did this first, as if this couldn't be done it would be pointless doing any display or control changes.

This turned out to be the easiest step, disabling the HF loop and replacing it with an AD9833 DDS synthesizer module that can be had from eBay or Ali Express for under $10. These need only 3 control wires plus 5V and ground to generate any frequency from 10Khz to 10 MHz in 1 Hz steps.


Components in red were removed and the output of the AD9833 module fed ino the analog PLL "Phase Det.".


Resistor linking the "HF VCO" to the "Phase Det." removed


Temporary switch fitted to switch between the original HF loop and DDS control. DDS temporarily set to 5 MHz using a dev unit.  Both work, so original HF VCO components removed to permanantly disable it.


To make room on top for the module, 3 x 22nF caps and two resistors (1K and 1K8) were removed and replaced with 0805 surface mount types on the bottom side of the radio PCB.



AD9833 module stuck to top of analog PLL "Phase Det." (IC2) with double sided tape.  Output connects as below:
 - Remove R63 (15K)
 - Wire AGND to pin 14 IC2
 - Wire OUT to C51 side of removed R63 (C51 is coupling cap to pin 1 of IC2)
 - Wire VCC, DGND, SDATA, SCLK, and FSYNC back to uC or dev unit
 - Program AD9833 for 0.7V sine output / 5.000 MHz
 - Check radio operates at 477.400 MHz on all channels

Disable HF PLL/LD/VCO/Reference
 - Remove IC3 (MC1469B) and IC4 (MC1468B)
 - Pin 12 is LD, no need to link as open=locked, grounded=unlocked)
 - Remove Q15 (BF494)
 - Link pins 1 and 2 of IC1
 - Remove XL3 (2.500 MHz)
 - Link pins 1 and 2 of IC6
 - Link pins 5 and 6 of IC6

Reconfirm radio operates correctly on 477.400 MHz.

Edit 16/06/2024 07:49 - fixed minor spelling / typos

hpssb:
Step 3 - PCB changes and connect new hardware

Cut trace to isolate pin 6 of IC601 (IC1 on front panel PCB silk)
Connect 20cm long thin wire to pin 6, temporarily connect other end to pin 16 of same IC (13v switched).
Remove R250 and R618 to isolate "11" and "NOM/RPT" functions from the front panel RESET switch.
[R250 = 4k7 on main PCB next to right side of the S/RF meter]
[R618 = front panel resistor silkscreened "R18" next to volume control potentiometer]

Turn radio on, should start at "91" and 81-99 should be selectable.
[Positions above "99" will not display correctly, this is normal as the BCD codes are now undefined]
The "11" and "NOM/RPT" positions of the reset switch should have no effect.

Cut trace to isolate top end of R616 (R16 on front panel PCB silk).
Connect 20cm long thin wire to top pin, temporarily connect other end to "11" contact of RESET switch.
[Route the wire through one of the holes of the previously removed crystal]

Verify that when "11" is pushed to that the amber LED turns on.
[Double check the trace cut is complete, if it is still connected the microcontroller will be destroyed!]
[The amber LED is an inefficient 50 year old component, if it's too dim replace it with a modern one]

Confirm continuity of BCD lines:
[Legend: U=Units, T=Tens, A/B/C/D = BCD weighting 1/2/4/8]
UA Pin  6 IC10 > pin 7 IC600 (IC2 on front panel PCB silk)
UB Pin 11 IC10 > pin 1 IC600 (IC2 on front panel PCB silk)
UC Pin 14 IC10 > pin 2 IC600 (IC2 on front panel PCB silk)
UD Pin  2 IC10 > pin 6 IC600 (IC2 on front panel PCB silk)
TA Pin  6 IC11 > pin 7 IC601 (IC1 on front panel PCB silk)
TB Pin 11 IC11 > pin 1 IC601 (IC1 on front panel PCB silk)
TC Pin 13 IC5  > pin 2 IC601 (IC1 on front panel PCB silk)
TD Add wire to pin 6 / IC601 (IC1 on front panel PCB silk)

The front panel cover / knobs can now be replaced.
[Note: retain the spacers under the screws if a repeater board was removed]

Remove IC5 (MC14078B), IC10 (MC14510B), and IC11 (MC14516B)


Removed components


Cut trace to resistor that feeds the amber LED


Orange wire to resistor side of trace cut, green wire to +6V when Rx is active (green LED on).
Wires are passed through holes from the removed crystal to the other side of the radio PCB.


Trace cut to MSB pin of tens LED driver IC
 

White wire connected to MSB input pin of tens LED driver IC

hpssb:
Connect 7 wires from 8 way loom to IC5 (colors shown from Farnell AWG26x8 cable)
UA Pin 9 
UB Pin 10
UC Pin 11
UD Pin 12
TA Pin 2 
TB Pin 3 
TC Pin 13
TD Join to wire from pin 6 / IC601 (IC1 on front panel PCB silk)

Connect 3 control wires from IC10 holes: Pin 5 (10v Tx), pin 15 (Channel change clock) and pin 10 (Up/Down).
Connect 3 control wires from front panel: 6V Rx on, 11/Mon, and Nom/RPT
- 6V Rx on is obtained from R621 (not the LED side!)
- 11/Mon and Nom/RPT are obtained directly from the front panel switch

Cut trace to 12V end of R601 (Amber LED current limiting resistor).
Connect a wire to the now isolated end of R601.


Display and control wires connected to pin holes of removed ICs


Blue and white wires connected to pins of RESET switch for Duplex and Input monitor functions


High voltage I/O expander layout and wiring

This is an MCP23017 used with a pair of ULN2003A darlington driver / inverters, one on each side.

The wires on the left are inputs from the radio, these are isolated and then fed to port B of the MCP23017.

The wires on the right are outputs to the radio display drivers, isolated from port A of the MCP23017 by the second ULN2003A.   Because the ULN2003A is only a 7 bit device and 8 bits are required for two-digit BCD, Q1 (2N7000) is used to invert / isolate the highest bit.  Used a FET instead of a transistor here as it saved thew need for a current limiting resistor on the base.

The interrupt line for port B is fed back to the microcontroller, this changes state whenever an input on port B changes.  The controller then only needs to check this pin, and then read the port over I2C when it changes.  This eliminates the need to continually interrogate the serial bus.   Port A is only used as an output, so interrupt A is not required.

Because the ULN2003A can only sink its output pins, the internal pullup resistors on the port expander are enabled.  On the output, a 10K x 8 SIPP is used to pull up the 8 lines fed to the display drivers. The bits are inverted in software and fed as BCD data to the tens and units display ICs on the front panel.

Wiring details:

Input (top left) from wires connected in step 6:
K Channel change clock
U Up/Down
M 11/Mon
N Nom/RPT
T 10v Tx
S Scan switch (not used in this installation / firmware)
R 6V Rx on
G PCB ground

Output (top right) to channel LED display drivers via wires connected to IC5/IC601:
D TD
C TC
B TB
A TA
d UD
c UC
b UB
a UA
H +10V constant (obtainable from collector of Q64 / BD136 transistor on main PCB)

Control (bottom left):
1/5V 5V from Arduino board
2/GD PCB ground from Arduino board
3/GD Not used
4/SK I2C SCK from Arduino board
5/IA Not used
6/SD I2C SDA from Arduino board
7/IB Interrupt B from Arduino board
8/RS Not used

Address links (bottom right):
Fit links A2, A1, and A0

Fit and program Arduino board:
DDS:
VCC, DGND, SDATA, SCLK, and FSYNC from step 3
VCC > +5V out
DGND > GND
SDATA > PB.1 (Nano D9 / Mini 9)
SCLK > PB.0 (Nano D8 / Mini 8
FSYNC > PB.2 (Nano D10 / Mini 10)

I/O expander:
5V 5V from Arduino board
GD PCB ground from Arduino board
SK I2C SCK > PC.5 (Nano A5 / Mini A5)
SD I2C SDA > PC.4 (Nano A4 / Mini A4)           
IB Interrupt B > PC.3 (Nano A3 / Mini A3)

Other:
+10V from collector of Q64 (Nano VIN / Mini RAW)
GND from radio PCB common ground
Amber LED resistor isolated end connects to PD.2 (Nano D2 / Mini 2)

hpssb:

I/O expander board fitted and wired up


Arduino mini board board fitted and wired up.  Reset switch removed so it won't get triggered by the heatshrin.

At this stage it was sent to our software developer after asking users how they wanted the radio to behave.

Results were:

YES - Blank the leading zero on channels 1 to 9
NO - channel scanning
NO - instant recall of channel 11
Amber LED: Light up when duplex mode is turned on and radio is on a valid duplex channel

"11" position on the reset switch is used to check repeater input monitoring to see if the person you are talking to is close enough for you to move to a simplex channel and leave the repeater free for
other users.

These can be changed in software later if the owners change their mind.

They then sent version 1.00 which had a startup issue, and corrected this with 1.01 OK, but then had to leave it for a week to go away for work.  Software test would have to wait until we got back.

Step 4 - Program firmware and test operation

Turn radio on, Upload hex file (HVL320_M168P.hex) to microcontroller (we used USBAsp and AVRDude)


Programmed, heat-shrunk, and secured with cable ties



Installation completed

Turn radio off, disconnect programmer, turn radio on, radio will start on channel 80.

Change to another channel and check it recalls the last channel used when turned off and back on again.

Check radio transmits and receives, DDS should be close to 5.000 MHz on channel 40. If off frequency, adjust Tx and Rx netting as shown on service manual to offset any small error.

Radio changes from original functionality:

Radio now goes from 1 to 80

Duplex operation only operates from channels 1 to 8 and 41 to 48.
The amber LED illuminates to indicate that the radio is on a channel where duplex operation is permitted.

Reset switch in centre = regular simplex channels from 1 to 80
Reset switch down = duplex operation on channels where duplex operation is permitted
Reset switch up = repeater input monitoring on channels where duplex operation is permitted

Channels 22, 23, 61, 62, and 63 are receive only as they are designated telemetry and reserved by ACMA regulations, i.e. regular voice transmissions are not permitted on those channels.

They can be enabled if required, but to be legal only do this if you are using those channels for non-voice applications.  Check the ACMA regulations to see if your intended used is permitted.

To enable transmission on those channels:
 - set the radio to channel 29 and turn it off
 - Hold in the PTT (push to transmit switch on the microphone) and turn radio on
 - Release the PTT
 - turn radio off and back on again
 - check that transmission works on channels 22, 23, 61, 62, and 63

To disable transmission on those channels:
 - set the radio to channel 28 and turn it off
 - Hold in the PTT (push to transmit switch on the microphone) and turn radio on
 - Release the PTT
 - turn radio off and back on again
 - check that transmission is disabled on channels 22, 23, 61, 62, and 63

If attempting to transmit on a receive-only channel when they are disabled, a brief transmission will occur before the radio shuts it down to a very low level (milliwatts).  This is a limitation of the 50 year old design of the radio, so at very short range (10 metres or so) transmissions on those channels may be received by another radio set to the same channel.

Lid was then put on and a short video made to send to and get the OK from the radio's owner.



Two more FM320's - in much better physical condition than this one - were then done and shipped back.

I'll keep this one for a month or so the owner can play with them for a while and make sure no bugs or glitches show up, then it's off to eBay for this one.   Not much on UHF CB here in Adelaide these days apart from junkies on channel 3 talking about "peedarfiles", using four letter words that start in F S P and C, and making beeping, burping and flatulence noises...

ftg:
Now that's a proper conversion.
I was expecting some extra logic hips in the HF PLL loop to add in 12.5kHz steps and then multiplying the divider value by 2.
But this is much cleaner, more precise and easily makes the displayed channel numbers correct.

Navigation

[0] Message Index

[#] Next page

There was an error while thanking
Thanking...
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod