Цифровой потенциометр и регулятор скорости двигателя

Я пытаюсь получить китайский контроллер скорости двигателя постоянного тока на 20 А, работающий с цифровым потенциометром MCP42100. Поставленный аналоговый потенциометр имел сопротивление 100 кОм. Я запрограммировал свой Arduino с помощью следующего кода:

#define DATAOUT     11
#define DATAIN      12       // не используется
#define SPICLOCK    13
#define SLAVESELECT 10
#define NOTEON      9
int potValue = 255;
float potInputValue;

void SPIInitialize()
{
  byte clr;
  pinMode(DATAOUT, OUTPUT);
  pinMode(DATAIN, INPUT);
  pinMode(SPICLOCK, OUTPUT);
  pinMode(SLAVESELECT, OUTPUT);

  digitalWrite(SLAVESELECT, HIGH); //отключаем устройство

  SPCR = (1 << SPE) | (1 << MSTR);
  clr = SPSR;
  clr = SPDR;
  delay(10);
}

char SPITransfer(volatile char data)
{
  SPDR = data;                    // Начинаем передачу
  while (!(SPSR & (1 << SPIF)))   // Ожидаем окончания передачи
  {
  };
  return SPDR;                    // возвращаем полученный байт
}

//--- код MCP42100

byte SetPot(int address, int value)
{
  // Выбор подчиненного устройства установлен на низкое значение, чтобы разрешить команды
  digitalWrite(SLAVESELECT, LOW);

  // 2-байтовая команда
  SPITransfer(0x10 + address);   // 0x10 = команда «установить банк»
  SPITransfer(value);            // Значение для установки банка

  // Освобождение чипа, передача окончания сигнала
  digitalWrite(SLAVESELECT, HIGH);
}

//--- код приложения

void setup()
{
  SPIInitialize();          // Инициализируем интерфейс SPI

  Serial.begin(9600);
  delay(25);
  Serial.println("Type a resistance between 0-100 kOhms above.");
}

void loop()
{
  if (Serial.available() > 0) {
    // читаем входящий байт:
    potInputValue = Serial.parseInt();
    float potValue = (potInputValue / 100.0) * 255;
    Serial.print("Value: ");
    Serial.print(potValue);
    Serial.print(", Resistance: ");
    Serial.print(potInputValue);
    Serial.println(" kOhms");
    SetPot(1, potValue);
  }

}

Вот изображение моей установки:Моя установка

В настоящее время при сопротивлении 0 кОм двигатель работает на полной скорости, как и должен, и именно так он реагирует на аналоговый потенциометр. При сопротивлении 100 кОм мотору (в данном случае компьютерному вентилятору) еще хватает сока для вращения, пока я его не остановлю пальцем, но тогда без небольшого толчка он не крутится. При использовании аналогового потенциометра при 100 кОм двигатель не мог вращаться.

Вот ссылка на регулятор скорости: http://www.ebay.co.uk/itm/301366805277?_trksid=p2060353.m2749.l2649&amp;ssPageName=STRK%3AMEBIDX%3AIT

Похоже, что регулятор скорости использует таймер 555.

Что я делаю не так с цифровым потенциометром, чтобы он вел себя не так, как аналоговый потенциометр?

, 👍0

Обсуждение

Вы ничего не рассказали нам о контроллере двигателя или о том, какие входные сигналы он ожидает, и не предоставили нам схему, поэтому я не понимаю, как кто-то мог бы на самом деле ответить на этот вопрос., @Nick Johnson

Я бы предложил использовать плату драйвера двигателя, которая была специально разработана для взаимодействия с микроконтроллером, а не пытаться настраивать ее на скорую руку. В качестве альтернативы вы можете использовать ЦАП на среднем проводе потенциометра вместо того, чтобы пытаться использовать цифровой потенциометр., @Nick Johnson


2 ответа


1

Если вы посмотрите техническое описание MCP42100 http://www.microchip.com/, на странице 4 вы увидите Подробности вашего устройства. Обратите внимание, что фактическое сопротивление будет в диапазоне от 70 до 130 кОм.

Итак, причина, по которой вы получаете разные результаты, (вероятно) связана с тем, что у вас есть цифровой потенциометр с сопротивлением несколько ниже, чем у физического потенциометра, который вы использовали.

,

2

Похоже, что MCP42100 не является подходящим цифровым потенциометром для этого приложения.

Без схемы контроллера двигателя это трудно сказать, но можно предположить, что цифровой потенциометр воспринимает напряжения выше, чем напряжение питания, которое вы на него подаете, и выше, чем максимальное напряжение питания цифрового потенциометра (5,5 В; 7,0 В абс. макс.). Я не вижу регулятора напряжения на плате контроллера двигателя, да и для бюджетной конструкции он не нужен. Вероятно, как вы говорите, просто ШИМ с использованием 555.

Чтобы это работало, вам, вероятно, понадобится цифровой потенциометр другого типа — тот, который может принимать входы логического уровня и имеет более высокое напряжение питания (12 В + некоторый запас). Вам также обычно приходится подавать на него более высокое напряжение питания (и будьте осторожны, чтобы ничего не закоротило и не испортило микроплату).

В противном случае цепи защиты входов цифрового потенциометра проведут больший ток, чем можно было бы ожидать.

,

Я не уверен, что такой цифровой потенциометр существует, но в любом случае ЦАП, вероятно, будет лучшим выбором., @Nick Johnson

Привет, @НикДжонсон. Я не думаю, что ЦАП (кроме, возможно, 4-квадрантного умножающего ЦАП, который может принимать опорное напряжение 12 В) будет работать. В схемах такого типа обычно используется сопротивление потенциометра для активной зарядки и разрядки конденсатора, а не просто принимается управляющее напряжение. Такие цифровые горшки наверняка существуют (например, [AD5290](http://www.analog.com/media/en/technical-documentation/data-sheets/AD5290.pdf)) и есть другие от AD и Maxim., @Spehro Pefhany