Arduino для генерации восходящей волны (синус или треугольник) - PullRequest
0 голосов
/ 22 марта 2019

Я хотел бы подать увеличивающееся напряжение и удерживать мой выход Arduino UNO.Я понимаю, что arduino не позволяет мне выводить аналоговые значения, и поэтому я решил использовать лестницу R2R (с R-22 кОм и 2R-47 кОм).Это позволило бы мне преобразовать в аналоговое напряжение.Я использовал восемь цифровых выводов на Arduino, чтобы установить 8-битную лестницу R2R.Я могу вывести синусоидальную волну с моей текущей настройкой, но немного неуверен в том, как вывести волну, которая достигает максимального значения и останавливается.(то есть волна, подобная приведенной на рисунке ниже).enter image description here Эта волна в основном представляет собой треугольную волну или даже синусоидальную волну, которая достигает максимального значения и остается там (с длительностью импульса 200 микросекунд).

Я создалвизуально из моей схемы, чтобы лучше продемонстрировать мою проблему: enter image description here

Я также попытался мою проблему, выводя синусоидальную волну.Мой код выглядит следующим образом:

void setup() {
  //set pins 0-7 as outputs
  for (int i=0; i<8; i++){
    pinMode(i, OUTPUT);
  }
}

void loop() {
  double value =0; 
  int check=0; int t=0; 
  while(check==0){
    if (value<254){ 
      value = 127+127*sin(2*3.14*t/100); 
      //this sends a sine wave centered around (127/255 * 5)=2.5V
      //max will reach when t=25
      PORTD=value; 
      delayMicroseconds(4); //wait 4 micro seconds
      //this means that the max value will reach at ~25*6 =150 microseconds 
    }
    else{
      value =255; 
      PORTD=value; //just output the max of the sine wave (i.e. 255)
      delayMicroseconds(50); //delay to ensure total duration is 150+50=200 microseconds
      PORTD=0; //output back a 0
      check=1; //condition to exit the loop
    }
    t=t+1; 
  }
}

По какой-то причине генерируемый импульс не совсем то, что я ищу.Есть ли что-то, что я делаю не так?Или есть лучшая реализация для чего-то подобного?Кроме того, если в моем вопросе что-то отсутствует, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 22 марта 2019

Я понимаю, что Arduino не позволяет мне выводить аналоговые значения

Для вывода аналоговых значений используйте один из аналоговых выходов Arduino. Они помечены ~

Вот пример из ссылки Arduino :

int ledPin = 9;      // LED connected to digital pin 9
int analogPin = 3;   // potentiometer connected to analog pin 3
int val = 0;         // variable to store the read value

void setup() {
  pinMode(ledPin, OUTPUT);  // sets the pin as output
}

void loop() {
  val = analogRead(analogPin);  // read the input pin
  analogWrite(ledPin, val / 4); // analogRead values go from 0 to 1023, analogWrite values from 0 to 255
}
...