Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@3:797df32f2344, 2014-01-27 (annotated)
- Committer:
- alj
- Date:
- Mon Jan 27 14:39:30 2014 +0000
- Revision:
- 3:797df32f2344
- Parent:
- 2:24f3bc487c01
- Child:
- 4:d0f9015a90bf
Pulses programmer; PULSE GRADIENT SPIN ECHO diffusion sequence(or diff_se) to measure diffusion coefficient value in NMR experiment.;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alj | 0:8fc9e66cbabb | 1 | /* ************************************************************************************* |
alj | 0:8fc9e66cbabb | 2 | PGSE_diffusion Basic standard sequence, VERSION 1, October 24th 2012 |
alj | 0:8fc9e66cbabb | 3 | PULSE GRADIENT SPIN ECHO diffusion sequence(or diff_se) to measure diffusion coefficient value. |
alj | 0:8fc9e66cbabb | 4 | ref : E.O. Stejskal and J.E. tanner, J. Chem. Phys. 42, 288 (1965) |
alj | 0:8fc9e66cbabb | 5 | THE PGSE SEQUENCE IS |
alj | 0:8fc9e66cbabb | 6 | 1H ---> 90° - DELTA/2 - 180 - DELTA/2 - FID |
alj | 2:24f3bc487c01 | 7 | Gz ---> -- - Gz(sdelta)- DELTA - Gz(sdelta) |
alj | 0:8fc9e66cbabb | 8 | ************************************************************************************* |
alj | 0:8fc9e66cbabb | 9 | Gradient strength (or duration) must be increase to measure the diffusion coefficient (2D DOSY spectroscopy) |
alj | 0:8fc9e66cbabb | 10 | The maximum diffusion time (DELAT) is limited by T2 in PGSE. |
alj | 0:8fc9e66cbabb | 11 | For T1 = T2 the PGSE sequence is usualy the easiest et preferred sequence. |
alj | 0:8fc9e66cbabb | 12 | For T1 >> Té the PGSTE (PULSE GRADIENT with STIMULATED ECHO) is better, as during most of the diffusion |
alj | 0:8fc9e66cbabb | 13 | time the magetization evolve prinipaly under T1 relaxtion (magnetization is like stored on Z axis in conventionnal NMR). With PGSTE the maximum |
alj | 0:8fc9e66cbabb | 14 | diffusion time (DELTA) is limited by T1. |
alj | 0:8fc9e66cbabb | 15 | IN THIS VERSION THE GRADIENT PULSE DURATION IS USED |
alj | 0:8fc9e66cbabb | 16 | ************************************************************************************* |
alj | 2:24f3bc487c01 | 17 | |
alj | 0:8fc9e66cbabb | 18 | DESIGN FOR NXPLPC1768 ARM CORTEX M3 MCU BOARD: |
alj | 0:8fc9e66cbabb | 19 | INPUT : NONE (reset on board) |
alj | 0:8fc9e66cbabb | 20 | OUTPUT : ACQU ---> P26 AND LED1 |
alj | 0:8fc9e66cbabb | 21 | : PULSES P1 & P2 ---> P25 |
alj | 0:8fc9e66cbabb | 22 | : Emmitter ---> P24, P23 |
alj | 1:9c47e011f1bf | 23 | : Transmitter ---> P24, P23 |
alj | 1:9c47e011f1bf | 24 | : gradient Z ---> P21 |
alj | 0:8fc9e66cbabb | 25 | ***** IN THIS VERSION RECEIVER AND TRANSMITTER HAVE THE SAME PHASE CYCLE ***** |
alj | 0:8fc9e66cbabb | 26 | ************************************************************************************* |
alj | 0:8fc9e66cbabb | 27 | Alain LOUIS-JOSEPH |
alj | 0:8fc9e66cbabb | 28 | CNRS |
alj | 0:8fc9e66cbabb | 29 | Laboratoire de Physique de la Matière Condensée PMC |
alj | 0:8fc9e66cbabb | 30 | Ecole Polytechnique |
alj | 0:8fc9e66cbabb | 31 | 91128 Palaiseau CEDEX France |
alj | 0:8fc9e66cbabb | 32 | ************************************************************************************* |
alj | 2:24f3bc487c01 | 33 | This program comes as is with its flaws and bugs. |
alj | 2:24f3bc487c01 | 34 | NO WARRANTY IS PROVIDED. |
alj | 2:24f3bc487c01 | 35 | This program is distributed in the hope that it will be useful, |
alj | 2:24f3bc487c01 | 36 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
alj | 2:24f3bc487c01 | 37 | FITNESS FOR A PARTICULAR PURPOSE |
alj | 3:797df32f2344 | 38 | This software is distributed on an "AS IS" BASIS, |
alj | 3:797df32f2344 | 39 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
alj | 2:24f3bc487c01 | 40 | ************************************************************************************* |
alj | 0:8fc9e66cbabb | 41 | UNLESS OTHERWISE SPECIFIED THE PARAMETERS OF THE PULSE SEQUENCE ARE SET : |
alj | 0:8fc9e66cbabb | 42 | D1 : relaxation delay ( ms to s) |
alj | 0:8fc9e66cbabb | 43 | DELTA : Diffusion time (ms to s) |
alj | 0:8fc9e66cbabb | 44 | sdelta : Gradient duration |
alj | 0:8fc9e66cbabb | 45 | D21 : delay of recovery |
alj | 0:8fc9e66cbabb | 46 | DE : fixed delay before acqusisition (not use) |
alj | 0:8fc9e66cbabb | 47 | DW : Dwell time period for sampled t2 acquisition time domain |
alj | 0:8fc9e66cbabb | 48 | D0 : incremenatble delay ( from 1us to s)(t1 time domain dimension for 2D experiment) |
alj | 0:8fc9e66cbabb | 49 | NS : Number of scan |
alj | 0:8fc9e66cbabb | 50 | NE : Number of experiment |
alj | 0:8fc9e66cbabb | 51 | VD : Variable delay using a file list |
alj | 0:8fc9e66cbabb | 52 | PW : Pulse length (us) |
alj | 0:8fc9e66cbabb | 53 | P90 : 90° transmitter or decoupler pulse length |
alj | 0:8fc9e66cbabb | 54 | P180 : 180° transmitter or decoupler pulse length |
alj | 0:8fc9e66cbabb | 55 | P3 P4 : 90°, 180°, X-nucleus pulses length |
alj | 0:8fc9e66cbabb | 56 | DO : Decoupler gated off or on |
alj | 0:8fc9e66cbabb | 57 | HD : HomoDecoupling in time sharing during acqusition |
alj | 0:8fc9e66cbabb | 58 | HG : HomoGating decoupling with receiver gated OFF |
alj | 0:8fc9e66cbabb | 59 | BB : Broadband modulation gate |
alj | 0:8fc9e66cbabb | 60 | CW : Continuous wave |
alj | 0:8fc9e66cbabb | 61 | FID : Free Induction Decay acquisition (data acquisition for time AQ |
alj | 0:8fc9e66cbabb | 62 | AQ : Acquisition time (physical t2 acquisition time domain dimension) |
alj | 0:8fc9e66cbabb | 63 | PHn : Phase for pulse number n (ie : PH1 for pulse P1) |
alj | 0:8fc9e66cbabb | 64 | PH0 : Receiver phase |
alj | 0:8fc9e66cbabb | 65 | ************************************************************************************* |
alj | 2:24f3bc487c01 | 66 | |
alj | 0:8fc9e66cbabb | 67 | */ |
alj | 0:8fc9e66cbabb | 68 | |
alj | 0:8fc9e66cbabb | 69 | #include "mbed.h" |
alj | 0:8fc9e66cbabb | 70 | |
alj | 0:8fc9e66cbabb | 71 | #define D1 0.1 /* Relaxation delay in second */ |
alj | 0:8fc9e66cbabb | 72 | #define Fs 48000 /* Sample frequency in Hz */ |
alj | 0:8fc9e66cbabb | 73 | #define DW 1 /* DW time period in us NOT USE */ |
alj | 0:8fc9e66cbabb | 74 | #define NS 1.0 /* 8 accumulations */ |
alj | 0:8fc9e66cbabb | 75 | #define DELTA 0.006 /* diffusion dealy in s */ |
alj | 0:8fc9e66cbabb | 76 | #define NE 1.0 /* 8 accumulations */ |
alj | 0:8fc9e66cbabb | 77 | #define sdelta 0.003 /* gradient duration */ |
alj | 0:8fc9e66cbabb | 78 | #define D21 0.001 /* recovery time */ |
alj | 0:8fc9e66cbabb | 79 | #define AQ 0.04 /* acquisition time in seconde */ |
alj | 0:8fc9e66cbabb | 80 | #define P90 0.00005 /* hard 90° 1H */ |
alj | 1:9c47e011f1bf | 81 | //#define IncGsdelta 0.0 /* gradient width increment */ |
alj | 1:9c47e011f1bf | 82 | //#define stepG 0.0 |
alj | 0:8fc9e66cbabb | 83 | |
alj | 0:8fc9e66cbabb | 84 | |
alj | 0:8fc9e66cbabb | 85 | DigitalOut Relaxation(LED1); /* Delay on pin 26 ??? and flash LED1 during relaxation delay */ |
alj | 0:8fc9e66cbabb | 86 | BusOut Acqu(p26, LED2) ; /* Start acquisition */ |
alj | 0:8fc9e66cbabb | 87 | DigitalOut p1(p25); // HARD PULSE |
alj | 0:8fc9e66cbabb | 88 | DigitalOut p2(p25); /* Only for reason of clarity P2 =2*P1 */ |
alj | 0:8fc9e66cbabb | 89 | BusOut PH1PH2(p24, p23) ; // transmitter and receiver phases are the same |
alj | 0:8fc9e66cbabb | 90 | DigitalOut Gsdelta(p22) ; // Gradient Z |
alj | 0:8fc9e66cbabb | 91 | |
alj | 0:8fc9e66cbabb | 92 | int main() |
alj | 0:8fc9e66cbabb | 93 | { |
alj | 0:8fc9e66cbabb | 94 | |
alj | 0:8fc9e66cbabb | 95 | // while (1) { |
alj | 0:8fc9e66cbabb | 96 | p1 =0 ; |
alj | 0:8fc9e66cbabb | 97 | Relaxation = 0 ; |
alj | 0:8fc9e66cbabb | 98 | Acqu=0x00; |
alj | 0:8fc9e66cbabb | 99 | PH1PH2=0x00; //0 init |
alj | 0:8fc9e66cbabb | 100 | |
alj | 0:8fc9e66cbabb | 101 | for (float i = 0.0f ; i < NS ; i += 1.0f) { |
alj | 2:24f3bc487c01 | 102 | |
alj | 0:8fc9e66cbabb | 103 | Relaxation = 1; /* LED1 light*/ |
alj | 0:8fc9e66cbabb | 104 | wait(D1); // relaxation |
alj | 0:8fc9e66cbabb | 105 | Relaxation = 0; // turn off the led |
alj | 0:8fc9e66cbabb | 106 | |
alj | 0:8fc9e66cbabb | 107 | p1=1; |
alj | 0:8fc9e66cbabb | 108 | wait(P90); // 90° |
alj | 0:8fc9e66cbabb | 109 | p1=0; |
alj | 2:24f3bc487c01 | 110 | |
alj | 0:8fc9e66cbabb | 111 | Gsdelta = 1; |
alj | 0:8fc9e66cbabb | 112 | wait(sdelta); //gradient Z; |
alj | 0:8fc9e66cbabb | 113 | Gsdelta = 0; |
alj | 2:24f3bc487c01 | 114 | |
alj | 2:24f3bc487c01 | 115 | wait(DELTA - sdelta); // diffusion time |
alj | 0:8fc9e66cbabb | 116 | |
alj | 0:8fc9e66cbabb | 117 | p2=1; |
alj | 0:8fc9e66cbabb | 118 | wait(2*P90); //180° |
alj | 0:8fc9e66cbabb | 119 | p2=0; |
alj | 2:24f3bc487c01 | 120 | |
alj | 0:8fc9e66cbabb | 121 | Gsdelta = 1; |
alj | 0:8fc9e66cbabb | 122 | wait(sdelta); //gradient Z; |
alj | 0:8fc9e66cbabb | 123 | Gsdelta = 0; |
alj | 2:24f3bc487c01 | 124 | |
alj | 2:24f3bc487c01 | 125 | |
alj | 0:8fc9e66cbabb | 126 | wait(D21) ; //recovery time |
alj | 0:8fc9e66cbabb | 127 | |
alj | 0:8fc9e66cbabb | 128 | Acqu=0x11; // Acquire FID (we can write 3 in decimal) |
alj | 0:8fc9e66cbabb | 129 | wait(AQ); |
alj | 0:8fc9e66cbabb | 130 | Acqu=0x00; |
alj | 0:8fc9e66cbabb | 131 | |
alj | 0:8fc9e66cbabb | 132 | PH1PH2=PH1PH2+1; //Phase cycling |
alj | 2:24f3bc487c01 | 133 | |
alj | 0:8fc9e66cbabb | 134 | //IncGsdelta += stepG ; |
alj | 0:8fc9e66cbabb | 135 | |
alj | 0:8fc9e66cbabb | 136 | } |
alj | 2:24f3bc487c01 | 137 | |
alj | 2:24f3bc487c01 | 138 | } |
alj | 0:8fc9e66cbabb | 139 | //} |
alj | 0:8fc9e66cbabb | 140 | |
alj | 0:8fc9e66cbabb | 141 | /* INCREMENTATION DE LA DUREE D'ECLAIREMENT DE LED1 AVEC PwmOut |
alj | 0:8fc9e66cbabb | 142 | PwmOut led(LED1); |
alj | 0:8fc9e66cbabb | 143 | |
alj | 0:8fc9e66cbabb | 144 | int main() { |
alj | 0:8fc9e66cbabb | 145 | while(1) { |
alj | 0:8fc9e66cbabb | 146 | for(float p = 0.0f; p < 1.0f; p += 0.1f) { |
alj | 0:8fc9e66cbabb | 147 | led = p; |
alj | 0:8fc9e66cbabb | 148 | wait(0.1); |
alj | 0:8fc9e66cbabb | 149 | } |
alj | 0:8fc9e66cbabb | 150 | } |
alj | 0:8fc9e66cbabb | 151 | } */ |
alj | 0:8fc9e66cbabb | 152 | |
alj | 0:8fc9e66cbabb | 153 | /* Digital I/O |
alj | 0:8fc9e66cbabb | 154 | |
alj | 0:8fc9e66cbabb | 155 | DigitalOut - Configure and control a digital output pin. |
alj | 0:8fc9e66cbabb | 156 | DigitalIn - Configure and control a digital input pin. |
alj | 0:8fc9e66cbabb | 157 | DigitalInOut - Bi-directional digital pins |
alj | 0:8fc9e66cbabb | 158 | |
alj | 0:8fc9e66cbabb | 159 | BusIn - Flexible way to read multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 160 | BusOut - Flexible way to write multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 161 | BusInOut - Flexible way to read/write multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 162 | |
alj | 0:8fc9e66cbabb | 163 | PortIn - Fast way to read multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 164 | PortOut - Fast way to write multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 165 | PortInOut - Fast way to read/write multiple DigitalIn pins as one value |
alj | 0:8fc9e66cbabb | 166 | |
alj | 0:8fc9e66cbabb | 167 | PwmOut - Pulse-width modulated output */ |
alj | 0:8fc9e66cbabb | 168 | |
alj | 0:8fc9e66cbabb | 169 | /* Features |
alj | 0:8fc9e66cbabb | 170 | |
alj | 0:8fc9e66cbabb | 171 | NXP LPC1768 MCU |
alj | 0:8fc9e66cbabb | 172 | High performance ARM® Cortex™-M3 Core |
alj | 0:8fc9e66cbabb | 173 | 96MHz, 32KB RAM, 512KB FLASH |
alj | 0:8fc9e66cbabb | 174 | Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO |
alj | 0:8fc9e66cbabb | 175 | Prototyping form-factor |
alj | 0:8fc9e66cbabb | 176 | 40-pin 0.1" pitch DIP package, 54x26mm |
alj | 0:8fc9e66cbabb | 177 | 5V USB or 4.5-9V supply |
alj | 0:8fc9e66cbabb | 178 | Built-in USB drag 'n' drop FLASH programmer |
alj | 0:8fc9e66cbabb | 179 | mbed.org Developer Website |
alj | 0:8fc9e66cbabb | 180 | Lightweight Online Compiler |
alj | 0:8fc9e66cbabb | 181 | High level C/C++ SDK |
alj | 0:8fc9e66cbabb | 182 | Cookbook of published libraries and projects |
alj | 0:8fc9e66cbabb | 183 | */ |