Usually done through the millis() timing function, like this:
#define INTERVAL 1200000; // 20 minutes
uint32_t previousRun = -INTERVAL; // ensure run upon startup
loop() {
if (millis() - previousRun > INTERVAL) {
previousRun = millis();
runMotor();
}
}
The millis() register is an unsigned long int, overflowing every 49 days or so. 20 minutes is dead easy.