sexta-feira, outubro 30, 2009

Star rating system

On October, 28 I included Out Brain's widget. It's a star rate system that let readers to tell me what they really think about my articles.

So I ask you my dear reader: Tell me your opinion. Rate my posts.

With your rate and the nice Out Brain's report system I'll be able to improve next posts because I write to you.

Have you already read any of my old posts? so, please consider to rating them.

And drop me a note about any thing you don't like. Did I write something wrong? Is my English too bad? Tell me what's wrong and I will try to correct it.

Thank you.

Avaliação dos Artigos

No dia 28 de outubro eu incluí o widget da Out Brain que permite que o leitor qualifique os artigos publicados neste blog marcando quantas estrelas eles merecem.

Assim, eu te peço caro leitor: Diga-me a tua opinião. Qualifique os artigos.

Com a tua avaliação e a excelente ferramenta de relatórios da Out Brain eu terei a oportunidade de melhorar os próximos artigos. Afinal, eu escrevo para ti.

E se tu, por acaso já tiveres lido outros artigos, por favor, perca um tempinho e vá até eles para qualificá-los.

E escreva um comentário sobre qualquer coisa que tu não tenhas gostado. Escrevi algo errado? Diga-me o que foi que eu tentarei corrigir.

Obrigado.

sábado, outubro 24, 2009

Conhecendo a interface do LTSpice

Antes de começar a simular os circuitos com o LTSpice, é necessário que estejamos familiarizados com a sua interface.

Todos os manuais e tutoriais que encontrei ou estão em inglês ou em alemão. Muitos têm dificuldades com esses idiomas, então este artigo será como uma referência bem resumida dos comandos do LTSpice.

-E o que veremos aqui?

Agora nós vamos ver apenas o básico: como criar um novo diagrama, como inserir e remover componentes, bem como movê-los, rotacioná-los e editar suas propriedades, entre outras atividades do dia a dia.

Conforme formos avançando nos nossos estudos, a gente vai aprender mais e mais comandos.

Para simular os circuitos no SPICE original, tínhamos que escrever os arquivos contendo todas as definições dos componentes, o que se desejava medir e como os componentes estavam interligados.

A listagem 1 representa o circuito mostrado na figura 1.
* RC Integrator Frequency Characteristics
V1  1  0  DC  0V  AC  1V
R1  1  2  1k
C1  0  2  1u
.AC DEC 20 1 10K
.PLOT AC db(v(2)) ph(v(2))
.PRINT AC db(v(2)) ph(v(2))
.END
.
Listagem 1 - Lista de componentes (netlist) para SPICE

Figura 1 - Exemplo de circuito a ser simulado

Como podes imaginar, quanto maior for o circuito, mais complicada fica a escrita da netlist. Felizmente o LTSpice possui um módulo de captura de diagramas esquemáticos.

- Hum?

Isso quer dizer que tu podes desenhar o circuito, conforme mostrado na figura 1 que o LTSpice irá gerar o netlist para ti. Fica muito mais fácil, não é?

O LTSpice também pode simular os circuitos dado apenas o netlist, ou seja, sem o diagrama esquemático. Isso é útil para rodar netlists gerados por qualquer outro programa que seja compatível com o SPICE.

Ok, agora vamos começar a entender como usar o LTSpice.

A figura 2 mostra o jeitão do LTSpice. Muitos botões da caixa de ferramentas só são habilitados quando há algum circuito sendo editado.

Figura 2 - Tela principal do LTSpice

- Como faço para criar um novo diagrama?

Clique em File->New Schematic para criar um novo esquema elétrico. Veja a figura 3.

Figura 3 - Como criar um novo diagrama elétrico

Aparecerá uma janela com fundo cinza e na barra de títulos, o nome padrão do documento recém criado é Draft1.asc, conforme mostrado na figura 4.

Figura 4 - Diagrama esquemático recém criado

Clique em File->Save As e salve o arquivo em algum diretório da tua preferência e com um nome significativo para ti.

Nota: Se tu simplesmente salvares o arquivo (com CTRL-S ou via o menu File->Save), o teu diagrama será salvo com o nome Draft1.asc.

- E como insiro um componente no diagrama?

Para inserir um componente, tu podes teclar F2 ou Clicar em Edit->Component, como mostra a figura 4.

