Расширенная функция analogWrite
- Войдите на сайт для отправки комментариев
Втр, 03/01/2017 - 22:50
Из за несущей частоты в 400гц мотор при вращении воет гудком телефонной трубки. Необходимо уменьшить или увеличить несущую частоту. Как это сделать лучше всего?
для тех кто только что вылез из пещеры. micros() или millis()
А дальше?
/* Led_resist.ino #1 подстроечник -> A0 (R1_pin) 0...1023 #2 светодиод -> 2 (led_pin) 1 горит / 0 нет */ //#1 const int R1_pin = A0;// нога светодиода int R1; //#2 const int led_pin = 2;// нога светодиода bool led; const uint16_t period = 5000; // полный период ШИМ uint16_t time_ON; void setup() { //#1 //#2 pinMode (led_pin, OUTPUT); digitalWrite(led_pin, led = 0 ); } void loop() { //#1 R1 = analogRead(R1_pin); //#2 static uint32_t past_2 = 0; time_ON = map (R1, 0, 1023, 0, period); if (led == 1 && millis() - past_2 >= time_ON) { digitalWrite(led_pin, led = 0 ); } if (millis() - past_2 >= period) { past_2 = millis(); digitalWrite(led_pin, led = 1 ); } }Интересно. Спасибо. А библиотеки есть сразу с выбором несущей?
Из за несущей частоты в 400гц мотор при вращении воет гудком телефонной трубки. Необходимо уменьшить или увеличить несущую частоту. Как это сделать лучше всего?
а конденсатор стоит в паралель двигателю?
Нет, он сбивает работу H-моста. А параллельно выходу его тоже не поставить, так как h-мост на вход принимает только шим. Аппаратный выход то конечно есть, но хотелось бы программно, на будущее
Как это сделать лучше всего?
Лучше всего самому разобраться с аппаратными таймерами (с режимом PWM) и не пользовать ардуиновскую analogWrite(). Настроить частоту ШИМ по своему усмотрению.
Давно хотел этим заняться. Сейчас проект сдам и куплю кучу книг по AVR
Хватит одного даташита