100КГц шим

Искал для себя, но думаю многим будет полезно.

Собственно по этой ссылке показано как сделать 100КГц ШИМ
http://forum.arduino.cc/index.php/topic,10537.0.html

// Link http://forum.arduino.cc/index.php/topic,10537.0.html

#include "arduino.h"

void setup()
{
  // configure hardware timer2 to generate a fast PWM on OC2B (Arduino digital pin 3)
  // set pin high on overflow, clear on compare match with OCR2B
  TCCR2A = 0x23;
  TCCR2B = 0x09;  // select timer2 clock as unscaled 16 MHz I/O clock
  OCR2A = 159;  // top/overflow value is 159 => produces a 100 kHz PWM
  pinMode(9, OUTPUT);  // enable the PWM output (you now have a PWM signal on digital pin 3)
  OCR2B = 80;  // set the PWM to 50% duty cycle
  Serial.begin(57600);
}

void loop()
{
	if(Serial.available()>0){
		if(Serial.read()=='1'){
			OCR2B++;
		}
		else{
			OCR2B--;
		}
	}	
}


Подправленный код из обсуждения.
В мониторе порта передаем 1 — увеличиваем скважность, любой другой символ — уменьшаем.

Комментарии (1)

RSS свернуть / развернуть
+
0
TCCR2B = 0x09; // select timer2 clock as unscaled 16 MHz I/O clock

0x09 это скорость ШИМ медленнее системного такта в 256 раз. Для максимальной скорости ШИМ нужно использовать TCCR2B = 0x01;
Спасибо за код. Использовал его для ATTiny861, работает, только использовал 1 таймер (там нет второго), то есть регистры TCCR1A, TCCR1B, OCR1A, OCR1B.
avatar

MoonCrowned

  • 2 ноября 2018, 11:15

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.