Figura 4 - Inserção de componente por meio do menu

Todos os componentes podem ser acessados desse modo. Alguns componentes são tão utilizados, que eles aparecem dentro do próprio menu Edit. Esses componentes também podem ser inseridos digitando-se sua tecla de atalho. Isso aumenta muito a velocidade de inserção.

Na figura 5 temos a figura com os principais componentes e comandos e seus atalhos.

Figura 5 - Principais comandos e componentes com seus atalhos de teclado

Se adicionares um componente apertando a tecla F2 ou clicando em Edit->Component, aparecerá uma caixa de diálogo de seleção de componente, igual à mostrado na figura 6.

Figura 6 - Caixa de diálogo de seleção de componente.

Para efeito de exemplificação, vamos selecionar a fonte de tensão independente. Role a barra de rolagem horizontal até aparecer o componente voltage.

Clique sobre o texto voltage.Note que conforme selecionamos um componente o seu símbolo é exibido (figura 7).

Figura 7 - Componente selecionado

Pressione o botão OK.

Ao fazer isso, esta caixa de diálogo fechará e tu retornarás para a tela principal. Junto ao cursor do mouse aparecerá o contorno do componente selecionado, conforme pode ser visto na figura 8.

Figura 8 - Componente prestes a ser inserido

Clique e alguma região em cinza da tela para posicionar o componente. A figura 9 mostra a fonte no diagrama elétrico.

Figura 9 - Fonte de tensão inserida no diagrama

Para continuar inserindo o mesmo componente, continue clicando nas posições em que tu queres que eles fiquem.

Se não quiseres mais continuar a inserir os componentes, pressione a tecla ESC.

Se o componente aparecer muito grande ou muito pequeno, só precisas corrigir o zoom da tela. Para isso, podes usar as lupas para ampliar / reduzir o zoom, pressionar as teclas CTRL-Z ou CTRL-B ou mantendo pressionada a tecla CTRL, atuar na tecla roda do mouse.

Vamos inserir agora um resistor. Pressione a tecla R. Tu verás que imediatamente aparecerá o contorno do símbolo do resistor no lugar do cursor do mouse. Posicione-o em algum lugar da tela, conforme explicado acima.

Uma coisa para a qual deve-se ficar atento é que para rotacionar um componente ou espelhá-lo, devemos primeiro selecioná-lo como se fossemos movê-lo.

Selecione o comando Move (mover) ou Drag (arrastar) com pressionado a tecla F7 ou F8, respectivamente. O cursor se tornará uma mãozinha, indicando que o comando está ativo. A seguir clique sobre o componente que tu desejas rotacionar ou espelhar.

Feito isso, execute o comando de rotação ou espelhamento pressionado as teclas CTRL+R ou CTRL-E, respectivamente.

Continue repetindo a sequência de teclas acima até que o componente tenha girado o quanto tu desejas. A seguir posicione-o no lugar desejado e clique com o botão esquerdo do mouse.

As conexões elétricas entre os componentes deve ser feita com o apoio do comando Wire, tanto por meio do menu Edit->Wire quanto por sua tecla de atalho F3.

Caso seja necessário apagar um componente ou uma conexão elétrica, use o comando Delete, acessível pelo menu Edite->Delete e por sua tecla de atalho F5.

Pratique um pouco a criação de circuitos. Insira componentes, remova-os, rotacione-os, mude-os de posição... enfim, familiarize-se com a interface fornecida pelo aplicativo.

Esse início foi meio chato porque resolvi assumir que tu, caro leitor, nunca havias usado o LTSpice. Daqui por diante não repetirei mais as instruções sobre como criar um novo diagrama esquemático, nem como inserir componentes com tantos detalhes (a não ser que tenha algo novo que mereça esse cuidado).

Se tu quiseres aprender um pouco mais sobre simulação com SPICE, podes ler estes livros em português ou estes (em inglês).

domingo, outubro 18, 2009

Spicing up your design

I'm an old school hobbyist. I have fun building my projects and I never was a big fan of circuit simulations. The latter is not as funnier as the former.

Unfortunately, as I've already written here, Electronics is more expensive than software development. In order to have a good lab you need at least a good oscilloscope, two 0-30 VDC stabilized power supply with current control from 0 to 3A, a signal generator, a multimeter and a bunch of tools and components.

