Есть код, в котором я захотел повысить частоту шим на 10 пине до 20кгц (помог ии). Изначально я использовал analogWrite (работало), но частота для мотора невелика, и он начинал пищать.
#include <Arduino.h>
#define potentiometer_pin A4
#define dim_pin D10
#define pow_pin D11
void setup()
{
Serial.begin(115200);
pinMode(dim_pin, OUTPUT);
pinMode(potentiometer_pin, INPUT);
pinMode(pow_pin, OUTPUT);
digitalWrite(pow_pin, HIGH);
// Настройка Timer1 для 20 кГц на D10 (Fast PWM, 8-бит)
TCCR1A = _BV(COM1B1) | _BV(WGM10); // Non-inverting mode, 8-bit PWM
TCCR1B = _BV(WGM12) | _BV(CS10); // Fast PWM, no prescaling
}
void loop() {
int pot_val = analogRead(potentiometer_pin);
pot_val = map(pot_val, 0, 1023, 25, 255);
pot_val = constrain(pot_val, 25, 255);
Serial.println(pot_val);
OCR1B = pot_val;
}
С данным кодом реакция следующая: при pot_val 0, мотор выключается, иначе работает на полную. Плавная регулировка полностью отсутствует.