Ви не увійшли.
Сторінки 1
здравствуйте, пишу первый раз на этом форуме, и прошу прощения если не в той теме. так вот, разрабатываю устройство которое должно принимать на ацп синусоиду, считывать ее угол, а затем на основе формул высчитать еще 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) { подача на на двигатель для одного шага
//}
}
Неактивний
проверить без подключения к силовому оборудованию?
Сделайте свою синусоиду (запись и настройка DAC - analogWrite?) заведите на вход и развлекайтесь )
но боюсь что без осциллографа не обойтись.
эмулятору можно "скормить" аналоговые данные из файла?
Неактивний
у меня нету возможности подать сигнал на вход, это будет через неделю только, тут другое, код правильный или я допустил ошибку
Сторінки 1