Плавная регулировка набора скорости бесщёточного мотора

Так и не нарисовал…
А я вот кое-чего накидал)))

#include <Servo.h>

Servo motor;
uint8_t mot_pin = 9;          // Пин подключения мотора
int     max_pwm = 1940;       // Максимальное значение ШИМ 2.3 мс
int     min_pwm = 980;        // Минимальное значени ШИМ 0.8 мс
uint8_t Speed;
                   
uint8_t table[] = {       // Таблица из 180 элементов
  0,0,1,1,2,2,3,3,4,4,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,9,9,9,9,10,10,10,11,11,12,12,13,13,14,15,15,15,15,15,16,16,16,16,16,17,17,17,18,18,18,19,19,20,20,21,21,21,22,22,23,23,23,24,24,25,25,26,26,27,27,28,29,30,31,32,32,33,33,34,34,35,35,36,37,38,38,39,39,40,40,41,42,43,44,45,45,46,46,47,47,48,48,49,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,65,66,67,68,69,70,72,74,76,78,80,82,84,86,88,89,90,92,94,96,98,99,101,103,105,107,108,110,113,114,116,118,120,123,125,127,128,130,133,135,137,138,140,143,146,149,150,153,155,158,163,165,169,173,177,180
};       

void setup() {
//  Serial.begin(9600);     // запуск последовательного порта
  motor.attach(mot_pin);  // инициализация мотора
  delay(1000);            // калибровка
  motor.writeMicroseconds(max_pwm);
  delay(2000);
  motor.writeMicroseconds(min_pwm);
  delay(4000);
}

void loop() {
  uint16_t tmp = analogRead(A1);
  tmp = map(tmp, 0, 1023, 0, 180);
  Speed = table[tmp];
  motor.write(Speed);
}

График рисовал от руки, что-то наподобие y= a^x, только начинается с нуля.