PWM maior que 10bits

Enviado:
08 Out 2011 19:27
por _blackmore_
Existem microcontroladores com PWM por hard com resolução de 10 ou mais bits ... mas é possível aumentar essa resolução de um microcontrolador que possui um PWM de 10bits para mais bits? 12..13..14..quem sabe 16 bits? seja por software complementar ao hardware interno ... ou mesmo hardware externo ... alguma dica?

Enviado:
09 Out 2011 07:47
por proex
Arm Cortex, 16 a 32 bits.
Re: PWM maior que 10bits

Enviado:
09 Out 2011 08:17
por andre_luis
_blackmore_ escreveu:E...é possível aumentar essa resolução de um microcontrolador que possui um PWM de 10bits para mais bits?...seja por software complementar...?
Se tentasse fazer um PWM mais preciso por firmware, dependendo da base de tempo utilizada, o próprio processamento das instruções do microcontrolador iriam interferir na resolução, mesmo que usasse uma tabela de controle do On/Off por interrupção.
Por hardware parece ser a melhor opção, mas fica restrito á magnitude do o timer usado pelo módulo.
+++

Enviado:
09 Out 2011 12:01
por _blackmore_
proex
Arm Cortex, 16 a 32 bits.
eu vi ... acho que um 2138 já me resolve ... mas eu estava pensando em usar PIC mesmo ... vou reconsiderar sua opnião ... valeu pela atenção.
andre_tepromSe tentasse .... por interrupção
pois é ... não quero por software ...
Por hardware parece ser a melhor opção, mas fica restrito á magnitude do o timer usado pelo módulo.
por hard eu vi uns PIC24 (16bits) que me chamaram atenção ... mas eu não tenho como gravar pois não são compatíveis com ICD2 ... estou avaliando a opção de usar ARM, o proex até recomendou acima ... mas não tava muito afim. Valeu pela atenção.

Enviado:
09 Out 2011 12:29
por MOR_AL
_blackmore_
Você sabe que o ótimo é inimigo do bom!
Se você puder baixar a precisão seria melhor.
Você já atinou, que a sua fonte de referência tem que ser mais precisa, a medida que o número de bits do CAD aumenta?
Um exemplo:
Num. bits ..........VRefMin.....................VRefMax
.....10................4,9976V....................5,0024V
.....11................4,9988V....................5,0012V
.....12................4,9994V....................5,0006V
.....13................4,9997V....................5,0003V
.....14................4,99985V..................5,00015V
Você teria que ter uma tensão de referência com a faixa acima, para que a sua medida não tivesse problema quanto à tensão de referência.
Essa tensão precisaria ser válida dentro do limite de temperatura em que o aparelho vai trabalhar.
Você teria que ter um voltímetro que pudesse medir essa tensão com a precisão necessária.
Por isso é que o ótimo é inimigo do bom.
Se você puder reduzir a precisão no seu projeto, as coisas não seriam tão complicadas.
Qual precisão você precisaria?
MOR_AL

Enviado:
09 Out 2011 12:51
por andre_luis
_blackmore_ escreveu:...mas eu não tenho como gravar pois não são compatíveis com ICD2...
Posso estar enganado, mas o ICD2 grava o PIC24 pelo ICSP sim.
Só não debuga, mas grava.
Se possível, tenta gravar, e coloca aqui a mensagem de erro que aparece.
+++

Enviado:
09 Out 2011 14:41
por turuna
Tudo de bom a todos, as ICD2BR faz debug em pic24 sim.
Turuna

Enviado:
09 Out 2011 15:12
por _blackmore_
MOR_AL
me desculpe a ignorância, mas o que tem haver a tensão de referência com PWM? eu não pretendo usar valor de AD para definir o duty do PWM ... poderia me explicar?
Eu preciso "mandar" uma tensão de 0 a 50VDC com resolução de 0,01 volts no melhor caso .. estou averiguando a possibilidade de ser 0,05volts, e preciso "mandar" corrente tb .. de 10 a 3000A com resolução a cada 1 ampère ... chato isso não?
agradeço sua ajuda e atenção mestre!
andre_teprom e
turuna
Eu ainda não tenho o controlador para fazer os testes, e este PIC24F32KA302 me atende tanto em AD (12bits) qto PWM (16bits), mas vejam ...
devido a isso eu pensei que pudesse ser aplicado alguma técnica igual pode ser feito com AD para aumentar a resolução.
agradeço a atenção e ajuda de vocês tb
abraço!

