- Este programa gera uma sequência que pode ser usada para alimentar as 3 fases de um motor trifásico a partir de uma fonte de corrente contínua.
- Implementa os seguintes controles:
. liga e desliga a marcha;
. sentido de funcionamento;
. frequência; e
. potência (largura de pulso).
const int dirPin = 3; // Pino de entrada para controlar a direção
const int controlPin = 2; // Pino para controlar o estado 000
const int outputPins[] = {5, 6, 9}; // Pinos de saída para a sequência desejada
int currentState = 0;
int currentDirection = 1; // 1 para contar para cima, -1 para contar para baixo
void setup() {
pinMode(dirPin, INPUT);
pinMode(controlPin, INPUT);
for (int i = 0; i < 3; i++) {
pinMode(outputPins[i], OUTPUT);
}
}
void loop() {
int controlState = digitalRead(controlPin);
int direction = digitalRead(dirPin);
int sequence[] = {5, 4, 6, 2, 3, 1}; // Sequência de estados: 101, 100, 110, 010, 011, 001
if (controlState == LOW) {
sequence[0] = 0;
digitalWrite(outputPins[0], LOW);
digitalWrite(outputPins[1], LOW);
digitalWrite(outputPins[2], LOW);
while (digitalRead(controlPin) == LOW) {
// Aguarda o pino de controle ficar alto para continuar
}
}
if (direction == HIGH) {
currentDirection = 1;
} else {
currentDirection = -1;
}
int frequency = map(analogRead(A0), 0, 1023, 0, 300); // Mapeia a leitura analógica para a faixa de frequência
int pulseWidth = map(analogRead(A1), 0, 1023, 0, 255); // Mapeia a leitura analógica para a faixa de largura de pulsos
int delayTime = 1000 / frequency; // Calcula o tempo de atraso com base na frequência
currentState = (currentState + currentDirection + 6) % 6; // Calcula o próximo estado
int currentOutput = sequence[currentState];
digitalWrite(outputPins[0], bitRead(currentOutput, 2));
digitalWrite(outputPins[1], bitRead(currentOutput, 1));
digitalWrite(outputPins[2], bitRead(currentOutput, 0));
delayMicroseconds(pulseWidth); // Mantém o pulso ativo de acordo com a largura de pulsos
digitalWrite(outputPins[0], LOW);
digitalWrite(outputPins[1], LOW);
digitalWrite(outputPins[2], LOW);
delay(delayTime); // Atraso entre os estados
}
Nenhum comentário:
Postar um comentário