
﻿ Performance of a Contrarotating Small Wind Energy Converter 1. Introduction Wind energy has been shown to be one of the most feasible sources of renewable energy . It presents attractive opportunities to a wide range of people , including investors and entrepreneurs . The main goal of wind energy industry is to minimize the cost of wind energy in order to make it more competitive compared to other energy sources . How to reduce the cost of wind energy is a vital engineering challenge presented by the interlocking disciplines of aerodynamics , structure , control , electrical conversion , and electronics . In fact , technologies in these related areas are still under active research and development to achieve high efficiency and low cost . In the shadows of advancing multimegawatt wind turbines is another growing sector within this industry , the small wind turbines . Small wind energy converters ( SWECs ) for urban or rural applications range in size from a few hundred watts to thousands of watts ( usually with a rated capacity of less than 100 kW ) and can be applied economically for a variety of power demands . These systems can be used in connection with an electricity transmission and distribution system , or in stand-alone applications that are not connected to the utility grid and are appropriate for homes , farms , or even entire communities . Investments in this sector are feasible not as stand-alone only , but as components of an integrated power-generating system that include various forms of energy resources . The main technical challenges for SWECs are the design of a system that has maximum efficiency in turbulent low speed winds ; ability to comply with both efficiency expectations and the requirements of grid utilities ; and have the minimum environmental and health impacts in terms of noise and vibration . Two facts characterize the urban environment for wind energy : lower annual mean wind speed ( AMWS ) compared to rural areas or to sea shores and more turbulent flow . The low AMWS is related to the uneven ground created by buildings and other features of the urban landscape , which causes wind speeds to increase with height above the ground more slowly . The turbulent flow is a result of the wind interacting with landscape obstacles , the fact that applies extra stress on the turbine blades . The challenge is to develop wind turbines that operate at lower speeds and cope with the turbulent . The wind generating technology development is leading to improved performance and efficiency . Most wind turbines are single-rotor systems , which provide simplicity , reliability , and durability . Along the years , improvements have enhanced energy conversion efficiency of these single-rotor systems . For example , blades have better aerodynamic characteristics , gears with reduced noise have better torque transmission efficiency , and alternators have better electrical efficiency . However , despite these improvements , single-rotor systems are able to convert only a small fraction of the total wind stream energy into electrical energy . Moreover , such a system requires high wind velocity ( above 4 m/s ) which is not available in many places , a part from costal regions . This low velocity and seasonal winds imply a high cost of exploitation of wind energy . Thus , the challenge lies with the design of a wind generator which can operate at lower speeds and be used in a small-scale manner in remote and rural areas . This paper investigates the performance of the SWEC basing on wind tunnel tests . The paper is organized as follows . Section 2 discusses the contrarotating concepts and provides a literature review on the subject , while Section 3 presents the theory of rotor torque and power . Section 4 describes the wind tunnel experimental setup , and Section 5 presents the rotor performance results . Finally , conclusions are drawn in Section 6. 2. Contrarotating Blade System The prime mover in wind energy system is the wind turbine . One prevailing trend in wind turbine technology throughout the past couple of decades has been growth in the size of the rotor to realize the advantages of scale and the generally higher winds available at greater heights . Geometrically , consistent upscaling of blade length shows that the surface stresses at the blade surface , vibratory loads , and loading noise due to aerodynamical and gravitational loads grow in proportion to the length of the blade [ 1 ] . However , an alternative mean of overcoming the limitation of the efficiency of a single-rotor system without increasing the size of the rotor and consequently the stress on blades could be through the adoption of a dual-rotor ( contrarotating ) blade system . In addition , the acceptance of wind turbines by the public depends strongly on achieving low noise levels in operation , which largely depends on the level of stress on the blades . According to Betz theory , the maximum power that can be extracted from the wind is about 59 % of the available energy in the wind when the axial wind speed is reduced by two-thirds across a single rotor disc . However , practical wind turbines convert less than 40 % of the wind energy into electrical energy . Hence , nearly 60 % of the potential wind energy escapes without being harnessed . In reality , the energy in the wake behind a single rotor is not very small . Part of this energy may be extracted further by installing a second rotor in the wake . As the wake behind the first rotor is rotating in the opposite direction to the rotational direction of the rotor , the second rotor should rotate in the same direction as the wake in order to extract efficiently the available energy in the wake . The contrarotating system is a very old concept that was initially proposed more than 100 years ago . A friend of Betz who is sometimes described as the “ father of modern wind energy collection theory , ” Hans Honneff , wrote a book on the use of contrarotation , using two rotors one behind the other , driving the two halves of an electrical generator , therefore creating a true wind turbine [ 2 ] . Currently , the contra concept is used on airplanes , boats , and submarines to increase efficiency while eliminating the asymmetrical torque faced by conventional rotors . A dual-rotor system can be described as a system consisting of two rotors separated by an appropriate distance ( Figure 1 ) . One of the rotors is rotating in counterclockwise direction and the other in clockwise direction on the same axis . The relative size as well as the appropriate distance between the two rotors should be identified for best performance . Drawbacks of the dual-rotor system come from mechanical complexity based on the fact that in order to reverse direction of rotation of one rotor , a gearbox is required . This may increase weight or maintenance and spare parts cost for the system . Based on evidence in literature , aerodynamic research is poised between experimental and computational : either the wind turbine is studied experimentally in a wind tunnel , or the turbine is investigated computationally using methods that belong to the field of computational fluid dynamics ( CFD ) . The two are closely linked , and as progress is made in the development of more advanced computational fluid models , more comprehensive wind tunnel experimental data is required to validate the models . Experimental and computational research provide results for better understanding of the flow physics and enable investigation of wind energy performance , a requirement in order to adjust the design of wind turbines to the unique aerodynamic conditions in the environment . As with all methods of analysis , the CFD approach has limitations which are essentially related to turbulence modeling . Sumner et al . [ 3 ] review the development of CFD as a virtual , multiscale wind tunnel applied by the wind energy community from small to large scale . Although the cost of a CFD analysis may be comparable to that of a wind tunnel experiment , we considered the wind tunnel experimental option for the current study emphasizing on the importance of transition to turbulence effects . Typically , wind tunnel tests overstate performance , and consumers will never see the performance measured in a wind tunnel . However , such tests are good indicators of performance . To our knowledge , only a limited number of wind tunnel studies can be found in literature [ 2 , 4 ] . In order to study the streamlines and obtain the detailed information of flow around the wind turbine , a flow visualization and velocity measurement are important . Investigation [ 5 ] has been carried out for this sake . Considerable improvements in the understanding of contrarotating wind turbine system can be achieved through proper instrumentation and experimental measurements . According to [ 6 ] , the maximum power that can be extracted from a dual-rotor system increases up to 64 % of the available energy . It continues to reach 66.7 % for an infinite number of rotors [ 7 ] . A contrarotating wind turbine equipped with two 500 kW turbines performed quite well at high wind speeds . The turbine can produce 43.5 % more annual energy than a single-rotor turbine of the same type . The performance of the system can be improved if it is operated for low wind speeds at the tip-speed ratio where a maximum Cp is obtained [ 8 ] . Research studies provide sufficient evidence to look closer at the concept of contrarotating system to eventually produce quantifiable comparisons to other turbines [ 9 , 10 ] . A smaller gear ratio is needed because of higher tip speeds achieved by smaller blade length in comparison with the conventional system in case of the same power output . Energy capture in the rotor holds the greatest potential for long-term reduction of the cost of wind energy . A feasibility study [ 11 ] provides sufficient evidence to look closer at the concept of contrarotating to eventually produce quantifiable comparisons to other turbines . Their field tests showed that a dual-rotor turbine produces 43.5 % more annual energy than a single-rotor turbine of the same type . In addition , a smaller gear ratio is needed because of higher tip speeds achieved by smaller blade length in comparison with the conventional system in case of the same power output [ 12 ] . According to a field test demonstrated in California [ 13 ] , energy extraction from a wind turbine using contrarotating system increased by up to 40 % over an equivalent wind turbine with only one rotor . Power conversion efficiency was high at low rotor speeds , suggesting applicability of contrarotating turbines to large utility-scale wind turbines that rotate at 16–20 rpm . In addition , the bending stress on the supporting tower was reduced by the contrarotating system over the single-rotor system . This reduced bending stress results when the torques produced by two rotors counterbalance each other . The contrarotating SWEC clearly has a promise for wind energy , and after preliminary research and field studies [ 6–13 ] , it was decided to proceed with a small SWEC prototype for testing and evaluation . 3. Rotor Torque and Power The motion of any fluid can be derived from the basic physical principles of mass , momentum , and energy interchange . The torque responsible for power production of the wind turbine mostly arises due to the forces produced by interaction of blades with the wind . The output power 𝑃 𝑇 from a turbine rotor and the wind kinetic energy per unit time 𝑃 𝑊 are given as follows : 𝑃 𝑇 = 𝑇 𝑚 𝑃 × 𝜔 , 𝑊 = 1 2 𝜌 × 𝑉 3 0 × 𝐴 , ( 1 ) where 𝑇 𝑚 is the mechanical torque at the turbine side , 𝜔 is the angular rotation of the shaft , 𝜌 is the air density at the hub height , 𝑉 0 is the wind velocity , and 𝐴 is the swept area of the blades . If momentum equation is solved across an idealized control volume about the turbine rotor , it can be shown that the percentage of the total power available that can be extracted by a turbine is 16/27 or 59 % . This limit is known as the Betz limit . Therefore , the maximum power that a turbine can produce is expressed as follows [ 14 ] : 𝑃 𝑊 =  1 6 1 2 7   2  𝜌 × 𝑉 3 0 × 𝐴 . ( 2 ) Most turbines extract the maximum possible energy as defined above for lower wind speeds but gradually become less efficient as the on-coming wind speed increases and the flow condition across the blades approaches the stall condition . The rotor power coefficient 𝐶 𝑝 is defined as the ratio between the rotor output power and the dynamic power of the air as shown in the following : 𝐶 𝑝 = 𝑃 𝑇 𝑃 𝑊 = 𝑇 𝑚 × 𝜔  ( 1 / 2 ) 𝜌 × 𝑉 3 0  × 𝐴 . ( 3 ) The power coefficient is a nonlinear function of the tip speed-ratio 𝜆 , which depends on the wind velocity and the rotation speed of the shaft 𝑉 𝜆 = T i p 𝑉 0 = 𝑟 × 𝜔 𝑉 0 , ( 4 ) where 𝑟 is the rotor radius . The rotor power coefficient is regarded as the energy transformation efficiency . Note that 𝐶 𝑝 is usually precomputed based on the theoretically expected performance of the turbine system . The wind turbine mechanical characteristics are described by the following equation ( where the turbine rotor friction is ignored ) : 𝑇 𝑚 − 𝑇 𝑔 = 𝐽 𝑑 𝜔 𝑑 𝑡 , ( 5 ) where 𝑇 𝑔 is the load torque , and 𝐽 is the turbine inertia moment . The incoming wind flow rate should be equal to the outgoing flow rate to satisfy the mass conservation law if a control volume around a turbine is assumed . The outgoing wind-speed distribution and its direction strongly determine the turbine efficiency . Figure 2 shows the geometry of the stream tube through the disk . Neglecting fluid drags , the power extracted from the air stream can be written as 1 𝑃 = ( 6 ) where 𝑉 , and 𝑉 are the flow velocity components along the axis of the stream tube . The power coefficient is obtained by nondimensionalizing the above power equation as 𝐶 , ( 7 ) where 𝑎 is the axial induction factor . 4. Wind Tunnel Experimental Setup In this section , laboratory measurement techniques are discussed ; however , some of the methods used are conventional and require little elaboration . 4.1 . Wind Tunnel Facility An open-return type wind tunnel is used in the present study . A contrarotating model 3-blade wind turbine was placed in the boundary-layer wind tunnel with the goal of studying power performance , turbulence effect , and flow visualization . Figure 3 shows the schematic of the wind tunnel experimental setup where the contraction and test sections are on the right hand side , and the motor and fan are in the left hand side . Air enters the fan from the laboratory through a large gate covered by a filter , held by wire meshes . The air flow is driven by a propulsion system made of an axial fan to provide the dynamic pressure for compensating viscous losses . There are smooth glass walls on both sides of the tunnel , and access is possible through the plywood ceiling and floor . Any large obstruction placed within a wind tunnel will alter the characteristics of the flow to some degree . The wind tunnel is capable of generating wind speeds up to 30 m/s . This suction type wind tunnel has a cross-section of 0.61 m width by 0.9 m height . The tunnel has a working ( test ) section of length 3.6 m. As the test section is the narrowest part of the circuit , it is also the part where the air velocity is the highest and , therefore , by Bernoulli’s principle , where the pressure is the lowest . The main distinguishing feature of this wind tunnel is that it was designed to produce a low level of turbulence in the test section . Power for the tunnel comes from a three-phase AC motor of 30 hp at 1800 rpm with a maximum speed of 1170 rpm , driving a 10-bladed fan of 54 inches diameter with blade setting of 23° , mounted in a cylindrical steel casing . To minimise noise and vibration , the casing is supported on rubber shock mounts and is connected by flexible seals to the tunnel on either side . The air speed does not change as the air passes through the fan . The rotational speed of the fan is controlled by a regulated magnetic field and solid-state power supply . In order to control the ambient turbulence level , turbulence manipulators are placed upstream of the rotor , including a fine mesh screen and an aluminum honeycomb section . Smoothing is provided by the fine mesh screen . The honeycomb plays the role of a flow straightener . When the wind turbine is stopped , the mean velocity over the center portion of the wind tunnel is uniform and almost steady . 4.2 . Instrumentation A small model SWEC with two blade sets of 23 cm diameter and a varying distance between the blade sets of 7–54 cm has been built and tested over a range of operating conditions . In order to introduce some degree of uniformity into the way in which users of the wind tunnel record their data , an instrumentation system to measure and display a number of variables that are normally required for all experiments was installed . Two guide rails were used to hold the SWEC inside wind tunnel floor along the centreline using a steel mounting system . The steel mounting system ensured that the system did not move during testing . Measuring sensors were mounted at different locations of the setup . The upwind and downwind velocities are measured by pitot tubes , which use Bernoulli’s principle to convert pressure to velocity readings . The tubes are attached to 2 sensors to convert pressure in volts to velocities in m/s . For measuring the rotational speed of the rotor , two infrared detector and emitter units ( photogate sensors ) were used . They were mounted behind the rotor . Measurement depends largely on a data acquisition system utilizing electronic measuring to read instantaneous power produced by the generating system , as various parameters are varied on the turbine or in the environment . The parameters varied include the distance between the two sets of blades , blade profiles , number of blades , wind speeds , and size ratios . To accomplish the objective of this test , three aspects of experimental setup are needed : mechanical , electrical , and measurement software . All sensors are powered , grounded , and connected to the data acquisition board . All wires are shielded for protection against noise . Measurements are monitored directly and instantaneously in the Graphical User Interface ( GUI ) of LabView . The user enters numerical values of the blade distance , blade pitch , and blade diameter for the front and back and the relative humidity and temperature . The circuit has 5 sets of measurements on both the front and the back of the generating system . The voltages are measured directly from the potentiometers ; these are the total voltages of the circuits . The currents are obtained by measuring the voltages from fixed resistors and dividing that by the resistance . The power is the product of the voltage and the calculated current . The rpm signals go through a frequency measurement tool in LabView and are then multiplied by 60 to obtain the angular velocity in revolutions per minute ( rpm ) . All lines of measurements are connected to the National Instruments Data Acquisition Board NIDAQ USB-6210 . Each line is connected to an analog pin which is fed into the LabView program with a USB connection to the computer . At the beginning of the measurement process , all sensors were checked and calibrated . The pitot tubes are corrected by the offset values to give zero when there is no wind in the tunnel . When starting the program , a path is requested for an Excel file to record the data . 