Documentação do Sistema de Aquisição Digital para o EPR - LEF

Documentação do sistema de aquisição digital para o experimento de Ressonância Paramagnética Eletrônica, do Laboratório Avançado de Física do Instituto de Física de São Carlos.

Introdução

Em 1896, Pieter Zeeman desobedeceu as ordens diretas de seu supervisor sobre utilizar equipamentos de laboratório para medir a separação das linhas espectrais por um forte campo magnético. Ele foi demitido por tal insubordinação mas, mais tarde obteve seu reconhecimento: ganhou o Prêmio Nobel de Física de 1902 pela descoberta de que agora é conhecido como o efeito Zeeman [10].

_images/Zeeman.jpg

Pieter Zeeman, físico dinamarquês que ganhou o prêmio Nobel em 1902 pela discoberta do Efeito Zeeman [14].

Thomas Preston descobre em 1897 uma separação anômala em linhas espectrais de amostras na presença de campos eletromagnéticos fortes, conhecido como efeito Zeeman anômalo. Tal efeito recebe o nome de anômalo pois o spin eletrônico ainda era desconhecido.

_images/Thomas.jpg

Thomas Preston, físico irlandês que descobriu o efeito Zeeman Anômalo [15].

Em 1921 Gerlach e Stern observaram que um feixe de átomos de prata submetido a um campo magnético se divide em dois.

_images/Gerlach-Stern.jpg

A esquerda temos Walther Gerlach e a direita Otto Stern

Em uma primeira aproximação o efeito Zeeman pode ser explicado devido a interação do momento angular orbital da amostra com o campo magnético aplicado porém, o experimento de Gerlach e o exterimento de Thomas necessitam de algo mais na teoria quântica que ainda não havia sido proposto.

Foram Uhlenbeck e Goudsmit Fig. 4 que deram uma interpretação correta ao efeito Zeeman anômalo, eles postularam o spin eletrônico, um momento angular quantizado, como uma propriedade intrínseca do elétron.

_images/UhlenbeckGoudsmit.jpg

Uhlenbeck a esquerda e Goudsmit a direita

Essas pesquisas marcaram os fundamentos da espectroscopia por ressonância magnética eletrônica (EPR), pois ela é baseada na transição entre estados quantizados resultante da interação do spin eletrônico com o campo magnético externo.

Em 1931, Breit e Rabi Fig. 5 descreveram os níveis de energia do hidrogênio sobre o efeito de um campo magnético. Rabi estudou transições entre níveis de energia induzidos por um campo magnético oscilante. Este foi o primeiro experimento a observar ressonância magnética (NMR).

_images/BreitRabi.jpg

Breit a esquerda e Rabi a direita

Em 1945, foi feita a primeira observação de um pico de ressonância paramagnética eletrônica (EPR), quando Zavoisky Fig. 6 detectou a linha de absorção de radiofrequência de uma amostra de CuCl2.2H2O.

Apesar do NMR ser mais utilizado, as duas técnicas, EPR e NMR, se desenvolveram praticamente juntas, [5], [6]. Em meados da década de sessenta a espectroscopia por NMR massa por um grande avanço com o desenvolvimento de espectroscopia NMR por FT (transformada de Fourier). A técnica equivalente para o EPR demorou a ser desenvolvida devido a dificuldades intrínsecas de se trabalhar com microondas.

Atualmente já existem espectrômetros EPR comerciais [2].

_images/Zemman-Zavoisky.png

A esquerda vamos Pieter Zeeman, descobriu a separação de linhas espectrais devido a campos magnéticos o que ficou conhecido como efeito Zeeman. A direita temos Yevgeny Konstantinovich Zavoisky, ele foi o primeiro a medir efeito de ressonância paramagnética eletrônica.

A montagem deste experimento no Laboratório Avançado de Física do Instituto de Física de São Carlos começou com o professor Horácio Carlos Panepucci e o professor Claudio José Magon terminou a primeira versão. Finalmente na segunda metade do ano de 2016, sob supervisão do professor Luiz Antônio de Oliveira Nunes e do técnico Antenor Fabbri Petrilli Filho, os alunos Emilio Frari Galera e Heitor Pascoal de Bittencourt desenvolveram um sistema digital para aquisição dos espectros.

O novo sistema foi desenvolvido utilizando um microcontrolador Atmega328p, da plataforma Arduino, com módulos para: comunicação digital com o amplificador lock-in e conversor analógico-digital para leitura do campo magnético. Além da eletrônica, foi desenvolvida uma interface gráfica para aquisição dos espectros utilizando linguagem Python 2.7.

Descrição Teórica

EPR ou Ressonância Paramagnética Eletrônica é uma técnica espectroscópica utilizada para analisar amostras que possuem orbitais populados por apenas um elétron. Elétrons são partículas de spin meio, tais partículas tem momento magnético dado por \(m_s g_e \mu_B\), onde \(m_s\) pode ser +1/2 ou -1/2, \(\mu_B\) é o magneton de Bohr e \(g_e\) é o fator g de Landé, que para o elétron livre vale aproximadamente 2.0023.

Na presença de um campo magnético externo e temperatura maior que zero absoluto, o momento magnético acopla paralelamente ou antiparalelamente com o campo e da origem a energias ligeiramente diferentes de acoplamento, esse acoplamento é conhecido como efeito Zeeman. A energia desse acoplamento é dada por [12][3]:

()\[E = m_s g_e \mu_B B_0\]

A variação de energia entre esses níveis é:

()\[\Delta E = g_e \mu_B B_0.\]

Note que quando um elétron passa de um nível a outro ele pode emitir ou absorver \(\Delta E\) na forma de um fóton com frequência \(\nu\) e energia \(h\nu\), que é igual a energia de transição \(\Delta E\).

Essa associação, entre a frequência do fóton e \(\Delta E\), é importante pois esse espectrômetro usa uma fonte de radiação de frequência conhecida e uma varredura de campo magnético para obter o espéctro de amostras.

Dentro da amostra a probabilidade de um elétron ter spin \(m_s = 1/2\) é [9]:

()\[P_{1/2} = \frac{e^{-\frac{E_{1/2}}{k_bT}}}{e^{-\frac{E_{1/2}}{k_bT}}+ e^{-\frac{E_{-1/2}}{k_bT}}}\]

e a probabilidade de um eletron ter spin \(m_s = -1/2\) é, de maneira similar:

()\[P_{-1/2} = \frac{e^{-\frac{E_{-1/2}}{k_bT}}}{e^{-\frac{E_{1/2}}{k_bT}}+ e^{-\frac{E_{-1/2}}{k_bT}}}\]

A partir da razão entre as duas probabilidades é possível obter uma entimativa da quantidade relativa de elétrons com spin \(1/2\) e \(-1/2\).

()\[\frac{P_{1/2}}{P_{-1/2}} = \frac{ e^{-\frac{E_{1/2}}{k_bT}} }{e^{-\frac{E_{-1/2}}{k_bT}}} = e^{ - \left ( \frac{E_{1/2}}{k_bT} - \frac{E_{-1/2}}{k_bT} \right )} = e^{-\frac{\Delta E}{k_bT}} = e^{-\frac{h\nu}{k_bT}}\]

O \(\Delta E\) típico para acoplamento entre spin e campo magnético está dentro do espéctro de frequência de microondas, para uma frequência de \(\nu \approx 9.75 \, GHz\) (\(h \nu \approx 40 \, \mu eV\)) e temperatura de \(298 \, K\) a equação acima da uma razão aproximadamente \(0.998\).

Isso mostra que há um número ligeiramente maior de elétrons com spin \(-1/2\). Tais elétrons absorvem energia para mudar de estado, portanto a espectroscopia por EPR funciona observando a absorção de microondas pela amostra na região de energia entre os níveis acoplados pelo campo magnético externo.

Na montagem experimental desta prática, o sinal de absorção do EPR é extremamente pequeno e uma maneira de observa-lo é utilizar um amplificador lock-in.

