QN8066 FM transmitter 4W QN8066 RDS FM transmitter 4W
Arduino controlled FM Radio Station


I have been working on this project for two years now, and finally I have something to present.
You may ask, why construct one more FM transmitter when you can buy one?
I want high quality and superior performace. I also want to be able to develop my own software for the unit.
The hardware performance of this project is outstanding and the software library is amazing, that is hard to find!

This is an educational project and you have to follow your local regulations when it comes to transmitting regulation and power levels.

Features:
  • 8-16V DC Power supply (12V typical)
  • Output RF Power of 0 - 4000mW
  • 88 - 108 MHz range
  • Factory trimmed transmitting frequency
  • 62dB Stereo SNR, 0.04% THD
  • RDS/RBDS Transmit
  • 600mA Current consumption at 12V
  • Onboard Arduino Nano
  • Display OLED 128x32px I2C
  • Thumbwheel Pushbuttons
  • Temp sensor
  • I2C interface (The Only interface)
  • Heatsink to keep stable working temperature
  • Fan to keep PCB cool

  • This project comes in a pre-made KIT, see more details at bottom

  • All contribution to this page are most welcome!

    Background
    This project explain how I built a quality FM transmitter using circuit QN8066.
    I will give you all details and clues how to run the circuit
    (You can of course skip all details below how it works and just start using the transmitter.)

    I wish to have the best performance when it comes to Audio and RF signals.
    I also want a simple user interface and a reliable construction.
    So, before I chose parts for this project, I made lot of investigation and research.

    Why did I set the output power to 4W?.
    Well, I want a transmitter which can be used both as a stand-alone-unit or as pre-driver for another high power amplifier.

    How far will 4W transmit?
    In my filed tests I reached a transmitting radie of 5-10 km with perfect audio. This is far enough for most users.
    If you want to reach longer distance, this transmitter will work perfect as driver for a high power amplifier.

    At the bottom, you will also find simple arduino software examples how to run and control QN8066 in simple way.

    Hardware and schematic
    QN8066
    The hart of this project is a circuit QN8066. It is as high performance, low power, fully integrated single-chip stereo FM transceiver.
    I have looked into many equal circuit as KT0803, BH1415F, BH1414K, QN8027, and many more.
    I finally choose QN8066, since it is easy to find and and simple to solder. It is rated 9 out of 10! (Click the picture at right, to see all circuits)
    This circuit can also handle RDS signal (Supports US and European data service).

    Click here to view a larger schematic Another reason why I choose QN8066 is because there is a great software library made by Ricardo Lima Caratti.
    He has made a phantastic work and I strongly recommend you to visit his GitHub. (Thank you Ricardo for supporting and helping me during my hadware work)
    Here is the link to his work and library fo QN8066: GitHub for QN8066 made my Ricardo

    Now, let's look at the schematic below and see how this circuit works.
    The circuit runs on +3.3V. I use some EMI filter and capacitor to clean the main power. The communication to and from the circuit is based on I2C (SCL, SDA).
    We must take into consideration that the I2C also must work with +3.3V. I have added I2C level shifter so I can communicate using +5V from arduino. More about that later.

    To the left you will find the audio input to the circuit. Here is a standard 3.5mm audio phone connector.
    At the right you find the RF output signal. You need to add an inductor here to ground, else it will not work.
    The QN8066 has a register called PAC which control the output rf power level. The level can be set from 24 to 56 according to datasheet.

    I have tested this PAC register very much and found out different values for some reason.
    I measured the output power to be -4.5dBm as strongest. I tested to step down all the way to value 13 and I could measure -29dBm.
    Below the schematic I show a graph of PAC value and the output power from the QN8066.
    According to datasheet the rf level should be 119 dBuV into matched antenna. This is equal to +12dBm. I never got that high power. What does a "matched antenna" looks like?

    There is no info in datasheet about output impedance of QN8066 or how to match output to 50 ohm. How can Quintic miss this vital information.
    For me it does not matter since -4.5dBm in 50 ohm, is enough power to drive my pre-amplifier.

    At the bottom you will find a signal called Fref going into pin 14 XCLK. This is the reference oscillator. This is the main oscillator which QN8066 use to create output RF signal
    and pilot tone for stereo encoding. The QN8066 contain a complex DSP (Digital Signal Processor) which will create all nessesay signal to form a FM stereo transmitter.
    According to datasheet you can feed the QN8066 with different reference signals when it comes to frequency and shape.

    However, in my experiments I found limitations even here. Actually I had lot of difficulties to get it working in a simple way. I will explain more in next section below.
    For now, we can say, that the accuracy of the reference frequency is important since it will affect everything in the QN8066 circuit and the output RF signal.



    PAC value and output rf power
    Picture below show the value of the PAC register and the measured output RF signal strength.


    Spectrum Analysis of the output
    Let's have a look at the output spectrum of the QN8066 chip.
    Here is a sweep from 50 MHz to 400 MHz from the output of the QN8066 circuit,
    I have set the carrier to 100MHz.
    At 100 MHz you will see the main carrier. We can see that the main carrier is about -4.5dBm in strength and we can also see the second and third overtone.
    Ther overtones will be attenuated by the output LC filter, more about that a bit below in the text. (Click the picture to see more details)
    The only downside with all these FM circuits is the "hump" you see around the carrier. QN8066 is one of the better circuits although.


    32.768kHz Reference Oscillator
    QN8066 has no internal reference oscillator. You have to add an external oscillator. The downside with 32.768 kHz external oscillators is that few of them can be tuned.
    According to datasheet, you can add sinewave signal or squarewave signal. In reality I could only get the sinewave signal working, if the frequency was 32.768kHz.

    If you add squarewave signal you can use multiple of 32.768kHz and use the internal divider register of QN8066. Again I have tested this and found that it only works with some multiple, and not all of them.
    I spend lot of time to develope a proper oscillator from a 32.768kHz crystal. Different type of transistors has different Hfe gain and working point. I finally found a pair of transistors that gave good results.
    The final transistor works as an emitter follower as driver. The oscillator is driven by a filtered +3.3V and the output is at the emitter of the final transistor.

    It looks simple now when I know all the component values, but it was a struggle to get there. I spent 2 month of work just to get it running properly.
    You can see the schematic and the PCB below. I keep all traces as short as possible and the oscillator is isolated at one small place on the PCB to avoid any interference from other parts and signals.
    Picture below will aso show you the output signal and levels from the oscilloscope picture. The amplitude is 2.5V

    The accuracy of the reference oscillator will set the accuracy of the transmitting frequency and also the stereo encoding.
    I added a variable capacitor to finetune the oscillator for absolutely the best performance. You can fine tune it +/- 6 ppm.
    This oscillator is very temperature stable and only vary about 3ppm from 20 to 40 degree Celcius. All KIT are calibrated before leaving shop.

    I connect a high impedance frequency counter to the Output Fref which can be found on the PCB in a small hole.
    It is very easy to tune the unit for absolute frequency perfection. I use high impedance probe so the probe will not add capacitance to the oscillator

    The oscillator takes a few seconds to startup during power ON. You can see it in the picture below. This is due to the 32.768kHz crystal oscillator need some time to swing in for full output amplitude.
    See picture below. You can see that it takes about a second to get proper amplitude.

    Schematic:


    Oscillator output shape:


    Start up:


    I2C Level shifter
    Arduino work with +5V levels, but the QN8066 works with +3.3V, so we have to convert signal, else the communication will missmatch in levels.
    This is done with a circuit called 2N7002 which has two internal FET. This simple circuit will convert levels to correct voltages.



    Amplifier
    Click the picture at right to download the full schematic so you can follow my explanations.
    The rf signal from QN8066 enter an attenuator of 7.75 dB. this will help getting good match for the MMIC SGA6589 and we do not want to feed the MMIC with too high signal.
    The following L and C will give good input matching for the MMIC. The MMIC will amplify the rf signal with 20-25 dB, so at the output you will have about +15dBm.
    The MMIC is feed with 64mA from a LDO MIC5205. This current will give the MMIC a good working point.
    At the output is a small attenuator of 0.87dB and a matching filter for correct input impedance for the final booster transistor.

    The final driving transistor is powered from a step-down converter MP1495. This DC/DC converter step down the input power to a stable 7.2V.
    Input power can be anything from 8.0V to 15V. The unit is designed to work with 12V because it is commonly used.

    The power to the final transistor can be switched ON/OFF by a control signal from the Arduino. See "Enable" at pin D6 of the Arduino.
    The reason I have done this is because I want to control when the transmitter should be ON/OFF by software.
    This gives better control during startup and the power to the final transistor will be swithed on in a controlled way (ramp up).

    The transistor has a DC level of 2.9V at the base. This voltage will draw a collector current of 350 mA as working point.

    The output of the transistor has an impedance mathing LC filter to drive a load of 50 ohm.
    You will also see a 5-pole lowpass LC filter just befor the output SMA RF connector. This filter will attenuate overtones from the transmitter.
    The filter will attenuate the working frequency 88-108 MHz with only 0.2dB as max, but higher frequencies will be attenuated with tenth of dB.
    Below I will show some measurements and explain.

    Output PI filter
    Return Loss S11
    The picture below shows how good the output PI filter is matched to 50 ohm.
    It show how much power beeing reflected by the filter back into the final transistor (S11) when a 50 ohm antenna is connected.
    the lower the reflection is, the better match to 50 ohm.

    For example when reflection is -10dB, it means that 10% of the output power is reflected back and SWR is almost 2.0 which is not good.
    At -20dB reflection only 1% of the output power is reflected back and SWR is almost 1.22 which is good.
    This filter is at -30dB which is 0.1% of the output power is reflected back. This is VERY good, SWR is 1.05.
    Click here to view a larger schematic

    Attenuation narrow frequency
    Let's have a look how much this filter attenuate the outgoing rf signal.
    The picture below show the attenuation in dB (S12) vs frequency. As you can see, the filter only attenuate max 0.2dB (at 108 MHz) which is great!
    This means that the filter works perfect and do not steel much energy from the transmitter.
    Click here to view a larger schematic

    Attenuation wide frequency
    The picture below will show the attenuation in a wider frequency range, up to 300 MHz. As you can see, the filter attenuate higher frequencies (overtones) very efficient.
    At 300 MHz the filter attenuate 37dB. All together we have a very good working outout filter.
    Click here to view a larger schematic

    Picture below shows the output (50-400 MHz) spectrum from transmitter at high RF power.
    Click here to view a larger schematic

    Output Power
    The unit is trimmed at 100 MHz. The output power is 4W (36 dBm) and with a flat bandwidth of a 10 MHz. (95-105 MHz)
    This transmitter is not designed as a wide band transmitter. It means that the output power at the end points, 88 MHz and 108 MHz will be a bit less.

    Another aspect we must consider is the antenna respons. Take a look at a typical antenna dipole antenna
    You can see that the impedance is not the same from 88 to 108 MHz. It is very difficult to build a wideband antenna with perfect impedance match over a wide band.
    So, even if you have a wideband transmitter, the real output power will be less due to the antenna nature.

    A much better approach is to decide where on the band 88-108 you want to transmit at, and make the antenna and the transmitter working perfect for that spot.
    If you need to be at the low end (88 MHz) or the upper end (108 MHz) of the band, you can tune the transmitter for absolut max power and perfect match for that frequency area.
    It is very easy to do, since there is a small variable capacitor close to the output rf connector (see the picture below). You can simply tune it for max output performance.



    Arduino Nano
    To control the QN8066 circuit and the hardware, I have choosen to add an Arduino Nano to this PCB. The reason why I choose Nano is because it is simple to use and learn.
    It has also small size. The Arduino Nano has an USB connection, so it is very easy to re-program the module. My Kit comes with a pre-programmed Arduino.
    The PCB has female connector strip for the Arduino Nano, so it is easy to remove the module.
    The PCB also have exta soldering pads to all pins to make it easy to connect wires to and from the Arduino Nano. (See picture at right)
    All you need to do is to connect power to the input power line and the unit will start running.

    This software remenber the setting in EEPROM. If you need to reset the unit, you can make a factory reset by pusing the button for 5 seconds during power up.
    The transmitter will be set to default values for frequency, power and volume.

    You can of course develop your own software and use other type of displays, still using this PCB as main board of your project.

    Arduino Nano outline: (Click here or on the picture to see it in larger scale)


    Display
    To make the transmitter more useful, I have added a LCD display (0.91 Inch OLED 128X32) and a wheel buttons to be able to add scrolling menus.
    The display run on +5V and use I2C as communication. This display is very easy to handle and there are many Arduino libraries to control this display.
    I want to make it simple and still useful. It is all up to the complexity of the software in the arduino.
    In the software section below you can download example and see how to print text to the OLED
    (I have choosen to use white OLED, but I can of course custom make other colors.)


    Temperature Sensor
    This transmitter has a temperature sensor to measure the PCB temperature.
    A TMP36 sensor will sense the teperature and produce a voltage which the Arduino can measure at pin A0 and present to the display.
    In the software section below I describe more details how to measure and calculate temperature.

    I have run the Amplifier continuously with full output power and the PCB become +40 Celsius in open air-space, This low temperature is no problem for the unit.
    The final amplifier can be turned on and off by arduino pin D6. When D6 goes low, the main power +7.2V will be enabled to the final transistor and also turn on the small fan.

    The fan is just an extra precaution and it blow air over the final stage of the transmitter.
    At the backside of the PCB is a heatsink 40x40x11 mm to keep the temperature low and stable.

    Ther picture below show the temperatur of the unit and you can clearly see how the dummy load resistor to the right becomes very hot due to the RF output power.
    The 50 ohm dummy load is connected to the rf output off the PCB for simulating an antenna during my test.
    Never run the unit without a proper antenna or dummy load!



    Input Audio
    The transmitter use a standard 3.5mm headphone jack as input. You can connected a standard 3.5mm audio cable to the input and connect it to your audio source as computer or mobile phone.


    Antenna
    Do NOT turn on the output power amplifier without a proper antenna or dummy load connected to the SMA output. You may burn the final transistor!
    Here is a link how to build an antenna wich will work very good. http://www.rfcandy.biz/communication/dipolantenna.html

    If you run the transmitter on lower power (up to power level 30 on the display), you can use a simple 60cm wire as antenna, it will work. (You will reach several houndred meters)
    For higher power, I advice you to build a proper antenna.


    Software
    The unit will come with pre-programmed arduino code. The pre-loaded software will handle frequency step, power, temperature reading, audio gain and audio bar display.
    If you want to develop your own software you can download the QN8066 library and experiment yourself.

    Example FM1_1.zip below is a basic software to control the frequency and the output rf power, no display or buttons will be used.
    This simple example will show you how easy it is to develop your own software for this FM transmitter.
    The transmitter will transmit at 100.4 MHz with medium power, No text included.

    Example FM_2.zip below is a basic software to print text to the display.
    The transmitter will transmit at 100.4 MHz with medium power and text to display.

    Both examples have comments to explain the code.

    Remember two things:
    D6 of the arduino control the power supply to the final RF amplifier. You can turn it on by setting this output Low and turn it off by setting it High.
    During transmission the D6 should be set Low. Final RF amplifier will now deliver rf power to the antenna. An orange LED will light up, indicating amplifier is on.
    You can see the Orange LED ligth on this picture!

    A0 is the analog input to measure the temperature.
    The code below show how to measure A0 and convert it to a temperature.
    
    
    AD_measurement = analogRead(A0);                          // Read AD value
    pcb_temperature=(AD_measurement*110/1024)-50;             // Calculate temperature from TMP36 sensor 
    
    

    Download Software here

    Performance
    My field experiment with this transmitter show a transmitting range up to 10km without problems.
    My test was done in city enviroments. The unit has great audio and great stereo separation


    KIT
    Order an Amplifier

    Order here



    Final word
    I hope you have enjoyed reading about this rf project.
    Hopefully you have found new inspiration for your own projects.
    I will ofcourse share your projects and software code here if you wish.


    Gallery
    Here I will present your work and shared Arduino softwares. You can click the pictures to enlarge them and download files as well.

    Yellow OLED display
    More Yellow OLED display
    Share your work here!



    Back to main Page  |  Contact Me  |  Cheap components

    Copyright © Last modified on 1 May 2026.