05 aprilie 2015

ICOM IC-703+ and Tokyo HyPower HL-45B

 

I am the happy owner of a Tokyo HyPower HL-45B HF+6m 50W amplifier and a happier owner of an ICOM IC-703. To be the happiest owner of both, I decided to make them work together as a single unit.

One must know that the HL-45 was made to be the perfect companion of FT-817 and, as consecquence, the HL-45B will change band filters when connected to the radio based on the voltage swing present on the ACC connector.

Also, the power needed to have around 45 W at the output of the amplifier is just 2.5W.

Therefore, we have to work around the amplifier; fortunately, there are trimpots and the procedure is well explained in the user manual.
Today we will deal with the band changing and not the ALC!

A little homework first...

How is the information about band changing passed away from the Yaesu FT-817 radio to the amplifier?
Well, with the help of the little ACC (accessory) connector on the back of the radio!
Looking on the Yaesu FT-817 Operating Manual (page 5), we will see that on the ACC the upper right pin holds the "band" semnification.
The information is analogue, by sending a voltage according to the following table:


Band   Specified  Measured
 
160m    0.33        0.336
80m     0.66        0.692
40m     1.0         1.03
30m     1.3         1.31
20m     1.6         1.65
17m     2.0         2.00
15m     2.3         2.34
12m     2.7         2.61
10m     3.0         2.95
6m       3.3         3.31

2m       3.7         3.64
70cm     4.0         3.93


I had have  two FT-817 and sold them without measure the band voltage so we have to rely on  data from  Bob Wolbert website
We can easy observe that the voltage is increasing with the frequency.
We don't need the 2m and 70 cm on our box so we keep in mind that the control voltage will be between 0 and 3.5V. This will be important later and will simplify the output of the interface box.

The ICOM IC-703+ outputs band information very similar with the FT-817 but only in principle because the voltage swing is opposite!
The voltage is decreasing with the frequency.



    Band         Output Voltage
                         (V)
  160 m            7.0-8.0
  80m              6.0-6.8
  40m              5.0-5.8
  20m              4.0-4.8
  17m +15m      3.0-3.8
  12m + 10m     2.0-2.8
  6m                 1.0-1.9

  30m               0 - 1.0

There is no similarity and nor symmetry between the two transceivers so we say "goodbye" to any analog solution.
I cannot think to anything but a micro controller solution for translating the IC-703+ band voltage to a FT-817 one.
So, I did some tests with a Arduino UNO first.
The first step was to make a voltmeter able to measure from 0 to 8V. Some precautions are to be taken into account because the ADC input accept only 0-5V and we have to measure above that.
Also, a good resolution have to be maintained to be able to measure tenth's ov Volt for a reliable operation.
The code is very simple and reliable.
I used the serial debugging to check it.

I will not enter into details as the code is below and is fully commented; instead, I will only insist on the important details.

First of all, the input and the output has to be very well protected to RF. On both, INPUT and OUTPUT, there will be small RF LC filters.
The power will be taken from the radio itself; on the pin 8 of the ACC from the IC-703+, there is a 12V/1A available.
The nicest thing is that the 12V is avilable only when the radio is powered from the ON/OFF push button!



I tought that will be nice to have the band information on a small 2x16 LCD display. It is not mandatory and can be missed in favor of a more compact case. I used a I2C one to save some extra pins on the Arduino board.
For the final design I choose an Arduino NANO board as is small enough and have USB input for further development of the interface.

For the output I was in dilemma for several days. A first tought was to rectify PWM on an output pin and to calibrate the parameters of the PWM to have the required voltage. On a second tought I reject this solution because PWM (even rectified and filtered) is not a good thing when working on HF.
After a few days, I remember the solution used in audio mixer; potentiometers on a common rail. Some particular measures has to be taken but the ideea was there!
So I put it on a paper; looks good!
I had to have a digital port for each band. Fortunately, for some bands, the voltage needed on the HL-45B is the same and we don;t have to free to much Arduino pinouts.
If you look at the ICOM band voltage and on the HL-45B band filters, you will see that they use the same logic. The 10m band and the 12 m band share the same filters, the same thing with 15 m band and the 17 m band and with the 20 m band and the 30 m band.

So we need only 7 pins...

Here is the schematic for the output "mixer".





I use diodes to keep the unused trimpots out of the circuit when not used and put Bourne multiturn trimpots for a good precision on the output voltage. Each output trimpot is a 10 Ko potentiometer and the diodes can be anything for small signals like 1N4148 or Germanium. I used some EFD diodes (germanium) as they are cheapt and ave them in my junk box...



On the input, I made a simple divider, also with a multiturn potentiometer. This is a 25Ko potentiometer but we need to protect somehow the ADC input. I did this with a resistor and a Zenner diode (5V3).

Note that in the picture is a little mistake! The input is taken from the pin#5 on the ICOM IC-703+ ACC and not the pin#8!

