Canais no ESP 32 - Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)2024-03-28T09:08:05Zhttps://labdegaragem.com/forum/topics/canais-no-esp-32?commentId=6223006%3AComment%3A717683&feed=yes&xn_auth=noDesculpe a demora em responde…tag:labdegaragem.com,2019-09-19:6223006:Comment:7185802019-09-19T00:12:01.795Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Desculpe a demora em responder. Muito obrigado novamente</p>
<p>Desculpe a demora em responder. Muito obrigado novamente</p> Muito obrigado Elcids. Bela e…tag:labdegaragem.com,2019-09-11:6223006:Comment:7179572019-09-11T23:59:47.268Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Muito obrigado Elcids. Bela e detalhada aula.</p>
<p>Muito obrigado Elcids. Bela e detalhada aula.</p> olá Mark.
Para tentar…tag:labdegaragem.com,2019-09-11:6223006:Comment:7179562019-09-11T23:23:28.614ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá Mark.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Para tentar esclarecer, a</span><span style="font-size: 12pt;"> princípio vou focar no <em><strong>PWM</strong> </em> relativo ao periférico para controle de LEDs. Isto porque este PWM dos LEDs no <em><strong>ESP32</strong></em>, atende a grande maioria das necessidades de uso de PWM. Já o <em><strong>MCPWM</strong></em> (Motor Control PWM), além do "básico" de PWM (ou seja também pode ser…</span></p>
<p><span style="font-size: 12pt;">olá Mark.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Para tentar esclarecer, a</span><span style="font-size: 12pt;"> princípio vou focar no <em><strong>PWM</strong> </em> relativo ao periférico para controle de LEDs. Isto porque este PWM dos LEDs no <em><strong>ESP32</strong></em>, atende a grande maioria das necessidades de uso de PWM. Já o <em><strong>MCPWM</strong></em> (Motor Control PWM), além do "básico" de PWM (ou seja também pode ser usado para PWM geral), tem recursos adicionais mais específicos para o <em><strong>Controle de Motores</strong></em> (como por exemplo <em><strong>Captura de Sinal</strong></em> e <strong>Sincronismo Externo</strong>), ou seja, deveria ser reservado para aplicações com Motores.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Baseado no texto que vc escreveu acima, me parece que vc está com alguns conceitos equivocados. Então vamos tentar elucidar isto. Vou enumerar pontos importantes pois caso vc tenha dúvida será mais fácil se referir a estes pontos enumerados.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Antes de tudo, observe que nas <em><strong>páginas de referência</strong></em> do <strong>ESP32</strong> na Internet e no <em><strong>Manual de Referência Técnica</strong></em> (este, essencialmente Hardware), o texto não está ruim. Certamente pode melhorar. É perceptível que este texto tem origem chinesa, pois o inglês tem algumas coisas "estranhas". Isto é importante, pois em certas condições pode-se entender de forma errônea alguma lógica fundamental. Mas este detalhe não compromete a utilidade do texto, uma vez que alguém muito experimentado com a área de <em><strong>Microprocessadores</strong></em>, notará eventuais pontos duvidosos no texto descritivo e saberá o que fazer para elucidar. Em outras palavras: para quem não estiver acostumado com aquele tipo de descrição técnica, pode ter alguns problemas de interpretação. E claro, independente do inglês, os chineses ainda não "aprenderam" a forma mais rigorosa de se fazer descrição técnica em <em>datasheets</em> ou em <em>manuais de referência técnica</em>.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Então segue alguns pontos, concentrando-se no "LED" PWM:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>1)</strong></em> o PWM gerado para controle de intensidade dos LEDs, pode ser usado como um <em><strong>PWM genérico</strong></em>, para controlar outros dispositivos (inclusive Motores), e também para gerar formas de onda simples ou complexas. Então não é preciso levar o nome "LED" a risca, e este nome seria apenas uma referência para o Módulo existente no ESP32.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>2)</strong></em> um <em><strong>Canal PWM</strong></em> <span style="text-decoration: underline;"><em>deve</em></span> minimamente: permitir especificar a <em><strong>frequência</strong></em> "<em><strong>base</strong></em>" do <em><strong>Sinal PWM</strong></em>, e permitir especificar o <em><strong>Ciclo PWM</strong></em> (ou "<em><strong>duty cycle</strong></em>" do PWM).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>3)</strong></em> adicionalmente, na ordem de importância, um <em><strong>Canal PWM</strong></em> <span style="text-decoration: underline;"><em>pode também</em></span>: permitir especificar a <em><strong>resolução do ciclo do PWM</strong></em> (em <em><strong>bits</strong></em>), permitir especificar a <em><strong>origem do clock</strong></em> para o <em><strong>Gerador PWM</strong></em> (muitas vezes isto está associado a especificar o "<em><strong>Timer/Counter</strong></em>" usado no <em><strong>Canal PWM</strong></em>), e <span>permitir especificar a "<em><strong>fase</strong></em>" do <em><strong>PWM</strong></em> (ou a <em><strong>polaridade do PWM</strong></em>).</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>4)</strong></em> outras características podem existir, mas de menor importância do <span style="text-decoration: underline;"><em>ponto de vista geral</em></span> de um <em><strong>Canal PWM</strong></em>. Por exemplo: no caso dos Canais PWM para LEDs no ESP32, pode-se ter "<em><strong>Fader In</strong></em>" e "<em><strong>Fader Out</strong></em>" <em><strong>automáticos e programáveis</strong></em>, e também pode-se gerar <em><strong>Interrupções</strong></em> ao final destes faders.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>5)</strong></em> para o <em><strong>Módulo LED PWM</strong></em> do <em><strong>ESP32</strong></em>, existem <em><strong>16 canais PWM</strong></em>, separados em <em><strong>dois grupos de 8 Canais</strong></em>: grupo "<em><strong>High Speed</strong></em>", e grupo "<em><strong>Low Speed</strong></em>". Sobre a diferença entre os grupos "High Speed" e "Low Speed", não irei falar neste momento, para não "atrapalhar" a descrição geral dos Canais PWM. Mas <span style="text-decoration: underline;"><em>dependendo da aplicação</em></span> <span>não fará diferença entre um e outro grupo </span>(por exemplo quando se usa <em><strong>Filtro Passa-Baixas</strong></em> na saída para gerar formas de onda), ou a diferença será praticamente negligenciável.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>6)</strong></em> o<span>s <em><strong>16 canais</strong> <strong>são independentes um do outro</strong></em>, ou seja, vc pode programar e controlar cada um deles <em><strong>individualmente</strong></em>. Mas os recursos disponíveis para estes 16 canais, poderão ser limitados. Por exemplo: para os <em><strong>8 Canais</strong></em> do grupo "High Speed", estão disponíveis <em><strong>4 Timers</strong></em> (numerados de "<em><strong>0</strong></em>" a "<strong><em>3</em></strong>"), e cada um desses Timers pode estar gerando uma Frequência fundamental diferente (a frequência "fonte" ou de origem). Assim, há 8 Canais PWM High Speed, e cada Canal <span style="text-decoration: underline;"><em>deve usar um dos</em></span> 4 Timers disponíveis. Em outras palavras, caso vc use por exemplo 5 Canais PWM, pelo menos dois desses Canais terão que ter a mesma Frequência fundamental, pois não existem 5 Timers disponíveis para o grupo High Speed (e claro, a mesma lógica se aplica ao grupo Low Speed).</span></span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>7)</strong></em> um recurso limitado e bastante significativo, disponível para os <em><strong>16 Canais PWM</strong></em>, são os <em><strong>pinos de I/O</strong></em> que podem ser designados para os Canais. Dizemos <em><strong>pinos de I/O</strong></em>, mas efetivamente queremos dizer <em><strong>pino de saída</strong></em>, no qual estará disponível o <em><strong>Sinal PWM</strong></em> de um determinado Canal. Isto é bastante <span>significativo</span>, uma vez que no caso do PWM praticamente não há sentido em se gerar um sinal, se este sinal não estiver externamente disponível em um <em><strong>pino físico</strong></em> do <em><strong>Processador</strong></em> (o <em><strong>ESP32</strong></em>). Então veja: há <em><strong>16 Canais de PWM</strong></em>, e para cada canal vc pode designar <em><strong>um pino de I/O</strong></em> onde o <em><strong>Sinal PWM</strong></em> estará disponível externamente. Mas há de fato tantos pinos assim disponíveis no ESP32 que podem ser direcionados para todos os <em><strong>16 Canais PWM</strong></em> (além daqueles pinos que já tem outras funções no ESP32) ??? Pense a respeito e analise a realidade, estando pronto para fazer concessões devido às limitações físicas da implementação atual do <em><strong>Hardware</strong></em> do <em><strong>ESP32</strong></em>.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>8)</strong></em> como existem <em><strong>16 Canais PWM</strong></em>, divididos em 2 grupos "High" e "Low" Speed, para se usar um determinado Canal, é necessário <em><strong>especificar o grupo</strong></em> (High ou Low Speed), e o <em><strong>número do Canal</strong></em> de "<em><strong>0</strong></em>" a "<em><strong>7</strong></em>". Logo Mark, dizer apenas "<em><strong>Canal 0</strong></em>" não especifica completamente um Canal, uma vez que existem <em><strong>dois</strong></em> "<em><strong>Canais 0</strong></em>", um High e outro Low Speed. Nos exemplos que vc se refere, acredito que estejam usando o "<em><strong>Canal 0</strong></em>" <em><strong>High Speed</strong></em> (ou simplesmente "<em><strong>HS</strong></em>" ou "<em><strong>hs</strong></em>"), já que os canais High Speed tem suporte de Hardware e portanto são mais "fáceis" de se usar (já os Canais Low Speed precisam de suporte de Software).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>9)</strong></em> para <em><strong>configurar</strong></em> um dos <em><strong>16 Canais disponíveis</strong></em>, você deve usar a <em><strong>função</strong></em> "<em><strong>ledc_channel_config</strong></em>", onde especificará o <em><strong>pino de I/O</strong></em> onde o <em><strong>Sinal PWM</strong></em> "aparecerá" externamente, o <em><strong>grupo</strong></em> do Canal (High ou Low Speed), o <em><strong>número do Canal</strong> (<strong>0</strong> a <strong>7</strong>) </em>naquele grupo, e outros parâmetros relativos ao PWM. Isto tudo é especificado através de uma <strong><em>estrutura</em></strong> do tipo "<em><strong>ledc_channel_config_t</strong></em>", a qual está definida no arquivo "<em><strong>ledc.h</strong></em>" da Biblioteca nativa do ESP32, e é mostrada na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><strong><em>(clique na figura para "zoom")</em></strong></span></p>
<p><a href="https://storage.ning.com/topology/rest/1.0/file/get/3551992036?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/3551992036?profile=RESIZE_710x" width="1211" height="272" class="align-center"/></a></p>
<p></p>
<p><span style="font-size: 12pt;"> Note que marquei em <strong><em>amarelo</em></strong> na figura anterior, os elementos mais evidentes relacionados com a definição de um Canal (<em><strong>pino de I/O</strong></em>, <em><strong>grupo</strong> <strong>HS</strong></em> ou <em><strong>LS</strong></em>, e o próprio <em><strong>número do Canal</strong></em>).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>10)</strong></em> para exemplificar a definição de um determinado <em><strong>Canal PWM</strong></em>, veja o trecho retirado de um exemplo, e mostrado na figura a seguir:</span></p>
<p style="text-align: center;"><span style="font-size: 10pt;"><em><strong>(clique na figura para "zoom")</strong></em></span></p>
<p><span style="font-size: 12pt;"><a href="https://storage.ning.com/topology/rest/1.0/file/get/3551993393?profile=original" target="_blank" rel="noopener"><img src="https://storage.ning.com/topology/rest/1.0/file/get/3551993393?profile=RESIZE_710x" width="888" height="336" class="align-center"/></a></span></p>
<p></p>
<p><span style="font-size: 12pt;"> Observe que para simplificar a especificação dos Canais, foram usados "<em><strong>alias</strong></em>" (ou "<em>apelido</em>") através de diretivas <em><strong>#define</strong></em> da <em><strong>Linguagem</strong> <strong>C/C++</strong></em>.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong>11)</strong></em> <span style="text-decoration: underline;"><em>resumindo</em></span>: basta usar como referência qualquer exemplo de código com um Canal PWM específico, e alterar os parâmetros para se usar o Canal desejado (um dos <em><strong>8 HS</strong></em> ou um dos <em><strong>8 LS</strong></em>). Essencialmente então, basta se conhecer como se utiliza um Canal PWM genérico, e estender isso para quaisquer dos 16 Canais (lembrando apenas que existem algumas diferenças entre Canais HS e LS).</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Entenda que é comum que se use em exemplos, o primeiro Canal numa sequência numerada, que seria justamente o <em><strong>Canal</strong></em> "<strong><em>0</em></strong>" (ou o HS ou o LS). Então este é o motivo porque vc quase só vê exemplos usando o Canal "0". Mas como eu disse, basta estender a mesma ideia para qualquer dos outros canais disponíveis (<span style="text-decoration: underline;"><em>e claro</em></span>: especificar todos os <em><strong>parâmetros</strong></em> necessários para que o <em><strong>Canal</strong></em> gere o <em><strong>Sinal PWM</strong></em> desejado).</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Espero ter ajudado.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p> Prezado Murta;
As tuas três r…tag:labdegaragem.com,2019-09-11:6223006:Comment:7179482019-09-11T02:18:09.631Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Prezado Murta;</p>
<p>As tuas três referências li completamente. </p>
<p>As do Elcids li as duas primeiras e algumas partes da terceira.</p>
<p>Essa terceira deve ser uma citada por você com de mais de 600 páginas.</p>
<p>Surgiram novas dúvidas (MCPWM) que deixarei para mais para frente.</p>
<p>As primeiras conclusões que penso ter entendido é que todos os pinos (pwm)</p>
<p>tem 16 canais que seriam saídas de formas de onda diferentes. Caso seja isso</p>
<p>não vi ainda quais e como são…</p>
<p>Prezado Murta;</p>
<p>As tuas três referências li completamente. </p>
<p>As do Elcids li as duas primeiras e algumas partes da terceira.</p>
<p>Essa terceira deve ser uma citada por você com de mais de 600 páginas.</p>
<p>Surgiram novas dúvidas (MCPWM) que deixarei para mais para frente.</p>
<p>As primeiras conclusões que penso ter entendido é que todos os pinos (pwm)</p>
<p>tem 16 canais que seriam saídas de formas de onda diferentes. Caso seja isso</p>
<p>não vi ainda quais e como são essas formas de onde e em TODAS as citações</p>
<p>somente indicam o canal 0, que deve ser a forma de onda retangular (quadrada).</p>
<p>ME CORRIJA POR FAVOR.</p>
<p>Obrigado</p> Prezado Elcids;
As primeira…tag:labdegaragem.com,2019-09-11:6223006:Comment:7179462019-09-11T02:13:46.495Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Prezado Elcids;</p>
<p> As primeira e segunda referências li completamente. A terceira algumas partes.</p>
<p>Surgiram novas dúvidas (MCPWM) que deixarei para mais para frente.</p>
<p>As primeiras conclusões que penso ter entendido é que todos os pinos (pwm)</p>
<p>tem 16 canais que seriam saídas de formas de onda diferentes. Caso seja isso</p>
<p>não vi ainda quais e como são essas formas de onde e em TODAS as citações</p>
<p>somente indicam o canal 0, que deve ser a forma de onda…</p>
<p>Prezado Elcids;</p>
<p> As primeira e segunda referências li completamente. A terceira algumas partes.</p>
<p>Surgiram novas dúvidas (MCPWM) que deixarei para mais para frente.</p>
<p>As primeiras conclusões que penso ter entendido é que todos os pinos (pwm)</p>
<p>tem 16 canais que seriam saídas de formas de onda diferentes. Caso seja isso</p>
<p>não vi ainda quais e como são essas formas de onde e em TODAS as citações</p>
<p>somente indicam o canal 0, que deve ser a forma de onda retangular (quadrada).</p>
<p>ME CORRIJA POR FAVOR.</p>
<p>Obrigado </p> Muito obrigadotag:labdegaragem.com,2019-09-10:6223006:Comment:7176832019-09-10T00:59:27.095Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Muito obrigado</p>
<p>Muito obrigado</p> Muito obrigado tag:labdegaragem.com,2019-09-10:6223006:Comment:7176792019-09-10T00:59:07.634Zmark spencerhttps://labdegaragem.com/profile/markspencer
<p>Muito obrigado </p>
<p>Muito obrigado </p> Bom dia,
Mais referências:
h…tag:labdegaragem.com,2019-09-09:6223006:Comment:7176652019-09-09T12:29:10.436ZJosé Gustavo Abreu Murtahttps://labdegaragem.com/profile/GustavoMurta
<p>Bom dia, </p>
<p>Mais referências:</p>
<p><a rel="nofollow" href="https://randomnerdtutorials.com/esp32-pwm-arduino-ide/">https://randomnerdtutorials.com/esp32-pwm-arduino-ide/</a></p>
<p><a href="https://randomnerdtutorials.com/esp32-pinout-reference-gpios/">https://randomnerdtutorials.com/esp32-pinout-reference-gpios/</a></p>
<p><a rel="nofollow" href="https://www.esp32.com/search.php?keywords=pwm">https://www.esp32.com/search.php?keywords=pwm</a></p>
<p></p>
<p>Bom dia, </p>
<p>Mais referências:</p>
<p><a rel="nofollow" href="https://randomnerdtutorials.com/esp32-pwm-arduino-ide/">https://randomnerdtutorials.com/esp32-pwm-arduino-ide/</a></p>
<p><a href="https://randomnerdtutorials.com/esp32-pinout-reference-gpios/">https://randomnerdtutorials.com/esp32-pinout-reference-gpios/</a></p>
<p><a rel="nofollow" href="https://www.esp32.com/search.php?keywords=pwm">https://www.esp32.com/search.php?keywords=pwm</a></p>
<p></p> olá Mark.
Seguem os li…tag:labdegaragem.com,2019-09-09:6223006:Comment:7178142019-09-09T03:08:47.411ZElcids Chagashttps://labdegaragem.com/profile/ElcidsChagas
<p><span style="font-size: 12pt;">olá Mark.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Seguem os links para referência:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong><a href="https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/mcpwm.html" rel="nofollow noopener" target="_blank">ESP32 - PWM Units</a></strong></em></span></p>
<p></p>
<p><span style="font-size: 12pt;"> e</span></p>
<p><span style="font-size: 12pt;"> …</span></p>
<p><span style="font-size: 12pt;">olá Mark.</span></p>
<p></p>
<p><span style="font-size: 12pt;"> Seguem os links para referência:</span></p>
<p></p>
<p><span style="font-size: 12pt;"> <em><strong><a rel="nofollow noopener" href="https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/mcpwm.html" target="_blank">ESP32 - PWM Units</a></strong></em></span></p>
<p></p>
<p><span style="font-size: 12pt;"> e</span></p>
<p><span style="font-size: 12pt;"> <em><strong><a rel="nofollow noopener" href="https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/ledc.html" target="_blank">ESP32 - LED PWM Unit</a></strong></em> (pode ser usado para PWM geral também)</span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> e claro, a referência de Hardware: <em><strong><a href="https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf" target="_blank" rel="noopener">ESP32 - Hardware Reference</a></strong></em></span></p>
<p></p>
<p></p>
<p><span style="font-size: 12pt;"> Abrçs,</span></p>
<p><span style="font-size: 12pt;"> Elcids</span></p>