Oi pessoal, desculpem a demora por escrever um pouco mais sobre o FEZ Domino mas o tempo anda escasso, muito trabalho no momento e só agora consegui tempo para brincar mais um pouco com a placa.

Inicialmente, fiz o primeiro teste de PWM tentando chavear com Hard Code o nível de um pino específico. O resultado não foi nada satisfatório... não consegui nem 15kHz de freqüência usando este método ... mas chega de blah blah blah e vamos mostrar as evidências ...

Este é o código inicial fazendo o chaveamento de um bit na saída 0 (PIN0 na placa) manualmente:

 

using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.FEZ;

namespace MFConsoleApplication1 {
public class Program {
public static void Main() {

OutputPort led = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.Di0, false);

while (true) {
led.Write(true);
led.Write(false);
}
}
}
}

 

Notem que simplesmente mapeamos um pino como saída atribuindo o nome de led e chaveamos o mesmo de forma ininterrupta dentro de um while infinito. Vamos verificar a saída disto no osciloscópio...

Notem que a freqüência máxima ficou em torno de 11.3kHz ... 

É amigos... o resultado é bem decepcionante, no entanto devemos considerar algumas coisas:

 

Primeira Consideração do Pacman: O código compilado é interpretado para rodar em um framework, na verdade ele não é compilado e sim é gerado um meta-código que o Micro Framework executa.

 

Segunda Consideração do Pacman: Notem o perído +Width (nível alto) e -Width (Nível baixo) e verifiquem que em nível baixo ele tem praticamente 10uS (micro Segundos) de diferença em relação ao nível baixo. Esta diferença de tempo é o retorno do loop do while... ele testa se deve continuar (no caso sempre é true) e volta a levantar o sinal. Em assembly isso seria um GOTO, e o mesmo seria praticamente imperceptível num processador comum rodando no padrão de 20mHz.

 

Terceira Consideração do Pacman: Ficou evidente que para conseguir no mínimo chavear um Led IR devemos no mínimo ter 38kHz... desta forma que implementamos não conseguiríamos nem ao menos excitar um simples sensor IR em um receptor. Brochante...

 

Mas como tudo na vida é quebra de paradigmas, existem outras formas de fazer isto. 

 

Alguém lá na fábrica do processador do FEZ Domino perdeu tempo implementando algumas portas de PWM no mesmo e acho que se não a utilizarmos o resultado será como dito anteriormente Brochante!

 

Vamos à uma nova versão do código usando o Framework da GHI (pra quem não sabe é a fabricante do kit).

 

Nova implementação:

 

using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.FEZ;

namespace MFConsoleApplication1 {
public class Program {
public static void Main() {
PWM pwm9 = new PWM((PWM.Pin)FEZ_Pin.PWM.Di5);
pwm9.Set(4000000,50);
}
}
}

 

Notem que desta vez utilizamos o objeto PWM, que é quem faz interface de programação do primeiro canal PWM do processador, que está no pino digital 5 da placa FEZ Domino.

Basicamente criamos um objeto chamado pwm9 e associamos ao pino 5.

Em seguida utilizamos o método Set para programar o PWM para 4 MHz e duty cycle de 50%.

Vejam o resultado:

Notem agora a freqüência em 3.6mHz em média ... está MUITO melhor que o teste anterior... nos meus testes aqui consegui até 9.8mHz sem problemas. O único detalhe é que em freqüências mais altas nós temos um erro maior... com 4mHz configurados eu consegui 3.6mHz ... com 12mHz configurados eu consegui 9.8mHz ...

Achei excelente a taxa de PWM alcançada pelo microcontrolador da placa, no entando não vejo aplicação prática para um PWM de freqüência tão alta ... pelo menos para minhas aplicações do dia-a-dia ...

Conclusão do PACMAN.

A placa é excelente... só é necessário usar o hardware de forma correta. É uma quebra de paradigma deixar certas tarefas para o Hardware executar ao invés de tentarmos fazer na unha determinadas tarefas. 

Por último, segue uma foto da placa com o probe encaixado no pino 5 da placa.

E finalmente um vídeo rodando o seguinte código:

using System;
using System.Threading;
using Microsoft.SPOT.Hardware;
using GHIElectronics.NETMF.Hardware;
using GHIElectronics.NETMF.FEZ;

namespace MFConsoleApplication1 {
public class Program {
public static void Main() {
PWM pwm9 = new PWM((PWM.Pin)FEZ_Pin.PWM.LED);
pwm9.Set(1,50);
}
}
}

 

Interpretem vocês mesmos (é lição de casa!) ...

 

E aqui o resultado deste código piscando o led da placa:

 

 

 

É isso aí pessoal ...

 

Enjoy!

Exibições: 276

Respostas a este tópico

"Achei excelente a taxa de PWM alcançada pelo microcontrolador da placa, no entando não vejo aplicação prática para um PWM de freqüência tão alta ... pelo menos para minhas aplicações do dia-a-dia ..."

Fica minha sugestão, PWMs de frequencia alta são ideias para brincar com audio, principalmente em amplificação classe D,
existe alguma porta analogicoa nesse FEZ Domino? se sim fica mais facil ainda.

basicamente teriamos: filtro p/ anti-aliasing -> conversao A/D -> FEZ -> PWM -> drive low e high side -> MOSFET de potencia ->filtro LC passa baixas -> Alto Falante.

pensei na ideia pois não e facil gerar frequencias altas em um PWM embarcado em Microprocessadores, comm esse valor de 4MHz o filtro LC fica muito mais eficiente, melhorando (e muito) problemas com distorção, comum nesse tipo de amplificaçãO.

duvidas estou a disposição.
Tai Felipe. Gostei...

E que tal implementar um player de arquivos mod? Os arquivos podem ficar no sdcard da placa FEZ...

Eu to dentrasso... fala mais desse filtro lc ai...

Pacman! Louco pelo noisetracker...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço