Table of Contents

 

Potenciómetro

Conhecimento prévio: [HW] User Interface Module, [ELC] Voltage Divider, [AVR] Analog-to-digital Converter, [LIB] Analog to Digital Converter, [LIB] 7-segment LED Display

Teoria

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

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:

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.

// 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;
}

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.

// 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);
	}
}