Setting PWM Timers

I have been working on setting PWM timers on a MEGA pins

timer 3 (controls pin 5, 3, 2)
timer 4 (controls pin 8, 7, 6)

I am using the following code. This should put them at 31372.55 Hz

TCCR3B = TCCR3B & 0b11111000 | 0x01;
TCCR4B = TCCR4B & 0b11111000 | 0x01;

I am trying to get around 15kHz --- 12kHz - 22kHz range.

Any ideas? I need them at the same frequency. So I can analogWrite(Pin, DUTY); some fets.

Thanks Jason

Perhaps if you post all your code and not a snippet it would be easier to advise you.

Here is most of the relevant code.

//Hall pins
int HALL_A = 19; 
int HALL_B = 20;
int HALL_C = 21;

//For reading HAL state in function
int tmp_HALL_A; 
int tmp_HALL_B;
int tmp_HALL_C;

//Mosfet Pins
int Mos_A = 2; 
int Mos_Ab = 6; 
int Mos_B = 3; 
int Mos_Bb = 7; 
int Mos_C = 5; 
int Mos_Cb = 8; 

//RPM Calcualtion vars
int COUNT = 0; 
unsigned int RPM;
double TIME = 0;

//Brake Start pins
int GO = 52;
int Brake = 50;
bool RUN = false;
bool BRAKE = false;

//FWD REV pins
int FWDpin = 48;
int REVpin = 46;
//Direction 0 is stopped, 1 FWD, 2 REV
int Direction = 0;

int Speed_Set_Sensor_Pin = A7;

bool Start = false;

//THis is the dutyration at first start
int Start_duty = 0;
int DUTY = 0;


void setup() {

  //Set interupt pins ONLY USE PINS 2, 3, 18, 19, 20, 21 on mega
  attachInterrupt(digitalPinToInterrupt(HALL_A), HALL_INT, CHANGE);
  attachInterrupt(digitalPinToInterrupt(HALL_B), HALL_INT, CHANGE);
  attachInterrupt(digitalPinToInterrupt(HALL_C), HALL_INT, CHANGE);
 
  TCCR3B = TCCR3B & 0b11111000 | 0x01;
  TCCR4B = TCCR4B & 0b11111000 | 0x01;

  //Set Mosfet pins as output
  pinMode(Mos_A, OUTPUT);
  pinMode(Mos_Ab, OUTPUT);
  pinMode(Mos_B, OUTPUT);
  pinMode(Mos_Bb, OUTPUT);
  pinMode(Mos_C, OUTPUT);
  pinMode(Mos_Cb, OUTPUT);

  digitalWrite(Mos_A, HIGH); 
  digitalWrite(Mos_Ab, HIGH); 
  digitalWrite(Mos_B, HIGH);
  digitalWrite(Mos_Bb, HIGH);
  digitalWrite(Mos_C, HIGH);
  digitalWrite(Mos_Cb, HIGH);
  

  Serial.begin(9600);

}

void loop() {  

  
} //End Main Loop



void forwardSequence(){
  tmp_HALL_A = digitalRead(HALL_A);
  tmp_HALL_B = digitalRead(HALL_B);
  tmp_HALL_C = digitalRead(HALL_C);
  
  if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 0){
    Step_1(DUTY);
    //Serial.println("STEP 1"); 
  }else if(tmp_HALL_A == 1 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
    Step_2(DUTY);
    //Serial.println("STEP 2"); 
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
    Step_3(DUTY);
    //Serial.println("STEP 3"); 
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 1){
    Step_4(DUTY);
    //Serial.println("STEP 4"); 
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
    Step_5(DUTY);
    //Serial.println("STEP 5"); 
   }else if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
    Step_6(DUTY);
    //Serial.println("STEP 6"); 
  }
}

void reverseSequence(){
  tmp_HALL_A = digitalRead(HALL_A);
  tmp_HALL_B = digitalRead(HALL_B);
  tmp_HALL_C = digitalRead(HALL_C);
  
  if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 0){
    Step_4(DUTY);
  }else if(tmp_HALL_A == 1 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
    Step_5(DUTY);
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 0){
    Step_6(DUTY);
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 1 && tmp_HALL_C == 1){
    Step_1(DUTY);
  }else if(tmp_HALL_A == 0 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
    Step_2(DUTY);
  }else if(tmp_HALL_A == 1 && tmp_HALL_B == 0 && tmp_HALL_C == 1){
    Step_3(DUTY);
  }
}

void Step_1(int duty){
    digitalWrite(Mos_B, HIGH);
    digitalWrite(Mos_C, HIGH);
    digitalWrite(Mos_Ab, HIGH);
    digitalWrite(Mos_Bb, HIGH);
    analogWrite(Mos_A, duty);
    analogWrite(Mos_Cb, duty);

}

void Step_2(int duty){
    digitalWrite(Mos_A, HIGH);
    digitalWrite(Mos_C, HIGH);
    digitalWrite(Mos_Ab, HIGH);
    digitalWrite(Mos_Bb, HIGH);
    analogWrite(Mos_B, duty);
    analogWrite(Mos_Cb, duty);
 
}

void Step_3(int duty){
    digitalWrite(Mos_A, HIGH);
    digitalWrite(Mos_C, HIGH);
    digitalWrite(Mos_Bb, HIGH);
    digitalWrite(Mos_Cb, HIGH);
    analogWrite(Mos_B, duty);
    analogWrite(Mos_Ab, duty);

}

void Step_4(int duty){
    digitalWrite(Mos_A, HIGH);
    digitalWrite(Mos_B, HIGH);
    digitalWrite(Mos_Bb, HIGH);
    digitalWrite(Mos_Cb, HIGH);
    analogWrite(Mos_C, duty);
    analogWrite(Mos_Ab, duty);

}

void Step_5(int duty){
    digitalWrite(Mos_A, HIGH);
    digitalWrite(Mos_B, HIGH);
    digitalWrite(Mos_Ab, HIGH);
    digitalWrite(Mos_Cb, HIGH);
    analogWrite(Mos_C, duty);
    analogWrite(Mos_Bb, duty);

}

void Step_6(int duty){
    digitalWrite(Mos_B, HIGH);
    digitalWrite(Mos_C, HIGH);
    digitalWrite(Mos_Ab, HIGH);
    digitalWrite(Mos_Cb, HIGH);
    analogWrite(Mos_A, duty);
    analogWrite(Mos_Bb, duty);

}

void storeCharge(){

  digitalWrite(Mos_A, HIGH); 
  digitalWrite(Mos_Ab, HIGH); 
  digitalWrite(Mos_B, HIGH);
  digitalWrite(Mos_Bb, HIGH);
  digitalWrite(Mos_C, HIGH);
  digitalWrite(Mos_Cb, HIGH);
  
  digitalWrite(Mos_Ab,LOW);
  digitalWrite(Mos_Bb, LOW);
  digitalWrite(Mos_Cb, LOW);
  delay(10);
  digitalWrite(Mos_Ab, HIGH);
  digitalWrite(Mos_Bb, HIGH);
  digitalWrite(Mos_Cb, HIGH);
}