Usar PWMs em aplicativos de alto nível

Este tópico descreve como acessar os PWMs (moduladores de largura de pulso) do dispositivo para uso em aplicativos de alto nível do Azure Sphere.

A modulação de largura de pulso é obtida variando o ciclo de serviço (razão de tempo de trabalho para tempo de folga) de um sinal digital pulsado. Os moduladores de largura de pulso são usados em uma ampla gama de aplicativos, como controle de motor digital, comunicação e conversão digital para analógica.

Para usar PWMs em seus aplicativos do Azure Sphere, você deve incluir os arquivos e Pwm a funcionalidade de cabeçalho necessários e especificar o controlador para os canais PWM que seu aplicativo acessará.

O exemplo PWM_HighLevelApp demonstra como usar o PWM em um aplicativo de conversão digital para analógico simples em um dispositivo MT3620.

Requisitos PWM

Os aplicativos que usam PWMs devem incluir o arquivo de cabeçalho apropriado e adicionar configurações PWM ao manifesto do aplicativo.

Todos os aplicativos devem definir seu hardware de destino e incluir o arquivo de cabeçalho de definição de hardware correspondente.

Arquivos de Cabeçalho

 #include <applibs/pwm.h>
 #include "path-to-your-target-hardware.h"

Substitua "path-to-your-target-hardware.h" pelo caminho para o arquivo de cabeçalho do hardware.

Configurações do manifesto do aplicativo

A configuração PWM no manifesto do aplicativo lista os controladores PWM acessados pelo aplicativo. Para configurar essas configurações, adicione o Pwm recurso ao manifesto do aplicativo e adicione cada controlador PWM ao recurso. O manifesto do aplicativo Azure Sphere tem mais detalhes.

Em seu código, use as constantes definidas para seu hardware para identificar os controladores PWM. O compilador traduzirá esses valores em valores brutos ao compilar o aplicativo.

Por exemplo, aqui está um trecho de um manifesto de aplicativo para um aplicativo que tem como destino um RDB (conselho de desenvolvimento de referência) mt3620.

 "Pwm": [ "$MT3620_RDB_LED_PWM_CONTROLLER2" ]

O trecho a seguir mostra como especificar o mesmo controlador PWM em um aplicativo que tem como destino o Kit inicial do Avnet MT3620:

  "Pwm": [ "$AVNET_MT3620_SK_PWM_CONTROLLER2" ]

Acesso pwm

Aplicativos de alto nível do Azure Sphere podem acessar um PWM chamando APIs PWM do Applibs.

Abrir um controlador PWM

Para abrir um controlador PWM para acesso, chame PWM_Open e passe como parâmetro a ID do controlador a ser aberta. Um descritor de arquivo será retornado se a chamada for bem-sucedida. Caso contrário, -1 será retornado.

Definir o estado de um canal PWM

Para definir ou atualizar o estado de um canal PWM, chame PWM_Apply. Você passa os seguintes parâmetros para PWM_Apply:

  • O descritor de arquivo retornado por PWM_Open

  • O canal PWM a ser atualizado; esse valor é dependente da plataforma

  • O período, o ciclo de dever e a polaridade a serem aplicados ao canal

  • Se é para habilitar ou desabilitar o canal

Nota

Limites mínimos e máximos para o período e o ciclo de serviço são dependentes do dispositivo. Por exemplo, no núcleo de alto nível MT3620, os PWMs são executados em uma frequência base fixa de 2 MHz com registros de comparação on/off de 16 bits. Isso impõe uma resolução de ciclo de dever de 500 ns e um período máximo efetivo de aproximadamente 32,77 ms. Consulte a planilha de dados do dispositivo específico para obter detalhes.

Suporte a MT3620

Os recursos PWM com suporte para o MT3620 estão listados no Status de Suporte do MT3620. O guia de usuário do painel de desenvolvimento MT3620 descreve o layout do pino e as funções de fixação.

O MT3620 tem 12 canais PWM, PWM0 – PWM11. Eles são organizados em três grupos de 4 canais. Cada grupo está associado a um controlador PWM (PWM-CONTROLLER-0, PWM-CONTROLLER-1, PWM-CONTROLLER-2). Os canais PWM e o GPIO fixam GPIO0 por GPIO11 no mapa para os mesmos pinos no MT3260. Se o aplicativo usar um controlador PWM, todos os pinos associados a esse controlador serão alocados para uso como saídas PWM. Eles não podem ser usados para nenhum outro tipo periférico.