Janeiro 27, 2022

como construir um controlador de ventilador PWM de Velocidade Variável

neste artigo, mostrarei como construir um controlador de ventilador pwm (DC) usando um breve programa C e algumas partes, incluindo o Kit de desenvolvimento do microcontrolador Launchpad RM57L. Ele permite que os usuários variem eficientemente a velocidade dos ventiladores PWM para reduzir os níveis de ruído e o consumo de energia. Este projeto monitora automaticamente a temperatura do objeto ao qual o sensor de temperatura está conectado (neste caso, um dissipador de calor da CPU usado para resfriar um pequeno módulo termoelétrico) e controla a velocidade do ventilador de acordo para minimizar a saída de ruído, bem como o consumo de energia. Abaixo está uma demonstração do controlador do ventilador em uso em um cooler de CPU desktop.

Vídeo: Kompulsa.

Antes de aprender a construir um controlador de Velocidade do ventilador, ajuda a aprender como funcionam os vários métodos de controle de velocidade. Vou explicar duas tecnologias-chave: controladores de velocidade resistiva e controladores de ventilador PWM.

controladores de Velocidade resistiva

os controladores de velocidade resistiva controlam a velocidade de um determinado motor de ventilador, resistindo ao fluxo de corrente da fonte de energia para o motor. Isso pode ser feito usando uma combinação de um potenciômetro e transistor ou outro circuito de varistor. A tecnologia anterior é extremamente fácil de construir, mas faz com que o transistor queime um pouco da corrente que passa por ele. Portanto, é ineficiente. PWM por outro lado, pulsa a corrente completa ligada e desligada muitas vezes por segundo. O transistor ainda desperdiçará alguma eletricidade, mas não tanto.

controladores de Velocidade PWM

a modulação por largura de pulso é um método de controle de corrente muito mais complexo, superior e cada vez mais comum que facilita o controle de velocidades do motor, brilho da lâmpada, entre outras coisas de maneira eficiente em termos energéticos. As principais razões para os controladores de motores PWM incluem melhorar a eficiência dos aparelhos, bem como reduzir os níveis de ruído, operando-os em baixas velocidades sempre que possível.

eu usei o Kit de desenvolvimento TI Launchpad RM57L MCU para construir este controlador de ventilador (graças ao TI para enviá-lo), mas este código pode ser facilmente modificado para ser executado no Launchpad tms57012 mais barato, ou o Launchpad TMS57004 Launchpads também.

ao aprender a construir um controlador de ventilador pwm, ajuda a entender ou aprender a executar as várias tecnologias/métodos, bem como seus méritos e desvantagens. Dessa forma, você saberá exatamente qual usar e quando.

este artigo assume que você tem alguma experiência em engenharia elétrica e sabe como conectar com segurança o transistor, o sensor e todos os outros equipamentos mencionados. Experimente este projeto por sua conta e risco.

Índice

  1. Lista De Peças.
  2. Preparação Do Ambiente De Desenvolvimento.
  3. vamos começar a codificar!

esta apresentação de slides requer JavaScript.

lista de peças

todos os preços estão em USD.

  1. 2n6284g NPN Darlington BJT Transistor. BJT significa transistor de junção bipolar (conveniente porque tem um ganho de corrente DC de 750).
  2. três resistores de 12 kOhm 1/2 watts.
  3. caixa de junção com terminais de parafuso ou conector de barra.
  4. Texas Instruments Launchpad RM57L MCU (RM57L843) kit de desenvolvimento.
  5. 10 Termistor kOhm NTC com um valor B de 3435. ‘NTC’ significa que sua resistência diminui sempre que sua temperatura aumenta.
  6. 40mm x 40mm (ou maior, se você não consegue encontrar esse tamanho) dissipador de calor para o transistor.
  7. fios de ligação em Ponte/plugues de pinos para conectar os pinos do kit de desenvolvimento ao transistor e conectar o transistor à fonte de energia (a menos que você esteja usando uma placa de ensaio). Eles geralmente estão na faixa de $3-6.
  8. fonte de alimentação de 12 ou 5 volts.
  9. ventilador de CPU de 12 volts, ou um ventilador de laptop de 5 volts (este projeto é destinado a ventiladores de três ou quatro fios que suportam PWM). Estes são normalmente na faixa de $10-$20.
  10. CPU cooler (com dissipador de calor e ventilador incluído) ou qualquer outra combinação de ventilador e objeto quente que possa ser resfriado com ele. Isso permite que você assista o controlador do ventilador se resfrie automaticamente e desligue o ventilador. Eu usei um cooler de CPU com um ventilador embutido. É o teste final!

