Поворотный энкодер с ШИМ на 360 градусов

      Поворотный энкодер с ШИМ на 360 градусов

      USD
      Model #
      Quantity
      qty limit cart limit

      Описание

      Этот тип переключателя представляет собой инкрементальный датчик угла поворота. Фактически, он является наиболее широко используемым из всех поворотных энкодеров из-за его низкой стоимости и способности подавать сигналы, которые можно легко интерпретировать для получения информации, связанной с движением, например скорости.

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

      Код тестирования

      int redPin = 2;
      int yellowPin = 3;
      int greenPin = 4;
      int aPin = 6;
      int bPin = 7;
      int buttonPin = 5;
      int state = 0;
      int longPeriod = 5000; // Время на зеленом или красном
      int shortPeriod = 700; // Период времени при изменении
      int targetCount = shortPeriod;
      int count = 0;
      установка void ()
      {
      pinMode (aPin, INPUT);
      pinMode (bPin, ВХОД);
      pinMode (buttonPin, ВВОД);
      pinMode (redPin, ВЫХОД);
      pinMode (yellowPin, ВЫХОД);
      pinMode (greenPin, ВЫХОД);
      }
      пустой цикл ()
      {
      count ++;
      если (digitalRead (buttonPin))
        {
      setLights (HIGH, HIGH, HIGH);
        }
      еще
        {
      int change = getEncoderTurn ();
      int newPeriod = longPeriod + (изменение * 1000);
      если (newPeriod> = 1000 && newPeriod <= 10000)
          {
      longPeriod = newPeriod;
          }
      если (количество> targetCount)
          {
      setState ();
      count = 0;
          }
        }
      задержка (1);
      }
      int getEncoderTurn ()
      {

      // возвращаем -1, 0 или +1
      статический int oldA = LOW;
      статический int oldB = LOW;
      int результат = 0;
      int newA = digitalRead (aPin);
      int newB = digitalRead (bPin);
      если (newA! = oldA || newB! = oldB)
        {
      // что-то изменилось
      если (oldA == LOW && newA == HIGH)
          {
      результат = - (oldB * 2 - 1);
          }
        }
      oldA = newA;
      oldB = newB;
      вернуть результат;
      }
      int setState ()
        {
      если (состояние == 0)
          {
      setLights (ВЫСОКИЙ, НИЗКИЙ, НИЗКИЙ);
      targetCount = longPeriod;
      состояние = 1;
          }
      иначе, если (состояние == 1)
          {
      setLights (ВЫСОКИЙ, ВЫСОКИЙ, НИЗКИЙ);
      targetCount = shortPeriod;
      состояние = 2;
          }
      иначе, если (состояние == 2)
          {
      setLights (LOW, LOW, HIGH);
      targetCount = longPeriod;
      состояние = 3;
          }
      иначе, если (состояние == 3)
          {
      setLights (НИЗКИЙ, ВЫСОКИЙ, НИЗКИЙ);
      targetCount = shortPeriod;
      состояние = 0;
          }
        }
      void setLights (int красный, int желтый, int зеленый)
      {
      digitalWrite (redPin, красный);
      digitalWrite (yellowPin, желтый);
      digitalWrite (greenPin, зеленый);

      Нужна помощь в поиске правильного привода?

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