segunda-feira, dezembro 28, 2009

Free real-time logic simulator

Today I received an e-mail from a list that I'm signed talking about a real-time logic simulator.

Its' named Atanua (according to documentation I read, the name comes from Polynesian mythology, where Atanua is the goddess of dawn.)

In this link you can see a demo.



There is a free version for personal, noncommercial use that you can get here.

The coolest thing is that there is a Linux version (compiled on Ubuntu 8.04), for Mac and Windows.

I already downloaded my version (for Linux, of course) and I'm going to play with it to see if it is as good as it seems on demo.

Do not waste time. Download and install the simulator and start playing / learning.

Simulador de circuitos eletrônicos

Hoje recebi um e-mal da lista de discussões que assino falando sobre um simulador de circuitos lógicos em tempo real. Chama-se Atanua (segundo a documentação que eu li, é o nome de uma deusa da mitologia polinésia: a Deusa do Amanhecer)

Neste link há um demo do produto.


Há uma versão gratuita para uso pessoal e não comercial, que pode ser obtida aqui.

O mais legal de tudo: Há uma versão para Linux (compilada para Ubuntu 8.04), para Mac e Windows.

Eu baixei a minha versão (para Linux, lógico) e vou começar a brincar com esse programa para ver se ele é bom quanto parece no demo.

Não perca tempo. Baixe e instale o simulador e comece a brincar / aprender.

sexta-feira, dezembro 25, 2009

Gravador de PICs

Bom, estou de férias até o dia 04 de janeiro e resolvi me presentear com um circuito eletrônico.

Eu gosto muito de montagens de circuitos analógicos, com amplificadores operacionais, muitos transistores, capacitores, indutores, LEDs e outros componentes discretos.

Geralmente tudo que monto é em proto-board. Assim, após o circuito estar funcionando eu o desmonto para reutilizar as peças em outras montagens.

Mas dessa vez resolvi montar algo definitivo... uma ferramenta: um gravador de PICs.

Como a maioria dos projetos que estou planejando são com os microcontroladores PIC12F675-I/P  e o 16F628A, a primeira versão do programador consegue programar os PICs de 8 e 18 pinos.

A foto abaixo ilustra o resultado final.



Há um espaço na placa para que eu habilite a gravação dos PICs de 28 e 40 pinos. Ela já está preparada para isso. Só não fiz isso na primeira versão porque faltaram componentes e eu estava sem disposição para enfrentar o comércio nesta época de compras natalinas.

Após o aparelho pronto, precisava ter certeza que ele estava funcionando. Daí, eu bolei um circuito bem simples, com 1 LED e utilizei fios no lugar chaves (que estão em falta no meu estoque).

A partir de uma combinação de sinais em nível alto e baixo em determinados pinos, o LED acenderia, apagaria ou ficaria piscando.

Utilizei o Piklab versão 0.15.2 no Ubuntu 8.04 para escrever alguns programas de teste bem simples (em assembly).

Após cada programação do PIC, eu o inseria no proto-board e usava o próprio gravador como fonte de alimentação.

Uma coisa que deve ser observada: no Ubuntu que utilizei não havia o dispositivo para a porta paralela.

Assim tive que criá-lo com o comando

sudo mknod /dev/parport c 99 0

Depois me adicionei ao grupo que tinha direito de leitura e escrita a este dispositivo (no meu caso, o grupo scanner).


A foto abaixo dá a ideia da simplicidade do circuito de teste.



Tudo funcionou muito bem. Agora preciso comprar alguns componentes para começar a brincar com meu gravador.

Bom Natal a todos.

segunda-feira, novembro 30, 2009

A nail for a fuse

Some time ago I wrote about the analogy between Electronics and Software Development. Today I came across another interesting analogy: A nail for a fuse - an analogy between fuses and assertions.

This nice reading was written by Miro Samek and can be read here: http://www.embeddedgurus.net/state-space/2009/11/nail-for-fuse.html

sexta-feira, novembro 27, 2009

how to enable the touch screen on the Sun simulator?

Emulators of WTK from Sun, by default, does not come with the touch screen enabled. But what if we need to develop something for this type of phone?

All we need do is change the configuration of the equipment for which we want to enable the touch screen.

Equipment available for the simulator are in sub-directories within

wtklib\devices\

which is under the root folder of the WTK. The name of the sub-directory is the same as the device available for the simulator.

The configuration file ends with the extension. Properties. Open the configuration file and change the line

touch_screen = false
to
touch_screen = true

