CW - Clockwise (по часовой стрелке)
CCW - Counter Clockwise (против часовой стрелки)
Ааа, ну это да. У меня две микросхемы, так как два мотора.
я жеж вам приводил как надо правильно считать и подавать значение шим на моторы, на старом форуме тележка или танк на ардуино, скетч один человек как раз к такой машинке пристроил, там правда радиоуправление, но не суть, алгоритм расчета ШИМ посмотрите
Я тут не понимаю…)
Спойлер
// а теперь управляем моторами и нормируем скорости
// только если прошел цикл (Fpwm=490гц или 2мсек!)
// управлять моторами чаще чем раз в 10мсек - бессмысленно..
if ( millis() - prevTime >= period )
{
if (rc_data[1] >= 1481 && rc_data[1] <= 1519) {
speedA = 0;
speedB = 0;
}
if (rc_data[1] <= 1480 || rc_data[1] >= 1520) {
if (rc_data[1] <= 1150 || rc_data[1] >= 1850) { // скорость при которой реакцию руля уменьшаем в два раза
speedA = (long)fspeed + ((lr * lr) / diff_lr * (lr >= 0 ? 1 : -1));
speedB = (long)fspeed - ((lr * lr) / diff_lr * (lr >= 0 ? 1 : -1));
} else {
speedA = (long)fspeed + (lr * lr * (lr >= 0 ? 1 : -1));
speedB = (long)fspeed - (lr * lr * (lr >= 0 ? 1 : -1));
}
} // ход только при нажатии педали газа
if ( speedA > 255 ) {
speedA = 255;
}
if ( speedB > 255 ) {
speedB = 255;
}
if ( speedA < -255 ) {
speedA = -255;
}
if ( speedB < -255 ) {
speedB = -255;
}
if ( abs(speedA) < minPwm ) {
speedA = 0; // мотор не тянет, нет смысла жечь батарейку..
}
if ( abs(speedB) < minPwm ) {
speedB = 0;
}
if ( speedA > 0 ) {
aForward();
analogWrite(ena, (int)speedA);
}
else if ( speedA < 0 ) {
aBackward();
analogWrite(ena, -(int)speedA);
}
else {
aStop();
}
if ( speedB > 0 ) {
bForward();
analogWrite(enb, (int)speedB);
}
else if ( speedB < 0 ) {
bBackward();
analogWrite(enb, -(int)speedB);
}
else {
bStop();
}
prevTime = millis();
// Serial.println(speedA, DEC);
// Serial.println(speedB, DEC);
}
}
Значит не просто увеличить частоту ШИМ
// Пины D9 и D10 - 7.8 кГц
TCCR1A = 0b00000001; // 8bit
TCCR1B = 0b00001010; // x8 fast pwm
Вы думаете я понимаю, написал и забыл, у нас ham это дело обычное )))
Может не увеличивать частоту нужно, а уменьшать?
Попробовали бы на простейшем скетче с delaymicroseconds , чтобы не страдать пока с таймерами.
M=100;
N=M/10;
while(1) {
delay(N);
ВКЛ;
delay(M);
ВЫКЛ;
}
И поподбирать M до исчезновения писка (потенциометром м.б.)
Спасибо. Сегодня попробую.
Так и должно быть, не подавайте 0-50.
Т.е. всё что меньше 50 равно 0.
от 0 до 255 надо расти по квадратичному закону, тогда более-менее прилично отрабатывает
uint16_t M;
uint16_t N ;
void setup() {
Serial.begin(9600);
}
void loop() {
M = analogRead(0);
Serial.println(M);
N = M / 10;
delayMicroseconds (N);
digitalWrite(3, 1);
delayMicroseconds(M);
digitalWrite(3, 0);
}
Отследить число M в порту не могу, при использовании Serial.println(M) мотор пищит во всём диапазоне и не крутится.
uint16_t M = 30;
Примерно с 30 начинает крутиться на холостом ходу.
Ну так выводите в монитор не каждый раз, а, скажем, один раз на 1000.
Вобщем, у вас цель - понять при каком периоде (M+N) мотор пищит, а при каком уже нет. И каков тренд - на увеличение частоты или уменьшение. 9600 на 115200 поменяйте - меньше будет задержка.
У меня на шаговом было определённое значение PPS, когда он в резонанс входил и пердеть начинал. Пришлось выяснить экспериментально и проскакивать при регулировании.
uint16_t M;
uint16_t N;
void setup() {
Serial.begin(115200);
pinMode(3, OUTPUT);
}
void loop() {
M = analogRead(0);
Serial.println(M);
N = M / 10;
delayMicroseconds (N);
digitalWrite(3, 1);
delayMicroseconds(M);
digitalWrite(3, 0);
}
До 100 пищит и не крутится, далее крутится, но писк всё равно слышен.
Одинаково пищит или изменяется? Тренд каков?
При увеличении M писк становится громче, после 100 такое ощущение что писк не меняется.
Ну, видать, несовместим с шим мотор… Или побольше взять период, чтобы выйти из зоны на 1023. Отмасштабировать через map, например.
вы зачем мотору драйвером по мозгам стучите, если на одном выводе шимиться то в рабочем состоянии на другом входе должен быть чётко LOW, табличку в даташите гляньте
Второй вход перемычкой к земле притянут.
Ну тогда всё нормально, видимо тут я протупил )))
Тогда скорее всего драйвер высокие частоты ШИМ не поддерживает, без проблемные они дорогие однако
Попробую на другом моторе. Спасибо.