Problemas control velocidad en motor CC

Buenas días a todos! os expongo mi problema que me trae un poco por la calle de la amrgura. jeje.
La idea es hacer un oscilador regulable en frecuencia y fase con circuito de control mediante Arduino UNO y circuito de potencia con transistor NPN 2N222 y mosfet canal N (IRF740).
Los componentes usados son:

  • fuente alimentación que suministra 12v, 5v GND
  • 2 potenciometros de 100K
    -Motor 12V de ordenador
    -Transistor NPN2N222
    -Transistor Mosfet IRF 740
  • 2 resistencias de 100 ohm y 4,5K
  • pantalla lcd
    -Arduino UNO.

El problema, cuando enciendo la fuente, la mayoria de las veces la pantalla lcd no marca nada ni puedo graduar nada y el motor funciona a bajas revoluciones (permanece en estado estado). Otras veces enciendo, enciende motor a altas revoluciones y baja de repente pudiendo variar con los potenciometros los parametros en la pantalla lcd (que en este caso si me deja ver los parámetros) pero al manipularlo un par o tres veces, el motor vuelve a bajas revoluciones y ya se queda en este estado sin dejarme manipularlo más.
Aparte de todo esto, he probado independientemente la señal de arduino del pin7 (por probar algo bajo desesperación) y cuando quito el cable aumenta de velocidad y cuando lo pongo reduce su velocidad, por lo que entiendo que en este sentido no hay problema. He comprobado continuidad en protoboard y demás por si fuere el problema pero todo bien. Las masas las tengo todas unidas y los 5V tb.
He pensado que el problema puede estar en la parte de control, ya sea código o montaje, pero esta última la he comprobado y creo que no tengo problemas viendo el esquema.
os paso código y esquema y foto de mi montaje. Agradecería vuestra ayuda. muchas gracias y disculpad si no me he explicado bien.
PD: En el esquema que os adjunto, he descartado el optoacoplador. Realicé el esquema con los 3 componentes y he descartado el opto.La idea era utilizar opto con mosfet o NPN con mosfet. Decidí el último.

#include <LiquidCrystal_I2C.h>

#include <TimerOne.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2);

const int led = 7;
int ledState = LOW;

float volatile ValorFrecuencia;
int volatile ValorFase;
float volatile Periodo;
int volatile TiempoOn;
int volatile TiempoOff;
int volatile rpm;


void setup(void) 
{
  lcd.init();
  lcd.backlight();

  pinMode(led, OUTPUT);
  Timer1.initialize(250000);
  Timer1.attachInterrupt(ISR_Blink);
  Serial.begin(9600);
}

void ISR_Blink()
{ 
  ledState = !ledState ;
  digitalWrite(led, ledState);

     if(ledState){
        Timer1.initialize(TiempoOn);
        Timer1.attachInterrupt(ISR_Blink);
     }
     else{
      Timer1.initialize(TiempoOn);
      Timer1.attachInterrupt(ISR_Blink);
     }
}
     
     

void loop(void) 
{
 int LecturaFase = analogRead(A0);
 int LecturaFrecuencia = analogRead(A1);
 ValorFase = map(LecturaFase,0,1023,0,99);
 ValorFrecuencia = map(LecturaFrecuencia,0,1023,167,30);
 Periodo=float(1/ValorFrecuencia * 1000000 );
 rpm=float(30/Periodo*1000000);

 TiempoOn = Periodo * ValorFase /100;
 TiempoOff = Periodo * (100 - ValorFase) / 100;

 lcd.setCursor(0,0);
 lcd.print(int(ValorFrecuencia));
 lcd.print(" Hz");

 lcd.setCursor(8,0);
 lcd.print(int(ValorFase));
 lcd.print(" %");

 lcd.setCursor(0,1);
 lcd.print(int(Periodo/1000));
 lcd.print(" ms");

 lcd.setCursor(8,1);
 lcd.print(rpm);
 lcd.print(" rpm");

 Serial.print("Frecuencia = ");
 Serial.print(ValorFrecuencia);
 
 Serial.print("Fase = ");
 Serial.print(ValorFase);
 
 Serial.print("Periodo = ");
 Serial.print(Periodo);
 
 Serial.print("rpm = ");
 Serial.print(rpm);
 delay(500);
}

Moderador
@DeividR1, por favor edita tu post y haz que la imagen adjunta sea visible usando la guía que esta al final de las normas.
Lee las Normas del foro

Cuando vea la imagen te respondo.
Luce como un problema de ruido eléctrico pero es un comentario rápido que hago.