For example, suppose that the WTK is used WTK2.5.2_01 and we want to enable the touch screen to the device DefaultColorPhone.

Go to folder

C:\WTK2.5.2_01\wtklib\devices\DefaultColorPhone
then open the
DefaultColorPhone.properties

file and change the line

touch_screen = false
to
touch_screen = true

Foruns that I like / Fóruns que eu gosto

In English:

Em português:

Como habilitar touch screen no simulador da Sun

Os emuladores do WTK da Sun, por padrão, não vem com o touch screen habilitado. Mas e se precisarmos desenvolver algo para esse tipo de celular ?

Tudo o que precisamos fazer é alterar a configuração do aparelho para o qual desejamos habilitar o touch screen.

Os aparelhos disponíveis para o simulador encontram-se em subdiretórios dentro de
wtklib\devices\
que fica sob a pasta raiz do WTK. O nome dos subdiretórios é o mesmo do aparelho disponível para o simulador.

O arquivo de configuração termina com a extensão .properties. Abra o arquivo de configuração e altere a linha
touch_screen=false
para
touch_screen=true

Por exemplo, vamos supor que o WTK utilizado é o WTK2.5.2_01 e que desejamos habilitar o touch screen para o aparelho DefaultColorPhone.

Vá em
C:\WTK2.5.2_01\wtklib\devices\DefaultColorPhone

abra o arquivo

DefaultColorPhone.properties

e altere a linha
touch_screen=false
para
touch_screen=true

quarta-feira, novembro 25, 2009

uControl número 7

Já está disponível o número 7 da revista uControl, editado pelo pessoal do site MicroPIC. Ela está disponível gratuitamente sob o formato pdf. A qualidade do material publicado é excelente. Recomendo a todos.

Ah, vale lembrar que a revista está em espanhol.

Tu podes obtê-la aqui.

segunda-feira, novembro 16, 2009

There is no Free Software that can compete with Matlab

There are two things I really dislike.

1) Usually who ports MS Windows software for Linux doesn't care about quality. You can see bad behavior and / or bad looking. Matlab, for instance, has a nice look and feel on Windows but its Linux version is too ugly. It seems that some beginner was in charge of Matlab's port.

2) It seems that on open source software everyone wants to create its own application. It doesn't matter if there are other applications that do the same.

During my research time on mathematical and statistical software to use instead of Matlab/Simulink I found out a giant list of software. And know what? None of them is as good as Matlab/Simulink. They are not even as easy as Matlab/Simulink.

I'm not saying these software aren't good. I'm saying that they cannot compete because Matlab/Simulink helps you develop your solutions in a very easy, robust and intuitive way.

No one wants or can spend time with incomplete tools or tools that make life difficult for user. In short, it is very difficult to convince an engineer or a mathematician to use free software.

I would like the brilliant minds working developing free software for mathematics come together to develop a single mathematical software. So this software could compete on an equal footing with commercial programs.

There  are two article that express this better than wrote on these to articles: Why Free Software has poor usability, and how to improve it (by Matthew Paul Thomas) and http://ometer.com/hacking.html (this article was written in December, 1999 but is very up to date.).


Bellow you can see three links that contains lists of programs, plotting software and libraries that are related to math.


http://karmak.org/2003/linux-scimath/math.html
http://www.linux.org/apps/all/Scientific/Math.html

http://www.usinglinux.org/math/

sexta-feira, novembro 13, 2009

Newton C. Braga lança seu site

Ontem recebi um e-mail do Newton C. Braga, informando que o seu site foi oficialmente lançado.

Isso é uma excelente notícia. Todos que gostam de eletrônica aqui no Brasil com 100% de certeza conhecem o excelente trabalho que ele vem desenvolvendo ao longo dos anos.

Então fica a dica de ouro: visite o site que tu só tens a ganhar.

Ah, ele também tem twitter.

segunda-feira, novembro 09, 2009

Sintonia de Controladores

Ficar fazendo continhas de taberneiro é uma chatice muito grande. Além  disso estamos sujeitos, por falta de atenção, a cometer erros.

Então resolvi fazer uma planilha em que entramos com os parâmetros e as contas são feitas automagicamente.

Ela encontra-se na seção Arquivos Úteis, no link Sintonia de Controladores.

Qualquer erro, por favor, informem-me.

quarta-feira, novembro 04, 2009

How to plot the state-space output using Matlab

Suppose we need to determine the wave form, overshoot , rise time, settling time and the final value (steady state output value) of a specific process.

