Minha biblioteca de componentes Altium de código aberto contém centenas de símbolos esquemáticos, fornecendo mais de 100.000 componentes para uso. As pessoas costumam se surpreender quando digo que leva apenas alguns minutos para fazer um símbolo esquemático usando o Altium, mesmo que a peça tenha um alto número de pinos. Neste artigo, quero mostrar como você pode aproveitar algumas das ferramentas no Altium para criar seus próprios símbolos rapidamente.
Antes de começarmos, você precisará de algumas coisas:
Para encontrar uma peça para usar neste artigo, fui até a Digi-Key e procurei na categoria Embedded - Microcontrollers por um microcontrolador ARM Cortex M series em estoque, com FLASH integrado e mais de 100 pinos de GPIO. Em seguida, ordenei pela quantidade disponível, e o vencedor é um NXP MK64FN1M0VLQ12. Parece ser um microcontrolador interessante em um pacote LQFP-144. Copiar e colar as descrições dos pinos para cada pino deste pacote seria demorado, tedioso e sujeito a erros, então, vamos evitar fazer isso!
Olhando para a folha de dados desta peça, a tabela de disposição dos pinos (5.1, Página 68) não é ideal para este processo, mas tudo bem—folhas de dados raramente são ideais para criar símbolos.
Antes de entrar em detalhes sobre como criar este componente, eu mesmo executei o processo para garantir que não perderia nenhum passo enquanto escrevia o artigo. Levei pouco mais de 7 minutos para criar esta peça de 144 pinos, o que é um pouco lento para mim. Se os dados na folha de dados não precisassem de tanta limpeza, teria sido em torno de 4-5 minutos. No entanto, já criei quase 500 símbolos como este, então tenho um pouco de experiência que me ajuda a trabalhar rapidamente!
A primeira coisa que faremos no Altium é criar uma nova biblioteca esquemática indo em Arquivo -> Novo -> Biblioteca -> Biblioteca Esquemática.
Em seguida, no novo componente, colocamos um retângulo. Ao colocar o retângulo para o corpo do componente primeiro, isso nos poupará de ter que movê-lo para trás dos pinos mais tarde, apenas economiza um pouco de tempo. O tamanho do retângulo não importa. O que eu criei será muito pequeno para o componente final!
Após o retângulo, criaremos nosso primeiro pino, que será a semente para todos os outros.
É preferível definir as propriedades dos pinos de forma que seja fácil de usar mais tarde, então eu simplesmente defino o número do pino (designador) para 1, e o nome para "P1". A parte numérica do nome pode ser autoincrementada, e a letra P apenas me permite saber em uma etapa posterior que este é o nome do pino.
Você deve ter algo parecido com isso agora:
Entretanto, estamos com 143 pinos a menos, então vamos corrigir isso. Primeiro, copie o pino.
Em seguida, vamos usar a poderosa função Colar em Matriz do menu Editar.
Precisamos de mais 143 pinos, então você pode inserir 143 para a contagem de itens e certificar-se de que vertical está definido para -100mil. Isso gerará pinos começando de onde você clicar, indo para baixo (em vez de para cima).
Como há muitos pinos aqui, eu sugeriria dar zoom para fora e clicar em algum lugar por volta de 7000mil de altura no símbolo esquemático!
Eu organizei os pinos em colunas, mas agora temos 144 pinos para usar!
Ter todos esses pinos não é muito útil para o símbolo, pois ainda precisamos adicionar nomes aos pinos. Para fazer isso, vamos consultar a folha de dados.
Selecione a tabela de pinos e copie e cole todos os dados em um documento notepad++. Vai parecer horrível, não se preocupe!
Como mencionei anteriormente, esta não é a folha de dados mais ideal, então, antes de podermos fazer mais alguma coisa, quero limpar um pouco os dados colados. Principalmente, muitas das funções foram divididas em várias linhas nas quais têm uma / ou _ no nome. Ter dados de qualidade como nosso ponto de partida vai facilitar a vida mais tarde.
Vou usar Localizar e Substituir para procurar por _\r\n
e substituir por _
. O modo de busca estendida vai encontrar os nomes onde o _
divide a função em duas linhas e então substituir por apenas um _
. Clique em Substituir Tudo para fazer todas as alterações de uma só vez.
Faça o mesmo para /\r\n
, substituindo por /
.
A folha de dados também tem muitas colunas com a palavra ‘DISABLED’, então vou procurar e substituir ‘DISABLED ‘ por um espaço no final, e substituir isso por nada.
Agora, chegamos às Expressões Regulares para organizar essa confusão de letras e números em uma bela tabela de números de pinos e descrições. Uma coisa que temos sorte de ter é o pacote de interesse como a primeira coluna na tabela de pinos, isso torna a expressão regular um pouco mais fácil.
Vou usar a página de teste de expressão regular em RegexStorm para processar a lista de pinos. Você também pode verificar a Referência de Expressão Regular deles se precisar revisar sua sintaxe.
Antes de começarmos a combinar dados, seria bom ter todos os itens de descrição de pinos em uma única linha, em vez de separados em várias linhas como estão atualmente. Podemos usar um padrão simples no RegexStorm para arrumar o texto com o qual estamos trabalhando.
Vou usar o padrão \r\n(\D)
para encontrar novas linhas que não sejam seguidas por um dígito (\D
é a sequência regex para 'não um dígito'). O 'não um dígito' que é correspondido precisa entrar em um grupo, o que é feito através dos parênteses, para que possamos substituir o que é correspondido apenas por esse caractere. Nossa substituição é então apenas $1
, já que $1
especifica o primeiro grupo que foi correspondido.
Após clicar em substituir, a aba de contexto contém os dados de entrada corrigidos, então podemos copiá-los da aba de contexto para a entrada para fazer mais algum trabalho.
Ainda não terminamos, porém, há muitos (127) lugares em que o Nome do Pino, Função Padrão e função ALT0 são todos iguais. Não queremos criar um pino 5 VDD VDD VDD, queremos? O pino 5 sendo chamado de VDD é suficiente.
Podemos usar uma expressão regular para limpar esses nomes duplicados também, usando o padrão:
\b([A-Z\d/_]{3,})\s*\1\s*\1? *
Isso encontrará um limite de palavra com o \b, e então combinará um grupo de três ou mais letras maiúsculas, dígitos (\d
), caracteres de barra ou sublinhado com ([A-Z\d/_]
). Em seguida, procura por um número opcional de caracteres de espaço em branco com \s* seguido pelo mesmo que o primeiro grupo (\1
), outro espaço opcional, e finalmente, opcionalmente (o ?) o primeiro grupo novamente seguido por qualquer número de espaços. Desta forma, não combinará com pinos repetidos como EE EE, mas combinará 2-3 da mesma coisa em sequência como VDD VDD VDD.
Podemos então substituir isso por ‘$1
‘, o mesmo que da última vez, mas com um espaço depois do $1
. Finalmente, podemos copiar isso de volta para a caixa de Entrada.
Padrão de Pesquisa
Estamos procurando combinar um padrão que encontrará isso:
115 C7 C6 82 PTC10 ADC1_SE6b
ADC1_SE6b
PTC10 I2C1_SCL FTM3_CH6 I2S0_RX_FS
FB_AD5
Ou
89 F10 D11 — PTB8 PTB8 UART3_RTS_b
FB_AD21
A principal diferença entre os dois, pelo que nos diz respeito, é o caractere ‘—’ presente onde o pacote não tem o pino.
Minha expressão de correspondência é:
(?:(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,2}\s+){2}(?:[\d—]{1,3}\s+)
)
Isso está correspondendo bem na visualização da tabela. Agora tenho uma tabela para pinos, e tenho toda a seção de número de pinos dos dados da folha de dados correspondida. Isso significa que qualquer outra coisa vai ser a descrição.
Eu uso Expressões Regulares desde que programava em PERL há cerca de 20 anos, quando era adolescente, então me sinto bastante confortável com elas! Vamos decompor essa primeira correspondência e explicar, caso você seja novo em expressões regulares ou precise de uma revisão.
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+))
(?:)
significa que é um grupo não capturador. Isso me permite agrupar tudo sem que acabe aparecendo na visualização de Tabela no RegexStorm. Agrupar as coisas é bastante importante para obtermos o que queremos!
\b
é um limite de palavra, por exemplo: uma nova linha, espaço, tabulação, etc. Isso impede algo como:
LPTMR0_ALT1
74 L12 J11 52
de combinar com o 1 no final de ALT1, evitando que os primeiros 3 designadores sejam combinados.
(?<Pin>\d{1,3})
captura um grupo nomeado Pin através do ?<Pin>. Nem todos os motores de Expressão Regular suportam grupos nomeados, o que é uma das razões pelas quais eu uso o RegexStorm. Esse grupo vai combinar entre 1 e 3 ({1,3})
dígitos (\d). Nosso número de pino sempre terá entre 1 e 3 dígitos (de 1 a 144), então isso é tudo o que precisamos procurar.
\s+
Corresponde a qualquer grupo de um ou mais caracteres de espaço em branco consecutivos. Dessa forma, se os dados que copiamos da folha de dados tiverem um espaço, uma tabulação ou uma quebra de linha entre os pinos, tudo será correspondido, mesmo que haja múltiplos espaços ou tabulações.
Em seguida, queremos corresponder aos dois designadores de pino do pacote BGA. (?:[A-Z\d—]{1,3}\s+){2}
faz isso, o quantificador no final ({2})
diz que queremos dois do grupo não capturado. Esse grupo está encontrando de um a três de qualquer coisa entre colchetes. Os colchetes em expressões regulares significam uma correspondência de 'qualquer coisa aqui dentro'. No nosso caso, temos todas as letras maiúsculas (A-Z), todos os números (\d), e o travessão usado na folha de dados para dizer que a função não está naquela opção de pacote. Por fim, temos um ou mais espaços, assim como após a correspondência do Pino.
(?:[\d—]{1,3}\s+)
está correspondendo ao nosso número final de pinos. É basicamente o mesmo que nosso Correspondente de Pino, mas precisamos permitir também o traço longo, caso essa funcionalidade não esteja no pacote.
Se você não tem experiência com expressões regulares, não se preocupe, elas param de derreter seu cérebro quando você as lê depois de apenas alguns anos!
Encontrando a Descrição do Pino
Para encontrar a descrição correspondente, podemos adicionar à sintaxe atual para que tudo esteja em um grupo, este é agora o meu padrão:
(?:\b(?<Pin>\d{1,3})\s+(?:[A-Z\d—]{1,3}\s+){2}(?:[\d—]{1,3}\s+)(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b)))
O padrão adicionado para corresponder apenas à parte da descrição é:
(?<Desc>[\w\d_/\s]+?\b(?=\d{1,3}\b))
Finalmente, temos uma tabela contendo 144 correspondências com dados relativamente limpos. Agora, posso copiar e colar isso na minha Planilha Google.
De volta ao Altium Designer, agora podemos inserir alguns dados na matriz de pinos que criamos. Selecione todos os pinos (mas não o retângulo) na janela do símbolo esquemático.
Abra o painel SCHLIB List clicando no botão de painéis no canto inferior direito da janela do Altium.
Agora, você verá todos os pinos selecionados no símbolo esquemático.
Se você clicar com o botão direito em qualquer lugar na grade, pode escolher mudar para o modo de edição.
Agora, você pode clicar na grade e pressionar Ctrl-A ou clicar com o botão direito e escolher Selecionar Tudo.
Após isso, copie e cole tudo na sua planilha um pouco mais abaixo da tabela que você colou do RegexStorm.
Agora que temos as duas tabelas na planilha, você pode copiar a coluna de número dos pinos dos dados que copiou do RegexStorm sobre os números dos pinos do Altium Designer, e então fazer o mesmo para a coluna de descrição. Este símbolo por acaso tem todos os pinos para o pacote em que estamos trabalhando em ordem, mas isso muitas vezes não será o caso. É mais fácil simplesmente substituir ambas as colunas para que você não acabe com incompatibilidades entre descrição e nome dos pinos.
Antes de retornar esses dados para o Altium Designer®, quero rapidamente corrigir a coluna de nomes, substituindo quaisquer espaços por / para seguir o padrão da minha biblioteca. Para fazer isso, selecione toda a coluna na tabela do Altium Designer e, em seguida, você pode abrir a ferramenta de localizar e substituir para procurar um espaço e substituí-lo pela barra. Clique em ‘substituir todos’ após verificar que a busca está definida para o intervalo específico das células que você selecionou.
Agora, temos uma tabela com todos os nomes dos pinos e designadores prontos para voltar ao Altium Designer. Basta selecionar toda a tabela e, em seguida, colá-la de volta na sua tabela SCHLIB List. Isso vai sobrescrever tudo na tabela, deixando uma grande bagunça no seu editor de símbolo esquemático!
O mais importante é que temos os dados no Altium Designer, e foi muito menos trabalho e menos propenso a erros do que tentar copiar todos os detalhes do datasheet pino por pino.
Gosto de agrupar todos os pinos ao redor da folha do símbolo esquemático para poder decidir se quero manter o símbolo como uma peça única ou se preciso fazer um símbolo de várias partes. Para esta peça de 144 pinos, vai ter que ser um símbolo de várias partes, mas ainda assim vou agrupar tudo de maneira organizada para me dar grupos de pinos para copiar e colar em cada nova parte.
Podemos usar o painel SCHLIB Filter para selecionar grupos de pinos de uma vez. Não há uma ferramenta para arranjar rapidamente os pinos juntos, mas com todos os pinos selecionados, é fácil o suficiente arrastá-los para uma área livre da folha esquemática e organizá-los manualmente.
Para encontrar todos os pinos como VSS ou VSSA, posso usar o filtro: Name LIKE ‘VS*’, que realizará uma correspondência curinga para selecionar todos esses pinos.
Você pode repetir isso com filtros como Name LIKE ‘VD*’ para pegar os outros pinos de alimentação. Os pinos de porta neste componente começam com PTA/PTB/PTC etc, então você pode usar o mesmo estilo de filtro para encontrar todos os pinos da Porta A e assim por diante.
Depois de um pouco de organização rápida, agora tenho todos os meus pinos agrupados.
Quero todos os pinos ADC, DAC, de tensão, terra, USB e cristal na peça principal, então os movi para o retângulo que criei como o primeiro passo deste processo e depois redimensionei o retângulo para caber todos os pinos. Sempre coloco meus pinos VDD no canto superior esquerdo e os pinos VSS/GND no canto inferior esquerdo e agrupo os pinos por função em vez de sua posição no símbolo. Acho que isso torna o símbolo mais utilizável em um esquemático do que tentar copiar o layout físico.
Agora que a parte principal está finalizada, precisamos adicionar subpartes ao símbolo esquemático. Você adiciona uma nova parte ao símbolo esquemático indo em Ferramentas -> Nova Parte.
A nova parte aparecerá no painel da Biblioteca SCH, aninhada sob sua componente principal.
Uma vez que você tenha as subpartes, é apenas uma questão de criar um retângulo em cada subparte e então cortar e colar os pinos para dentro dele a partir da parte principal. Dividir um microcontrolador enorme em partes lógicas permitirá ao engenheiro que usa o símbolo criar um esquemático mais limpo e organizado do que ter sua folha inteira dominada por um único símbolo esquemático gigante.
O símbolo criado acima pode ser perfeito para a sua biblioteca, mas eu prefiro exagerar nas coisas. Eu juntei algumas expressões regulares adicionais às quais você pode recorrer se quiser limpar ainda mais os nomes ou adicionar barras de baixo ativo às funções que começam com n_ ou terminam com _b, como a parte em que trabalhamos tem.
Ao ter esses padrões prontos para usar, você pode acabar com nomes de símbolos de maior qualidade e apenas um ou dois minutos adicionais de trabalho. Além disso, você poderia usá-los como base para seus próprios padrões de limpeza.
Eu removi manualmente funções duplicadas nos pinos nas capturas de tela acima, mas você pode fazer isso automaticamente se achar que tem muitas delas para remover as duplicatas de forma eficiente manualmente.
Primeiro, remova as duplicatas da função inicial, como ‘PTA12’
. Use a expressão regular:
^([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
Com a opção Opções -> Multilinha. Isso tratará cada linha no campo de Entrada como sua própria entidade para o caractere ^ corresponder ao início da linha.
Substitua as correspondências por:
$1/${inbetween}
Em seguida, substitua quaisquer funções após a primeira função com a expressão regular:
/([A-Z\d/_]{3,})/(?<inbetween>(?:(?:[^/])+/){1,5})\1/?
Você pode desativar a opção de múltiplas linhas novamente, mas deixá-la ativada não impedirá que a expressão funcione. Novamente, substitua as correspondências por:
/$1/${inbetween}
Continue substituindo as correspondências até que não sejam encontradas mais. Para esta parte, tive que executar 3 vezes para remover todas as duplicatas.
Existem duas expressões para substituir duplicatas, pois a expressão precisa saber onde começar a procurar por uma correspondência. Você não quer substituir /RMII0_RXER/MII0_RXER/ apenas por /RMII0_RXER/, já que a segunda função é a mesma que a primeira exceto pelo R. Tendo duas funções, podemos usar a / como um caractere inicial, ou o início da linha.
Adicionar barras de baixa ativa ao nome de uma função está mais de acordo com os padrões do Altium Designer do que ter n_ ou _b na função. Você pode fazer isso adicionando uma \ após cada caractere, e uma expressão regular pode encontrar isso para você com grupos de antecipação.
Para funções que terminam com _b, use a expressão:
([^/](?=[A-Z\d_]*_b[/\r]))
E substitua todas as correspondências por: $1\
Em seguida, use a expressão:
\_b
E substitua todas as correspondências por: \
Para funções que começam com n_, você pode usar a expressão:
((?<=/n_[A-Z\d_]*)[^/])
E substitua todas as correspondências por: $1\
Depois disso, você precisará pesquisar usando a expressão:
n_(\w)
E substituir por: $1
Para remover o n_ do início do nome da função.
Expressões regulares são uma ferramenta muito poderosa para ter se você está criando símbolos no Altium Designer a partir de folhas de dados. Você pode rapidamente transformar cópias ininteligíveis coladas de um PDF em uma planilha utilizável usando apenas algumas expressões. Novos usuários me dizem que a sintaxe parece extremamente intimidadora, pois à primeira vista pode parecer apenas uma confusão de símbolos e números, mas na realidade, é uma sintaxe muito bem definida que é bastante fácil de aprender. Após apenas algumas horas limpando textos copiados de folhas de dados em tabelas de pinos, você se encontrará ficando confortável com a sintaxe.
Esta parte específica foi essencialmente escolhida ao acaso para criar este artigo. Embora os dados precisassem de muita limpeza - e isso pode levar mais tempo do que realmente inserir os dados no Altium Designer - espero que tenha mostrado a você algumas novas maneiras de trabalhar com símbolos esquemáticos.
Se você tiver alguma sugestão para criar símbolos esquemáticos mais rapidamente, deixe um comentário abaixo com suas sugestões para que outros possam aproveitar sua experiência.
Veja mais guias da Altium ou leia mais por Especialista da Indústria Mark Harris. Gostaria de saber mais sobre como a Altium pode ajudá-lo com o seu próximo design de PCB? Fale com um especialista na Altium.