Enviado:
09 Out 2011 18:24
por Djalma Toledo Rodrigues
_blackmore_ escreveu: ...
Eu preciso ler uma tensão de 0 a 50VDC com resolução de 0,01 volts no melhor caso .. estou averiguando a possibilidade de ser 0,05volts, e preciso ler corrente tb .. de 10 a 3000A com resolução a cada 1 ampère ... chato isso não? ...
Mas, ler Tensão, e Intensidade de Corrente, com PWM ?
DJ

Enviado:
09 Out 2011 18:31
por _blackmore_
Corrigido mestre ... não é ler .. é "mandar"!! hehe
Abraço!

Enviado:
09 Out 2011 18:45
por MOR_AL
Bom. Vamos lá!
Considerações iniciais:
^ - Elevado a
* - Vezes
Para se ter um PWM com resolução de n bits, significa que você dispõe de 2^n valores, certo? Para n = 8, são 256 valores. Para n = 10, são 1024 valores.
Um PWM é uma onda que tem um período T e um delta entre 0 e 1.
O semi-período Ton = delta*T e o semi-período Toff = (T-Ton) = (T – delta*T) = T*(1-delta).
Para um PWM com n bits, o delta terá 2^n valores.
Mas o PWM real é uma onda com Ton e Toff, onde a tensão média (considerando um delta quase constante durante um período em que o delta pode ser considerado constante) vale:
Vmédio = (Vmáx + Vmín) * delta + Vmín*(1-delta), onde:
Vmédio é o valor médio da tensão do PWM.
Vmáx é o valor máximo da tensão Ton.
Vmín é o valor mínimo da tensão Ton.
(Observar que durante Toff, a tensão vale Vmín)
Para Vmín = 0 e delta = 0,5, Vmédio = Vmáx/2, o que dá o valor esperado.
O que ocorre é que Vmín nunca dá zero, pois tem sempre um valor de saturação de um transistor ou VDSmín de um MOSFET.
O valor de Vmáx também não dá VRef, pelo mesmo motivo.
Como a finalidade de se aumentar o número de bits em um PWM é a de se poderem obter valores intermediários entre dois valores adjacentes para o PWM com menos bits, dificilmente isso será conseguido com precisão. Isso porque o valor Vmáx geralmente vem de uma fonte de alimentação com precisão menor que a que eu expus anteriormente para VRef. Além do mais, não se costuma fazer, por quase impossibilidade, uma fonte com potência com essa precisão. Vale ressaltar também, que o valor Vmín não é zero. Isso contribui para não se obter precisão no PWM.
Mas aí você pergunta.
Ok! Mas então como a coisa é feita? Boa pergunta!! Hehe!
Geralmente o PWM se encontra dentro de um loop em que se monitora o valor obtido (Vmonitorado) para uma variável em questão (tensão, corrente, temperatura, pressão, comprimento, área, volume, etc.) com um sensor apropriado.
Tem-se o valor que se deseja que a variável assuma (Vdesejado). Calcula-se o Erro entre as duas variáveis:
Erro = Vdesejado – Vmonitorado
Ora! Quanto menor for esse Erro, mais o valor monitorado se aproxima do valor desejado, certo?!
A coisa é feita para se reduzir o Erro para níveis tais, que seja menor que se deseja de precisão para o valor monitorado (Vmonitorado).
Como se reduz o Erro?!
O modo mais simples é:
Se o valor de Erro for positivo, significa que Vmonitorado < Vdesejado. Então aumenta-se o valor do delta do PWM, para aumentar o valor médio e aumentar Vmonitorado.
Caso o Erro seja negativo, significa que Vmonitorado > Vdesejado. Então reduz-se o valor do delta, para que o valor médio seja reduzido e com isso diminui Vmonitorado, tendendo a diminuir o Erro.
Mas esse procedimento não é o ideal e nem sempre funciona, podendo até se obter oscilação em Vmonitorado. O correto é se usar o controle PID, mas isso é outra história.
Voltando ao ponto.
Você então vai precisar medir o valor da variável (Vmonitorado). Isso, em um circuito digital, é feito com um CAD.
Aí é que entra a precisão da medida. Se o seu CAD tiver 8 bits, você terá 256 possíveis valores. Então o seu PWM deverá ter no máximo, também 256 valores possíveis. Se o seu PWM tiver mais bits, o CAD, no instante da leitura, vai interpretar os valores intermediários como um dos 256 valores, não dispondo de maior precisão.
Bom. Aí você conclui que, para aumentar a precisão, precisa aumentar a precisão do CAD. Assim, você pode aumentar o número de bits do PWM de acordo com o número de bits do CAD.
Mas a precisão do CAD é função, também, do valor da sua tensão de referência. Os limites dos valores foram apresentados anteriormente.
Bom!
Acho que consegui mostrar que o número de bits do PWM, vai depender da precisão que você vai medir a sua variável, que depende do valor da tensão de referência.
Outro detalhe importante:
Como eu apresentei antes, o valor de Vmáx e de Vmín influenciam no valor médio da tensão do PWM. Isso tenderia a derrubar toda essa teoria, uma vez que esses valores não possuem a precisão necessária. O que ocorre é que você mede e corrige o valor do delta do PWM, de modo mais rápido que o valor de Vmáx e Vmín varia. Com isso, tudo se passa como se o valor de Vmáx e de Vmín fossem CONSTANTES. Esse tipo de correção é conhecido como correção de erros não lineares.
Ele corrige alterações na tensão Vmáx, que é proveniente da alteração da tensão de alimentação com a carga e com a temperatura, da variação da queda de tensão no dispositivo de chaveamento, etc. E tudo isso porque você está monitorando apenas a tensão Vmonitorada, o resultado, e não cada um desses erros intermediários. Eles tendem a ser compensados.
Bom. É isso aí.
Acho que deu para entender, né?!
Um abraço e bons projetos!
MOR_AL

