about the frequency of pro micro

I searched there are some topics talk about the frequency of arduino, I still need help on how to test pro micro's PWM frequency, and how to set it more than 10k. Thanks.

Read these https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM https://playground.arduino.cc/Main/TimerPWMCheatsheet

Thank you CrossRoads, do you know how to measure the PWM frequency of the pro micro by an arduino oscilloscope?

laoadam: Thank you CrossRoads, do you know how to measure the PWM frequency of the pro micro by an Arduino oscilloscope?

Given that you make the correct calculations in your code, why would you want to do that!

I bought a motor driver that need be controlled by PWM of above 10K frequency。

#include <VirtualWire.h>

//motor A connected between A01 and A02
//motor B connected between B01 and B02

int STBY = 10; //standby


//Motor A
int PWMA = 3; //Speed control 
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction

//Motor B
int PWMB = 5; //Speed control
int BIN1 = 6; //Direction
int BIN2 = 16; //Direction

const boolean FORWARD = HIGH;
const boolean REVERSE = LOW;
float speed_Max = 255; //pwm usually goes from 0-255
float speed_Min = 0;
float analogInput_Max = 1023;
float analogInput_Min = 0;
float analogInput_Middle_X = 515;//ideally it would be analogInput_Max / 2
float analogInput_Middle_Y = 495;//ideally it would be analogInput_Max / 2
float deadBand = 0;
float middleMax = (analogInput_Max / 2) + deadBand;
float middleMin = (analogInput_Max / 2) - deadBand;
boolean pastDirection = FORWARD;

void setup(){
	
	Serial.begin( 9600 );
	
	pinMode(STBY, OUTPUT);
	
	pinMode(PWMA, OUTPUT);
	pinMode(AIN1, OUTPUT);
	pinMode(AIN2, OUTPUT);
	
	pinMode(PWMB, OUTPUT);
	pinMode(BIN1, OUTPUT);
	pinMode(BIN2, OUTPUT);
	
	//receiver setup
	vw_set_rx_pin(2);          //Sets pin 12 as the RX Pin
	vw_set_ptt_inverted(true); // Required for DR3100
	vw_setup(2000);            // Bits per sec
	vw_rx_start();             // Start the receiver PLL running
}

void loop(){

	uint8_t buf[VW_MAX_MESSAGE_LEN];
	uint8_t buflen = VW_MAX_MESSAGE_LEN;
	if (vw_get_message(buf, &buflen)) // Non-blocking
	{
		int i;
	    int column = 0;
	    String message;
	    int commands[30];
	    
        // Message with a good checksum received, dump it. 
        for (i = 0; i < buflen; i++)
        {     
        	//DEBUG:
        	//Serial.print(char(buf[i]));
        	
        	if(char(buf[i]) == '|'){
        		commands[column] = message.toInt();
        		message = "";
        		column++;
        	}else{
        		message += char(buf[i]);
        	}
        }
        //one more time to capture the last value since the message does not end with |
        commands[column] = message.toInt();
        
        // DEBUG 
//		Serial.print("X: ");
//		Serial.print(commands[0]);
//		Serial.print(" Y: ");
//		Serial.println(commands[1]);
		
		motorControl(commands[0], commands[1]);
		
	}
	
}

void move(int motor, int speed, boolean direction){
	digitalWrite(STBY, HIGH); //disable standby
	
	if(motor == 1){
		digitalWrite(AIN1, direction);
		digitalWrite(AIN2, !direction);
		analogWrite(PWMA, speed);
	}else{
		digitalWrite(BIN1, !direction);
		digitalWrite(BIN2, direction);
		analogWrite(PWMB, speed);
	}
}

void motorControl(float x, float y) {
	boolean currentDirection = y >= analogInput_Middle_Y;

	//map(value, fromLow, fromHigh, toLow, toHigh);
	if(currentDirection == REVERSE){
		y = map(y, analogInput_Middle_Y, analogInput_Min, speed_Min, speed_Max) ;  
	}else{
		y = map(y, analogInput_Middle_Y, analogInput_Max, speed_Min, speed_Max);
	}
  
	int subtractFromLeft = map(x, analogInput_Middle_X, analogInput_Min, speed_Min, y);
	int subtractFromRight = map(x, analogInput_Middle_X, analogInput_Max, speed_Min, y);

	if(subtractFromRight < 0){
		subtractFromRight = 0;
	}
	
	if(subtractFromLeft < 0){
		subtractFromLeft = 0;
	}
	
	int Throttle_RIGHT = y - subtractFromRight;
	int Throttle_LEFT = y - subtractFromLeft;
	
	boolean currentDirection_LEFT = currentDirection;
	boolean currentDirection_RIGHT = currentDirection;
	
	
	if(Throttle_LEFT < 1 && Throttle_RIGHT > 1){
		currentDirection_LEFT = !currentDirection;
		Throttle_LEFT = Throttle_RIGHT;
	}
	
	if(Throttle_RIGHT < 1 && Throttle_LEFT > 1){
		currentDirection_RIGHT = !currentDirection;
		Throttle_RIGHT = Throttle_LEFT;
	}
	
	move(1, Throttle_LEFT, currentDirection_LEFT);
	move(2, Throttle_RIGHT, currentDirection_RIGHT);
	
//	Serial.print("Throttle_LEFT: ");
//	Serial.print(Throttle_LEFT);
//	Serial.print(" Throttle_RIGHT: ");
//	Serial.print(Throttle_RIGHT);
//	Serial.println("");
//	
//	if(Throttle_LEFT >= -400 && Throttle_LEFT <= 400){
//		motors.setM1Speed( Throttle_LEFT );
//	}
//	
//	if(Throttle_RIGHT >= -400 && Throttle_RIGHT <= 400){
//		motors.setM2Speed( Throttle_RIGHT );
//	}
//	delay(2);
  
}