{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Interactive acoustic design of a sandwich type sono-microreactor \n", "\n", "This small demonstration shows the intuition behind a proper acoustic design of sono-microreactors.\n", "Efficient power ultrasound in microreactors has been addressed within MAPSYN European project.\n", "[![img](./images/mapsyn.gif)](http://mapsyn.eu)\n", " \n", " Author: Francisco José Navarro-Brull\n", " Supplementary information: Guidelines for the design of efficient sono-microreactors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Langevin's transducer" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Prestressed sandwich transducers, or Langevin's transducers, are frequently applied in the high-power-ultrasound manufacturing industry as narrow-band piezoelectric transducers. Their basic structure consists of one or more pairs of piezoceramic rings, enclosed by metal endings and mechanically compressed by a central bolt. This half-wave resonant structure vibrates in its longitudinal or axial direction. A representation of the most common Langevin's kind of transducer ---often called symmetrical transducer--- is shown in here:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "\"Symmetrical\n", "\n", "Half-wave transducer with same material endings and cross-section areas showing its displacement amplitude ($u$) and mechanical stress ($T$) curves\n", "

\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Every Langevin's transducer can be divided into its three inherent parts, namely:\n", "* the reflector, representing the back side of the transducer and looking for the maximum reflection of the acoustic wave;\n", "* the actuator, usually made of a lead-zirconomim-titanate ceramic (PZT);\n", "* the emitter, transfering oscillations to the operating medium." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The reflector and emitter are represented with the letters $r$ and $e$, respectively. \n", "\t\n", "Sandwich transducer design and optimization do necessarily involve different materials and knowledge of mechanics, acoustics and electronics." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Langevin's equation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Although several one-dimensional approaches can be found in the literature, Langevin's equation constitutes the most frequently applied equation for the design of sandwich transducers. Langevin's equation is widely used due to its simplicity and flexibility. However, it should be only applied provided that the transducer has the same cross-sections at both ends (usually called symmetric transducers). In any case, what all these one-dimensional models have in common is that they enable the possibility of determining the transducer dimensions for a specific resonant frequency by using an equivalent circuit analogy.\n", "In fact, a mechanical system can be described by its electrical analog, and vice-versa. KLM and Mason's models are used to design the transducer by simplifying the wave equation solution in the model. This is possible thanks to an equivalent electrical network representation used for calculating electromechanical parameters.\t\n", "\n", "Thus, a Langevin-type transducer can be modeled under the following assumptions:\n", "* There are solely plane-wave propagations along the longitudinal section of the reactor, where the tension in the interior of the pieces is evenly distributed throughout its cross section.\n", "* The forces exerted by the back and front ends on the air are considered as negligible and the equivalent circuit is simplified to a single impedance. \n", "\n", "When the system vibrates at the resonance frequency, the impedance of such an equivalent circuit becomes zero, leading to the next equation for a half-wave resonant structure of a Langevin-type ultrasonic transducer:\n", "\n", "$$\n", " k_pl_p\n", " + \\tan^{-1}{\\left( \\frac{Z_r^c}{Z_p^c} \\tan{k_r l_r}\\right) }\n", " + \\tan^{-1}{\\left( \\frac{Z_e^c}{Z_p^c} \\tan{k_f l_e}\\right) }\n", " = \\pi\n", "$$\n", "\n", "where $k$ denotes the angular wavenumber (${2 \\pi}/{\\lambda}$, with $\\lambda$ being the wavelength) and $Z$ the acoustic impedance ($\\rho c$, with ${\\rho}$ being the material density and $c$ the sound velocity) of each section.\n", "\n", "The first term of equation from above corresponds to the piezoelectric crystal, and the second and third terms to the back and front side, respectively. Consequently, $l_p$ is the thickness of the piezoelectric material, while $l_r$ is the thickness of the Teflon layer behind the piezo (reflector) and $l_e$ is that of the layer before it (emitter).\n", "It is necessary to define the size of the piezoelectric ceramic because it should be located at a vibration node allowing the division of the transducer into two sections ---where each one will develop a quarter of the wavelength of the resonator ---. In this way, this equation can be splitted into: \n", "\n", "$$\n", " k_pl_p\n", " + \\tan^{-1}{\\left( \\frac{Z_r^c}{Z_p^c} \\tan{k_r l_r}\\right) }\n", " = \\frac{\\pi}{2} \\\\\n", "$$\n", "\n", "$$\n", " \\tan^{-1}{\\left( \\frac{Z_e^c}{Z_p^c} \\tan{k_f l_e}\\right) }\n", " = \\frac{\\pi}{2}\n", "$$\n", "\n", "Finally, it must be underlined that the two stainless steel chucks closing the microreactor have not been considered in this sizing. The transducer is modeled to have a maximum output at the back side where, due to the impedance differences between Teflon and stainless steel, the transmission of the vibration will be insignificant ($\\sim$97\\% of reflection). In contrast, on the front side the width of Teflon is designed to have an antinode at the microchannel. The interface between Teflon and stainless steel on the front side will be located at a node, where the vibration is zero and therefore not interfering with the signal. \n", "\n", "What we are going to do is to program in [Python](https://www.python.org/) the solution of these equations and show with [matplotlib](http://matplotlib.org/) and [IPython](http://ipython.org/) the sizing results from the Langevin model applied to the following device:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "\"Symmetrical\n", "\n", "Representation of the assembly constituting the Teflon-stacked microreactor proposed in the literature (Kuhn et al., 2011)\n", "

" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# importing the IPython widgets\n", "from ipywidgets import interact\n", "\n", "# importing matplotlib and NumPy libraries\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "from __future__ import division" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def plot_response(freq = 50):\n", " \"\"\"\n", " Make a \"sandwich\" horizontal plot for the Langevin's equation solution\n", " \"\"\"\n", " \n", " # Working parameters\n", " frequency = freq*1e3 # [Hz]\n", " \n", " rho_PZT = 7750 # [kg/m^3]\n", " rho_PTFE = 2200 # [kg/m^3]\n", " \n", " w_steel = 75 *1e-3 # [m] width of the SSteel chucks \n", " w_PZT = 60.5 *1e-3# [m] width of PZT the actuator \n", " w_PTFE = 70.5 *1e-3# [m] width of the PTFE \n", " w_microtube = 10 *1e-3# [m] width of the microchannel \n", " \n", " area_PZT = w_PZT**2 # [m^2] (squared geometry)\n", " area_PTFE = w_PTFE**2 # [m^2] (squared geometry)\n", " \n", " elastic_constant_PZT = 1.35e-11 # [Pa^-1] (S^{D}_{33})\n", "\n", " young_PZT = 7e10 # [Pa]\n", " young_PTFE = 4e8 # [Pa]\n", " \n", " # Calculations\n", " \n", " v_sound_PZT = 1 / (rho_PZT*elastic_constant_PZT)**0.5 # [m/s]\n", " \n", " v_sound_PTFE = (young_PTFE/rho_PTFE)**0.5 # [m/s]\n", " \n", " k_PZT = 2*np.pi*frequency / v_sound_PZT\n", " k_PTFE = 2*np.pi*frequency / v_sound_PTFE\n", " \n", " Z_PZT = v_sound_PZT*area_PZT*rho_PZT\n", " Z_PTFE = v_sound_PTFE*area_PTFE*rho_PTFE\n", " \n", " l_PZT = 1.02e-3 # length of the PZT [m]\n", " \n", " l_back = np.abs( np.arctan( np.tan( np.pi/2 - k_PZT*l_PZT) \n", " * Z_PZT/Z_PTFE) * 1/k_PTFE) #[m]\n", " l_front = np.arctan( np.tan(np.pi/2) * Z_PZT/Z_PTFE) * 1/k_PTFE\n", " \n", " \n", " l_steel = 6e-3 # length given for the SSteel chucks [mm]\n", " \n", " \n", " # Plotting results (end of calculations)\n", " \n", " fig, ax = plt.subplots()\n", " \n", " plt.title(\"Langevin's equation results - \"+\"$f:$\"+str(frequency/1e3)+\"kHz\")\n", " # broken_bar plotting works as follows \n", " # ax.broken_barh([x left down corner, length],(y left down corner, heigth))\n", " \n", " # [Back, Housing, Front]\n", " \n", " y_axisymmetry = -w_PZT/2\n", " PTFE_x_coordinates = [(-l_back, l_back),(0, l_PZT),(l_PZT, l_front),(l_PZT+l_front, l_front)]\n", " ax.broken_barh(PTFE_x_coordinates, (-w_PTFE/2, w_PTFE), facecolors='grey')\n", " \n", " #The PZT actuaor\n", " ax.broken_barh([(0, l_PZT)], (-w_PZT/2, w_PZT), facecolors='orange')\n", " \n", " \n", " # Steel chucks part [Back, Front]\n", " steel_x_coordinates = [(-(l_back+l_steel),l_steel),(l_PZT+l_front*2,l_steel)]\n", " ax.broken_barh(steel_x_coordinates, (-w_steel/2, w_steel), facecolors='white')\n", " \n", " # Reaction tube\n", " w_reactube = w_PZT\n", " l_reactube = 0.6 *1e-3 # [m]\n", " reactube_x_coordinates = [((l_PZT+l_front-l_reactube/2), l_reactube)]\n", " ax.broken_barh(reactube_x_coordinates, (-w_reactube/2, w_reactube), facecolors='blue')\n", " \n", " l2 = plt.legend()\n", " \n", " k_graph_PTFE = 2*np.pi*frequency/v_sound_PTFE\n", " k_graph_PZT = 2*np.pi*frequency/v_sound_PZT\n", " \n", " x_back = np.linspace(-l_back-l_PZT, 0)\n", " wave_lenght_back = (l_back+l_PZT)*4\n", " y_back = 0.01* np.sin((2*np.pi)/wave_lenght_back*(x_back))\n", " \n", " x_front = np.linspace(l_PZT,l_PZT+l_front*2)\n", " y_front = 0.01* np.sin(k_graph_PTFE*(x_front-l_PZT))\n", "\n", " ax.plot(x_back+l_PZT,y_back,'-k',linewidth=3, label=\"Displacement: $u$\")\n", " ax.plot(x_front,y_front,'-k',linewidth=3)\n", " \n", "\n", " ax.plot(x_back+l_PZT,-y_back,'--k',linewidth=3, label=\"standing wave\")\n", " ax.plot(x_front,-y_front,'--k',linewidth=3)\n", " ax.legend()\n", " \n", " ax.set_xlabel('x / m')\n", " ax.set_ylabel('axis of symmetry')\n", " ax.set_yticks([0])\n", " ax.set_yticklabels([0])\n", " ax.grid(True)\n", " \n", " \n", " bars_PTFE = plt.Rectangle((0, 0), 1, 1, fc=\"grey\")\n", " bars_PZT = plt.Rectangle((0, 0), 1, 1, fc=\"orange\")\n", " bars_water = plt.Rectangle((0, 0), 1, 1, fc=\"blue\")\n", " bars_ss = plt.Rectangle((0, 0), 1, 1, fc=\"white\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Call the interactive slider\n", "# working frequency between 30 and 70 kHz\n", "interact(plot_response, freq=(30,70))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Proper sizing is needed as a function of the driving frequency. The black and dashed lines represent a (standing) planar acoustic wave. Transducer is colored in orange and microchanel in blue. Stainless steel and PTFE are colored in white and grey, respectively." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Output example for the HTML static version:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

\n", "\n", "\"Interactive\n", "\n", "

\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.4" } }, "nbformat": 4, "nbformat_minor": 0 }