Могу ли я использовать аналоговые выводы на Arduino для моего проекта как цифровые?


27

Я новичок в использовании Arduino, и у меня есть Arduino Uno. Для проектов, которые я сделал, я использовал только цифровые контакты.

Я строю небольшой автомобиль, который использует шаговые двигатели. У меня закончились контакты для управления моторами для этого автомобиля. Для чего нужны аналоговые контакты? Могу ли я использовать аналоговые контакты для управления остальными шаговыми двигателями, которые я подключаю к Arduino, или мне нужно купить Arduino большего размера, чем Arduino Uno, чтобы управлять этой штуковиной?

Ответы:


22

Да, аналоговые контакты Arduino можно использовать как цифровые выходы.

Это описано в документации по входным контактам Arduino в разделе Pin Mapping:

Отображение
контактов Аналоговые контакты могут использоваться идентично цифровым контактам с использованием псевдонимов A0 (для аналогового входа 0), A1 и т. Д. Например, код будет выглядеть следующим образом, чтобы установить аналоговый контакт 0 на выход и установить ВЫСОКИЙ:
pinMode (A0, OUTPUT);
digitalWrite (A0, HIGH);


Да извини. Я помню, что было поздно, когда я опубликовал это, и я становился сонным и терял концентрацию. Я удалил комментарий.
анонимный пингвин

27

Вы всегда можете использовать аналоговые контакты для цифровой записи.

  • digitalRead()работает на всех выводах. Он просто округлит полученное аналоговое значение и представит его вам. Если analogRead(A0)больше или равно 512, digitalRead(A0)будет 1, иначе 0.
  • digitalWrite()работает на все штырьки, с параметром разрешена 0 или 1. digitalWrite(A0,0)таким же , как analogWrite(A0,0)и digitalWrite(A0,1)тем же,analogWrite(A0,255)
  • analogRead()работает только на аналоговых выводах. Может принимать любое значение от 0 до 1023.
  • analogWrite()работает на всех аналоговых выводах и на всех цифровых выводах ШИМ . Вы можете указать любое значение от 0 до 255.

Аналоговые выводы позволяют вам читать / записывать аналоговые значения - в основном, вместо выдачи напряжения 0 или 5 (как с цифровым), они могут давать диапазон напряжений от 0 до 5 (как на входе, так и на выходе). Обратите внимание, что напряжение на аналоговом выходе является только наблюдаемым напряжением с помощью мультиметра. В действительности аналоговые выводы посылают импульсы сигналов 0 В и 5 В, чтобы получить выход, который «выглядит» аналогом (это ШИМ).

Относительно количества выводов: имейте в виду, что выводы PWM могут использоваться для аналогового выхода. Если у вас закончились булавки, вы можете использовать мультиплексирование, чтобы заработать больше. Не нужно приобретать еще один Arduino.


8
AnalogWrite () не выводит напряжения в диапазоне от 0 до 5 (за исключением срока)! AnalogWrite () изменяет только широтно-импульсную модуляцию сигнала. Выходное напряжение по-прежнему составляет 5 вольт (или любой другой VCC). Контакты с пометкой «аналоговый» будут выводить только 0 В или 5 В. Они не являются переменными и являются примечанием
baldengineer

1
@ JamesC4S: Хороший вопрос, отредактировано. Спасибо :)
Manishearth

Намного лучше! :)
baldengineer

На аналоговых выводах digitalRead () и digitalWrite () работают медленнее? Если digitalRead () округляет значение, я могу представить, что оно намного медленнее, чем digitalRead () на цифровом выводе?
Johncl

Это очень кратко и информативно, спасибо, однако я считаю, что есть одна маленькая ошибка. Согласно штрафным документам : the Arduino (ATmega) will report HIGH if: a voltage greater than 3.0V is present at the pin (5V boards)что противоречит утверждению в этом посте If analogRead(A0) is greater than or equal to 512, digitalRead(A0) will be 1, else 0.
Dotancohen

6

Аналоговые Ghosh указывают, что аналоговые контакты на Arduino могут быть использованы в качестве цифровых выводов.

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


4

Если вы можете себе это позволить, и вы действительно хотите сделать работу со степпером очень простой, попробуйте Easy Stepper . Я был очень доволен.

Из примера кодовой страницы

http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414-080645.jpg



Example 1: Basic Arduino setup
This is the most basic example you can have with an Arduino, an Easy Driver, and a stepper motor. Connect the motor's four wires to the Easy Driver (note the proper coil connections), connect a power supply of 12V is to the Power In pins, and connect the Arduino's GND, pin 8 and pin 9 to the Easy Driver.

Then load this sketch and run it on your Arduino or chipKIT:
void setup() {                
  pinMode(8, OUTPUT);     
  pinMode(9, OUTPUT);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
}

void loop() {
  digitalWrite(9, HIGH);
  delay(1);          
  digitalWrite(9, LOW); 
  delay(1);          
}

Также на той же странице приведен пример кода для запуска двух двигателей с двумя панелями easystepper с ускорением / замедлением: http://www.sc-fa.com/blog/wp-content/uploads/2013/04/20130414- 081018.jpg


#include <AccelStepper.h>

// Define two steppers and the pins they will use
AccelStepper stepper1(1, 9, 8);
AccelStepper stepper2(1, 7, 6);

int pos1 = 3600;
int pos2 = 5678;

void setup()
{  
  stepper1.setMaxSpeed(3000);
  stepper1.setAcceleration(1000);
  stepper2.setMaxSpeed(2000);
  stepper2.setAcceleration(800);
}

void loop()
{
  if (stepper1.distanceToGo() == 0)
  {
    delay(500);
    pos1 = -pos1;
    stepper1.moveTo(pos1);
  }
  if (stepper2.distanceToGo() == 0)
  {
    delay(500);
    pos2 = -pos2;
    stepper2.moveTo(pos2);
  }
  stepper1.run();
  stepper2.run();
}

Это действительно не отвечает на вопрос; было бы лучше в качестве комментария. Не могли бы вы конкретизировать это, чтобы он ответил на вопрос?
Manishearth

@AnnonomusPerson: драйвер шагового двигателя EasyDriver представляется активным продуктом, в наличии и всем остальным .
Дэвидкари
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.