Construindo Um Arduino Uno R3 Do A Partir Do Zero
Construindo Um Arduino Uno R3 Do A Partir Do Zero
Construindo Um Arduino Uno R3 Do A Partir Do Zero
Eu estive me perguntando o que poderia ser interessante como uma série para escrever, que iria
ajudar as pessoas a entender o que este mundo de decisores é que vivemos, quais são as
possibilidades e o que se pode agora realizar com um pouco de previsão e atenção detalhe. Eu
queria abordar um tópico que tocou em muitas bases, desde o projeto até a fabricação do
processo de pensamento, mas ainda estava fundamentado em um assunto que era acessível
até mesmo a maioria dos iniciantes.
Eu acho que este é um projeto interessante porque envolve fazer algo que eu normalmente não
faço: pegue o design de outra pessoa e tente reproduzi-lo. Eu tenho quatro coisas para usar
como referência para este ...
Então ... ótimo. Tenho um esquema. Agora o que você faz com ele?
Acho que a primeira coisa que quero fazer é tentar identificar alguns dos subsistemas
principais. Eu sei que há um conector DC lá, então haverá algum tipo de regulação de tensão. Há
um conector USB, por isso alguns USB / Serial coisa estará lá. Claro que há o micro controlador
(doravante referido como o uC) também.
Eu acho que a impressão desta coisa, estilo de árvore morta, é provavelmente uma boa maneira
de ir. Estou incrivelmente grato ao arduino.cc por fazer esses esquemas públicos, mas vamos
ser reais, essas não são as coisas mais fáceis de ler. Muitos dos designadores de referência
("R3", "C1", etc.) são substituídos por números de peça, assim como as próprias
interconexões. Tenho certeza que seria um pouco mais fácil de ler se fosse codificado por cores,
ou dividido em folhas hierárquicas. Vou me lembrar de fazer isso quando eu chegar ao ponto de
desenhar meu próprio esquema.
Assim, isso significa que a seção de uC realmente quebra para baixo na interface USB-to-Serial
controlada pelo ATMEGA16U2, e o Arduino Brain ATMEGA328P-PU, que é a coisa que todos
nós pensamos como "Arduino".
Se você não está familiarizado com a forma como eu estou listando os pinos, "Serial Tx" é a
função do pino que é importante para nós, "Pin #" é o real número de pinos no circuito integrado
em si, e PORTD # é A forma como o pino seria referido na folha de dados do uC, e no código C
real.
Redes de resistores
A maioria dos resistores no esquema são listados como "RN #" seguido de uma letra. Estas são
"Resistor Networks", significando um monte de resistores individuais agrupados em um único
pacote. O "#" é o designador de referência, assim como R1, R2, exceto RN1 e RN2, e a letra
depois indica qual resistor individual na embalagem está sendo usado.
Valores do capacitor
Alguns dos capacitores na placa são listados em valores de nano-farad, que é 10 -9. Parece que
a maioria dessa são 100nF, que é um capacitor de 0,1uF, e a maioria dos que estão sendo
usados como capacitores by-pass.
Há um par de fusíveis reinicializáveis no esquema, mas eles têm um símbolo incomum que você
pode não executar em muitas vezes ... tipo de uma caixa com uma barra através dele. Esses
são os pequenos componentes que quebram o circuito sempre que você inadvertidamente curto
circuita algo e ameaçam fritar seu computador sobre o cabo USB.
O "LDO" significa "Low Drop Out" tensão, o que significa que a tensão de entrada pode ser muito,
muito perto da tensão de saída. Obviamente, você não tem nada de graça, e o custo de regular
uma tensão é parte da própria tensão, então seu valor de entrada deve ser sempre maior do que
o valor de saída. A especificação que você procuraria seria o, você adivinhou, queda de
tensão. Há outras especificações importantes como corrente máxima, Razão de Rejeição de
Fonte de Alimentação, Rejeição de Ripple, Quiescente de Corrente e assim por diante, mas o
grande pai de especificações LDO é a queda de tensão. Vamos lidar com os outros se surgirem
durante o projeto.
No final, todo o subsistema LDO foi projetado para funcionar com tensões fornecidas através do
conector DC (grande coisa de plástico na borda da placa), ou através do pino V IN como
veremos. A tensão que você recebe do cabo USB é inteiramente uma história diferente.
Movendo-se para a direita, há um diodo, D1, que atua como um diodo de proteção de tensão
inversa. As verrugas de parede vêm em duas variedades, porque o deus nos odeia e quer-nos
fazer explodir nossa eletrônica: tensão positiva na parte externa da tomada e terra no meio, ou
terra na parte externa da tomada e voltagem positiva no meio. Vou precisar confirmá-lo olhando
para a folha de dados para o jack barril, mas eu suspeito que este é projetado para aceitar um
plug com voltagem no meio. Se você conectar o tipo errado, o diodo de proteção de tensão
inversa impedirá a eletricidade de conduzir na direção errada, salvando seu Uno de explodir (até
certo ponto). A designação "M7" no esquema significa que é um diodo retificador bastante padrão
1N4007, apenas em um pacote de montagem de superfície.
Depois de passar o teste de diodo, a tensão vai ao lado do regulador linear real, U1. Ele está
listado como um NCP117ST50T3G. Eu usei um NCP1117DT50 antes, e não sei qual é a
diferença entre os dois, mas eu suspeito que eles são muito semelhantes, e provavelmente
apenas uma diferença de forma física entre eles. Tenho que olhar para a folha de dados para
isso.
Você verá em ambos os lados do U1, existem alguns capacitores: PC1, PC2 e C2. Isso significa
"condensador polarizado" 1 e 2, e um capacitor cerâmico regular C2. PC1 e PC2 são 47uF e C2
é 0,1uF (100nF). Esta é uma configuração muito típica para um circuito de regulação de tensão
fixa. Em circuitos variáveis, existem resistores, bem como, que permitem personalizar a tensão
de saída, mas como tudo isso se preocupa é fornecer 5V limpo, tudo que você vê são
capacitores. Eles fornecem um poço de potencial elétrico que ajuda a manter as tensões de
entrada e saída estável. Essencialmente eles são bypass caps. Big, honkin', bypass caps. Agora,
por que seus valores são o que são, é algo que provavelmente se tornará claro ao consultar a
folha de dados NCP117.
Acima das duas tampas de mão direita, você verá a linha + 5V que se torna o trilho de energia
essencial para toda a placa Arduino. Em qualquer lugar que você vê "+ 5V" no esquema, eles
são todos interligados como um trilho de energia.
A primeira parte que eu procurei foi o jack barrel, rotulado como "DC21MMX" no esquema
oficial. A coisa é um unicórnio tão perto quanto eu posso dizer, não existe no meu nível de
compra. Então eu estou indo com uma alternativa 5mm OD / 2,1 milímetros ID barril jack que eu
usei antes de Würth Elektronik. Será compatível com a maioria das verrugas de parede lá fora,
tensão dentro, terra fora.
Regulador Linear IC
O próximo obstáculo foi o fornecimento do regulador linear. O número de peça que o Arduino
lista, NCP117ST50T3G, está disponível, mas mostra como um componente de alto risco
em parts.io, com uma classificação de risco de 3.2. Eu preciso encontrar um equivalente com
base na especificação, mas muito menor risco. Usando o motor de busca parts.io e procurando
ICs reguladores lineares, com uma tensão máxima de saída de 1.2V, há um LDO positivo fixado
de 5V com uma classificação de risco de 2 da ST Micro, a LD1117S50TR. Olhando para as
especificações para os componentes, é praticamente uma substituição direta, talvez até um
pouco melhor queda de tensão e manuseio atual. No final, ele tem que aceitar até 15V sem
dúvida, me dar uma saída fixa 5.0V, obter como baixíssima queda de tensão como pode, mesmo
em alta corrente, E ser capaz de fornecer até 500mA (embora isso é bem acima de qualquer
coisa que queremos o uC para tentar desenhar). Rejeição de ondulação e rejeição da fonte de
alimentação não são extremamente críticos, uma vez que o poder deve estar vindo de uma fonte
geralmente regulamentada já, a verruga de parede. Sei que isso não é garantido, mas acho que
vamos ficar bem.
O diodo é realmente um diodo retificador padrão, baixo V FORWARD em baixa corrente, e como a
corrente máxima que vamos desenhar é 500mA ou menos (espero que muito menos) V F nunca
vai subir muito alto. Realisticamente, estamos falando sobre ter que tolerar uma tensão inversa
de 15V com algum tipo de pico potencial como um múltiplo de que, se algo é conectado em que
não deve ser. Estes diodos baratos têm níveis de tensão inversa de algo como 500V ou 800V de
AC ou DC.
Escolher o direito LDO entrada e saída capacitores foi um pouco complicado. Não há nenhuma
explicação de por que as tampas no Arduino são 47uF em tamanho, e a folha de dados para o
LD117S50TR não menciona nada além de "10uF deve ser legal". O capacitor de entrada fornece
apenas poucos elétrons sobressalentes ... um monte de volts que podem ser extraídos se houver
um mergulho momentâneo no suprimento. O capacitor de saída forma um loop com o circuito
interno (coberto por detalhes excruciantes nesta Nota de aplicação da Texas Instruments), e a
Resistência Equivalentes em Serie (ESR) do capacitor é a especificação crucial - mais do que o
valor de capacitância (embora eu não Vá abaixo do 10uF eles lista). Nas fichas de dados para a
TI e ONSemiconductor componentes equivalentes, ambos afirmam que a ESR da tampa de
saída deve estar entre 0. 3Ω e 22Ω. Minha suspeita é que o tamanho 47uF não é nada especial
(talvez houvesse um desconto em 47uF caps. No dia em que tomaram a decisão de seguir em
frente com o design), e tudo o que você realmente tem a fazer é atingir o ESR correto. Eu
encontrei um bom baixo risco 47uF capacitor da Vishay em parts.io, MAL215371479E3 , com um
0,5 Ω ESR.
A mudança menos óbvia é a net nomes. Eu adicionei VIN para a entrada do LDO, e adicionou
5V_LDO para a saída. Isso irá certificar-se de que os trilhos de voltagem corretos ir onde eles
devem ir.
Agora, eu não tinha certeza com base no esquema oficial, se VIN deve ir antes ou após o diodo
de proteção. Eu usei o meu multímetro e verificado por tonificar o caminho do sinal (vocês velhos
caras telco vai saber o que quero dizer por "tonificar a linha") a partir do cabeçalho do pino VIN
para pino 3 do LDO, confirmando que como uma conexão válida. Isso significa que ele vem
depois do diodo, porque eu não estaria lendo 0 Ohms se houvesse um diodo no caminho, meu
multímetro teria mostrado o V FORWARD para o diodo vez.
Aqui está a nova lista técnica, incluindo o poder na seção LED ...
Na Parte 3, definimos os nomes de rede para as nossas tensões em preparação para poder
mantê-los bem classificados. Isso agora nos ajudará a resolver como manter as várias maneiras
de alimentar um Arduino de entrar em conflito.
Imagine que você está fazendo alguma monitoração ambiental remota com o Arduino Uno, e
está armazenando os dados na memória. Você precisa coletar os dados de vez em quando,
então você vai para onde a placa está sentada e conectar seu laptop a ele para fazer o download
dos últimos números. O ato de conectar o USB não redefine a placa, então você sabe que pode
ligar, abrir a janela do monitor serial, pegar seus valores, desconectar e deixar o Arduino sentado
lá, monitorando alegremente.
Quando você conecta o cabo USB, você fornece instantaneamente uma fonte de 5V que sabe
que é capaz de alimentar o Arduino quando está sentado em sua mesa. No entanto, você
também tem uma bateria conectada a ele que está criando um bem regulado 5V através dos
métodos abordados na Parte 2. Uma vez que o 5V Regulador LDO Fixo e o USB 5V fonte tanto
estaria tentando fornecer tensão e corrente ao mesmo tempo, para as mesmas coisas, isso
significa que eles seriam essencialmente conectados uns aos outros. Nenhuma dessas fontes
de tensão é ideal, o que significa que nem é EXATAMENTE 5.00000V, todos eles têm faixas de
tolerância e de saída variam com base em condições ambientais como temperatura - TL / DR:
seu nível de tensão não será igual. O que acontece quando você conecta duas fontes de tensão
de diferentes níveis em paralelo? Você obtém um loop de corrente que flui da fonte de alta tensão
para a fonte de baixa tensão, e isso é ruim, especialmente se esse fluxo de corrente está voltando
para cima seu cabo USB em seu laptop.
VCC + e VCC- estão conectados em uma de duas maneiras. "Dual Supply" significa que VCC +
é algo como + 9V e VCC- é -9V. Pense em uma onda senoidal A / C constantemente subindo e
descendo sobre um eixo x 0V, como um sinal de áudio ... preciso ter algum valor acima de 0V e
algum valor abaixo de 0V para ser capaz de lidar com esse sinal. "Single Supply" é o caso onde
VCC + é alguma tensão positiva, no nosso caso + 5V, e VCC- é um valor menor, tipicamente (e
no nosso caso) terra. Este tipo de suprimento é ótimo para comparadores, onde os insumos
nunca vão abaixo de 0V. Quando um op-amp é descrito como "rail-to-rail", isso significa que a
saída pode ser conduzida muito perto dos valores VCC + e VCC-, em oposição a um tipo de
aproximação vagamente perto desses valores.
Uma observação rápida sobre os op-amps nos esquemas: você verá frequentemente que os
pinos VCC + e VCC aparentemente desaparecem quando um op-amp está listado em um
esquema. Não tenho certeza por que razão que é a convenção, mas mesmo que você não pode
vê-los, eles são, de fato, conectados. Quando você olha para o esquema para o comparador, e
mais tarde o Pin 13 LED, basta lembrar que VCC + está conectado a + 5V e VCC- está conectado
a GND.
Isso significa que há três estados que precisamos nos preocupar: inverter mais alto que não
inverter, inverter mais baixo do que não inverter, inverter e não-inversão exatamente igual.
Inverting> Inverting = Output Driven para VCC + Inverting <Inverting = Saída Driven para VCC- Non-Inverting =
Inverting = No Output
Esperemos que você está começando a ver o caso declaração tomando forma no hardware.
Tensões
1. Nós temos + 5V vindo de nosso cabo USB. Ligue para este USBVCC.
2. Temos + 5V vindo de nosso 5V Fixo LDO. Ligue para este 5V_LDO.
3. Nós temos alguma tensão mais alta que vem do jaque de tambor ou do cabeçalho do pino
do protetor. Ligue para este VIN.
4. Temos + 3.3V vindo de um 3V3 Fixo LDO (você verá em um segundo). Ligue para este
3V3_LDO.
Resultados desejados
Quando o USBVCC está conectado e o VIN não está conectado, queremos permitir que
o USBVCC forneça 5V.
Quando USBVCC não está conectado e VIN está conectado, queremos permitir VIN para
gerar 5V_LDO para fornecer 5V.
Quando USBVCC está conectado e VIN está conectado, queremos cortar USBVCC e
permitir VIN para gerar 5V_LDO para fornecer 5V.
Aí está. Usando as quatro tensões diferentes e algum hardware, queremos ser capazes de criar
os três resultados. Fazemos isso usando um op-amp como um comparador. Vamos testar o nível
de tensão do trilho VIN, e se ele está abaixo de alguma tensão de referência, vamos permitir que
o trilho USBVCC para fornecer tensão. Se estiver acima de alguma tensão de referência,
evitaremos que o trilho USBVCC forneça tensão.
Vamos examinar o esquema contra o que queremos que nossos resultados sejam.
Quando o VIN é conectado, energiza o divisor de tensão na entrada não-inversora de U5. O op-
amp comparará isto com a referência 3V3 na entrada inversora. O divisor de tensão é composto
por um par de resistores de 10K, então você verá exatamente metade da tensão VIN na entrada
não-inversora. Para que algo aconteça que é diferente do nosso estado anterior, precisamos
de pelo menos 6,61V (6,61V / 2 = 3,305V). Realisticamente, devido à queda de tensão, esta
tensão será pelo menos 7V (dividido por dois) e mais provável 9V (dividido por
dois). Independentemente disso, assim que você cruzar esse limite, o op-amp irá virar para o
estado oposto e enviará VCC + para a saída. Com 5V na saída, que significa 5V na porta do
canal P MOSFET e ele vira o MOSFET em um estado desligado, corte USBVCC fora. Uma vez
que neste caso, USBVCC não está ligado, não importa realmente. 5V ainda é fornecido ao LDO
Fixo 3V3 a partir do barramento de +5V (a partir do LDO Fixo de 5V), que preserva a tensão de
referência do comparador.
Não há diferença essencial entre este estado e o estado acima. Desde VIN é energizado, e VIN
é uma tensão acima de 7V no mundo real, USBVCC é cortado do 5V trilho pela mesma lógica.
O comparador Op-amp
O esquema oficial mostra um número de peça listado para o comparador op-amp como um
LMV358IDGKR. Sem ter olhado para cima ainda, eu estou supondo que este é um op-amp duplo
básico (que significa dois op-amps em um único pacote), e o pedaço "IDGKR" do número de
peça apenas indica a pegada. Quando olharmos para o circuito do Pin 13 LED, veremos como o
segundo op-amp do pacote está sendo usado, uma vez que apenas um é necessário para atuar
como um comparador.
Estourando esse parts.io, confirma minha suspeita, e a boa notícia é que é barato, de baixo risco,
com cargas deles no estoque do distribuidor. Nós não teremos que ir à procura de uma
substituição adequada.
Há um monte de especificações associadas com amplificadores que podem deixá-lo perdido nas
ervas daninhas, mas a nossa aplicação é muito simples: quando o nível VIN sobe acima de um
certo ponto, queremos bater na saída direto para o VCC + ferroviário. Se a saída foi devolvida a
uma das entradas, ela não iria até o VCC +, mas a algum ponto de equilíbrio intermediário para
fazer ambas as entradas iguais, mas neste caso, a saída não interage com as entradas. Em tudo,
assim que qualquer diferença está indo forçar um balanço cheio da saída a um trilho ou o outro.
VIN está passando por um divisor de tensão 10K / 10K, e o "ponto certo" é a tensão de referência
3V3. Assim, assim que o VIN aumentar para 3.3VX 2, 6.60V, o nível da entrada não-inversora
fará com que a saída flip de GND para 5V. O LD1117S50TR 5V Fixo LDO tem uma queda de
tensão de cerca de 1,1V, então você precisa de um mínimo de 6,1V para obtê-lo a fazer qualquer
coisa em primeiro lugar. Em última análise, nós cortar a fonte de 5V USB mais de 500mV antes
da LDO poderia entrar em conflito com ele. Uma vez que ninguém vai realisticamente nunca ligar
um suprimento 6.60V para VIN, em vez do 7V mais realista ou 9V ou 12V, isso significa que as
especificações todas alinham muito bem.
A questão de "quão rápido ele vai reagir", é respondida pela especificação taxa de matar. A
velocidade com a qual o LMV358 pode mudar sua saída está listada na folha de dados como 1V
/ uS, então cerca de 5uS para ir de um estado para o outro.
Então, temos que fazer alguns 3V3, e a parte listada no esquema é um LP2985-33DBVR. Mais
uma vez, parece uma peça Texas Instruments com base na designação de pegada de DBVR, e
com "33" lá, definitivamente parece um fixo 3V3 regulador de tensão de saída. Com certeza, é
um regulador LDO 3.3V fixo, com um bom e baixo risco 1.0. A tensão de saída varia de 7mV ao
fornecer 1mA de corrente de saída para 280mV sob uma carga de 150mA.
Devemos olhar para a corrente quiescente, a quantidade de corrente que o LP2985 chama
mesmo quando não está fazendo nada. A folha de dados diz que desenha 65uA sob nenhuma
carga que não é muito em tudo. Isso sugere que não terá um efeito maior em qualquer outra
coisa que possamos conectar ao 5V_LDO.
Sem qualquer explicação razoável por que os capacitores estão faltando no esquema, eu vou
seguir as diretrizes da folha de dados:
Capacitor de Entrada: 1uF mínimo (pode ser aumentado sem limite) sem requisitos ESR.
Capacitor de saída: 2.2uF mínimo (pode ser aumentado sem limite) com um ESR de 0.01Ω - 0.8Ω.
Como a Texas Instruments se esforçou muito para desenvolver um Regulador de Tensão com
especificações fáceis sobre os capacitores, e ESR não é um fator para a tampa de entrada, torna-
se relativamente trivial escolher um. Então eu vou com o 1uF C0805C105K8RACAUTO da
Kemet. Não é a parte de menor risco, mas eu estou familiarizado com o Kemet e a
familiaridade. É apenas um capacitor de 10V, mas se ele nunca vê nada além de 5V, muitas
outras coisas terão sido destruídas no quadro.
Para a tampa de saída, ainda podemos ficar em cerâmica, mas precisamos ter um pouco de
cuidado com ESR. Aqui está a coisa, eu passei dois dias ... DOIS DIAS ... tentando entender
como especificações essas coisas, e se perdeu no coelho buraco de polos e buracos e
frequência vs ESR carga corrente e eu decidi empurrar Isso fora O que eu preciso para o projeto
neste momento, é um capacitor de cerâmica, de preferência em um pacote 0805, entre 2.2uF e
3.3uF. Existem dezenas de milhares dessas coisas na existência, e eu vou encontrar o caminho
certo. Só não agora, porque eu tenho que me mexer com isso e não quero perder mais tempo
nas ervas daninhas. Então, vamos colocar um pino neste e nota no esquema que ele precisa de
mais trabalho.
ATUALIZAR
MOSFET de canal P
Nosso pequeno interruptor de silício que permite ou impede que USB_VCC se conecte ao trilho
de 5V, está listado no esquema como um FDN340P, um MOSFET de canal P, porque a
resistência Drain-Source, R DS (on), cai para cerca de 80mΩ quando o Gate está em alguma tensão
menor em relação à Fonte. Pode ser confuso olhar para a folha de dados para esta parte em
particular, porque a maioria dos valores de tensão são listados como negativos, devido à
natureza P-Channel do MOSFET. O que nos interessa é o valor de tensão que deve estar
presente no portão para conduzir a resistência Drain-Source em um sentido ou outro, a Tensão
Limiar Gate-Source, V GS (th). A folha de dados chama esse valor como -0.8V. Quando a porta está
em USBVCC - 0.8V ou abaixo, abrirá largamente os portões e alegres pequenos elétrons podem
dançar e fazer sua coisa. Acima de USBVCC - 0.8V, a resistência Drain-Source vai subir para
um nível que efetivamente corta USBVCC. De acordo com a especificação do USB , o USBVCC
estará em algum nível entre 4.75V e 5.25V, assim que nós esperaríamos que o ponto do
contrapeso do MOSFET esteja entre 3.95V e 4.45V. Isso não deve flutuar, é apenas o nível de
variação que é permitido no barramento de tensão USB: você terá uma tensão estável em algum
lugar entre esses dois.
Aqui está a lista de materiais para esta parte do esquema: Arduino UNO R3 Voltage Comparator
Subsistema BOM
Na próxima parte, vamos cobrir o Pin 13 LED, que não é tão simples como você imagina!
Na 5, nós trouxemos o comparador de tensão para uma conclusão tentativa (ainda precisamos
dessas tampas de saída LDO), agora vamos usar esse último op-amp no pacote LMV358 para
controlar um LED no pino 13.
Tinha que haver algo que pudesse ser feito, logo após a placa ter sido conectada ao
computador. Algo bem simples, bem fácil, que você poderia usar para validar toda a cadeia de
ferramentas de IDE para cabo USB para placa, e o Hello World! De hardware é o LED
piscando. Mas onde colocá-lo? Bem, para esta finalidade, qualquer pino é tão bom como
qualquer outro, então pode bem colá-lo em um canto, e que acaba por estar perto de Arduino
Digital 13 (real 328P pino 19). Agora a segunda coisa que você provavelmente fez, foi pau seu
próprio LED e resistor em um breadboard e piscar isso. Então você pode ver que temos o
resistore o LED, o que é com o op-amp?
Bem, o op-amp está conectado neste caso, como um buffer. Na seção de gerenciamento de
tensão, lembre-se de como a saída foi inteiramente isolada das entradas? Neste caso, a saída é
reenviada diretamente para a entrada inversora. Como antes, a saída irá fazê-lo é absoluto
melhor equalizar as duas entradas. Quando a entrada não inversora muda de valor para qualquer
tensão diferente da entrada inversora em qualquer direção, a saída compensará para tornar a
saída inversora igual, o que resulta na saída ser um espelho exato da entrada não inversora -
quando tudo está em equilíbrio, ambas as entradas e as saídas estão exatamente na mesma
tensão: a entrada não inversora é espelhada na saída, um buffer.
Você pode dizer: "Bem, eu não precisava amortecer meu sinal quando liguei meu resistor e LED
no outro pino", e isso é verdade, porque você escolheu esse pino, nesse caso, para acender um
LED e Tomar toda a corrente que precisa para fazê-lo. No entanto, este Pin 13 LED, vai estar lá
para a vida da placa, por isso é importante que a presença não afeta qualquer outra coisa que o
pino pode precisar fazer, como agir como o pino SCK para SPI. Você quer que a capacidade
atual completa do pino esteja disponível para qualquer outra tarefa que possivelmente possa
executar, e o op-amp faz isso. Como?
As entradas de um op-amp desenhar nenhuma corrente em todos (ideal op-amp aviso, blah,
blah, blah). Você pode pensar do Pin 13 LED como sendo um gigante atual com fome (ok, não
ter fome, da ordem de 10mA ou mais) lâmpada em um navio no mar. Se você executou um cabo
de extensão maciça com flutuadores e conectores à prova de água do farol para fora para o
barco, você poderia poder que a luz da costa - quando o farol se acende, a lâmpada do barco
liga - que é o equivalente a ligar o seu resistor e LED Diretamente para o pino. Usando o op-
amp, no entanto, é como ter o capitão do barco olhando para a costa com binóculos para ver
quando o farol vira em ... logo que o farol continua, ele vira um interruptor local para ligar o gigante
atual fome luminária. Ao fazer isso, ele aceitou uma entrada da costa,
Aqui está um pequeno esboço pateta que você pode usar para testar isso (para obter mais
informações sobre por que os comandos PORT são usados aqui em vez de digitalWrite, leia o
post sobre Sampling Frequências de sinal de áudio com o MCP3008 ADC )
Hammer Pin 13
1 /*
2 Hammer Pin 13
3
4 This little sketch will execute a port command against Arduino Pin 13.
5
6 Pin 13 is actually ATMEGA328P Pin 19, PORTB 5.
7
8 As a way of adjusting the pulse length, the code below just repeatedly writes
9 the pin high then repeatedly writes the pin low, based on the value of portReps.
10
11 Overwriting the port value with the same value doesn't affect the output, but takes up clock cycles,
12 resulting in a crappy simulation of PWM on a non-PWM pin.
13 */
14
15
16
17 void setup() {
18 // Let's make Pin 13 an output.
19 pinMode(13, OUTPUT);
20 }
21
22 void loop() {
23
24 // This is how many times both the TURN THE PIN ON and TURN THE PIN OFF commands are executed sequentially
25 long portReps = 200000;
26
27 // Execute the port B command to bring Arduino Pin 13 high a bunch of times in a row
28 for (long i = 0; i < portReps; i++) {
29 PORTB = PORTB | 0x20; // Writes PORTB5 low
30 }
31
32 // Execute the port B command to bring Arduino Pin 13 low a bunch of times in a row
33 for (long i = 0; i < portReps; i++) {
34 PORTB = PORTB & 0xDF; // Writes PORTB5 low
35 }
36
37 }
Com o valor padrão de portReps de 200000, você cria um sinal PWM que é visível no pino 13
LED. É equivalente a escrever um esboço que ligue o LED e, em seguida, desliga o LED com
atrasos de 100ms. Veja o que parece no osciloscópio. O traço amarelo na parte superior é o sinal
no pino 13, o traço azul na parte inferior é a saída do op-amp.
Quando aumentamos o zoom, a taxa de movimento é claramente visível. Em 2uS por divisão,
você pode ver que o traço amarelo apenas acerta em cheio a linha reta até 5V, mas há uma
rampa quase linear no traço azul, tendo pouco mais de 4uS (duas divisões +) para coincidir com
a saída.
Agora vamos reduzir o tamanho da largura de pulso, diminuindo o valor de portReps. Em 2000
repetições de então em 2000 repetições de fora, nós deixamos cair a largura por duas ordens de
magnitude, a 1ms (a frequência é aproximadamente 440Hz ... hey, você poderia ajustar uma
guitarra com isso!). Nenhum problema, nós somos ainda bons. Observe que o escopo está agora
em 500uS por divisão.
Vamos deixá-lo novamente, desta vez para 200. A taxa de giro é, obviamente, uma grande parte
do tempo do sinal, mordendo as porções de ligar e desligar do rastro amarelo nas bordas.
Em 20 repetições, nossa largura de pulso é de até 10uS, então estamos agora ocupando metade
do comprimento do pulso apenas para corresponder e, em seguida, metade do comprimento do
tempo desligado para cair de volta para baixo. Está prestes a ficar realmente legal ...
Aqui está em 2 repetições. O LED é essencialmente totalmente fora agora em 795kHz. O op-
amp está tentando repetidamente e mais e mais para apanhar com o pino 13 sinal, mas apenas
não pode, execept de vez em quando, quando tudo se alinha e tem este momento glorioso para
esticar (como eu em O final de um voo de cross country), mas é imediatamente arrastado de
volta para baixo. Isso parece acontecer repetidamente a cada 4mS. Ignore o pulso positivo
aparentemente grande no traço amarelo, que é um artefato de disparar o escopo no sinal do
amplificador operacional em vez do sinal PWM. O sinal está aumentando constantemente em
um período de 5V do traço do pino 13, fazendo o todo misturar-se junto.
É por isso que você nunca vê o LED acender quando você está fazendo coisas SPI. Ele só pode
lidar com um pulso de ligar / desligar muito lento.
Aqui está o Pin 13 LED BOM: Arduino Uno R3 do Scratch Pin13 LED Subsystem.csv
Na parte 6 , nós cobrimos o comoe o porquê do Pin 13 LED, junto com o op-amp relacionado
que aparece lá. Agora deixamos os op-amps e o gerenciamento de energia para trás e nos
movemos para a conexão Arduino USB que nos permite conectar um computador ao Arduino
para enviar e receber dados. Eu recomendo agarrando uma xícara de café e uma rosquinha,
porque este é um post longo.
1. Traga a conexão USBVCC da entrada USB tipo B, listada como V BUS na documentação USB, tanto para
o MOSFET na seção de gerenciamento de tensão quanto para o pino UVCC, pino de tensão USB 31 da
ATMEGA16U2 (doravante denominado "16U2") micro controlador.
2. Ligue o pino D na entrada USB ao pino D do pino 30 da 16U2.
3. Conecte o pino D + dentro da entrada USB ao pino D + do pino 29, 16U2.
4. Conecte o pino de aterramento USB dentro da entrada USB ao pino UGND do pino 28 da 16U2.
5. Conecte a blindagem do conector USB, a caixa de metal que o rodeia, de forma segura, para que não
faça o zap, ou zap o circuito.
USBVCC e o PTC
Você pode ver que eu desenhei minha própria linha vermelha brilhante no esquema com um
ponto de interrogação, porque não está claro se há uma conexão direta lá, ou se o USBVCC vai
para o MOSFET primeiro, antes de se conectar ao 16U2. Testar isso é um pouco difícil, porque
para ter certeza absoluta, precisamos usar um multímetro para verificar um caminho
do pino V BUS do soquete USB, que só é acessível sob a placa, para o Pino 31 do 16U2, localizado
em O topo do tabuleiro, e tem um passo de pino ridiculamente pequeno. Felizmente, eu tenho
um PCBGrip Sistema que é como um circuito de teste brinquedo tinker.
O resultado é que há uma conexão direta da conexão V BUS na tomada USB para o Dreno
MOSFET e o pino UVU 16U2.
Em série com esta conexão, e antes de USBVCC vai em qualquer outro lugar, há uma caixa
preta no esquema, designador de referência F1. Este é um fusível reajustável do coeficiente de
temperatura positivo (PTC). Isso fornece proteção contra sobre corrente de explodir o circuito do
controlador de host USB no computador. Se você está alimentando o seu Arduino a partir do
cabo USB e tentar desenhar muita corrente, digamos por curto-circuito sua conexão + 5V direto
para o solo (oh muitas maneiras que eu fiz isso), o pico atual causa um aumento acentuado na
temperatura dentro do PTC, fazendo com que ele abra imediatamente o circuito. O circuito
permanece aberto até que você desenergize o circuito e deixe o PTC esfriar (leva menos de um
segundo). Eles listam um número de peça Bourns de MF-MSMF050-2. Este é um bom custo
baixo, parte de baixo risco. De acordo com a folha de dados , que irá realizar uma carga de
500mA atual sem tropeçar, então há uma área cinza entre 500mA e 1A,
onde provavelmente levaria alguns minutos para aquecer. Acima de 1A, porém, o "tempo de
viagem" cai rapidamente, abaixo de 10mS para uma carga de 10A.
Agora, se você está conectando uma carga atual constante para o seu Arduino por algum motivo,
e lentamente torturá-lo arrastando a carga de 500mA para 1A, então você provavelmente vai
acabar danificando seu host USB, sim. Mas esse não é o cenário provável. Esta é a proteção
contra curto-circuito, onde a resistência ao fluxo de corrente vai de "Algum Valor" para
"Resistencia Zero" em um batimento cardíaco, e a corrente vai de "Algum Valor Gerenciável"
para "Teoricamente Infinito" tão rápido, Instantânea ". Ela vai realizar uma carga atual 500mA
sem tropeçar, então há uma área cinza entre 500mA e 1A onde provavelmente levaria alguns
minutos para aquecer. Acima de 1A, porém, o "tempo de viagem" cai rapidamente, abaixo de
10mS para uma carga de 10A. Agora, se você está conectando uma carga atual constante para
o seu Arduino por algum motivo, e lentamente torturá-lo arrastando a carga de 500mA para 1A,
então você provavelmente vai acabar danificando seu host USB, sim. Mas esse não é o cenário
provável. Esta é a proteção contra curto-circuito, onde a resistência ao fluxo de corrente vai de
"Algum Valor" para "Resistencia Zero" em um batimento cardíaco, e a corrente vai de "Algum
Valor Gerenciável" para "Teoricamente Infinito" tão rápido, Instantânea ". Ele vai realizar uma
carga atual 500mA sem tropeçar, então há uma área cinza entre 500mA e 1A onde
provavelmente levaria alguns minutos para aquecer. Acima de 1A, porém, o "tempo de viagem"
cai rapidamente, abaixo de 10mS para uma carga de 10A. Agora, se você está conectando uma
carga atual constante para o seu Arduino por algum motivo, e lentamente torturá-lo arrastando a
carga de 500mA para 1A, então você provavelmente vai acabar danificando seu host USB,
sim. Mas esse não é o cenário provável. Esta é a proteção contra curto-circuito, onde a
resistência ao fluxo de corrente vai de "Algum Valor" para "Resistencia Zero" em um batimento
cardíaco, e a corrente vai de "Algum Valor Gerenciável" para "Teoricamente Infinito" tão rápido,
Instantânea ". Então há uma área cinza entre 500mA e 1A onde provavelmente levaria alguns
minutos para aquecer. Acima de 1A, porém, o "tempo de viagem" cai rapidamente, abaixo de
10mS para uma carga de 10A. Agora, se você está conectando uma carga atual constante para
o seu Arduino por algum motivo, e lentamente torturá-lo arrastando a carga de 500mA para 1A,
então você provavelmente vai acabar danificando seu host USB, sim. Mas esse não é o cenário
provável. Esta é a proteção contra curto-circuito, onde a resistência ao fluxo de corrente vai de
"Algum Valor" para "Resistencia Zero" em um batimento cardíaco, e a corrente vai de "Algum
Valor Gerenciável" para "Teoricamente Infinito" tão rápido, Instantânea ". Então há uma área
cinza entre 500mA e 1A onde provavelmente levaria alguns minutos para aquecer. Acima de 1A,
porém, o "tempo de viagem" cai rapidamente, abaixo de 10mS para uma carga de 10A. Agora,
se você está conectando uma carga atual constante para o seu Arduino por algum motivo, e
lentamente torturá-lo arrastando a carga de 500mA para 1A, então você provavelmente vai
acabar danificando seu host USB, sim. Mas esse não é o cenário provável. Esta é a proteção
contra curto-circuito, onde a resistência ao fluxo de corrente vai de "Algum Valor" para
"Resistencia Zero" em um batimento cardíaco, e a corrente vai de "Algum Valor Gerenciável"
para "Teoricamente Infinito" tão rápido, Instantânea ". Se você está conectando uma carga atual
constante para o seu Arduino por algum motivo, e lentamente torturá-lo arrastando a carga de
500mA para 1A, então você provavelmente vai acabar danificando seu host USB, sim. Mas esse
não é o cenário provável. Esta é a proteção de curto-circuito, onde a resistência ao fluxo de
corrente vai de "Algum Valor" para "Resistencia Zero" em um batimento cardíaco, e a corrente
vai de "Algum Valor Gerenciável" para "Teoricamente Infinito" tão rápido, Instantânea ". Se você
está conectando uma carga atual constante para o seu Arduino por algum motivo, e lentamente
torturá-lo arrastando a carga de 500mA para 1A, então você provavelmente vai acabar
danificando seu host USB, sim. Mas esse não é o cenário provável. Esta é a proteção contra
curto-circuito, onde a resistência ao fluxo de corrente vai de "Algum Valor" para "Resistencia
Zero" em um batimento cardíaco, e a corrente vai de "Algum Valor Gerenciável" para
"Teoricamente Infinito" tão rápido, Instantânea ".
D- e D +
Os sinais USB são enviados como pares diferenciais, principalmente. Significa que um valor é
expresso como uma diferença entre o nível de D- vs. D +. Existem certos casos em que um único
nível é usado, mas para o fechamento de bits de série entre o computador e o 16U2, é D- vs D
+ ... é por isso que existem duas linhas de dados.
O esquema mostra uma conexão bastante direta da tomada USB para o 16U2, com três
exceções: um par de resistores de série RN3A e RN3D, um par de "coisas" amarrando cada linha
de dados à terra Z1 e Z2 e a outra "coisa”, L1, que fica entre o par de coisas e o trilho terrestre
USB real.
As resistências em série, RN3A e RN3D, estão atuando como terminação de sinal USB. Isso tem
a ver com o conceito de impedância correspondência entre o cabo fazendo a conexão, e a
entrada em seu micro controlador. Como acontece com quase qualquer tema que nunca aborda
a palavra "impedância", é realmente, realmente envolvido. Vamos dividi-lo aqui em uma analogia
e, em seguida, alguns Professor Farnsworth Patentei Good News.
O sinal USB viaja para baixo o cabo do host para o seu Arduino, empurrando a energia como ele
vai, como um monte de indutores e capacitores em série, carregamento e carregamento muito
rápido. Pense nisso como um brinquedo de mesa de Newton's Cradle, você envia seu sinal
pegando uma das bolas e deixando-o balançar para baixo para bater o próximo, e o sinal se
propaga de um orbe para o próximo na linha. Quando chega ao fim da linha, a última bola
balança, porque não há nada lá para pará-la. Da mesma forma (ok, de modo algum, mas isso é
analogia-land), quando o sinal USB chegar ao final da linha de transmissão, se não houver nada
lá para pará-lo, ele balança para trás e reflete o cabo para o host, como A última esfera
balançando para trás no final e reverter toda a energia de volta para a bola original.
Um resistor de terminação é como colocar um amortecedor no final do berço - ele vai ter o peso
total de todo esse sinal de entrada, e umedeça-lo para que o micro controlador recebe o sinal
agradável e limpa, mas nada é refletido de volta para o hospedeiro.
A boa notícia, todos, é que o 16U2, bem como praticamente qualquer dispositivo que atua como
uma conexão USB de carregamento, diz-lhe explicitamente o tamanho resistor a usar! No caso
do 16U2, a folha de dados diz, "Os resistores seriais em linhas de dados USB devem ter 22
Ohms valor (+/- 5%)." Ame-o. Apenas me diga o que fazer, e eu vou fazer isso. Boom, resistência
de 22Ω +/- 5% 0805, Yageo RC0805JR-0722RL.
Tanto quanto as duas "coisas" vão, elas acabam por ser Resistores Dependentes de Tensão,
"varistores". Eles agem para fornecer descarga eletrostática (ESD) de proteção. Se você é todo
teme algo acima com eletricidade estática, porque pareceu como uma ideia boa naquele tempo
desgastar meias de lãs ao polir uma haste de vidro com um lenço de seda no tapete longo da
pilha quando é realmente seco antes de obstruir em seu Arduino, o repentino (E eu quero dizer
súbita) pico de tensão (e estamos falando quilovolts) faz com que o varistor para diminuir sua
resistência dramaticamente, dando um caminho de baixa resistência à terra para a tensão, em
vez de deixá-lo através de seus resistores em série (boom) e seu micro controlador (Boom caro).
Esse trilho de aterramento USB, UGND tem um monte de interconexões: o pino UGND do 16U2,
o pad de terra grande do pacote 16U2 TQFN, o pino UGND do conector USB tipo B e as
conexões de blindagem física da conexão USB. Portanto, se o cabo está carregando uma carga
estática, ou você tem uma carga estática quando você conecta o cabo e os dedos tocam o
escudo, você forneceu um método para entregar essa condição de sobre tensão súbita um
caminho a seguir: através do varistor, no rastreio PCB UGND, de volta para o pino de aterramento
USB da entrada tipo B, através do cabo e no aterramento do seu PC.
Os dois varistores Z1 e Z2 são componentes Bourns CG0603MLC- 05E. Eles são projetados
para operar confortavelmente em 5V sem afetar qualquer operação, mas assim que há um pico
acima de 20V, o efeito de fixação ocorre para direcionar o pulso para terra, e acima de 100V o
"tempo de resposta mínimo" é 1nS. O único problema que eu tenho com este componente é que
é um 0603, que é muito pequeno. Vou refletir sobre isso mais tarde e pensar sobre mudar para
um 0805 se eu puder encontrar um.
Você pode imaginar que há uma tonelada de sugestões, diretrizes e requisitos para executar
proteção ESD em uma placa de circuito. Dê uma olhada neste artigo da EETimes,
que explica um monte deles. Alguns vamos seguir no tempo de layout, alguns não vamos.
A "coisa" final abaixo dos varistores, é um grânulo de ferrite, L1. Os grânulos de ferrite resistem
ao ruído de alta frequência, filtrando-os para fora do sinal de mídia que você está
usando. Normalmente, seria usado para eliminar qualquer ruído induzido no cabo ... por exemplo,
imagine que você tem um projeto Arduino em sua cozinha, e por algum motivo você se sente
compelido a executar o seu 10 'cabo USB direito sobre o topo do seu micro-ondas. O cabo atuaria
como uma antena e pegaria um monte de ruído de lixo da eletrônica de micro-ondas. Esse ruído
de alta frequência seria despejado na ferrite, onde é dissipado como calor. Eu não * penso *, a
ferrite tem nada a ver com a proteção de descarga estática, mas convido qualquer pessoa com
muito mais experiência em proteção ESD ou EMI para me enviar uma nota e explicar melhor. A
ferrite na PCB é semelhante à ferrite bloco grande que é moldado na extremidade da maioria
dos cabos do computador. A maioria, mas não todos.
A parte listada é um BLM21, que é mais uma classe de componentes do que um componente
específico. A chave de classificação parece ser a atual do dispositivo é capaz de tolerar, por isso
vamos apenas ir com o baixo risco agradável, 2A componente tolerante em um pacote 0805, o
Murata BLM21PG221SN1D.
É importante notar que a conexão da blindagem USB para o trilho UGND inclui o grânulo de
ferrite, por isso vamos querer certificar-se de que seguimos o mesmo caminho no no esquema
do KiCad.
Aqui está a BOM do Subsistema de Conexão USB: Arduino Uno R3 Subsistema de Conexão
USB BOM
Na Parte 7 , reunimos todas as peças necessárias para conectar nosso soquete USB Tipo B a
um micro controlador. Agora vamos introduzir esse micro, o ATMEGA16U2 Atmel. Este é o chip
responsável pela conversão de sinais USB nos bits que podem ser lidos pelos pinos Tx e Rx (os
pinos UART) do micro maior, o ATMEGA328P.
O esquema oficial tem conexões à esquerda com o material USB, um circuito de oscilador de
cristal, as tensões de alimentação e o cabeçalho do ICSP (In-Circuit Serial Programmer). O lado
direito tem ... bem .... Qualquer que seja o inferno JP2 é, a linha Data-Terminal-Read (DTR),
alguns LEDs que piscam quando ocorrem transações em série e as conexões Tx / Rx serial reais
para o 328P.
Curiosamente, o lado direito do esquema mostra que há uma tonelada de pinos que são
absolutamente e completamente ignorado. Isso é um * lot * de capacidade apenas sentado lá
não apenas sem uso e inutilizado, mas efetivamente abandonado no local, sem capacidade de
acessá-lo.
Como fizemos em cada parte até agora da série, vamos levá-lo passo a passo. Vamos começar
no cabeçalho ICSP e trabalhar o nosso caminho no sentido anti-horário (sentido anti-horário para
todos os meus leitores de Inglês lá fora).
ATMEGA16U2 Subsistema peça por peça
Cabeçalho ICSP
O In-Circuit Serial Programmer é o método que usaremos para carregar o firmware em nosso
16U2, usando alguma forma de AVR Programmer, uma vez que eu não tenho um soquete de
programação TQFN sentado ao redor para essas coisas. Nós vamos cobrir a maneira que
realmente usar o cabeçalho no futuro, mas agora, vamos olhar para o circuito.
Você pode ver que estamos usando as linhas SCK / MISO / MOSI do 16U2, os pinos SPI. É aí
que a parte "Serial" do ICSP entra. Além disso, há uma conexão de 5V, Ground e RESET. Reset
está ativo baixo (o que denota aqui usando o macro sobre linha, mas no esquema Arduino é
mostrado pelo círculo na base do pino), então se e quando o 16U2 detectar esse pino em um
estado lógico baixo, processar uma reinicialização do sistema. O resistor de 10K (RN1C) está lá
para atuar como um puxar para cima resistor de 5V, criando um padrão "Not Reset" estado para
o pino. Todos estes pinos são usados em uma sequência específica para definir o micro em um
estado de programação específica, então o código de carga nele através do programador.
A única coisa que resta para explicar é o diodo. Demorou um pouco de escavação para
entender. Não é comum encontrá-lo em um circuito de cabeçalho ICSP, ou se houver um diodo,
ele é usado para impedir que o programador inadvertidamente ligar o seu projeto. Neste caso,
existe para evitar possíveis picos de voltagem que ocorrem no pino RESET devido a alguma
questão exótica identificada nos fóruns do Arduino. Tão perto quanto eu posso dizer, é realmente
apenas um problema (potencial) com o 328P, mas isso realmente não afeta o circuito
negativamente, então ele apenas duplicou essa parte do circuito para o 16U2 também.
Isso é muito simples, na verdade. Vcc é a conexão que lhe permite fornecer tensão às porções
digitais do 16U2, como as portas digitais GPIO. AVcc é a conexão que permite que você entregue
a tensão às porções análogas do 16U2, como os conversores Analog-to-digital (ADCs). A folha
de dados (página 4) diz que você deve conectar AVcc para Vcc através de um filtro passa-baixa,
o que ajuda a estabilizar todas as coisas analógico o micro pode fazer. Bem, não estamos
realmente fazendo qualquer material analógico, então podemos sair com apenas ligando AVcc
e Vcc juntos e usar um único limite de bypass 0.1uF normal.
UGND é o pino de ligação à terra USB e está ligado a GND (figura 20-5, página 187). Arduino
usa uma estranha solda olhando coisa que no esquema parece meio luas de frente para o outro,
e na parte inferior do PCB parece prata plataformas de montagem de superfície que estão quase
tocando. Eu usei saltadores de solda antes, especificamente para permitir que um usuário
desconecte o I2C pullup resistores no sensor de temperatura AT30TS750A e MCP7940N Real
Time Clock breakout boards. Francamente, eles são uma dor no doohickies para lidar com, então
eu vou usar um resistor 0 Ohm 0805 vez.
O pino "33 PAD", é o pad de terra grande que existe sob o pacote "Quad Flatpack No Lead"
(QFN). Eu não estou convencido de que vou usar um TQFN em vez de um pacote QFP que tem
pinos reais que você pode soldar com um ferro. Por agora, vou apenas manter com a designação
da peça original e planejar na QFN.
Novamente, isso é muito simples. O pino de transmissão serial (Tx) do 16U2 está conectado em
cruz ao pino de Recepção Serial (Rx) do 328P e o pino Rx do 16U2 está conectado em cruz ao
pino Tx do 328P. Os LEDs que piscam durante as comunicações seriais estão nos pinos 10 e
11. Eles estão conectados a + 5V, então em algum lugar no USB para o código serial, os pinos
11 e 10 são definidos como saídas e são direcionados para criar um caminho para a corrente
fluxo. Isso tem de ser tratado no firmware 16U2 que acabaremos por carregar.
DTR Net
Eu não tenho ideia do que isso é. Nenhuma pista. Parece ser os restos mortais de algo que
alguém planejou fazer, mas nunca chegou a terminar, ou decidiu que não valia a pena. Em vez
de não conectar os pinos, como é feito com muitos outros, eles rodavam para as posições de
passagem através do furo (PTH) na placa de circuito e aqueles acabam sendo preenchidos
durante o processo de solda onda. É apenas bizarro. Inútil e bizarro.
Ok, eu disse que eu não estava indo para a harpa sobre a qualidade do esquema mais, mas basta olhar
para essa coisa. É uma bagunça! A única coisa que falta é uma mancha de anel de café em meio ao.
O xtal atua como o metrônomo ridiculamente rápido para o seu micro controlador. Este pequeno
pedaço de quartzo explode 16 milhões de vezes por segundo, e faz com bastante boa
precisão. Infelizmente, o esquema oficial não lista nenhuma informação de fabricante para
ele! Apenas "16Mhz". Então, temos que fazer algumas escavações para entender como
selecionar esta parte corretamente. Eu me inclinei fortemente sobre o Cristal Oscilador Appnote
Básico da Microchip em explicar muitas das seguintes especificações para mim. Também é
impossível descobrir isso sem ter a Atmel ATMEGA16U2 Datasheet para referência.
Primeiro, a folha de dados diz que podemos usar um oscilador de cristal ou um ressonador de
cerâmica. Olhando ao redor, eu não consegui encontrar um ressonador que tivesse a precisão
que eu queria (30ppm ou menos espero), então um oscilador de cristal (xtal) era a solução
certa. Mas qual deles? A pesquisa de Cristais de 16Mhz em parts.io obteve 104.000 resultados
de pesquisa!
Frequência
Quão rápido ele precisa ser? A folha de dados (tabela 8-3 página 30) diz que qualquer oscilador
de 400kHz a 16Mhz é válido. No entanto, quanto mais rápido o seu oscilador é executado, mais
potência você provavelmente consumirá. Agora, uma vez que o poder não é realmente um
problema para nós (ok, poderia ser se você estiver executando uma bateria), poderíamos apenas
dizer: "Inferno, vamos até o 16Mhz! WOOT! ". Nós temos uma velocidade mínima imposta a nós
por uma razão muito específica de aplicação: porque estamos fazendo USB sinalização, temos
de usar um cristal de 8Mhz no mínimo. A razão técnica pelo qual 16Mhz foi escolhido como a
velocidade operacional é incerto para mim, como a única coisa que o micro 16U2 faz é conversão
USB / Serial, que poderia facilmente ser cumprida em 8Mhz. Estamos usando o regulador de
tensão USB interno, o que significa que o nosso VCC tem um mínimo de 4.0V, e o uso de um
cristal de 16Mhz é permitido em 4.5V VCC, Por isso pode ter sido um caso de "bem, estamos
indo com 5V VCC em toda a placa, por isso podemos também dar-nos a velocidade
extra". Alternativamente, poderia ter sido um planejamento avançado, permitindo maior uso do
16U2 no futuro. Em última análise, poderia ter sido um caso de "ei, temos um negócio muito bom
sobre estes cristais de16Mhz." Também.
Ok, então vamos com um 16Mhz Cristal Oscilador. Olhando para cima em parts.io você vê um
conjunto desconcertante de critérios de seleção possíveis, nenhum dos quais são abordados na
folha de dados.
Então vamos usar alguma lógica de lado para ajudar a tomar uma decisão ...
Cada projeto de circuito de cristal que eu já fiz parece exatamente como este, e eles sempre foram
paralelos.
Existem cerca de duas vezes mais cristais paralelos no estoque em distribuidores do que há
cristais série.
O índice de popularidade da peça em parts.io mostra que o top 10 cristais de16Mhz que estão
sendo adquiridos são todos paralelos.
Eu admito, esta é uma maneira ruim de fazer uma decisão da engenharia, mas é o que é. Vamos
apenas com o paralelo, e se preocupar com ressonadores série quando começamos a construir
sistemas de radar ou alguma parecida.
Tolerância de Frequência
A tolerância de frequência (como mencionada acima) é medida em Partes Por Milhão
(PPM). Isso é mais fácil de entender se falarmos sobre o cristal 32.768kHz usado com Relógios
de Tempo Real. Idealmente, o cristal irá pulsar 32.768 vezes a cada segundo, ou pensou em
outra maneira, o relógio IC interpreta um único segundo como tendo ocorrido a cada 32.768
pulsos. Se o seu cristal desvia por algum valor "x" PPM de qualquer forma, então você terá ou
muitos pulsos em um segundo, o que significa que seu relógio está correndo rápido, porque ele
chegou a 32.768 pulsos mais rápido do que o ideal seria, ou muito poucos Pulsos em um
segundo, significando seu pulso de disparo está funcionando mais lento porque fez exame de
demasiado longo começar a uma contagem completa do pulso.
Você pode ler todos os cálculos necessários no link Relógio em Tempo Real acima, mas isso é
o que PPM significa ... quanto maior o valor de PPM, o concebivelmente mais lento ou mais
rápido seu oscilador está sendo executado. Você quer esse número tão baixo quanto possível,
com valores mais baixos significando preço de componente mais elevado. Os valores típicos são
10, 20 ou 30 ppm. Acima de 30 é maneira de impreciso, abaixo de 10 começa a entrar em "cristal
personalizado".
Estabilidade da frequência e envelhecimento
Estabilidade de frequência e envelhecimento também são listados em PPM e refletem o desvio
esperado de ideal com base em fatores ambientais (vibração mecânica, flutuações de
temperatura, etc.) ou a idade real do componente. Tal como acontece com a tolerância, quanto
mais baixo esses números, mais caro o componente. Não estamos fazendo alguma aplicação
industrial ou aeroespacial louca assim que eu realmente não me importo com esses valores.
Capacitância de carga
O valor de capacitância de carga está listado em picofarads e é o valor de capacitor necessário
para trazer o cristal à sua frequência especificada e assim fornecer tempo estável e preciso. Tudo
que você tem a fazer é comprar um par de bonés com esse valor e você é dourado.
Resistor paralelo
O resistor paralelo no esquema oficial saiu do nada, e eu não consigo encontrar nenhuma razão
para ele estar lá. Não é mencionado no xtal ou 16U2 folha de dados, deixando-me em uma perda
de por que ela existe. Estou substituindo-o com um resistor de 0Ω, por isso, ele se revela
necessário e pode ser adicionado.
Com uma quantidade significativa de contribuição muito útil o coaching de Philip Freidin, que
também me apontou na direção de várias notas de cristal, eu tenho uma compreensão muito
melhor da necessidade para este resistor paralelo.
Este resistor está realmente agindo como um resistor de realimentação para o inversor interno
do micro ao qual o cristal está conectado, e polariza a entrada do inversor na região
linear. "Desequilíbrio na região linear", significa que está amplificando a oscilação do cristal sem
nunca totalmente saturando em um dos trilhos de tensão. Quando a alimentação é aplicada pela
primeira vez ao sistema, este resistor de realimentação auxilia os componentes que compõem o
circuito do oscilador, tanto internos ao micro e as peças externas que fornecemos, para obter
toque na frequência correta mais rápido.
Na parte 10, é hora para o menino grande, os cérebros atrás da roupa, o subsistema de
ATMEGA328P.
Na parte 9, obtivemos em profundidade com o cristal 16Mhz conectado ao 16U2. Agora é hora
do grande show: o ATMEGA328P da Atmel. O cérebro do Arduino. O braço direito do Arduino. O
polegar oponível do Arduino. Quando você pensa no "hardware" que compõe uma UNO, você
não pensa nos comparadores 16U2s e op-amp, você acha deste chip.
Neste post vamos entrar nos aspectos mais familiares do circuito antes de tomar uma mordida
da maçã DTR / Reset na próxima.
Desvio e Término
Temos um conjunto de capacitores de bypass no esquema, mesmo que eles não sejam
desenhados de forma convencional. São ambas tampas de 0,1uF (100nF) e ligadas entre fontes
de tensão e terra. A primeira é a tampa de derivação da fonte de tensão principal, C6, e a
segunda é C4 na linha AREF. Não há nada especial sobre esses capacitores, então eu vou usar
os mesmos que eu tenho usado todo o tempo.
Se você ainda é bastante novo para o Arduino ou micros em geral, você pode estar se perguntando o que
AVCC, AGND e AREF são todos. Estes pinos compreendem as seções analógicas de tensão do micro e
fornecem ao projetista uma maneira de fornecer referências isoladas de voltagem e terra analógicas ao
chip, além de qualquer material digital. A eletrônica, em geral, é barulhenta, e a seção analógica do 328P
é toda sobre os sinais de amostragem o mais rápido e preciso possível. Para fazer isso de forma eficaz,
o engenheiro pode isolar completamente essa parte do seu projeto eletricamente do resto do projeto, para
garantir que não haja interferência, ruído ou interferência entre os 1s e 0s ruidosos e o que quer que
esteja ficando medido no lado analógico. Destes pinos, o único acessível ao usuário é AREF.
Maxim Appnote 2154 faz um ótimo trabalho resumindo a força relativa e as fraquezas de várias
formas de osciladores, incluindo o bom relógio RC Micro controlador Clock-Crystal, Resonator,
RC Oscilador ou Silicon Oscillator?
Outra coisa importante a notar, é que o ressonador tem os capacitores de carga já incluídos! O
que é estranho, considerando que eles são mostrados no esquema. Pode ser que o símbolo para
"ressonador cerâmico" no programa de CAD que eles usaram mostrou aqueles lá, mas eles têm
listados como XTAL1 e XTAL2. Sério, a folha de dados essencialmente grita, "NÓS
INCLUÍAMOS os CAPACITORES DE CARGA JÁ."
Assim, embora menos precisos, estamos economizando quase um dólar (em quantidades
individuais), porque as tampas de carga já estão incluídas. Mesmo em uma produção de 250
placas, estaríamos economizando quase 40 centavos por placa usando o ressonador em vez do
cristal. Isso é realmente uma poupança muito atraente.
Além disso, é minúsculo ... sobre o tamanho de um 0603 passivo ... e superfície montável.
Para o resistor de feedback de 1M, usaremos apenas o mesmo que tivemos com o 16U2.
A chave nessa sequência para nós é a "quando o Arduino é redefinido, o bootloader verifica"
parte. Seria irritante se tivéssemos que pressionar o botão de reinicialização manualmente toda
vez que corrigimos algum pequeno bug em nosso código e o enviamos de volta para o chip. No
UNO R3 (e as variantes mais atuais do Arduino), um recurso de "auto-reset" foi implementado
para cuidar disso para nós.
Quando falamos com o 328P do nosso computador, fazemos isso por USB. O USB vai para o
16U2, que o traduz no USART, e lida com a interação com o 328P. Parte do padrão de
comunicações USART permite algo chamado "controle de fluxo" que permitia que um
computador em uma extremidade de uma conexão serial iniciasse ou interrompesse a
conversação serial configurando o estado lógico de um pino chamado "Data-Terminal-Ready" ou
DTR (Há outras variantes neste princípio ). Quando DTR é alto, ele diz: "Ei, estou pronto para
todos os dados que você pode enviar." Quando DTR é baixo, ele diz: "WOAH! Dê-me uma pausa,
eu preciso processar algumas coisas para segurar a comunicação. "
Nos cabos de série DB9 antigos que uma vez usado para conectar modems e impressoras de
etiquetas ruins para nossos PCs Pentium, DTR foi pino 4 nesse cabo.
Os designers Arduino aproveitam este processo, usando o sinal DTR para emitir um reset a partir
do 16U2 para o 328P. Sempre que o 16U2 estabelecer uma conexão serial, o DTR é reduzido,
o que causa um reset e indica o bootloader. É por isso que seu esboço sempre é reiniciado
quando você abre uma nova janela de monitor serial!
É importante, entretanto, que não possamos manter o 328P em reset. Nós só queremos pulso o
pino muito, muito brevemente, para que o bootloader pode ouvir SERIAL_RX e determinar se um
novo esboço está sendo enviado. Quando o pino RESET no 328P é baixo, todos os pinos
(exceto para os pinos ICSP, eu acredito) são definidos para um estado de alta impedância,
matando efetivamente os pinos série. Então nós pulsamos o Pin 1 no 328P para emitir a
reinicialização, não o arrastar baixo, em seguida, arraste-lo alto novamente.
Por uma questão de incompleta, eu incluí a conexão de cabeçalho ICSP aqui, mas as partes
essenciais que implementam a teoria acima são ...
Agora, vamos realmente empurrar um novo sketch para o nosso 328P sobre USB. Clique no
botão "Carregar". Depois que o sketch compilar, o 16U2 recebe o código sobre USB e puxa DTR
baixo. Isso faz com que o capacitor C5 se descarregue rapidamente através do 1K puxar para
baixo RN2D, porque o potencial 5V no lado 16U2 desapareceu. Imediatamente, porém, ele
começa a recarregar através do 10K puxar RN1D e após cerca de 5ms, o capacitor e
o pino RESET, estão de volta em 5V. O gerenciador de inicialização inicia um período de espera
esperando que algo pareça como novo código de esboço. Pelos meus testes, parece ser cerca
de um segundo inteiro. Nesse tempo, o 16U2 começa a transmitir o novo esboço sobre o USART
para o 328P, em seguida, recebe alguma forma de reconhecimento, e DTR é retornado a alta.
Quando a linha DTR retorna alta, por um breve momento, o capacitor C5, que se restabeleceu a
5V 5ms depois que o DTR foi descartado em primeiro lugar, "sobrecarregará" para VCC x 2 , 10V,
já que agora terá 5V de potencial no 16U2 lado. Se você tentou aplicar 10V a qualquer outro pino
do seu Arduino, você iria queimá-lo em um batimento cardíaco. O pino RESET é especial porque
facilita algo chamado "High Voltage Programming" e é capaz de ter uma tensão de até 12.5VI
pensar. Então, por um instante, o pino está a 10V antes que ele comece imediatamente a
descarregar através do resistor 10K pull up para o menor potencial de 5V.
Eu sei, eu sei "FLUXO ATUAL EM UMA FONTE DE TENSÃO", mas a quantidade de corrente
que estamos falando é um capacitor de 100nF descarregando metade da energia potencial
durante o período de cerca de 2ms. Para esse primeiro nano segundo, você fica em torno de
1mA através do resistor, mas depois disso, eu apostaria que a maior parte da corrente é perdida
como calor através do resistor de qualquer maneira.
Se, por algum motivo, você quisesse desabilitar a função de auto restauração, você colocaria
uma faca bem afiada entre as duas metades do jumper de solda em "RESET EN", para cortar o
traço. Ao fazer isso, você isolaria o 328P RESET do capacitor C5. Se você quisesse reativar a
característica outra vez, você apenas blob um monte de solda para atravessar as duas almofadas
de prata.
UPDATE: Com base no feedback do leitor, eu adicionei mais detalhes sobre o
funcionamento do capacitor C5 para o fundo deste post.
1 void setup() {
2
3 Serial.begin(9600);
4
5 Serial.println (0x01);
6 delay(100);
7 Serial.println (0x01);
8 delay(100);
9 Serial.println (0x01);
10 delay(100);
11 Serial.println (0x01);
12 delay(100);
13 Serial.println (0x01);
14 delay(100);
15 }
16
17 void loop() {
18
19 }
Você pode ver a extremidade traseira da confirmação serial na linha Tx antes DTR vai alta. A
menor sugestão de um> 5V pulso é visto no 328P traço naquele momento, que evapora dentro
de um ou dois milissegundos. Como estamos ampliados em 2ms por divisão, não vemos os 5
comandos seriais executados ainda.
Finalmente, vamos dar uma olhada no que acontece quando simplesmente abrimos o monitor
serial com o nosso pequeno sketch serial blip já carregado.
Outra vez, nós somos zumbidos para fora a 200ms por divisão. Você pode ver DTR ir baixo, com
o pulso de reset correspondente na linha de reset 328P. Em seguida, passam-se 1,4 segundos
antes que aconteça nada! Esse é o bootloader esperando para ver se algum novo código está
vindo. Ele expira, as mãos controlam de volta para o esboço existente, e os nossos cinco blips
serial são vistos imediatamente depois. DTR permanece baixa enquanto a janela do monitor
serial for deixada aberta.
Embrulhar
Isso é muito para digerir, então eu vou cortá-lo lá fora. No próximo segmento, vamos identificar
componentes para o subsistema 328P e publicar o KiCad Schematic e BOM.
ATUALIZAR
Recebi um e-mail de um leitor que disse que estava se perdendo na minha descrição do que
acontece ao redor do capacitor durante a sequência de reset, que é um ponto totalmente válido,
porque o capacitor está sendo usado de maneira incomum. Abaixo, adicionei minha resposta à
pergunta de Charles na esperança de que ela possa explicar as coisas um pouco mais
claramente ...
Obter feedback como esse é ótimo, porque me faz voltar e reler o que escrevi, não só com um
olhar crítico, mas também com a atitude "veja se posso me reaprender", porque é difícil para mim
lembrar Detalhes específicos de como coisas como essa funcionam. Depois de passar o post
algumas vezes, e realmente pensando, "inferno, eu devo ter feito tudo isso errado" ... Eu canso
de verificar e pode reconfirmar que o post está correto. Ok, então vai com essa premissa, deixe-
me ver se eu posso esclarecer.
Então, agora o 16U2 precisa emitir um reset ... ele faz isso puxando o pino 13 para baixo...
embora isso pareça inapropriado. O pino 13 pode não estar indo para baixo, ele pode estar indo
para alta impedância e o caminho para o pino terra é mantido através de RN2D. Eu não estou
inteiramente certo, e honestamente que é uma espécie de minúcia, o ponto é que o 16U2 traz o
lado DTR da tampa para terra, desbalanceado o potencial em C5.
C5 não tem partículas carregadas para dar, porque ele foi mantido nesse estado estável, mas
volátil, de modo que a carga através dela cai quase que instantaneamente para zero ... * BOOM
* RESET!... mas então começa a construir uma carga de até 5V no lado RESET através do RN1D
10K. Uma vez que existe algum tipo de tempo limite programado dentro dos gestores de
arranque que aguarda mais de um segundo inteiro para que algo aconteça aqui, e leva apenas
cerca de 4ms para a tampa para carregar através de RN1D, C5 fica a 5V no lado RESET muito
rapidamente.
Essa descrição faz mais sentido? Porque certamente me ajudou a entendê-lo mais
eficazmente eu vou provavelmente acabar adicionando isso a essa página.