The problem is that it costs money. More than I'm willing to expend now. So, in order to save some money and at the same time keep studying and developing my circuits, I decided to use SPICE.

SPICE, my dear friend, is a circuit simulation tool that is very useful in the design cycle. The use of SPICE will let me correct my design flaws even before I need to expend a single resistor. So I will be able to test many different configurations and choose the best one while keeping costs low.

There are many flavors of SPICE available. I chosed LTSpice from Linear Technologies by many reasons: it is reliable, there are many LTSpice users that can help me solve my problems, it includes a wide variety of pre-built designs that makes it easy to learn LTSpice, there are many tutorials about it on the net, it is fast and it is free. More over, it is a Windows application that runs very well on Linux (thanks to WINE). And it is essential to me

I will write down everything I've learned during my self study on SPICE simulation.

Apimentando seus projetos

Sou um hobbista das antigas. Eu me divirto muito montando meus projetos e por isso nunca fui um grande fã das simulações de circuitos. Montar pra valer é muito mais divertido do que apenas simular.

Infelizmente, como já escrevi anteriormente aqui, a Eletrônica é muito mais cara que a programação. Para ter um bom laboratório tu precisas, pelo menos, de um bom osciloscópio, de duas fontes de tensão estabilizada de 0-30 VDC com limitação de corrente e capacidade de fornecer de 0 a 3A, de um gerador de sinais, um multímetro e de um monte de ferramentas e componentes.

O problema é que isso custa dinheiro. Mais do que estou disposto a gastar no momento. Então, para economizar algum dinheiro e ao mesmo tempo manter o estudo e o desenvolvimento dos meus circuitos, eu decidi usar o SPICE.

O SPICE, meu amigo, é uma ferramenta de simulação de circuitos que é muito útil durante o ciclo de desenvolvimento. O uso do SPICE vai me permitir corrigir meus projetos antes mesmo que eu tenha que usar um único resistor. Assim eu vou poder testar várias configurações e escolher a melhor ao mesmo tempo em que mantenho os custos baixos.

Há muitos programas que são capazes de simular os modelos do SPICE. Eu escolhi o LTSpice da Linear Technologies por várias razões: ele é confiável, há muitos usuários do LTSpice que podem me ajudar a resolver meus problemas, ele inclui uma ampla variedade de projetos pré-prontos que faz com que seja mais fácil aprender a usá-lo, há vários tutoriais sobre ele na internet, ele é rápido e de graça. E ainda tem mais. Apesar de ter sido escrito para Windows, ele roda perfeita mente bem no Linux (graças ao WINE). E isso é essencial para mim.

Eu vou escrever tudo que eu aprender durante o meu estudo sobre a simulação com o SPICE.

Nota: Infelizmente não encontrei nenhum livro em português sobre SPICE. Assim, se quiseres conhecer um pouco mais a fundo esse assunto, terás que adquirir livros em inglês. Podes comprá-los aqui no Brasil ou no exterior.

quinta-feira, outubro 15, 2009

Electronics and software development are too similar

Electronics and programming, both are my hobbies. I see many similarities between them. Especially in the way we do things.

A project using just discrete components (resistors, capacitors, transistors, etc.) means that your circuit will be too big, you will have a lot of work to project it in the right way and it will cost a lot of money too. Sometimes it's not viable to design using only discrete components.

The circuit is very susceptible to mistakes and it is hard to fix it.

This is the equivalent of assembly programming. It is not practical to develop a large program entirely in assembly. Can you imagine a CRM software such as SAP, entirely written in assembly? What about Oracle? And Linux?

Projects that use discrete and low-scale integration IC components (e.g. operational amplifiers and 74xx or 4XXX family of logic gates) are easier to make, since we have a library with basic functions (the 741 operational amplifier, for example contains 20 transistors and 11 resistors and occupies only 0.400 x 0.290 inches).

In my opinion, this kind of assembly is similar to program in C. We have a tiny wrapper around assembly language. This turns our development efforts into an easier task and at the same time it doesn't put us far way of its guts.

When we build using specialized ICs, like audio amplifiers, horizontal and vertical synchronism ICs, among others, the PCB size reduces as well as complexity and development time. I make an analogy with software development using java.

