Is IDT’s Tx/Rx wireless power solution suitable for applications that require high-precision analog performance?

Required Hardware/Software

 

Previous Article in This Series

 

Articles With Supporting Information

 

The Noise Question

In the previous article we introduced IDT’s P9038 and P9025AC wireless power reference kits and briefly analyzed the power quality provided by the receiver board. Our results indicated that IDT’s Tx/Rx wireless power solution provides a stable, low-noise output voltage—as long as your device imposes mechanical constraints that maintain proper alignment and separation between the transmitter coil and the receiver coil. But any discussion of wireless transmission—especially wireless transmission that is intentionally designed to transfer large amounts of energy—raises the question of noise. Actually, the question of noise may prominently enter your mind as soon as you look at the 4-cm-diameter charging coil that is supposed to be placed in close proximity to your (possibly noise-sensitive) circuit board.

IDT’s ICs and evaluation boards incorporate features intended to reduce electromagnetic interference—for example, the transmitter IC controls the edge rates of the MOSFETs in the integrated full-bridge inverter, and the transmitter coil is mounted on a ferrite shield. The P9038 datasheet further seeks to reassure the dubious engineer: “excellent EMI performance eliminates need for EMI filter”; “EMI/RFI emissions . . . are better than the requirements of the WPC [Wireless Power Consortium] specification.” Additional marketing materials state that the transmitter coil’s “high permeability shielding prevents charge flux from coupling into sensitive components.” This is all quite persuasive, but nonetheless, a little bit of independent evaluation never hurts.

 

How Much Noise Is Too Much?

Noise is present in every circuit. In a sense, noise itself is neutral—not inherently good or bad. Noise becomes the enemy only when it exists in a form that is problematic in relation to the requirements of the system. In a high-precision analog circuit, for example, 50 mV of noise coupling into a sensor signal could be catastrophic, whereas that same magnitude of noise in a purely digital circuit might have no effect on overall functionality.

In this project, we will be assessing EMI-induced noise using a 12-bit ADC with a 1.65 V reference. This means that a transition in the least significant bit of the ADC result corresponds to (1.65 V)/(212) = 403 µV. It is safe to assume that even without a major noise source the conversion result will vary at least one digital count above and below the average value, so this measurement system cannot detect noise magnitudes below roughly 1 mV. Many mixed-signal designs, especially in the context of consumer electronics, do not require absolute precision better than 1 mV, and thus our analysis is adequate for numerous devices that might be seen as candidates for incorporating wireless power. It is possible that this analysis will fail to detect noise that would be significant for applications that truly require 14- or 16-bit resolution; at the same time, though, such high-precision systems will usually prioritize signal integrity over wireless power, which for most devices is convenient and marketable but far from necessary.

 

Hardware Configuration

This project uses the EFM8’s internal ADC to generate samples for noise analysis.

As shown above, the ADC is configured for 12-bit operation. Nota bene: In terms of actual hardware, the EFM8’s ADC is a 10-bit device. When configured for 12-bit conversions, the ADC module “performs four 10-bit conversions using four different reference voltages and combines the results into a single 12-bit value” (from the EFM8UB1 reference manual). At first it seems that this sort of synthetic 12-bit conversion would not be suitable for noise analysis, but Silicon Labs insists that the procedure employed by the ADC, in contrast to a simple averaging routine, “provides true 12-bit resolution of ac or dc input signals.” Thus, this project makes use of 12-bit mode in the hope that it will provide additional noise-detection sensitivity.

However, it appears that 12-bit mode is subject to some sort of timing complexities that make the conversion process susceptible to occasional spurious deviations. These irregularities become more frequent as the sampling rate increases. The right sort of finesse in configuring the various delays and timing signals might eliminate this problem, but for our purposes we can obtain acceptable results simply by keeping the sampling rate below about 5000 samples per second. The sampling rate is not critical because higher-frequency induced noise from the wireless transmission coil, which is driven by a roughly sinusoidal signal, will alias into the sampled data. If for some reason a much higher sampling rate is needed, probably the simplest solution is to use 10-bit mode.

Timer3 generates the start-of-conversion signals for the ADC, and we also need to enable the internal voltage reference and the ADC “conversion complete” interrupt.

USB configuration is performed in the source files via the VCPXpress library.

 

Firmware

The overall functionality is as follows: ADC samples are stored in a 500-byte buffer. A 12-bit sample requires two bytes, but in this project we store and analyze only the low byte, because all signal variations due to noise will occur within this byte. Thus, 500 bytes of data corresponds to 500 ADC samples, not 250. When the buffer is full, the firmware checks to see if the USB host has requested ADC data. If not, the buffer is gradually overwritten with new data and the process repeats; if so, the EFM8 transmits a full buffer of samples to the PC. ADC conversions are suspended during USB transmissions.

Here are the salient code sections:

 

                    //-----------------------------------------------------------------------------
// ADC0EOC_ISR
//-----------------------------------------------------------------------------
//
// ADC0EOC ISR Content goes here. Remember to clear flag bits:
// ADC0CN0::ADINT (Conversion Complete Interrupt Flag)
//
//-----------------------------------------------------------------------------
SI_INTERRUPT (ADC0EOC_ISR, ADC0EOC_IRQn)
{
   ADC0CN0_ADINT = 0;	//clear interrupt flag

   //only the low byte is needed for noise analysis
   ADCValues[BufferIndex] = ADC0L;

   BufferIndex++;

   if(BufferIndex == TX_BUFFER_LEN)
   {
	BufferIndex = 0;

	ADC_BUFFER_FULL = TRUE;

	//stop Timer3 to suspend ADC conversions
	SFRPAGE = TIMER3_PAGE;
	TMR3CN0 &= ~TMR3CN0_TR3__RUN;
   }
}
                  

                    VCPXpress_API_CALLBACK(myAPICallback)
{
   uint32_t API_InterruptCode;

   //get the code that indicates the reason for the interrupt
   API_InterruptCode = Get_Callback_Source();

   //if the USB connection was just opened
   if (API_InterruptCode & DEVICE_OPEN)
   {
	//start the first USB read procedure
	Block_Read(USBRxPacket, USB_PACKET_SIZE, &USBBytesReceived);
	/*we will process the received bytes when we get
	a callback with an RX_COMPLETE interrupt code*/
   }

   if (API_InterruptCode & RX_COMPLETE)   // USB read complete
   {
	if(USBBytesReceived == 1 && USBRxPacket[0] == 'R')
	   ADC_DATA_REQUESTED = TRUE;

	//continue with the next USB read procedure
	Block_Read(USBRxPacket, USB_PACKET_SIZE, &USBBytesReceived);
   }

   if (API_InterruptCode & TX_COMPLETE)   // USB transfer complete
   {
	//restart Timer3 to gather more ADC samples
	SFRPAGE = TIMER3_PAGE;
	TMR3CN0 |= TMR3CN0_TR3__RUN;
   }
}

void Transmit_USB_Packet()
{
	Block_Write(ADCValues, TX_BUFFER_LEN, &USBBytesTransmitted);
}
                  

                    int main (void)
{
   //call hardware initialization routine
   enter_DefaultMode_from_RESET();

   //VCPXpress initialization
   USB_Init(&InitStruct);

   //enable VCPXpress API interrupts
   API_Callback_Enable(myAPICallback);

   //enable global interrupts
   IE_EA = 1;

   //start Timer3 and thereby enable ADC conversions
   SFRPAGE = TIMER3_PAGE;
   TMR3CN0 |= TMR3CN0_TR3__RUN;

   while(1)
   {
	if(ADC_BUFFER_FULL == TRUE)
	{
	   ADC_BUFFER_FULL = FALSE;

	   if(ADC_DATA_REQUESTED == TRUE)
	   {
		ADC_DATA_REQUESTED = FALSE;

		Transmit_USB_Packet();
	   }

	   else
	   {
		//if the host has not requested data, restart Timer3 to continue ADC conversions
		SFRPAGE = TIMER3_PAGE;
		TMR3CN0 |= TMR3CN0_TR3__RUN;
	   }
	}
   }
}
                  

  Download Code  


No More Command Line!

In this project we will use the following Scilab graphical user interface to collect and analyze sampled data:

 

  Download Code  


This GUI was designed with the help of the GUI Builder toolbox, which you can download through Scilab’s ATOMS module manager:

The sampled data is plotted in the rectangular window, and the GUI automatically calculates and displays three metrics: average value (aka mean), range, and standard deviation. All three give us information about the amount of noise:

  • Variations in the average value from one data set to another indicate the presence of low-frequency deviations in the measured signal.
  • Range is determined by the maximum and minimum value in each data set, so this metric is sensitive to all deviations from the mean, even those that do not occur regularly or are of very short duration.
  • Standard deviation is a way of assessing the overall noise amplitude, because it tells us the average difference between the mean and the data points. Standard deviation is calculated by taking the square root of the mean of the squared difference values, and thus the standard deviation of a signal containing random noise is simply the RMS (root-mean-square) noise amplitude.      

 

Results

If you perform a similar analysis to assess the effect of EMI on your own circuit, keep in mind that the output power of the transmitter is affected by how much load current is supplied by the receiver (the Rx board can communicate with the Tx board by modulating the load on the receiver coil). Thus, you should load the receiver according to your circuit’s expected current consumption. In this project we use a small load current of about 40 mA.

These first data sets are samples collected from the EFM8’s internal temperature sensor, with the EFM8 located directly above the center of the receiver coil.

The wireless power transmitter is turned off for the first data set and on for the second data set; no major difference is noticeable, and repeated data collections confirm that in this case wireless power transmission does not lead to significant amounts of noise.

This next data set was collected with the same physical configuration, but this time the EFM8 evaluation board is powered by the wireless power receiver module.

Again, no noise problems are apparent. This is good!

For the following data sets, the ADC is driven not by the internal temperature sensor but by a port pin (namely, P0.0) connected via a rather long wire to a resistive divider on a breadboard. Remember that P0.0 needs to be configured as an analog input and skipped by the crossbar. The resistive divider reduces the 3.3 V supply voltage to about 0.6 V (recall that the ADC’s reference is only 1.65 V).

The green signal wire is placed near the receiver coil, and the black ground wire is deliberately separated from the green wire to eliminate any noise cancelation effects. This is not a fair fight for IDT, but the results will be informative nonetheless. The transmitter is unpowered for the first data set and powered up for the second.

This amount of noise would definitely ruin your day if you were trying maintain precision on the order of 1 mV. The following plot confirms that the noise level is similar when the EFM8 board is powered by the receiver module.

Just for the record, twisting the ground wire around the signal wire (while maintaining the same proximity to the receiver coil) provides significant improvement:

And another major reduction in noise amplitude is accomplished by twisting all three wires together and “shielding” them with aluminum foil:

For the above data set, the shield was floating. Grounding the shield on the EFM8 side reduced the RMS noise amplitude by an additional 10–30%.

 

Conclusion

The data sets more or less speak for themselves. No one expects wireless power transfer to be as clean as the old-fashioned cable-plus-connector approach, and IDT’s solution is surprisingly compatible with fairly high-precision analog circuitry—but it looks like short interconnects and PCB ground planes play an important role in minimizing the effects of EMI. If you need to run wires or long traces near the receiver coil, careful shielding and filtering will help you to maintain signal integrity.

 

Comments

0 Comments