eu recomendaria anexar um dissipador de calor ao transistor se você for alimentar grandes ventiladores (maiores que os minúsculos ventiladores de 80 mm que normalmente são usados para resfriamento de CPU de desktop). Isso gerará uma quantidade significativa de calor.

Prepare seu ambiente de desenvolvimento

o kit de desenvolvimento RM57L843 é o coração deste controlador de ventilador PWM (a maneira como esses microcontroladores funcionam não é muito diferente de um Arduino, então não se deixe intimidar!). Nosso primeiro passo para construir este controlador de ventilador pwm é configurar nosso ambiente de desenvolvimento que usaremos para programar/piscar o MCU.

Conecte o Launchpad RM57L development kit à porta USB do seu computador usando o cabo fornecido e, em seguida, crie uma conta Texas Instruments para que você possa baixar o CCS IDE. Também usaremos HALCoGen para este exercício. HALCoGen é um gerador de código HAL que permite configurar facilmente seu MCU usando uma GUI. Neste caso, vamos usá-lo para configurar o conversor analógico-digital (o MibADC) e o módulo temporizador HET.

baixe HALCoGen e CCS (certifique-se de que você está conectado à sua conta TI para CCS) e siga as instruções abaixo para criar seu projeto HALCoGen.

primeiro, crie um novo projeto no HALCoGen, selecione o kit de desenvolvimento ‘RM57Lx’ e, em seguida, você verá uma lista de suas variantes à direita da tela. Nesse caso, existe apenas uma variante: o RM57L843ZWT. Selecione isso e nomeie seu projeto ‘PWM’ como mostrado abaixo. Insira o caminho do projeto no campo ‘Localização’, anote-o e clique em OK. Vamos armazenar nosso projeto CCS no mesmo diretório. O PWM projeto deve estar localizado em uma pasta chamada PWM, em seu diretório de trabalho, o que vamos nome RM57L.

Uma imagem do 'novo projeto' tela em HALCoGen

Criar um novo projecto chamado ” PWM ” em HALCoGen. É aqui que você configura os módulos ADC e HET.

para construir um controlador de ventilador PWM, você precisa configurar temporizadores que irão oscilar um pequeno elétrico ligado e desligado e definir sua frequência.

em seguida, ative os drivers ADC1 e HET1 selecionando a guia ‘ativar Driver’ e marcando as caixas como mostrado abaixo. O conversor analógico para digital (ADC) será usado para converter a leitura do sensor de temperatura analógico em um valor digital que podemos usar para determinar a temperatura, permitindo que o controlador do ventilador ajuste a velocidade do ventilador de acordo. O temporizador high-end (HET) será usado para gerar nosso sinal PWM, que será usado para controlar um transistor BJT simples.

recomendo desmarcar o restante dos drivers para conservar os recursos do sistema (por exemplo: RAM e memória flash).

ativar-ADC-e-Het-drivers

ativar os drivers HET1 e ADC1 no HALCoGen.

agora é hora de configurar o conversor analógico para digital do nosso controlador de ventilador pwm (que está embutido no Launchpad RM57L MCU). Vá para a guia ADC1 e defina o tamanho FiFo como 1, pois é tudo o que precisamos para este projeto. Selecione também ativar pino 7, pois é a isso que conectaremos o sensor de temperatura. O pino 7 está marcado como ‘AI1_7’ na parte inferior do seu kit de desenvolvimento do Launchpad.

como funciona a conversão analógica para Digital

 captura de tela da configuração ADC1

prossiga para a guia HET1, onde você configurará o temporizador PWM do controlador do ventilador (embutido no kit de desenvolvimento RM57L) e o pino HET que controla o transistor que alimenta o ventilador e faz o seguinte, conforme mostrado na próxima captura de tela.