Um amplificador lock-in é um tipo de amplificador que extrai um sinal, com uma modulação conhecida, de um ambiente extremamente ruidoso. Dependendo do instrumento e da montagem em que se encontra, é possível extrair sinais 1 milhão de vezes menos intenso que o ruído.

O lock-in utiliza um tipo de detecção chamada detecção sensível a fase. Para isso ele necessita de um sinal de referência, que nesse experimento é um sinal senoidal de \(\sim 30 KHz\), esse sinal também é passado para a bobina interna do EPR, pois o lock-in mede sinais modulados pelo sinal de referência [13].

Vamos supor que \(Y(H)\) seja a função absorção de uma amostra dentro do EPR onde H é o campo produzido pelo eletroímã, esse campo varia de maneira bem lenta e passa pelos eventuais picos de absorção da amostra. O sinal de referência do lock-in também passa pelo EPR e esse varia de maneira muito rápida, em comparação com o a variação do campo H.

Com isso em mente, expandindo a função de absorção Y(H) do campo gerado pelo eletroímã em terno de um ponto H” na curva de Y(H) temos:

()\[Y(H') = Y(H) + {\frac{\mathrm{d} Y}{\mathrm{d} H}}(H' - H) + \frac{1}{2}\frac{\mathrm{d}^2 Y}{\mathrm{d} H^2}(H' - H)^2 + ...\]

Como a função Y(H) varia de maneira muito lenta no tempo em comparação com o sinal de referência do lock-in, a diferença H” - H pode ser vista como uma função periódica de frequência igual a do sinal de referência.

()\[H - H' = f(t) = H_m sen(\omega_m t)\]

Isso é possível pois o campo é modulado pelo sinal de referência do lock-in. O campo varia lentamente mas, há uma modulação pequena e muito rápida que ocorre em torno do valor H.

()\[Y(H') = Y(H) + {\frac{\mathrm{d} Y}{\mathrm{d} H}}H_m \sin(\omega t) + \frac{1}{2}\frac{\mathrm{d}^2 Y}{\mathrm{d} H^2}H_m^2 \sin^2(\omega t) + ...\]

O lock-in funciona multiplicando o sinal de entrada, a ser amplificado, pela referência \(sen(\omega t)\).

()\[Y(H') = Y(H) \sin(\omega t) + {\frac{\mathrm{d} Y}{\mathrm{d} H}} H_m \sin^2(\omega t) + \frac{1}{2}\frac{\mathrm{d}^2 Y}{\mathrm{d} H^2} H_m^2 \sin^3(\omega t) + ...\]

O resultado dessa multiplicação passa por um filtro passa baixa, isso é equivalente a integrar o sinal em um período de tempo. A função seno é uma função impar e portanto quando a integramos em um número inteiro de períodos ou por um intervalo de tempo grande o suficiente para conter vários períodos os termos de potencia impar vão a zero e apenas os termos com potências pares contribuem para o resultado. Assim podemos concluir que, dessa integração, o primeiro termo não nulo é:

()\[S(H) = \frac{1}{2} H_m \frac{\mathrm{d} Y}{\mathrm{d} H}\]

Portando vemos que o que realmente observamos no EPR é a derivada do sinal de absorção.

Montagem Experimental

Cuidados

Alguns cuidados devem ser tomados antes e durante a operação do equipamento, a fim de que nada seja danificado:

  1. Tenha certeza de que há água para refrigerar o klystron e as bobinas. Verifique visualmente a circuilação da água e fique atento a varições no som da água circulando.
  2. Sobrevoltagem no klystron. Não aplique uma tensão de feixe superior a 250 V e uma tensão de refletor superior a 200 V.
  3. Não lique o klystron antes de o mesmo estar aquecido. O klystron pode ser permanentemente danificado caso isso aconteca. Aguarde pelo menos dois minutos entre ligar o filamento e aplicar a alta tensão no klystron. A água para refrigeração deve estar ligada antes destes dois procedimentos.
  4. Certifique-se de abrir a torneira correta. Apenas uma torneira de água tem uma mangueira ligada. A outra não. Caso a torneira errada seja aberta, o equipamento será molhado e pode ser permanentemente danificado.

Descrição e funcionamento

O equipamento necessário para se fazer espectroscopia por EPR consiste de um magneto com controle de campo magnético, klystron para gerar a microonda, sistema de modulação de sinal, amplificador lock-in e registrador. Um diagrama da montagem encontra-se na figura Fig. 7 a seguir.

_images/diagrama_blocos_trambolho.jpg

Diagrama de blocos do EPR

_images/Diagrama-arduino.png

Diagrama das ligações do Arduino com o equipamento utilizado.

Além do registrador mecânico do resultado, foi adicionado um sistema digital de aquisição de dados, que consiste em um microcontrolador Arduino e uma interface através de um microcomputador.

Todo o equipamento utilizado está registrado a seguir.

Na figura Fig. 9 a seguir, vemos como era o equipamento antes da modernização. Na figura Fig. 10 a seguir vemos a nova montagem, com o novo sistema de aquisição de dados utilizando um computador e Arduino para aquisição e visualização de dados.

_images/sala.jpg

Foto da sala. (1) magneto, (2) controlador de varredura, (3) osciloscópio analógico, (4) fonte do klystron, (5) amplificador de audio, (6) lock-in, (7) frequencímetro, (8) fonte do ímã, (9) refletor desafador de microondas e (10) equipamento utilizado para desenhar o sinal do EPR, esse aparelho será substituído por um sistema de aquisição de dados utilizando um arduino e um microcomputador.

_images/sala_nova.jpg

Foto da sala após a modernização pelos alunos Emilio Galera e Heitor de Bittencourt. (1) magneto, (2) controlador de varredura, (3) osciloscópio analógico para observar o modo de oscilação do klystron, (4) fonte do klystron, (5) amplificador do sinal de modulação, (6) lock-in, (7) frequencímetro, (8) fonte do ímã, (9) refletor desafador de microondas, (10) computador para aquisição de dados, (11) voltímetro digital de alta precisão, (12) gerador de sinais, (13) emissor de microondas klystron.

Neste experimento, é utilizada radiação eletromagnética de aproximadamente 10 GHz. Para emissão desta frequência, é utilizado um klystron, modelo VA-217C, fabricado pela Varian e mostrado na figura Fig. 11 abaixo. A fonte para ligá-lo está mostrada na figura Fig. 12.

_images/klystron.jpg

Emissor de microondas klystron. Note o parafuso cinza. Este ajusta o centro de emissão de microondas.

_images/fonte_klystron.jpg

Fonte do klystron. (1) medidor da corrente do feixe de etétrons. (2) formato da função de onda do klystron, pode ser C.W (onda contínua), onda dente de «serra» ou onda pulsada. (3) tensão do feixe de elétrons, (4) tensão do refletor do feixe. (5) chave para ligar e desligar a fonte, note que a mesma possui 3 estágios, off para desligar o equipamento, FIL para ligar apenas a tensão do filamento e HV+FIL para ligar a alta tensão e a tensão no filamento. Não ligue a fonte direramente em HV+FIl, o filamento deve esquentar primeiro na opção FIL.

A cavidade para inserir a amostra, Fig. 13 encontra-se entre as duas bobinas do eletroímã. No interior da mesma, há duas bobinas de modulação de sinal. A cavidade deste equipamento possui duas entradas para amostras: uma por cima, como mostrado na figura, e outra por baixo, Fig. 22. Isso é feito para que uma amostra de referência seja usada simultaneamente com a amostra a ser analisada.

A cavidade possui um parafuso de teflon para ajustar o acoplamento com a amostra. Esse parafuso deve ser ajustado cada vez que uma amostra é inserida.

Também há uma bobina pick-up próxima à cavidade para medir o sinal de modulação.

_images/cavidade.jpg

Cavidade do espectrômetro. (1) local onde a amostra é colocada. (2) parafuso de ajuste de sintonia amostra-cavidade. (3) bobina pick-up.

Além do ajuste da cavidade, também é necessário o ajuste de um sinal refletido. Esse sinal é defasado e é possível ajustar a fase e a amplitude, atrávez de um refletor, Fig. 14. O refletor consiste de um pino metálico que é inserido na guia de onda. O comprimento de penetração determina a intensidade do sinal refletido e a posição determina a fase.

Acima do defasador, existe um absorvedor de microondas, para que exista somente uma reflexão de sinal.

_images/defasador.jpg

Refletor defasador de microondas. (1) parafuso para inserir ou retirar o defasador da guia de onda, (2) ajuste de fase do defasador. Acima (3) encontra-se o absorvedor de microondas.

O sistema de controle de varredura, Fig. 15, gera um sinal de tensão que controla a corrente do eletroímã. A fonte do magneto, Fig. 16, produz uma corrente proporcional à tensão lida. Sabemos que o campo magnético produzido é linearmente proporcional à corrente, assim, conseguimos controlar o campo.

O controlador de Varredura gera um sinal linear ao redor de um valor de offset, selecionado manualmente.

O intervalo de campo magnético varrido é controlado por uma chave seletora, e o intervalo de tempo para fazer tal varredura é selecionado por outra chave. Essas seleções também podem ser feitas por software, já que foi adicionada essa funcionalidade. Há uma chave que indica como é feita esta seleção: por software, utilizando um Arduino, ou manualmente, utilizando as chaves.

_images/controlador_varredura.jpg

Controlador de varredura do campo magnético. Chave para ligar e desligar o controlador (1), três botões estilo rádio para controlar respectivamente o tempo de varredura (em minutos) (2), a largura do campo varrido (em Gauss) (3) e o mais importante, \(B_0\), o referencial do campo para varredura (4). Os botões de disparo, para iniciar (5) e parar (6) a varredura. (7) é a chava seletora de modo de operação: controle por software utilizando Arduino, ou controle manual utilizando as chaves (2) e (3). (8) é uma saída com uma estimativa do valor do campo magnético, com escala de 0.1 V para 1000 Gauss. (9) é uma saída de tensão linear entre 0 e 1 V, para ser utilizada com um registrador gráfico. (10) é uma entrada para disparo de varredura. (11) é o valor de tensão enviado para a fonte do magneto.

_images/fonte_TCA.jpg

Fonte do eletroímã. (1) botão para ligar e (2) botão para desligar a fonte.

O gerador de sinal, Fig. 17, para modulação de campo produz uma tensão senoidal de cerca de 30 KHz, que é amplificado, Fig. 18 e então vai para a bobina da cavidade.

Um capacitor está ligado em série com a bobina de modulação. Esse capacitor tem duas funcionalidades: na frequência de ressonância, esse circuito RLC se comporta como um sistema puramente resistivo e também para retirar um nível DC de sinal, que poderia aquecer a bobina.

_images/gerador_sinais.jpg

Gerador de sinais.

_images/amplificador_audio.jpg

Amplificador do sinal para modulação. (1) botão para ligar. (2) ajustes de ganho.

O sinal da amostra é amplificado por um amplificador lock-in. Nessa montagem, utilizamos o modelo SR510, da Stanford Research Systems. Além do sinal da amostra, um sinal de referência do gerador de sinais também é usado.

_images/lock-in.jpg

Amplificador lock-in. (1) sinais de entrada, (2) display do aparelho, (3) sensibilidade de medida, (4) ajuste de fase do sinal de entrada, (5) controle de constantes de tempo para integração do sinal (médias).

O klystron e o magneto devem ser refrigerados para não superaquecerem. Para isso, um sistema de refrigeração por água é usado. As torneiras, Fig. 20, encontram-se atrás do magneto. Cuidado para não abrir a torneira errada.

_images/torneiras.jpg

Registro geral de água (1) e torneiras para refrigeração, ligue apenas a torneira (1) e o registro (2). Cuidado para não abrir a torneira errada e molhar o equipamento. Essas torneiras se encontram atrás do ímã.

O Arduino com módulos ADC e RS-232 foi colocado dentro do controlador de varredura, de modo que apenas os cabos USB, para interface com o computador, e serial, para interface com o lock-in, fiquem para fora.

_images/arduino-lindo-3.jpg

Arduino (1) com módulos ADC (2) e RS-232 (3), no interior do controlador de varredura.

Instruções

Existe um conjunto de passos que devem ser seguidos para operar este espectrômetro. Alguns equipamentos são sensíveis a pequenas variações de algum parâmetro e queimam facilmente.

Se você queimar o klystron, você será jubilado. Há três modos simples para isso acontecer:

  1. Superaquecimento do klystron.
  2. Tensão do feixe superior a 250 V ou do refletor superior a 200 V.
  3. Ligar o klystron antes de o mesmo estar aquecido.

Muito cuidado ao manusear os tubinhos de amostra. Eles são feitos de quartzo ultrapuro, para não haver impurezas magnéticas. Por esse motivo, são muito caros e também frágeis.

Siga os passos abaixo para ligar e desligar corretamente o equipamento.

Ligar o espectrômetro

  1. Certifique-se de que os disjuntores da sala (atrás da porta) encontram-se ligados.

  2. Abra o registro de água e a torneira para refrigerar o klystron e o eletroímã, Fig. 20.

    De tempos em tempos, verifique com os dedos a temperatura do klystron e das bobinas. O klystron deve estar morno, isto é, o contato com seus dedos nao deve ser desconfortável. As bobinas devem estar na temperatura ambiente.

    Caso você perceba algum aquecimento, chame o técnico do laboratório imediatamente.

  3. Ligue o controle de varredura, Fig. 15, do campo e coloque o potenciômetro B0 em zero.

  4. Coloque a amostra DPPH na cavidade. Esse passo é crítico. Caso a amostra não esteja corretamente no centro da cavidade, será muito difícil obter um sinal.

    A amostra é bem pequena e encontra-se no fundo do tubo. Antes de inserir a amostra na cavidade, meça a posição do centro, como na Fig. 22.

    _images/amostra_centro.jpg

    Posição correta da amostra na cavidade. Note que existem 2 entradas para colocar amostras, (1) e (2). Isso será importante para os experimentos.

  5. Ligue a fonte de corrente do eletroíma, Fig. 16, e coloque seus controles de voltagem e corrente no máximo.

  6. Aumente B0 no controlador de varredura até que a corrente do eletroímã esteja perto de 32 A.

  7. Verifique os controles da fonte do klystron (Fig. 12): function: dente de serra, Sq. wave freq (CPS): 400, beam: 250 V, refletor: 150 V,

  8. Ligue a fonte do klystron na primeira posição (FIL), aguarde dois minutos e passe para a posição HV-FIL. Esse atraso é importante para dar tempo ao filamento do klystron se aquecer. Se o filamento não estiver aquecido, o klystron pode se destruir. Imediatamente após ligar HV-FIL, verifique se a corrente do feixe (beam Curent) indica próximo de 30 mA. Caso não esteja, chame o técnico do laboratório.

  9. Ligue o osciloscópio no modo XY e ajuste a amplitude de modulação na fonte do klystron para observar o modo de oscilação do klystron e de absorção da cavidade, como mostrado nas figuras Fig. 23 e Fig. 24.

    _images/cavidade_klystron.jpg

    Klystron em sintonia com a cavidade.

    _images/cavidade_klystron_fora_sintonia.jpg

    Klystron fora de sincronia

    Talvez seja necessário ajustar o parafuso do klystron, Fig. 11, para centralizar a absorção da cavidade no centro do modo.

  10. No defasador de microondas, Fig. 14, desparafuse o pino (sentido anti-horário) até que não haja reflexão de microondas. Você saberá que não há mais reflexão de microondas quando não houver mudança na forma do modo ao deslocar a posição do pino. Basta desparafusar algumas voltas, não retire o parafuso que controla a profundidade do pino.

  11. Se o item anterior foi executado corretamente, a única microonda que atinge o detector é a refletida pela cavidade. Estava deve ser nula quando a frequência do klystron for igual à de ressonância da cavidade. Observando a absorção da cavidade no osciloscópio, ajuste o parafuso de sintonia da cavidade, Fig. 13, para máximo acoplamento. Utilize uma chave de fenda não-magnética, de latão ou cobre.

    _images/acoplamento_cavidade_klystron1.jpg

    Klystron fora de sintonia.

    _images/acoplamento_cavidade_klystron3.jpg

    klystron em sintonia, cavidade desacoplada.

    _images/acoplamento_cavidade_klystron2.jpg

    klystron ok e cavidade ok.

  12. Introduza reflexão no defasador parafusando o pino (sentido horário). Observando o osciloscópio, desloque o mínimo da absorção da cavidade verticalmente, aproximadamente uma divisão, conforme ilustrado na Fig. 28 a seguir.

    _images/reflexao_boa.jpg

    Reflexão de microonda desloca o mínimo de absorção.

  13. Observe a mudança na forma do sinal no osciloscópio quando você altera a fase do braço de referência. Ajuste a fase da reflexão para que o mínimo de absorção tenha um valor máximo.

  14. Mude a função de modulação do klystron de dente de serra para CW. Ajuste a voltagem do refletor para que o ponto no osciloscópio tenha um valor mínimo. Para fins de referência, ajuste a posição desse ponto no centro da tela do osciloscópio (ajustes no osciloscópio apenas), Fig. 29.

    _images/CW.jpg

    Ponto centralizado na tela.

    De tempos em tempos, verifique se o ponto continua no centro da tela. Talvez seja necessário refazer este ajuste após um tempo de operação do espectrômetro.

  15. Ligue o gerador de sinais, Fig. 17. Selecione onda senoidal de cerca de 25 kHz. E posteriormente ligue o amplificador de áudio, Fig. 18, com ganho de 1X.

    Ligue a bobina pick-up, Fig. 13, a um osciloscópio e observe o sinal. Altere a frequência para maximizar o sinal visto.

  16. Ligue o lock-in. Em seu painel verifique a sensibilidade está marcando \(200 \mu V\) e constante de tempo em \(100 \, ms\). Talvez seja necessário ajustar o offset para evitar saturação do sinal.

  17. Agora deve ser possível observar o sinal do EPR no display do lock-in. No controlador de varredura, varie B0 até que no display do lock-in seja possível observar uma variação brusca do sinal. Varie B0 com cuidado, o aparelho é muito sensível a pequenas variações de campo.

  18. Talvez seja necessário ajustar a fase do lock-in. Para isso, varie B0 até achar um pico de sinal. Após achar o campo tal que o sinal é máximo, altere a fase do amplificador em \(90 ^\circ\) e faça um ajuste fino para que o sinal seja minimizado. Em seguida, retire a fase de \(90 ^\circ\). É muito mais fácil minimizar o sinal em quadratura do que maximizar o sinal em fase.

  19. Verifique se o cabo USB do controlador de varredura esta ligado no computdaor.

  20. Inicie o programa EPR-LEF com o comando python EPR-LEF.py.

    Neste programa, o usuario tem controle sobre o tempo da verredura e o intervalo de campo a ser medido.

    Há também a opção de salvar ou ler um gráfico, limpar a tela do gráfico e iniciar e parar a varredura.

    Exemplo de uma aquisição está na Fig. 30 a seguir.

    _images/sinal-epr.png

    Tela do programa, após uma aquisição com 1000 gauss de varredura.

    Note que o campo magnético, indicado como eixo x no gráfico, é uma estimativa. Fica a cargo do aluno fazer um ajuste fino para recalibração.

Desligar o espectrômetro

  1. No defasador, desparafuse o pino até que não haja mais reflexão de microondas.

  2. Na fonte do klystron, coloque na função dente de serra.

    Desligue a alta tensão. Para isso, coloque a chave em FIL.

    Obersve no osciloscópio o sinal do klystron desaparecer e depois deligue a fonte (OFF).

  3. No controle de varredura do campo, coloque B0 em zero e depois desligue a fonte de corrente do eletroímã. Isso é necessário para evitar que a tensão contraeletromotriz queime a eletrônica.

  4. Desligue todos os demais equipamentos.

  5. Retire a amostra da cavidade e guarde no lugar correto.

  6. Feche o registro de água.

  7. Organize a sala.

  8. Desligue os disjuntores da sala.

Parâmetros Iniciais do Espectrômetro

Fonte do klystron Lock-in Amplificador
Beam voltage: 250 V Sensitivity: 200 \(\mu V\) Ganho: 1X.
Reflector voltage: 150 V Time constant: 100 ms  
Function: CW    
Sq. Wave Freq (CPS): 400    

Testes

Ligar o equipamento

Ligue o equipamento e entenda cada parâmetro

Espectro da amostra DPPH

Nesta prática vamos utilizar uma amostra que é comumente empregada para procedimentos de calibração dos espectrômetros de RPE. Trata-se do DPPH, ou, 2,2-diphenyl-1-picrylhydrazyl. Na forma sólida (como a que vamos usar), o espectro de EPR do DPPH consiste de uma única linha muito intensa, relativamente estreita (largura de aproximadamente 2 G), centralizada em \(g = 2.0038\), e ligeiramente assimétrica.

Colocar o tubo contendo DPPH na cavidade. A amostra é muito pequena (fração de milímetros) e está colocada no fundo do tubo, enrolada em fita teflon (por isso ela é branca e não negra, como seria a cor natural do DPPH). Posicione cuidadosamente a amostra no centro da cavidade. Ajustar o espectrômetro e medir o sinal utilizando varredura de 50 G. Meça o valor do campo magnético no centro da linha com uma sonda Hall e a freqüência da microonda com o frequencímetro e, a partir destes dados, calcule o fator \(g\) do DPPH. Compare com o valor tabelado: \(g = 2.0038\).

Análise do efeito conjunto da constante de tempo e velocidade de varredura

Varie a constante de tempo do lock-in entre os valores de 10 ms a 10 s, registrando os sinais com varreduras de 0.5 min, 1 min e 3 min. Explique os resultados com base nas informações deste texto e das referências [7] e [8].

MgO + Cr3+ + Mn2+

Esta é uma amostra de um cristal MgO dopado com \(Cr^{3+}\) e \(Mn^{2+}\). Apesar de ser uma amostra cristalina, seu espectro é isotrópico e consiste de duas componentes: um sexteto resultante da interação hiperfina com o núcleo do Manganês, I = 5/2, e uma linha intensa (com transições proibidas laterais) proveniente do Cromo. O fator g da linha intensa é 1.9797. Esta amostra também é muito pequena e está colocada no fundo do tubo. Posicione cuidadosamente a amostra no centro da cavidade.

Devido ao fato de que a linha central é intensa e relativamente estreita e ter um fator g menor que 2, esta amostra é também muitas vezes utilizadas como marcador para finalidades de calibração. Em adição a esta linha central mais intensa, você deverá observar também seis linhas menos intensas, separadas por cerca de 80-100 Gauss devido ao \(Mn^{2+}\). Como o espectro é largo, faça a medida utilizando uma varredura lenta de 1000 Gauss.

Duas amostras

Realizar a calibração das varreduras de 100 G, 500 G e 1000 G. Para isto, deve-se montar as duas amostras, DPPH e MgO simultaneamente na cavidade, ver Fig. 22. A idéia é registrar os dois sinais simultaneamente, em uma única varredura. Como o sinal do DPPH é mais intenso, esta amostra deve ser colocada por baixo, um pouco abaixo do centro da cavidade.

Para isso, não toque na amostra de MgO já instalada e medida; e introduza o tubo com a amostra de DPPH na cavidadepor baixo, com cuidado, até que ele toque o outro tubo e, depois, volte um pouquinho. A amostra de DPPH deve ficar a apenas alguns milímetros abaixo da de MgO. Nesta situação, os dois espectros irão ser registrados com intensidades semelhantes.

Resultados

DPPH

Para a amostra DPPH, obtivemos os seguintes espectros, com parâmetros de varredura diferentes:

_images/DPPH-1Kgauss-5min.png

Espectro de DPPH, com 1000 gauss de varredura de campo magnético, realizado durante cinco minutos. No lock-in, a sensibilidade de \(200 \, \mu V\) e constante de tempo de 30 ms.

_images/DPPH-50gauss-1min.png

Espectro de DPPH, com 50 gauss de varredura de campo magnético, realizado durante um minuto. No lock-in, a sensibilidade de \(200 \, \mu V\) e constante de tempo de 100 ms.

MgO + Cr3+ Mn2+

Para a amostra de \(MgO + Cr^{3+} Mn^{2+}\), realizamos uma medida com varredura de 1000 gauss, já que as linhas do íon de manganês tem uma distância da ordem de 100 gauss cada:

_images/super-sinal.png

Espectro da amostra MgO + Cr + Mn com varredura de 1000 gauss, realizado durante cinco minutos. No lock-in, a sensibilidade de \(20 \, \mu V\) e constante de tempo de 100 ms.

Podemos ver claramente o pico central do íon de Cromo e cinco picos de menor intensidade do íon de Manganês.

DPPH + MgO + Cr3+ Mn2+

Para a combinação de ambas as amostras, realizamos duas medidas. Todas com varredura de 1000 gauss com duração de 5 minutos, mas constantes de tempo do lock-in diferentes.

Nesse caso, a intensidade máxima do sinal obtido foi de \(15 \mu V\). Vemos que é possível identificar picos de sinal de cerca de dezenas de nV com esse equipamento.

Podemos ver claramente que aumentar a constante de tempo do amplificador reduz o ruído do sinal, mas também altera a forma dos picos.

_images/duasAmostras-1Kgauss-5min-1ms.png

Espectro das duas amostras combinadas, com varredura de 1000 gauss, realizada durante 5 minutos. No lock-in, a sensibilidade de \(100 \, \mu V\) e constante de tempo de 1 ms.

_images/duasAmostras-1Kgauss-5min-30ms.png

Espectro das duas amostras combinadas, com varredura de 1000 gauss, realizada durante 5 minutos. No lock-in, a sensibilidade de \(100 \, \mu V\) e constante de tempo de 30 ms.

Os dois picos centrais, de alte intensidade são referentes à DPPH, com campo menor, e o Cromo, com campo ligeiramente maior. Os cinco picos pequenos são do Manganês.

Hardware

A contribuição dos alunos Emilio Frari Galera e Heitor Pascoal de Bittencurt para esse experimento foi desenvolver um sistema de controle e aquisião de dados digital.

Para isso, utilizamos uma placa Boarduino, que consiste em um arduino adaptado, essa pequena placa utiliza o mesmo microcontrolador que que um Arduino Uno, o ATmega328 [1], porém, possui a vantagem de ter entradas para 4 periféricos nanoshields, [4]. Nanoshields são pequenos módulos, de fácil instalação, basta colocá-los na placa e incluir sua biblioteca no código para usá-los, o próprio boarduino possui um pino fixo para impedir que os módulos sejam colocados de maneira errada.

Neste projeto utilizamos 2 nanoshields, um convesor analógico digital, ADC, para ler a tensão de referência da rampa e a tensão de estimativa de campo no EPR, essa duas tensões são medidas no próprio controlador de varredura. Um nanoshield para fazer comunicação serial com o amplificador lock-in e obter medidas do sinal do EPR.

Observando a Fig. 8 podemos ver como tudo está ligado.

O Arduino se comunica com o lock-in por serial RS232 pelos pinos D10 e D11, transmissor e receptor (Tx e Rx), por intermédio do nanoshield RS232, veja o apêndice sobre o nanoshield RS232. O lock-in recebe um comando enviado pelo arduino e retorna uma resposta correspondente em string.

Importante: O programa foi feito para se comunicar com o lock-in com Baud rate de 9600, qualquer alteração no Baud rate deve ser feita com cuidado pois os bits de configuração do lock-in devem ser reconfigurados, de acordo com [11].

O nannoshield ADC se comunica com o arduino através do protocolo i2c, o i2c serve tipicamente para comunicar circuitos integrados periféricos (no caso, o nanoshield ADC) com microcontroladores (no caso, o arduino Boardoino).

O ADC lê as tensões de referência e campo e envia tudo para o arduino pela i2c, Fig. 8.

Note o divisor de tensão na leitura da tensão da rampa, Fig. 8, isso é importante pois o ADC está configurado para ganho máximo, para esse conversor isso significa um fundo de escala para leitura de tensão de 256mV, tensões maiores podem danificar o ADC.

O tempo de varredura e a largura do campo magnético são controlados pelo arduino através dos pinos D4 e D5 para o tempo e D6 e D7 para o campo.

O controlador de varredura permite 4 tempos de varredura e 4 valores diferentes de larguras de campo. Os 4 valores de tempo são controlados pelos pinos D4 e D5 através de um multiplexador, o campo é controlado de maneira similar, veja os comentários no código de Firmware.

A comunicação do Boarduino com o computador é feita através de uma porta USB

Softwares desenvolvidos

Interface Gráfica

A interface gráfica foi feita em linguagem python. Para rodar o programa corretamente é necessário ter o Python 2.7 com os seguintes pacotes instalados:

  1. Matplotlib - pacote padrão para plotar gráficos.
  2. PySerial - pacote utilizado para comunicação serial entre python e arduino.
  3. numpy - pacote fundamental para computação científica com python.
  4. Tkinter - pacote para gerenciar a interface gráfica, um intepretador de TK.

Sistemas linux, como Ubuntu e Debian, costumam vir com python2.7 instalado como padrão. Caso o aluno não tenha python em seu computador basta instalá-lo através do gerenciador de pacotes de seu sistema, em ubuntu, por exemplo, digite sudo apt-get install python2.7.

Em windows aconselhamos instalar a distribuição *Python(x,y)*, pois nela já se encontram todos os pacotes necessários. Ao instalar o python(x,y) verifique se as bibliotecas necessárias estão selecionadas para instalação.

# encoding: utf-8
"""
@author Emilio Galera, Heitor de Bittencourt
@date Dezembro, 2016
Interface gráfica para o sistema EPR do LEF.
"""

from Tkinter import *
from tkFileDialog import askopenfilename, asksaveasfilename
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
import matplotlib.ticker as mtick
import serial
import serial.tools.list_ports
import time
import numpy as np
import struct
import random


global count_max
count_max = 500000

global stop_flag
stop_flag = False

# tempo entre aquisições (em milisegundos)
global delay
delay = 1

global number_of_points
number_of_points = 1

global mean
mean = 1

global x_axis
x_axis = []

global y_axis
y_axis = []

global b_axis
b_axis = []


# descobre qual a porta que o arduino esta conectado
def get_arduino_port():
    ports = list(serial.tools.list_ports.comports())
    for p in ports:
        if "Arduino" in p[1]:
            print("Arduino in", p[0])
            return p[0]
    print("Did not find arduino. Using \"/dev/ttyUSB0\" as fallback.")
    return "/dev/ttyUSB0"

#essa função se comunica com o arduino e obtem dados do campo B, rampa
#do registrador (tensão de referencia de 0 a 1 volt) e sinal do lock-in
def read_data():
    global count_max
    sem_dados = True
    count = 0
    x = 0.
    y = 0.
    b = 0.
    connection.write("B")
    #print("B")

    ehlo1   = connection.read(1)
    datalen = connection.read(1)
    data    = connection.read(int(datalen))
    ehlo2   = connection.read(1)
    #print(ehlo1, datalen, data, ehlo2)

    if ehlo1 == b'x' and ehlo2 == b'X':
        dados_x = float(data)
    else:
        dados_x = None

    ehlo1   = connection.read(1)
    datalen = connection.read(2)
    data    = connection.read(int(datalen))
    ehlo2   = connection.read(1)

    #print(ehlo1, datalen, data, ehlo2)
    if ehlo1 == b'y' and ehlo2 == b'Y':
        dados_y = float(data)
    else:
        dados_y = None

    ehlo1   = connection.read(1)
    datalen = connection.read(1)
    data    = connection.read(int(datalen))
    ehlo2   = connection.read(1)
    #print(ehlo1, datalen, data, ehlo2)

    if ehlo1 == b'b' and ehlo2 == b'B':
        dados_b = float(data)
    else:
        dados_b = None

    #print dados_x, dados_y
    #print type(dados_x), type(dados_y)
    return dados_x, dados_y, dados_b


# essa função coleta dados e plota os mesmos de maneira recursiva
def plot_received_data(collected_points):

    # se for o primeiro ponto, a função espera até que a rampa inicie
    # para iniciar a coleta.
    if collected_points == 0:
        from_AD_x, from_AD_y, from_AD_b = read_data()
        while True:
            aux, aux2, aux3 = read_data()
            if abs(from_AD_x - aux) > 0.0002:
                break

    global stop_flag

    if not stop_flag:
        from_AD_x, from_AD_y, from_AD_b = read_data()
        while from_AD_x == None or from_AD_y == None:
            from_AD_x, from_AD_y, from_AD_b = read_data()

        global x_axis, y_axis, b_axis
        try:
            # corta os ultimos pontos para não plotar a volta abrupta de
            # tensão da rampa.
            if abs(from_AD_x - x_axis[len(x_axis) - 1]) < .1:
                x_axis.append(from_AD_x)
                y_axis.append(from_AD_y)
                b_axis.append(from_AD_b)

                #graph.scatter(from_AD_x, from_AD_y, color="red")
            else:
                stop_flag = True
            #graph.set_xlim(min(x_axis) * .99, max(x_axis) * 1.01)
            #canvas.draw()

        except IndexError:
            if collected_points == 0:
                x_axis.append(from_AD_x)
                y_axis.append(from_AD_y)
                b_axis.append(from_AD_b)
            else:
                pass

        window.after(delay, plot_received_data, collected_points + 1)

    else:
        bt_on.config(state="normal")
        bt_off.config(state="disabled")
        print len(x_axis), len(b_axis)
        (b, b0), cov = np.polyfit(x_axis, b_axis, 1, cov = True)
        #print b, b0
        B_axis = []
        for x_iten in x_axis:
            B_axis.append(10000. * ((x_iten * b) + b0))
        #print B_axis
        try:
            graph.lines[0].remove()
        except:
            pass
        try:
            graph.clear()
        except:
            pass
        canvas.draw()
        graph.grid()
        graph.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
        graph.xaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
        graph.set_ylabel("Sinal (Volts)", size=18)
        graph.set_xlabel("B (Gauss)", size=18)
        graph.autoscale(True, "y", False)
        graph.plot(B_axis, y_axis, color="red", linestyle="solid", linewidth="2.5")
        graph.set_xlim(min(B_axis) * .99, max(B_axis) * 1.01)
        canvas.draw()

        b_axis = B_axis

        print "Fim da coleta"

# essa função inicia a leitura
#inicia os parâmetros de tempo e varredura antes da leitura
def start_reading():
    global mean

    graph.set_xlim(0, number_of_points)
    canvas.draw()

    tp = tempo.get()
    cp = campo.get()
    #print type(tp), tp
    #print type(cp), cp

    connection.write("T")
    connection.write(str(tp))
    time.sleep(0.1)
    echo1_tp = connection.read(1)
    echo2_tp = connection.read(len(str(tp)))
    echo3_tp = connection.read(1)
    if echo1_tp == b't' and echo3_tp == b'T':
        print str(echo2_tp)

    #time.sleep(0.01)

    connection.write("D")
    connection.write(str(cp))
    time.sleep(0.1)
    echo1_cp = connection.read(1)
    echo2_cp = connection.read(len(str(cp)))
    echo3_cp = connection.read(1)
    if echo1_cp == b'd' and echo3_cp == b'D':
        print str(echo2_cp)
    #time.sleep(0.01)


    #time.sleep(0.01)

    mean = '5'
    #print mean
    connection.write("A")
    time.sleep(0.01)
    connection.write(mean)
    time.sleep(0.1)

    try:
        graph.lines[0].remove()
    except IndexError:
        pass

    global x_axis, y_axis, b_axis
    x_axis = []
    y_axis = []
    b_axis = []

    global stop_flag
    stop_flag = False

    bt_on.config(state="disabled")
    bt_off.config(state="normal")
    connection.write("I")
    graph.set_xlabel(u"Tensäo Rampa (Volts)", size=18)
    graph.autoscale(True, "y", False)
    plot_received_data(0)

#força uma parada de leitura, é chamada pelo botão
def stop_reading():
    global stop_flag
    stop_flag = True
    connection.write("P");

#plota o gráfico de um arquivo txt
def plot_file():
    cores = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'g'] #no more white
    # recebe o nome do arquivo a ser lido
    file_name = askopenfilename()
    # Le o arquivo em uma linha e retorna uma matriz com os dados
    data = np.loadtxt(file_name)

    # separa a matriz de dados em vetores para X e Y
    x_axis = data[:, 0]
    y_axis = data[:, 1]
    # grafica
    graph.plot(x_axis, y_axis, "k-", lw="1.5", color = cores[random.randint(0, len(cores)-1)])
    graph.autoscale()
    # desenha
    canvas.draw()

#escreve os dados do ultimo gráfico plotado em um arguivo txt
def write_data():
    global mean
    global x_axis, y_axis

    # recebe o nome do arquivo a ser salvo
    file_name = asksaveasfilename()
    print file_name + "!!!!!"
    header = "Arquivo: " + file_name + "\n"
    header = header + "Numero de pontos: " + str(len(x_axis)) + "\n"
    header = header + "Numero de medias: " + str(mean)

    print header
    # salva os dados
    np.savetxt(file_name, np.transpose(
        [b_axis, y_axis]), delimiter='\t', header=header, comments='# ')

#função chamada quando o botão de limpar a tela for ativado
def clear_plot():
    global x_axis, y_axis
    x_axis = []
    y_axis = []
    # remove o gráfico feito
    graph.lines[0].remove()
    # reseta os limites do gráfico
    graph.set_xlim(0, 1)
    graph.set_ylim(-1, 1)
    # redesenha
    canvas.draw()

# função chamada ao fechar o programa
def on_closing():
    print("Adios")
    # manda o comando C pro arduino resetar
    connection.write("C")
    connection.close()
    window.destroy()

if __name__ == '__main__':
    connection = serial.Serial(get_arduino_port(), 115200, timeout = 2)
    time.sleep(1)
    print("Foi")

    window = Tk()
    window.minsize(width=900,height=600)
    window.title("Trambolhino - EPR - LEF")
    window.state("normal")

    #### divide a janela em áreas ###
    #### TÍTULO ####
    title_area = Frame(window)
    title_area.pack(side="top", fill="y")

    #### GRÁFICO ####
    graph_area = Frame(window)
    graph_area.pack(side="top", fill="both", expand=True)

    #### INTERAÇÃO COM USUÁRIO ####
    user_area = Frame(window)
    user_area.pack(side="bottom", fill="x")
    ###                           ###

    # TÍTULO
    title = Label(title_area, text="Trambolhino - Emilio Galera & Heitor de Bittencourt, 2016",
                  font="arial 14 bold")
    title.pack(side="top", fill="x", expand=True)


    # GRÁFICO

    fig = Figure()

    canvas = FigureCanvasTkAgg(fig, graph_area)
    canvas.draw()
    canvas.get_tk_widget().pack(side="bottom", fill="both", expand=True)

    graph = fig.add_subplot(1, 1, 1)
    graph.grid()
    graph.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
    graph.xaxis.set_major_formatter(mtick.FormatStrFormatter('%.2e'))
    graph.set_ylabel("Sinal (Volts)", size=18)
    graph.set_xlabel("B (Gauss)", size=18)
    graph.autoscale(True, "y", False)

    toolbar = NavigationToolbar2TkAgg(canvas, graph_area)
    toolbar.update()
    toolbar.pack(side="left")


    # USUÁRIO

    # Botões para iniciar e para a leitura, salvar um gráfico em txt
    #(apenas as coordenadas x e y), ler um arquivo txt e plotar o
    #gáfico e limpar a tela.

    user_buttons = Frame(user_area)
    user_buttons.pack(side="right", fill="y", expand=True)

    # grid 2x3 (duas colunas e três linhas)
    user_buttons.columnconfigure(0, weight=1)
    user_buttons.columnconfigure(1, weight=1)
    for i in range(0, 3):
        user_buttons.rowconfigure(i, weight=1)

    bt_on = Button(user_buttons, text="Ler conversor",
                   font="Arial 12 bold", width=10, command=start_reading)
    bt_on.grid(row=0, column=0, pady=3)

    bt_off = Button(user_buttons, text="Parar leitura", font="Arial 12 bold",
                    width=10, state="disabled", command=stop_reading)
    bt_off.grid(row=1, column=0, pady=3)

    bt_write = Button(user_buttons, text="Salvar",
                      font="Arial 12 bold", width=10, command=write_data)
    bt_write.grid(row=0, column=1, pady=3)

    bt_read = Button(user_buttons, text="Ler",
                     font="Arial 12 bold", width=10, command=plot_file)
    bt_read.grid(row=1, column=1, pady=3)

    bt_clear = Button(user_buttons, text="Limpar",
                      font="Arial 12 bold", width=10, command=clear_plot)
    bt_clear.grid(row=2, column=1, pady=3)


    #Radio buttons, para tempo e escala de varredura
    radio_buttons = Frame(user_area)
    radio_buttons.pack(side="left", fill="y", expand=True)

    radio_buttons.columnconfigure(0, weight=1)
    radio_buttons.columnconfigure(1, weight=1)

    for i in range(0, 5):
        radio_buttons.rowconfigure(i, weight=1)

    # Radio button para selecionar o tempo de varredura
    tempo = IntVar()
    titulo_tempo = Label(radio_buttons, text="Tempo", font="Arial 12 bold",width=10)
    titulo_tempo.grid(row = 0, column = 0)

    tempo30RB = Radiobutton(radio_buttons, text = "30 segundos", variable = tempo, value = '0')
    tempo30RB.grid(row = 1, column = 0, sticky = 'W')

    tempo60RB = Radiobutton(radio_buttons, text = "60 segundos", variable = tempo, value = '1')
    tempo60RB.grid(row = 2, column = 0, sticky = 'W')

    tempo3mRB = Radiobutton(radio_buttons, text = "3  minutos", variable = tempo, value = '2')
    tempo3mRB.grid(row = 3, column = 0, sticky = 'W')

    tempo5mRB = Radiobutton(radio_buttons, text = "5 minutos", variable = tempo, value = '3')
    tempo5mRB.grid(row = 4, column = 0, sticky = 'W')

    #Radio button para selecionar o delta B
    campo = IntVar()
    titulo_campo = Label(radio_buttons, text="Campo", font="Arial 12 bold",width=10)
    titulo_campo.grid(row = 0, column = 1)

    campo50G = Radiobutton(radio_buttons, text = "50 Gauss", variable = campo, value = '0')
    campo50G.grid(row = 1, column = 1, sticky = 'W')

    campo100G = Radiobutton(radio_buttons, text = "100 Gauss", variable = campo, value = '1')
    campo100G.grid(row = 2, column = 1, sticky = 'W')

    campo500G = Radiobutton(radio_buttons, text = "500 Gauss", variable = campo, value = '2')
    campo500G.grid(row = 3, column = 1, sticky = 'W')

    campo1000G = Radiobutton(radio_buttons, text = "1000 Gauss", variable = campo, value = '3')
    campo1000G.grid(row = 4, column = 1, sticky = 'W')

    window.protocol("WM_DELETE_WINDOW", on_closing)
    window.mainloop()

Observações importantes

O programa EPR-LEF.py foi testado nos computadores dos alunos, e no computador disponível no laboratório.

Os resultados obtidos nos computadores dos alunos foram satisfatórios, foram coletados pontos suficiente para observar todos os sinais necessários. O computador do laboratório não obteve pontos o suficientes para apresentar resultados aceitáveis: estava lento demais mesmo antes do programa ser rodado. Levantamos a hipótese de que o sistema operacional não era adequado, o computador estava usando Windows XP, formatamos a máquina e colocamos nela o sistema lubuntu, um sistema específico para máquinas com restrição de recursos. Nesse sistema o programa EPR-LEF.py obteve resultados melhores porém, ainda assim, não foi o suficiente para observar sinais claros e limpos.

Nas três máquinas testadas, os resultados foram substancialmente melhorados quando retiramos a função de desenhar o gráfico enquanto os dados são obtidos.

Instabilidades no gerador de rampa também dificultaram as medidas, o mesmo apresenta perda de linearidade no final da varredura a qual não conseguimos solucionar. A imagem Fig. 36 a seguir mostra este problema. Ligamos um osciloscópio digital nas saídas de tensão para a fonte do eletroímã (mostrado na curva amarela) e também na saída para registrador gráfico (em azul).

A curva azul deveria ser linear de zero a cerca de um volt, com duração de 300 segundos, mas vemos que rampa está muito instável: após cerca de 100 segundos, a tensão sobe abruptamente para o valor máximo, tendo duração de cerca de 140 segundos.

_images/rampa_osciloscopio.jpg

Saídas do controlador de varredura vistas no osciloscópio. Em amarelo, vemos o sinal enviado para a fonte do magneto, em azul está a rampa a ser usada em registrador gráfico. Esse sistema apresenta um problema de instabilidade muito acentuado: a rampa (azul) era para ser linear, de zero a um volt, com duração de 300 segundos, mas após cerca de 100 segundos rampa atinge abruptamente o valor máximo.

Recomendamos fortemente aos alunos que irão realizar esta prática que utilizem seus próprios computadores para coleta de dados com o programa EPR-LEF.py

Firmware para Arduino

Para obter os dados de tensão da rampa e sinal do lock-in utilizamos um microcontrolador Arduino.

Para programá-lo utilizamos linguagem C++. O arduino da caixa já está carregado com o programa de aquisição de dados mas, caso seja necessário carregá-lo novamente são necessárias algumas bibliotecas adicionais para que o programa compile corretamente.

  1. Nanoshield_ADC.h - biblioteca para controlar o módulo ADC (convesor analógico digital).
  2. SoftReset.h - biblioteca utilizada para resetar o arduino através de software.
  3. SoftwareSerial.h - biblioteca utilizada para se comunicar com o software, python nesse caso.

Todas as bibliotecas se emcontram no projeto EPR-LEF na pasta Firmware/libs.

/**
 * @author Emilio Galera, Heitor de Bittencourt
 * @date Dezembro, 2016
 *
 * Firmware para Arduino fazer a aquisicao de dados do equipamento de EPR
 * do LEF.
 */

#include <Arduino.h>
#include <Wire.h>
#include <stdlib.h>
// external libraries
#include <Nanoshield_ADC.h>
#include <SoftReset.h>
#include <SoftwareSerial.h>
//#include <WString.h>

// canais do ADC para leitura do valor x e B
const int channel_x = 1;
const int channel_b = 2;

const int pinLed13 = 13;

// pinos que acionam start/stop do controle de varredura do campo
const int start_r = 2;
const int stop_r = 3;

// Pinos digitais para comunicacao com chave digital de selecao de tempo de
// varredura e variacao de campo magnetico
const int temp_A = 4;
const int temp_B = 5;
const int campo_A = 6;
const int campo_B = 7;


Nanoshield_ADC adc;
SoftwareSerial lockin(10, 11); // RX, TX


void setup()
{
	adc.begin();
	Serial.begin(115200);
	lockin.begin(9600);
	delay(2000);

	while (!Serial);

	pinMode(start_r, OUTPUT);
	pinMode(stop_r,OUTPUT);

	pinMode(temp_A, OUTPUT);
	pinMode(temp_B, OUTPUT);

	pinMode(campo_A, OUTPUT);
	pinMode(campo_B, OUTPUT);

	delay(1000);

	digitalWrite(start_r, LOW);

	digitalWrite(stop_r, HIGH);
	delay(7);
	digitalWrite(stop_r, LOW);

	digitalWrite(temp_A, LOW);
	digitalWrite(temp_B, LOW);

	digitalWrite(campo_A, LOW);
	digitalWrite(campo_A, LOW);

	pinMode(pinLed13, OUTPUT);

	// o lock-in envia um cabeçalho ao iniciar
	// o while abaixo le o mesmo e o descarta
	analogReference(DEFAULT);
	while (lockin.available() > 0)
		Serial.print(lockin.read());
	lockin.print("W0\r");

	//ganho utilizado para medir as voltagens com o ADC
	adc.setGain(GAIN_EIGHT);
}


void loop()
{
	int opcao = 100;
	int media = 1;
	int i;
	double x;
	double y;
	double b;
	char result[20];
	int merda;
	int tempo_aux = 0;
	int campo_aux = 0;
	char aux_y[11];
	int j;

	if (Serial.available() > 0) {
		opcao = Serial.read();

		switch(opcao) {
		case 'A':
			/*while(Serial.peek() < 0);
			media = Serial.parseInt();*/
			ret1:
				if (Serial.available() > 0)
					media = Serial.parseInt();
				else
					goto ret1;

			opcao = 100;
			//Serial.println(media);
			break;

		case 'B':
			digitalWrite(pinLed13, HIGH);
			x = 0;
			y = 0;
			b = 0;
			for(i = 0; i < media; i++){
				x += 2*adc.readVoltage(channel_x);
				b += adc.readVoltage(channel_b);
				lockin.print("q\r");
				j = 0;
				while(lockin.available() > 0 && j < 20){
					aux_y[j]= lockin.read();
					j++;
				}
				y += atof(aux_y);
			}
			x /= (double) media;
			y /= (double) media;
			b /= (double) media;

			dtostrf(x, 3, 6, result);
			Serial.write('x');
			Serial.print(strlen(result));
			Serial.print(result);
			Serial.write('X');

			dtostrf(y, 4, 10, result);
			Serial.write('y');
			Serial.print(strlen(result));
			Serial.print(result);
			Serial.write('Y');

			dtostrf(b, 3, 6, result);
			Serial.write('b');
			Serial.print(strlen(result));
			Serial.print(result);
			Serial.write('B');


			digitalWrite(pinLed13, LOW);
			opcao = 100;
			break;

		case 'C':
			opcao = 100;
			soft_restart();
			break;

		// reset lock-in
		case 'Z':
			opcao = 100;
			lockin.print("z\r");
			break;

		// inicia rampa
		case 'I':
			opcao = 100;
			digitalWrite(start_r, HIGH);
			delay(10);
			digitalWrite(start_r, LOW);
			break;

		// interrompe rampa
		case 'P':
			opcao = 100;
			digitalWrite(stop_r, HIGH);
			delay(10);
			digitalWrite(stop_r, LOW);
			break;

		// selecao de Tempo
		// 0 - 0.5 min
		// 1 - 1   min
		// 2 - 3   min
		// 3 - 5   min
		case 'T':
			opcao = 100;
			while(Serial.peek() < 0);
			tempo_aux = Serial.read();
			Serial.write('t');
			Serial.write(tempo_aux);
			Serial.write('T');

			switch(tempo_aux) {
			case '1':
				digitalWrite(temp_B, LOW);
				digitalWrite(temp_A, HIGH);
				media = 50;
				break;

			case '2':
				digitalWrite(temp_B, HIGH);
				digitalWrite(temp_A, LOW);
				media = 150;
				break;

			case '3':
				digitalWrite(temp_B, HIGH);
				digitalWrite(temp_A, HIGH);
				media = 250;
				break;
			case '0':
			default:
				digitalWrite(temp_B, LOW);
				digitalWrite(temp_A, LOW);
				media = 25;
				break;
			}
			break;

		// Selecao de delta B
		// 0 - 50   gauss
		// 1 - 100  gauss
		// 2 - 500  gauss
		// 3 - 1000 gauss
		case 'D':
			opcao = 100;
			while(Serial.peek() < 0);
			campo_aux = Serial.read();
			Serial.write('d');
			Serial.write(campo_aux);
			Serial.write('D');

			switch(campo_aux) {
			case '1':
				digitalWrite(campo_B, LOW);
				digitalWrite(campo_A, HIGH);
				break;

			case '2':
				digitalWrite(campo_B, HIGH);
				digitalWrite(campo_A, LOW);
				;

			case '3':
				digitalWrite(campo_B, HIGH);
				digitalWrite(campo_A, HIGH);
				break;
			case '0':
			default:
				digitalWrite(campo_B, LOW);
				digitalWrite(campo_A, LOW);
				break;
			}
			break;

		default:
			opcao = 100;
		}
	}
}

Referências

References

[1]Arduino - arduino board uno. [Online; accessed 4-December-2016]. URL: https://www.arduino.cc/en/Main/ArduinoBoardUno.
[2]Bruker. Welcome to EPR. 2016. URL: https://www.bruker.com/products/mr/epr.html.
[3]M. Brustolon. Electron Paramagnetic Resonance: A Practitioner’s Toolkit. Wiley, 2009. ISBN 9780470432228. URL: https://books.google.com.br/books?id=l3F9yUSk-rgC.
[4]Importação e Exportação LTDA Circuitar Eletrônicos. Nanoshields. 2013. URL: https://www.circuitar.com.br/.
[5]Matthias J. N. Junk. Electron Paramagnetic Resonance Theory, pages 7–52. Springer Berlin Heidelberg, Berlin, Heidelberg, 2012. URL: http://dx.doi.org/10.1007/978-3-642-25135-1_2, doi:10.1007/978-3-642-25135-1_2.
[6]Carl Rod Nave. Hyper Physics - Electron Spin Resonance. 2001. URL: http://hyperphysics.phy-astr.gsu.edu/hbase/molecule/esr.htm.
[7]C.P. Poole. Electron Spin Resonance: A Comprehensive Treatise on Experimental Techniques. Dover books on physics. Dover Publications, 1996. ISBN 9780486694443. URL: https://books.google.be/books?id=P-4PIoi7Z7IC.
[8]Ronny Rocha Ribeiro. Ressonância paramagnética eletrônica de onda contínua e pulsada em sistemas de interesse biológico. 2007. Tese de Mestrado, Instituto de Física de São Carlos, Universidade de São Paulo. URL: http://www.teses.usp.br/teses/disponiveis/76/76132/tde-03122014-212950/pt-br.php.
[9]S.R.A. Salinas. Introdução a Física Estatística Vol. 09. EDUSP, 1997. ISBN 9788531403866. URL: https://books.google.com.br/books?id=cAlP3sc0K44C.
[10]J.T. Schmelz. Why stellar astronomers should be interested in the sun. Advances in Space Research, 32(6):895 – 904, 2003. URL: http://www.sciencedirect.com/science/article/pii/S0273117703800649, doi:http://dx.doi.org/10.1016/S0273-1177(03)80064-9.
[11]Stanford Research Systems. Model sr510 lock-in amplifier. URL: http://www.thinksrs.com/downloads/PDFs/Manuals/SR510m.pdf.
[12]Wikipedia. Electron paramagnetic resonance — wikipedia, the free encyclopedia. 2016. [Online; accessed 4-December-2016]. URL: https://en.wikipedia.org/w/index.php?title=Electron_paramagnetic_resonance&oldid=752994994.
[13]Wikipedia. Lock-in amplifier — wikipedia, the free encyclopedia. 2016. [Online; accessed 6-December-2016]. URL: https://en.wikipedia.org/w/index.php?title=Lock-in_amplifier&oldid=752714441.
[14]Wikipedia. Pieter zeeman — wikipedia, the free encyclopedia. 2016. [Online; accessed 7-December-2016]. URL: https://en.wikipedia.org/w/index.php?title=Pieter_Zeeman&oldid=737026931.
[15]Wikipedia. Thomas preston (scientist) — wikipedia, the free encyclopedia. 2016. [Online; accessed 5-December-2016]. URL: https://en.wikipedia.org/w/index.php?title=Thomas_Preston_(scientist)&oldid=738237515.