Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
pt:examples:sensor:potentiometer [2015/12/09 15:31] articapt:examples:sensor:potentiometer [2020/07/20 12:00] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +<pagebreak>
 +====== Potenciómetro ======
  
 +//Conhecimento prévio: 
 +[HW] [[en:hardware:homelab:digi]],
 +[ELC] [[en:electronics:voltage_divider]],
 +[AVR] [[en:avr:adc]], 
 +[LIB] [[en:software:homelab:library:adc]], [LIB] [[en:software:homelab:library:module:segment_display]]//
 +
 +===== Teoria =====
 +
 +[{{  :examples:sensor:potentiometer:sensor_potentiometer_designator.png?120|Símbolo eléctrico do potenciómetro}}]
 +
 +Potenciômetro é uma resistência três resistor terminal, com resistÊncia fixa entre os seus dois contatos laterais e resistência variável entre o lado e contato do meio. Em princípio um potenciômetro é um atenuador (divisor de tensão), onde a resistência é formada entre contatos laterais e o contato do meio.
 +
 +Um potenciómetro típico consiste em um resistor com superfícies condutoras e um contacto deslizante chamado deslizante. Quanto mais perto estiver a barra para a extremidade do resistor, menor será a resistência entre o cursor e o bordo e vice-versa. Um material de alta resistividade ou bobina feita de fio de resistência pode actuar como um resistor. Alguns potenciômetros ter relações lineares ou logarítmicas entre a resistência ea posição do controle deslizante. Potenciômetros são principalmente de volta única (exemplo na imagem), mas existem também potenciômetros deslizantes. Um tipo especial de potenciômetros são potenciômetros digitais, onde a regulação da resistência é feito dentro do esquema de micro de acordo com os sinais.
 +
 +===== Prática =====
 +[{{  :examples:sensor:pote.png?250|Potenciómetro de volta única}}]
 +
 +No módulo do HomeLab encontra-se um potenciometro de viragem de 10 kΩ. Este potenciómetro é ligado entre a terra e os potenciais de fornecimento do microcontrolador e o controle deslizante está ligada ao conversor analógico-digital (ADC). Com esta ligação, a tensão do potenciómetro de saída pode ser regulada entre 0 V e o fornecimento do microcontrolador. O valor digital da tensão de saída do potenciómetro em toda a sua gama de ajuste pode ser medido se a tensão de comparação AVR conversor digital-analógico for tomada a partir do pino AVCC. Para o Homelab III, a tensão máxima do pino AVCC é de 2.7 V, mas as entradas podem fornecer 3.3 volts. As seguintes funções para AVR ADC encontram-se na biblioteca do HomeLab:
 +
 +  * void adc_init(reference, prescale) 
 +  * unsigned short adc_get_value(channel) 
 +  * unsigned short adc_get_average_value(channel, num_samples) 
 +
 +A função //adc_init// tem de ser chamada no inicio do programa, é utilizada para fazer o ADC funcionar. A voltagem de referência tem de ser seleciona ou do pino AREF ou do pino AVCC, ou ser selecionada voltagem fixa interna. Adicionalmente o ciclo do relógio do conversor tem de ser configurado pelo prescaler (factor de divisão de frequência), que será usado para dividir o ciclo de relógio do controlador. A conversão é rápida quando utilisando ciclo de relógio alto mas com isto baixa a acuracia . A função //adc_get_value// é usada para medir, permite selecionar o canal e retorna um resultado de 10 bits (11-bit para o Homelab III). A função de medição é inter bloqueio, portanto, ela aguarda o fim da conversão e retorna os resultados só depois de todas as medições serem feitas.
 +
 +As seguintes funções da biblioteca são providenciadas para apoiar o conversor ADC ATmega2561.
 +
 +~~CL~~
 +
 +<code c>
 +// Starting the ADC
 +void adc_init(adc_reference reference, adc_prescale prescale)
 +{
 + // Allowing ADC to operate, selecting the frequency divider
 + ADCSRA = bit_mask(ADEN) | (prescale & 0x07);
 + 
 + // Selecting comparison voltage 
 + ADMUX = (reference & 0x03) << REFS0;
 +}
 +
 +// Converting the values of selected channel
 +unsigned short adc_get_value(unsigned char channel)
 +{
 + // Setting the channel
 + ADMUX = (ADMUX & 0xF0) | (channel & 0x0F);
 + 
 + // Starting the conversion
 + bit_set(ADCSRA, ADSC);
 +
 + // Waiting the end of the conversion
 + while (bit_is_set(ADCSRA, ADSC))
 + {
 + asm volatile ("nop");
 +  }
 + 
 + // Returning the results
 + return ADCW;
 +}
 +</code>
 +
 +No exemplo explicado anteriormente, são usados o programa conversor analógico-digital e a biblioteca de indicador de números de 7 segmentos. O valor do conversor analógico-digital é multiplicado por 10 e dividido por 2048 para obter o valor entre 0 e 9. O valor 10 é impossível chegar devido aos arredondamentos em inteiros na linguagem C. Função da média do resultado do conversor é usado para obter resultados mais precisos. Derivados disto este programa de operação mostra os números de 0 a 9, que correspondem à posição do potenciómetro no indicador.
 +
 +Deve ser notado onde está a ser ligado o potenciómetro analógico no hardware em particular. Por exemplo, se está conectado a um canal analógico 3 no caso do Homelab Sensor Módulo II ou canal analógico 15 no caso do módulo Home Labor III Interface.
 +
 +<code c>
 +// Example program of potentiometer on the Sensor module
 +// The position of the potentiometer is displayed on the 7-segment indicator
 +#include <homelab/adc.h>
 +#include <homelab/module/segment_display.h>
 +
 +// Robotic HomeLab II
 +//#define ADC_CHANNEL 3
 +
 +// Robotic HomeLab III
 +#define ADC_CHANNEL 15
 +
 +// Main program
 +int main(void)
 +{
 + int value;
 +
 + // Adjusting 7-segment indicator
 + segment_display_init();
 +
 + // Adjusting ADC
 + adc_init(ADC_REF_AVCC, ADC_PRESCALE_16);
 +
 + // Endless loop
 + while (1)
 + {
 + // Reading 4 times rounded values of the channel
 + value = adc_get_average_value(ADC_CHANNEL, 4);
 +
 + // Displaying the hundreds of the indicated value
 + // Robotic HomeLab II
 + //segment_display_write(value * 10 / 1024);
 + // Robotic HomeLab III
 + segment_display_write(value * 10 / 2048);
 + }
 +}
 +</code>
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0