Moreover, instead of function transfer G(s) we've got the State-Space equations. How to do it in a easy way? I mean, how to do it without any kind of math ?

Simulink has block named State-Space. It requires four matrices (A, B, C e D) that are the solution of State-Space equations, as shown below.

State-Space equation are

and

where
x = state vector (n-vector)
u = control vector (r-vector)
y = system's output vector (m-vector)
A = n x m constant matrix
B  = n x r constant matrix
C = m x n constant matrix
D = m x r constant matrix

All we need to do is to determine these four matrices and to use the State-Space block. Is it too complicated? No at all.


Let me use an example to explain the process.

Suppose we have the following State-Space equations:


We can rewrite these equations in order to let them look like matrices. Take a look:

 

By inspection we get the four matrices:

  
 
 

Now you must create a new Simulink model and then you will insert the State-Space block (you can find it on Simulink->Continuous)

The next step is to connect Step and Scope blocks, as show below.


You need to use Matlab syntax to express the matrices. So, we have

A = [0 1; -4 -2]
B = [0;4]
C = [1 0]
D = [0;0]

As all D's elements are zero, we can rewrite D matrix as

D = 0

Double-click the State-Space block then insert A, B, C e D values as shown in the picture below.


Ok. Now you just need to simulate it, get the output system's graphic and get all values directly from it.

The graphic to this sample system  can be seen in the next picture.


I recommend you to read Ogata's Modern Control Engineering.

Did you like this post? Please rate it. Did you dislike it? So your rate is much more important!

Did I make any mistake? Wrong theory? Bad English? Wrong command? Please, post a comment complaining about it. So I can improve my posts.

terça-feira, novembro 03, 2009

Modelos para SPICE

Todos os simuladores do tipo SPICE vêm como uma quantidade razoável de modelos que é mais que suficiente para quem está começando.

E conforme tuas habilidades aumentam, a tua necessidade por modelos mais específicos também aumentará.

A lista de endereços a seguir contém vários modelos para SPICE disponíveis de graça. Espero que ela seja útil para ti.

De tempos em tempos eu vou atualizá-la.

SPICE Models

All flavors of SPICE simulators comes with a reasonable number of models that are more than enough for beginners.

And as your skills increase, so will your need for more specific models.

The following list of links has many SPICE models available for free. I hope it will be useful to you.

From time to time I will update it.

domingo, novembro 01, 2009

Como plotar saída de funções de espaço-de-estados no Matlab

Suponha que tenhamos que determinar a forma de onda, o sobre-sinal, os tempos de subida e de estabilização bem como o valor de regime de um processo.

Suponha ainda que, ao invés da função de transferência G(s), foram fornecidas as equações de Espaço-de-Estados. Como fazer isso, sem contas nem complicações?

Faremos isso por meio do bloco State-Space do Simulink. Este bloco espera o fornecimento de quatro matrizes (A, B, C e D), que satisfaçam as equações de Espaço-de-Estados, conforme mostrado abaixo.


As equações de Espaço-de-Estados são

e

onde
x é o vetor de estado (n-vetor)
u é o vetor de controle (r-vetor)
y é o vetor de saída do sistema (m-vetor)
A é a matriz n x m
B  é a matriz n x r
C é a matriz m x n
D é a matriz m x r

Tudo o que precisamos fazer é determinar as quatro matrizes e usar o bloco State-Space. Complicado? Nem um pouco.

Vou mostrar, por meio de um exemplo, como fazer.

Suponha que as equações de Espaço-de-Estados que nós temos são

Podemos reescrever essas equações de modo a deixá-las em um forma matricial. Veja:

 
Por inspeção, obtemos as quatro matrizes:

  
 
 
Agora, crie um novo modelo do Simulink e insira o bloco State-Space (que se encontra em Simulink->Continuous) e conecte o bloco Step e o Scope, conforme mostrado na figura abaixo.


As matrizes devem ser escritas com a sintaxe do matlab. Assim, temos que

A = [0 1; -4 -2]
B = [0;4]
C = [1 0]
D = [0;0]

Como todos os elementos da matriz D são nulos, ela pode ser escrita simplesmente como

D = 0

Dê um clique duplo no bloco State-Space e insira os valores de A, B, C e D, conforme mostrado na figura abaixo.



Pronto. Agora é só simular, obter o gráfico da respsota do sistema e de lá obter os valores desejados. O gŕafico para o sistema do exemplo é visto a seguir.


Recomendo os três livros a seguir:

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