Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

kamens4ik_777
2014-11-29 18:47:34

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

NoName
2014-11-29 16:00:56

проверить без подключения к силовому оборудованию?
Сделайте свою синусоиду (запись и настройка DAC - analogWrite?) заведите на вход и развлекайтесь )
но боюсь что без осциллографа не обойтись.

эмулятору можно "скормить" аналоговые данные из файла?

kamens4ik
2014-11-29 13:05:10

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


int inPin = A5;    // select the input pin for the potentiometer
int ledPin = 13;      // select the pin for the LED
int inValue = 0;
volatile float alfa_grad = 0;
float alfa_rad = 0;
byte modul; 
byte modul_1;
byte modul_2;
byte modul_3;
byte modul_4;
byte modul_5;

void setup() {
  // declare the Pin as an OUTPUT:
  pinMode(3, OUTPUT);
  pinMode(A5, INPUT);
  Serial.begin(115200);        // connect to the serial port
  Serial.println("PWM Test");
TCCR1A = 0;
TCCR1B = 0;
  TCNT1 = 0;

  OCR1A = 312.5;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS10);
  TCCR1B |= (0 << CS11);
  TCCR1B |= (1 << CS12);
  TIMSK1 |= (1 << OCIE1A); // Разрешить прерывание по совпадению 
  }
  ISR(TIMER1_COMPA_vect){
  alfa_grad += 0.36;
  if(alfa_grad > 359 && alfa_grad < 361)
    {
    alfa_grad = 0;
  }
   
}

void loop() {
  alfa_rad = (float)alfa_grad*3.14/180;
       inValue = map (analogRead(inPin),0,1023,0,255) - 127;
       modul = map (((float)inValue*sin(alfa_rad))*100,-12700,12700,-127,127) + 127;
       modul_1 = map (((float)inValue*sin(alfa_rad + 2.09))*100,-12700,12700,-127,127) + 127;
       modul_2 = map (((float)inValue*sin(alfa_rad + 4.18))*100,-12700,12700,-127,127) + 127;
       analogWrite (3,modul);
       analogWrite (5,modul_1);
       analogWrite (6,modul_2);
       volatile float alfa = alfa_rad;
       if (alfa >= 6.2832)
       {
        do {alfa = alfa - 6.2832;}
           while (alfa < 6.2832);
       
       } 
       modul_3 = map(((float)inValue*sin(alfa))*100,-12700,12700,-127,127) + 127;
       modul_4 = map (((float)inValue*sin(alfa + 2.09))*100,-12700,12700,-127,127) + 127;
       modul_5 = map (((float)inValue*sin(alfa + 4.18))*100,-12700,12700,-127,127) + 127;
       analogWrite (9,modul_3);
       analogWrite (10,modul_4);
       analogWrite (11,modul_5);
       
      // if ((int)alfa_grad % 15) { подача на на двигатель для одного шага
       
       
       //}
       
       
       
       
       
       
       
       
       
}

Підвал форуму