The more specialized the ICs we use the more similar to frameworks and high-level languages (Ruby on Rails, for instance) we get.

This analogy is not perfect but makes me thing: I enjoy more programming in C and in Assembly languages than to program in high level languages. At the same way, I enjoy more assembling electronic circuits using discrete components and basic ICs (like operational amplifiers and logic gates) than using very specialized ICs.

I'm not an extremist. I use high-level languages on software development and specialized ICs (micro controllers, for instance) on electronics circuits when it is needed.

From a pure performance standpoint, such as execution speed, code written in assembly language means efficiency, in Electronics it is not true.

The initial investment needed to professionally work is lower on software development than in Electronics.

Another point where software development and Electronics differ is in the reuse of created stuff. A library must be done just once on software. Then you can reuse it as much as you need it for free! In Electronics, on the other hand, each circuit built comes at least with the cost factor for acquiring components (and many times this cost factor is no so small).

I summarized everything into a table.


ElectronicsSoftware
low level
discrete components
assembly language
mid-level
discrete and low-scale integration IC components C language
high-level
specialized ICs, like audio amplifiers, horizontal and vertical synchronism.Java / C#
very high-level
very specialized ICs Ruby on Rails
initial investment needed to work
high
no so high
lowering costs by reusing librariesno so highhigh

Have you ever though about it? Is it just me?

I'll stop divagating for a while. When I find out new similarities I will write again.

Eletrônica e programação são muito parecidas

A Eletrônica e a programação são dois hobbies que eu tenho. E como não podia deixar de ser, eu vejo muitas semelhanças nas duas. Especialmente no modo de fazer as coisas.

A montagem usando somente componentes discretos (resistores, capacitores, diodos, transistores, etc) faz o teu circuito ficar muito grande, dá muito trabalho para ser projetado adequadamente, custa muito caro e algumas vezes é inviável desenvolver somente com componentes discretos.

O circuito é muito suscetível a erros, a manutenção é mais complicada.

Isso é o equivalente da programação em assembly. Não é prático desenvolver um programa muito grande totalmente em assembly. Já pensaste um software de CRM, como o SAP, totalmente escrito em assembly? O Oracle? O Linux?

Na montagem que além dos componentes discretos use circuitos integrados com baixa escala de integração (ex. amplificadores operacionais e portas lógicas da família 74XX ou 4XXX) são mais fáceis de serem feitas, uma vez que temos uma "biblioteca básica" (um amplificador operacional 741, por exemplo, contém 20 transistores e 11 resistores e ocupa apenas 0.400 x 0.290 x inches).

Esse tipo de montagem, para mim, é equivalente a programar em C. Temos uma casquinha sobre o assembly, que facilita em muito o desenvolvimento e não nos afasta muito das "entranhas do bicho".

Quando partimos para montagens que usam circuitos integrados mais especializados, como os amplificadores de áudio, circuitos de sincronismo horizontal e vertical de televisores, entre outros, o tamanho das placas vai diminuindo, assim como a complexidade e o tempo de desenvolvimento. Faço uma analogia desta situação com o uso do Java.

Quanto mais especializados os circuitos integrados que utilizamos, mais nos aproximamos dos frameworks e linguagens de alto nível (Ruby on Rails, por exemplo).

Essa analogia não é perfeita, mas me faz pensar na coincidência: gosto mais de programar em C e em Assembly do que com linguagens de mais alto nível. Do mesmo modo, gosto mais de fazer montagens com os componentes discretos e com os CIs básicos (amplificadores operacionais e as portas lógicas) do que utilizar circuitos mais especializados.

Não sou xiita. Quando se faz necessário uso linguagens de alto nível na programação e uso CIs especializados (microcontroladores, por exemplo) na Eletrônica.

Diferente da programação, onde assembly normalmente significa código mais eficiente, na Eletrônica isso não é verdade.

O custo inicial para desenvolver profissionalmente programas de computador costuma ser muito menor do que o necessário para o desenvolvimento na eletrônica.

Outro ponto que a programação e a Eletrônica diferem é no reaproveitamento do que foi criado. Uma biblioteca uma vez feita criada está disponível sempre. Custo zero. Na Eletrônica, cada novo projeto vem com um custo mínimo de aquisição dos componentes (que muitas vezes não é tão mínimo assim).