Enviado:
10 Out 2011 07:56
por ze
não sei se ajuda mas voce tem a opção de "mandar" esta tensão através de uma rede R2R de resistores de precisão. Se a corrente 0-50v não for muito alta pode até ser linear mesmo.
quanto aos 3000A que espero que seja outra fonte é outra história.
Se for pra criar seu proprio laboratório, por coincidência estou a mentalizar algo do gênero: gerar 50-60hz 110-220 20w senoidal puro.
abç

Enviado:
10 Out 2011 10:38
por _blackmore_
MOR_AL
Acho que deu para entender, né?!
Ficou claro ...

Obrigado pela aula!
lellisnão sei se ajuda mas voce tem a opção de "mandar" esta tensão através de uma rede R2R de resistores de precisão.
eu pensei nisso, penso que seria uma boa saída ... mas precisaria de muitos pinos do controlador e uma pá de resistores .. mas não está descartada a possibilidade (ainda) não ...
quanto aos 3000A que espero que seja outra fonte é outra história
sim é outra fonte ... eu apenas preciso fazer uma IHM (fácil e quase pronto) e enviar os dados programados para a placa controladora .. mas para dar uma boa reduzida no custo do equipamento através da leitura da corrente de 10 a 3000A e de tensão de 0,01 a 50,00VDC eu envio junto no pacote de dados para uma placa controladora que já está pronta e funcionando no produto ... já tem umas 200peças prontas, se não era melhor acrescentar essa IHM e leitura no próprio processador q está nesta placa ... mas dae teria q "desmontar" 200 placas ... "re-montar" 200 placas ... fazer novo lay-out ... nova produção de placa ... o preju seria maior que fazer esse bixim.
Algumas ideias ...

Enviado:
10 Out 2011 11:56
por rona123
Bom, usar rede R-2R para fazer o conversor DA depende de chaveamento reversivel entre VSS e VREF, caso contrário o peso dos bits não é linear. Pode-se usar uma porta de uC, mas consome muitos pinos de HW. De uma olhada na teoria de conversores DA.
Andei usando alguns conversores DA comandados por SW usando i2c com boa resolução usando menos pinos, mas não são tão baratos (Analog Devices) e como já tem HW pronto é complicado.
Uma técnica aplicável em controle é o PID que se encontra relativamente fácil nos dsPIC, talvéz valha a pena revirar as libs do PIC24 para ver o se acha.
[]'s

Enviado:
10 Out 2011 12:51
por _blackmore_
rona123
Obrigado por suas idéias ... as considero válidas também.
Pessoal,
Acabo de conversar com o "cliente" onde expus a dificuldade e consegui uma boa facilitada (para fazer com PIC comum) ... agraduação de tensão de 0,01 para 0,05volts ... com isso eu preciso apenas de 1000 divisões no PWM (10bits) ... então vou começar um protótipo aqui e levar para avaliação para ver se realmente atende o que ele deseja ... no caso da corrente (10 a 3000A) eu vou tentar usar o PWM de 10bits e um filtro passa baixa e considerar um PID no firmware para ver o que dá.
Caso não seja satisfatório com PIC eu partirei para ARM ou Cortex ...
Agradeço a todos o compartilhamento do conhecimento e experiências.
Abraço!