The "power supply" is made with a 78L05 precision regulator. This is important but not too much as affects also the ADC reference. A good decoupling is a key for a smooth and clean measurement and function.



About the PCB

I usually made my PCB's by hand using a water resistant ink.
First of all, I put all the components on a test board to have an ideea about the places where to put holes. Mark them and make all the holes. After that, trace the routes between them. Most of the schematic is in my head so i don't have a PCB print. Sorry for that but nothing is critical as there are no very high frequencies there!










OK. We made the hardware, uploaded the software into the Arduino. What next?
Well, there is some calibration envolved here.

First of all, turn to ground the cursor of the input  potentiometer on the interface board (25Ko).


Put a simple 25 Ko potentiometer on a 9V battery (calibration potentiometer). Connect the cursor to the INPUT of the board and "-" from the battery to the GROUND.
With a good voltmeter set the potentiometer to read  precisely 8V on the INPUT point. Leave it like that and check the voltage on the serial screen on the Arduino IDE.
You should read 8.00 V.
 If not, slightly turn the input potentiometer to the ADC until 8.00V is printed on the screen. The value will swing around 8V, it is normal. This is due to the ADC noise but there is no need to average that values.

The input is now calibrated and you must proceed to the OUTPUT CALIBRATION.
Put the voltmeter to the output.

1. 160 m band. Set the calibration potentiometer for 7.5V input and set P7 until you read 0.33V on output.
2. 80 m band. Set the calibration potentiometer for 6.5V input and set P6 until you read 0.66V on output.
3. 40 m band. Set the calibration potentiometer for 5.5V input and set P6 until you read 1V on output.
4. 20+30 m band. Set the calibration potentiometer for 4.5V input and set P6 until you read 1.4V on output.
5. 17+15m band. Set the calibration potentiometer for 3.5V input and set P6 until you read 2.15V on output.
6. 12+10 m band. Set the calibration potentiometer for 2.5V input and set P6 until you read 2.8V on output.
7. 6 m band. Set the calibration potentiometer for 1.5V input and set P6 until you read 3.3V on output.

8. 20+30 m band checkout. Set the calibration potentiometer  for 0.5V and check (don't set anything!) if  you read 1.4V on output.



Now your interface box is ready to use it! Make two nice cables to connect them to the radio and to the THP HL-45B and good luck on DX!

A word about the code...
At each else-if function, the software set the in-use pin AND no-use pin. This is a form of latch to have a continuous voltage at the output. I checked with a scope and everything is nice and smooth... This was my main worry about this setup!

For more details, leave a question at the Comments!
73 de Adrian, YO3HJV

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                        Radio interface box for automatic band //change
// of an Tokyo HyPower HL-45B amplifier
// when working with a ICOM IC-703+ transceiver
// Please check the link below for more details.
// By Adrian Florescu, YO3HJV, 2015
// This program is released in public domain a "Beerware" (if you //use it, you will buy me a beer when we'll meet)
// Is free to use it for ham and non-profit.
// If you consider to use it on a commercial application, please //come talk with me, we'll find a way...
//  http://yo3hjv.blogspot.com/2015/04/icom-ic-703-and-tokyo-hypower-hl-45b.html
// Oh, be aware, I am not responsible if you fry your precious IC-703+ but I might buy it for a decent price!
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


 // This are for I2C LCD
 // uncomment if it isn't needed

#include
#include
#include


#define I2C_ADDR    0x27
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

#define  LED_OFF  0
#define  LED_ON  1

LiquidCrystal_I2C    lcd(I2C_ADDR, En_pin, Rw_pin, Rs_pin, D4_pin, D5_pin, D6_pin, D7_pin);




 // Some variables to be used in the main loop
 //also, here we define the pinout of the Arduino board

  int m160m = 12;
  int  m80m = 11;
  int  m40m = 10;
  int  m30m20m = 9;
  int  m17m15m = 8;
  int  m12m10m = 7;
  int  m6m = 6;
 

    int potPin = 0;    // Analog input from the IC-703+
    int potValue = 0;  // value read from the pot
   
   
   
   
    
    void setup() {
      // We define the LCD type and start the LCD
     
      lcd.begin(16,2);
     
      //light the backlight LED
     
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE); 

  lcd.backlight();
 
 
      // initialize serial communications at 9600 bps:
      // this is only for debugging purpose. Uncomment if needed
     
      //Serial.begin(9600);
     
     
      // this is the pinout set
      // we will use them as a whole because we want to have the latched when
      // proper band is selected
     
      pinMode(m160m, OUTPUT);
      pinMode(m80m, OUTPUT);
      pinMode(m40m, OUTPUT);
      pinMode(m30m20m, OUTPUT);
      pinMode(m17m15m, OUTPUT);
      pinMode(m12m10m, OUTPUT);
      pinMode(m6m, OUTPUT);
     
    }
    
 
 
    void loop() {

//Some information to remember

// ICOM Band change voltage
//  Band MHz                 Voltage
//   30m                0  ~ 1.0V
//   6m (unofficial)       1.0 ~ 2.0V
//   10 & 12m               2.0 ~ 3.0V
//   17 & 15m               3.0 ~ 4.0V
//   20m               4.0 ~ 5.0V
//   40m                  5.0 ~ 6.0V
//   80m               6.0 ~ 7.0V
//   160m               7.0 ~ 8.0V

/* YAESU FT-817 band selection voltage
Band      Voltage

160m         0.33
80m          0.66
40m           1.0

  30m           1.3   paired
  20m           1.6   paired
 
    17m           2.0   paired
    15m           2.3   paired
   
       12m           2.7   paired
       10m           3.0   paired
      
6m            3.3

*/


 // read the input on analog pin 0:
 
  int sensorValue = analogRead(A0);
 
  // Convert the analog reading (which goes from 0 - 1023) to a voltage (0 - 8V):
 
  float voltage = sensorValue * (8 / 1023.0);   // "8" because 8V is the maximum voltage on the input voltage divider
                                                // on the A0 pin we will have maximum 5 V.

  // print out the value you read:
  // just for debugging. Uncomment if needed
 
  // Serial.println(voltage);
  // delay(1000);    // This is to have a smooth reading on serial



// if - else if functions for each band


  if (voltage < 0.8){
    lcd.setCursor(0,1);
    lcd.print("Band Sel: ");
      lcd.print ("20+30m");
    
      digitalWrite(m160m, LOW);   
      digitalWrite(m80m, LOW);
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, HIGH);    //
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);
                       }        


  else if (voltage > 1.1 && voltage < 1.9){
          lcd.setCursor(0,1);
          lcd.print("Band Sel: ");
          lcd.print ("    6m");
    
     
      digitalWrite(m160m, LOW);   
      digitalWrite(m80m, LOW);
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, HIGH);   //  
    
                                     }
                                    
  else if (voltage > 2.1 && voltage < 2.9){
          lcd.setCursor(0,1);
          lcd.print("Band Sel: ");
          lcd.print ("10+12m");
     
      digitalWrite(m160m, LOW);   
      digitalWrite(m80m, LOW);
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, HIGH);
      digitalWrite(m6m, LOW);   //
     
                                     }
                                    
  else if (voltage > 3.1 && voltage < 3.9){
          lcd.setCursor(0,1);
          lcd.print("Band Sel: ");
          lcd.print("15+17m");
     
      digitalWrite(m160m, LOW);   
      digitalWrite(m80m, LOW);
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, HIGH);  //
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);       
    
                                      }
                                     
  else if (voltage > 4.1 && voltage < 4.9){
         lcd.setCursor(0,1);
         lcd.print("Band Sel: ");
         lcd.print("20+30m");
                 
      digitalWrite(m160m, LOW); 
      digitalWrite(m80m, LOW); 
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, HIGH);   //
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);     
                                      }
                                     
  else if (voltage > 5.1 && voltage < 5.9){
         lcd.setCursor(0,1);
         lcd.print("Band Sel: ");
         lcd.print("   40m");
     
      digitalWrite(m160m, LOW); 
      digitalWrite(m80m, LOW); 
      digitalWrite(m40m, HIGH);   //
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);       
                                     }
                                    
  else if (voltage > 6.1 && voltage < 6.9){
          lcd.setCursor(0,1);
          lcd.print("Band Sel: ");
          lcd.print("   80m");
      
      digitalWrite(m160m, LOW);
      digitalWrite(m80m, HIGH);   //
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);        
    
                                     }
                                    
  else if (voltage > 7.1){
          lcd.setCursor(0,1);
          lcd.print("Band Sel: ");
          lcd.print("  160m");
     
      digitalWrite(m160m, HIGH);  //
      digitalWrite(m80m, LOW);  
      digitalWrite(m40m, LOW);
      digitalWrite(m30m20m, LOW);
      digitalWrite(m17m15m, LOW);
      digitalWrite(m12m10m, LOW);
      digitalWrite(m6m, LOW);
    
                                     }
 
 
 
  // We write on the LCD the transceiver type
 
  lcd.setCursor(0,0);
  lcd.print("IC-703+");
 
  // We display the voltage read.
  // For debugging purposes. Uncomment if needed

 /*
  lcd.setCursor(7,0);
  lcd.print("rem:");
  lcd.print(voltage);
  lcd.print("V");
   
  delay(250);
  lcd.clear();
      
 */
     
   delay(300);   // This is to have a smooth operation
     
    }
    







Un comentariu:

Dan Baciu spunea...

Super , mai exista si hams care construiesc ;)
Dan YO3GH

Most viewed posts in last 30 days