Eu resumi tudo em uma tabela.



EletrônicaSoftware
baixo nível
componentes discretos
Linguagem assembly
nível intermediário
componentes discretos e CIs de baixa escala de integração
Linguagem C
alto nível
CIs especializados, como circuitos de áudio e de sincronismo vertical e horizontal.Java / C#
nível muito alto
CIs muito especializados
Ruby on Rails
custo inicial para desenvolver profissionalmente
Muito alto
Baixo a médio
redução de custos por reaproveitamento de bibliotecas
Não muito
Muito alto

Tu já havias pensado nessas coisas? Ou será que sou só eu?

Vou parar de divagar por enquanto. Quando achar novas semelhanças, escreverei de novo.

sábado, outubro 10, 2009

How to use matlab to get the digital controller when we already have its analog version

Suppose you have the transfer function of an analog controller and that you wish to get the digital version of it.

How to accomplish this in an easy way? It's simple. Matlab has a function named c2dm that does the trick.

On Matlab's command window type
[numDz, DenDz] = c2dm(num, den, Ts, 'zoh')
where
  • numDz is the discrete system numerator we want to obtain
  • denDz is the discrete system denominator we want to obtain
  • num it is analog controller's numerator
  • den it is analog controller's denominator
  • Ts it is the sample time we want to use
  • 'zoh' It tells to c2dm function we wish converte the continuos system to discrete system using the Zero Order Hold operation.
I'm going to use an example to explain you how to use c2dm.

Let me say you have the process shown of picture 1.

Picture 1 - a process that uses an analog controller
num e den are obtained by inspecting our analog controller transfer function:
num = [4 1]
den = [4 0]
Let me assume you want sample time equals 0.25 seconds. It means Ts = 0.25s.

Picture 2 shows all commands you must type and the expected results:

Picture 2 - c2dm command executed and the result

What now? Now you will use block Discrete Transfer Function, numDz and denDz to write the discrete controller transfer function. This controller will replace the analog controller as shown on picture 3.

Picture 3 - a process that uses the digital controller

It's easy, isn't it?

To finish, picture 4 shows the output produced by both analog regulator and digital regulator (in yellow and in purple colors, respectively).

Picture 4 - outputs produced by analog and digital regulators

Como obter o controlador digital quando já temos o analógico usando Matlab

Suponha que tu tenhas a função de transferência de um controlador analógico e queiras obter a função de transferência equivalente para um controlador digital.

Como fazer isso de modo fácil? Simples. O matlab dispõe de uma função chamada c2dm.

No command window do matlab digite o comando
[numDz, DenDz] = c2dm(num, den, Ts, 'zoh')
onde
  • numDz é o numerador do sistema discreto que se deseja obter
  • denDz é o denominador do sistema discreto que se deseja obter
  • num é o numerador do sistema contínuo que se deseja converter para sistema discreto
  • den é o numerador do sistema contínuo que se deseja converter para sistema discreto
  • Ts é o tempo de amostragem, em segundos.
  • 'zoh' indica que deseja-se o equivalente da função contínua utilizando-se a operação Zero Order Hold.
Vou mostrar com um exemplo como utilizar essa função para realizar a conversão.

Suponha que tu tenhas o processo mostrado na figura 1.

Figura 1 - exemplo de processo com controlador analógico
num e den são obtidos diretamente do nosso controlador analógico:
num = [4 1]
den = [4 0]
Vamos supor que queremos que o tempo de amostragem seja 0.25s. Logo, temos que Ts = 0.25s

A figura 2 mostra os comandos que tem que ser digitados e o resultado obtido:

Figura 2 - comando c2dm executado e o resultado

Agora nós usamos o bloco Discrete Transfer Function e numDz e denDz obtidos para escrevermos a função de transferência discreta do controlador digital. Este controlador substituirá o controlador analógico, conforme mostrado na figura 3.

Picture 3 - Processo usando o controlador digital

Fácil, não é?

Para finalizar, a figura 4 mostra a saída produzida pelos reguladores analógico e digital (em amarelo e lilás, respectivamente).

Picture 4 - saída produzida pelos reguladores analógico e digital