Код для получения PWM-вывода
Я попробовал код для получения ШИМ-выхода 100 кГц с рабочим циклом 41,66%, считав аналоговое значение из A0, которое сравнивается с эталонным значением 5 В для получения значения ШИМ.
Кто-нибудь может помочь мне с кодом? Любая помощь очень ценится.
Вот мой код.
int Pwmpin=9;//Pwm Output Pin
int Fchange= A0;//Изменение частоты с помощью потенциометра
void setup() {
pinMode(Pwmpin, OUTPUT);//Pwm pin as Output
Serial.begin(9600);
TCCR1A=_BV(COM1A1)|_BV(COM1B1);//Non-inverted Mode
TCCR1B=_BV(WGM13)|_BV(CS11);//Prescalar 8
}
void loop(){
float freq=0;
float count=10000,countt=0,Pinput=0;
while(1){
ICR1=count;//переменная частота
countt=16*count;
freq= int(16000000/countt);
OCR1A=int(count/2);
Serial.print("Pwm Freq =");
Serial.println(freq);
count=10000;
Pinput=analogRead(A0);//Считанное входное значение
Serial.print("adc value is:");
Serial.println(Pinput);
Pinput=(Pinput/0.0113);
Serial.print("pwm value is:");
Serial.println(Pinput);
count=count+Pinput;
if(count>=100000) {
count=10000;
}
delay(1000);
}
}
1 ответ
▲ -1
- Прочитайте таблицу.
- Выясните, какой режим пера работает для вас, и какой прескалер и топ вам нужны.
- Установите timer1 в этот режим.
После этого все, что вам нужно, это загрузить регистр рабочего цикла с требуемым значением.
Для вашего приложения оставьте верхнее значение в покое.
Ваш код далек от этого.
,
@dannyf
Смотрите также:
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Как устранить шум от вентилятора 12 В с ШИМ-управлением на низкой скорости
- Генерация частоты ШИМ выше 125 кГц с помощью Arduino Uno
- Увеличить разрядность PWM
- Как вывести истинное аналоговое напряжение на выходной контакт
- PWM-вывод Arduino Nano не функционирует
И вот в чем вопрос?, @Edgar Bonet
Трудно помочь, когда мы не знаем, как значение АЦП должно соотноситься с выходом ШИМ. Однако имейте в виду, что преобразования АЦП обычно являются шумными и, вероятно, должны использовать методы для снижения шума. Кроме того, вы можете ознакомиться со спецификациями микропроцессора для конкретного процессора на вашем конкретном Arduino (существует множество различных типов). Указанные вами значения ШИМ могут быть недоступны из-за детализации оборудования ШИМ процессора., @st2000
Вы могли бы получить рабочий цикл 41,6% с Arduino 12 МГц (они вообще существуют?). Самое близкое, что вы можете получить с Arduino 16 МГц, составляет 41,875%., @Edgar Bonet
Похоже, вы пытаетесь смоделировать аналоговую схему генератора ШИМ с помощью микроконтроллера - это, вероятно, плохая идея, и, по крайней мере, потребуется АЦП с более высокой производительностью. Если все это возможно, лучше всего было бы просто использовать внутренний таймер для генерации ШИМ в цифровом виде., @Chris Stratton