selecione a guia Pwm 0-7, defina o campo de Serviço para PWM 0 a 0. Isso define o ciclo de trabalho do sinal PWM para 0, portanto, definindo o ciclo de trabalho do ventilador que você está controlando para 0. Um ciclo de trabalho de 0 significa simplesmente que o ventilador estará desligado. Outra maneira de colocá-lo é: a porcentagem do Tempo em que a energia será ligada é 0.

começaremos com um ciclo de trabalho de 0 Neste projeto porque vamos ajustar programaticamente o ciclo de trabalho (e, portanto, a velocidade do ventilador) de forma que ele siga a temperatura do dissipador de calor ao qual o sensor de temperatura está conectado. Quando o ciclo de trabalho é definido como 0, O controlador do ventilador desliga o ventilador (0 corresponde a 0%). Em seguida, marque o par de caixas de seleção’ Ativar ‘à esquerda do campo’ Pin’. Isso permite o sinal PWM. Digite 2 no campo ‘Pin’, que é a porta HET 1, Pino 2, marcado’ HET1_2 ‘ na parte inferior do seu Launchpad. Finalmente: digite 10.000 (sem vírgula) no campo período.

a unidade usada neste campo é o microssegundo. Um microssegundo é um milionésimo de segundo. Definir este campo para 10.000 fará com que o ciclo do temporizador het ligue e desligue a cada 10.000 microssegundos (a cada 0.01 segundos). Devido a esta comutação rápida, você não notará que a energia está sendo ligada e desligada, resultando em uma operação suave e contínua do ventilador.

a tela de configuração PWM.

ativar o temporizador ‘PWM 0’.

para encerrar a configuração do HALCoGen, selecione a guia Pin 0-7. É aqui que você configurará o pino RM57L ao qual a base do transistor será conectada (através do resistor de 12 kOhm, é claro). Marque a caixa de seleção DIR na seção ‘Bit 2’, conforme mostrado abaixo, para definir o bit 2 para a direção de saída. Isso nos permite ligar o ventilador. Um pino pode ser referido como um bit, então ‘Bit 2’ Neste caso significa het Pin 2.

O Que É Um Resistor?

o valor de saída (marcado na captura de tela abaixo) é o estado do pino, que pode estar ligado (1) ou desligado (0). Certifique-se de que está definido como 0, então está desligado quando o MCU inicia inicialmente.

a tela de configuração do temporizador HET

definir HET1, Pino 2 para a direção de saída.

selecione Arquivo > Salvar projeto e, em seguida, arquivo > Gerar código (ou pressione F5). Observe o painel ‘Saída’ na parte inferior até que ele diga que a geração de código está concluída. Agora você pode passar para a configuração do CCS e, quando terminar, pode finalmente reunir as peças e construir o controlador do ventilador.

vamos codificar!

Inicie o CCS e selecione / crie um diretório chamado RM57L como sua área de trabalho, conforme mostrado abaixo. Crie um novo projeto No Code Composer Studio chamado PWM, que será salvo na raiz do diretório PWM, onde você verá o PWM.arquivo hcg. PWM.hcg é o seu arquivo de projeto HALCoGen. Como eu disse acima, os arquivos de projetos CCs e HALCoGen devem estar no mesmo diretório para este exercício.

Conecte seu kit de desenvolvimento Launchpad RM57L usando o cabo USB fornecido.

à sua direita, selecione ‘RM57L8x’ na caixa suspensa, pois é isso que usaremos. Em seguida, selecione o xds110 USB debug probe na caixa suspensa abaixo dele. Por fim, selecione ‘projeto vazio’ e clique em Concluir.

Criar projeto CCS

clique com o botão direito do mouse no projeto PWM no painel Project Explorer (está no lado esquerdo da tela) e adicione a pasta HALCoGen /includes do diretório do projeto PWM ao seu projeto CCS clicando no botão circulado abaixo. Estes RM57L incluem arquivos consistem em bibliotecas e drivers que tornam muito mais fácil para escrever programas para o MCU.

adicionar incluir diretório

navegue até o HL_sys_main.arquivo c no painel do Project Explorer à esquerda em / PWM / source/. Nesse arquivo, cole o exemplo de código RM57L abaixo.

o código-fonte (exemplo de código Hercules RM57L)

o seguinte código de amostra RM57L pode ser carregado no seu Launchpad via USB usando o Code Composer Studio. É assim que seu arquivo de origem deve parecer:

