我可以将 Arduino 上的模拟引脚用作数字项目吗?

电器工程 Arduino 硬件 引脚 模拟
2022-01-20 10:54:48

我是使用 Arduino 的新手,我有一个 Arduino Uno。对于我所做的项目,我只使用了数字引脚。

我正在建造一辆使用步进电机的小型车辆。我已经用完了引脚来控制这辆车的电机。模拟引脚有什么用?我是否可以使用模拟引脚来控制我连接到 Arduino 的其余步进电机,或者我是否必须购买比 Arduino Uno 更大的 Arduino 来控制这个装置?

4个回答

您始终可以使用模拟引脚进行数字写入。

  • 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()适用于所有模拟引脚和所有数字PWM引脚。您可以为其提供 0 到 255 之间的任何值。

模拟引脚可让您读取/写入模拟值 - 基本上,它们不会给出 0 或 5 的电压(与数字一样),它们可以给出 0 到 5 之间的电压范围(作为输入和输出)。请注意,模拟输出期间的电压只是用万用表观察到的电压。实际上,模拟引脚发送 0V 和 5V 信号脉冲以获得“看起来”模拟的输出(这是 PWM)。

关于引脚数量:请记住,PWM 引脚可用于模拟输出。如果你的引脚用完了,你可以使用多路复用来制作更多。没有必要再买一个 Arduino。

是的,Arduino 上的模拟引脚可以用作数字输出。

这记录在Arduino 输入引脚文档的引脚映射部分:

引脚映射
模拟引脚可以与数字引脚相同地使用,使用别名 A0(用于模拟输入 0)、A1 等。例如,代码如下所示,将模拟引脚 0 设置为输出,并设置它高:
pinMode(A0,输出);
数字写入(A0,高);

正如 Anindo Ghosh 所指出的,Arduino 上的模拟引脚可以用作数字引脚。

然而,即使你用完了控制步进电机的引脚,你也不需要再买一块板子。您可以简单地使用寄存器或多路复用器等中间组件来控制适当的步进电机。

如果您负担得起,并且您真的想使用步进器超级简单,请查看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();
}