as leituras de temperatura estão em °C.

HL_sys_main.c

/* USER CODE BEGIN (1) */#include "HL_het.h" //The HET library we'll use for PWM.#include "HL_adc.h" //The ADC library we'll use to read the sensor./* USER CODE END */void main(void){/* USER CODE BEGIN (3) */adcData_t adc_data; //ADC Data Structure.adcData_t *adc_data_ptr = &adc_data; //ADC Data Pointer.unsigned int value; //The ADC value is stored in this variable.float resistance; //The resistance of the thermistor at the current temperature reading;float degperohm = 0.003267974; //Degrees per ohm of resistance.unsigned int temperature; //The temperature in degrees Celsius.hetInit(); //Initialize the HET module.adcInit(); //Initialize the ADC module.while(1) //ADC conversion loop.{ adcStartConversion(adcREG1, 1U); //Start conversion on ADC 1. while(!adcIsConversionComplete(adcREG1, 1U)); //Keep looping until the conversion is complete. adcGetData(adcREG1, 1U, adc_data_ptr); //Store conversion into ADC pointer value = (unsigned int)adc_data_ptr->value; resistance = 1000 * (4096 / value); temperature = degperohm * resistance;//Adjust the fan speed based on the temperature readings obtained above. pwmStart(hetRAM1, pwm0); if (temperature < 40) { pwmSetDuty(hetRAM1, pwm0, 0U); //0% duty cycle. Fan is switched off. } else if (temperature >= 40 && temperature <= 42) { //If the temp is between 40°C and 42°C, set the fan to 20%. pwmSetDuty(hetRAM1, pwm0, 20U); //20% duty cycle. Fan Speed 1. } else if (temperature >= 42 && temperature <= 44) { pwmSetDuty(hetRAM1, pwm0, 30U); //30% duty cycle. Fan Speed 2. } else if (temperature >= 44 && temperature <= 46) { pwmSetDuty(hetRAM1, pwm0, 40U); //40% duty cycle. Fan Speed 3. } else if (temperature >= 46 && temperature <= 48) { pwmSetDuty(hetRAM1, pwm0, 50U); //50% duty cycle. Fan Speed 4. } else if (temperature >= 48 && temperature <= 50) { pwmSetDuty(hetRAM1, pwm0, 60U); //60% duty cycle. Fan Speed 5. } else if (temperature >= 50 && temperature <= 52) { pwmSetDuty(hetRAM1, pwm0, 70U); //70% duty cycle. Fan Speed 6. } else if (temperature >= 52 && temperature <= 54) { pwmSetDuty(hetRAM1, pwm0, 80U); //80% duty cycle. Fan Speed 7. } else if (temperature >= 54 && temperature <= 56) { pwmSetDuty(hetRAM1, pwm0, 90U); //90% duty cycle. Fan Speed 8. } else if (temperature >= 56 && temperature <= 58) { pwmSetDuty(hetRAM1, pwm0, 100U); //100% duty cycle. Fan Speed 9 (full speed). } else if (temperature > 65) { //65 //Code to display a temperature warning. 65 °C is a bit hot, warn the user. } else if (temperature > 70) { //Code to shut the device down (70 °C just won't do, shut it off). }} //End of ADC conversion loop./* USER CODE END */}

você está convidado a redistribuir este código RM57L, desde que você inclua um link de volta para esta página.

sempre coloque seu código entre os comentários / * USER CODE BEGIN * / and / * USER CODE END*/, para que o HALCoGen não o exclua depois de fazer alterações em seu projeto.

lembre-se sempre de que a temperatura do dissipador de calor será menor do que a temperatura da CPU ou qualquer dispositivo que esteja resfriando. Isso significa que, se o dissipador de calor for 70 °C, a CPU estará ainda mais quente do que isso. Você também pode projetar este controlador de ventilador pwm para medir diretamente a temperatura da CPU e colocar o termistor nele. Isso é mais preciso, pois a temperatura do dissipador de calor fica lentamente atrás da temperatura da CPU.Cada um dos valores ADC são representações digitais das leituras de temperatura do controlador do ventilador, e cada faixa de valor representa uma faixa de temperatura que requer uma certa quantidade de fluxo de ar para resfriá-lo. No caso deste termistor, um valor ADC mais baixo corresponde a uma temperatura mais alta e vice-versa. O código agora foi atualizado para converter os valores do conversor analógico para digital em leituras de temperatura em graus Celsius.

cenário de exemplo: Uma faixa de valor ADC de 310 a 320 pode ser alta o suficiente para garantir a colocação em marcha do ventilador até 80%, pois indica que nosso sujeito de teste (o dissipador de calor e, portanto, a CPU) está esquentando. No entanto, se o dissipador de calor/ventilador for grande o suficiente, essa velocidade não deve ser necessária na maioria das vezes. Este é um caso em que você pode querer capitalizar em um dissipador de calor maior.

por outro lado, uma faixa de valor ADC de 340 a 350 pode indicar que o dissipador de calor está um pouco quente e requer apenas que o ventilador opere em uma configuração muito baixa (20%), por isso será muito mais silencioso nessa configuração. Eu defino o ciclo de trabalho com base nos intervalos de valores do ADC, em vez dos valores exatos do ADC para evitar flutuações frequentes de velocidade. Eu recomendo implementar uma rotina UART que transmite as leituras do conversor analógico-digital para o seu computador para que você possa ver tudo acontecendo em tempo real. Isso facilita a depuração e também é informativo.

aplicações úteis para PWM incluem, mas não estão limitados a:

  1. controle de Velocidade do compressor do condicionador de ar e do refrigerador para a eficiência melhorada e níveis de ruído reduzidos.
  2. escurecimento da lâmpada LED.
  3. HEV/controle de Velocidade Do Veículo Elétrico.
  4. controladores do ventilador de ventilação.
  5. controladores de Ventilador Do Radiador, que podem economizar eletricidade, gás e reduzir a poluição sonora causada por carros nas estradas. A redução de ruído pode até ajudar as pessoas a dormir melhor à noite em alguns casos.

por favor, tenha em mente que todas as aplicações acima exigem um ventilador que suporta PWM. Infelizmente, nem todos os fãs são construídos para isso.

configuração de Hardware

como eu disse no início, este artigo foi escrito com a suposição de que você sabe como usar um transistor e como conectar o sensor ao Launchpad com segurança.

Conecte o termistor à porta ADC 1 pino 7 e o transistor à porta HET 1 pino 2 em seu kit de desenvolvimento RM57L, usando os três resistores na lista de peças de acordo. Se você estiver usando um cooler de CPU (dissipador de calor + combinação de ventilador embutido), insira o sensor de temperatura no dissipador de calor (certifique-se de não permitir que nenhum dos terminais do sensor entre em contato com o dissipador de calor, que pode ser eletricamente condutor). Conecte o ventilador do dissipador de calor ao controlador. Os tutoriais vinculados abaixo ajudarão você a aprender como configurar o ventilador, o pino ADC e o transistor.

Sparkfun explica conversão analógica para digital, e um exemplo básico de uma conexão de sensor ADC aqui (que é o que eu usei para este projeto, exceto que meu sensor tem dois leads, em vez dos três que seu potenciômetro faz). Eles também explicam transistores aqui.

depois de dominar isso, você pode ter seu controlador de ventilador instalado e funcionando em nenhum momento!

Sensor

o ADC no kit de desenvolvimento RM57L MCU converte as flutuações de tensão analógicas causadas pelo termistor (ou qualquer sensor de temperatura que você esteja usando) em valores digitais armazenados na variável de valor acima. Devido ao fato de que os valores ADC dependem do sensor que você está usando, você precisa usar as especificações na documentação do seu sensor para converter as leituras de temperatura em graus.

o sensor usado para este projeto foi um termistor UXCELL 3435b 10 kOhm. Um termistor é um resistor projetado para variar sua resistência com a temperatura (muito mais do que um resistor comum). Se um termistor é avaliado em 10 kOhm, o que significa que a resistência é de 10 kOhm a 25 °C.

NB: A resistência de um determinado termistor não irá variar linearmente com a temperatura, que é por termistor, os fabricantes fornecem uma temperatura vs resistência gráfico, e (por vezes) a, B, e C os valores para uso no Steinhart-Hart equação que resolve este problema.

código testado com sucesso com versões CCS:

Deixe uma resposta

O seu endereço de email não será publicado.