Практикую реверс коллекторных микродвигателей путем их подключения к 2 разным выходам драйвера L293. Соответственно входы управляются ШИМами с 2 ног Ардуинки и нулевая ШИМ подается на тот или иной вход драйвера вызывая соответственно реверс движка, запитанного нужной скважностью ШИМ со второго входа. Плюс вижу в отсутствии необходимости управляемых транзисторных ключей в дополнении к драйверу, то есть можно обойтись одной стандартной в такой ситуации 293. В одном проекте такой реверс на Меге работает без нареканий, но в другом на Уно при включении питания секунды на 4 зависает, но потом работает. Подозреваю, что при такой схеме, когда один из выводов двигателя не подключен на 0, а висит на другом выводе процессора с которого нет ШИМ волны (или она нулевая), есть какие то подводные камни. Может кто ваял подобную штуку на этом или аналогичном драйвере? Или знает чем может быть чревата подобная затея. Хотя не исключено, что есть и другие драйвера с возможностью реверсирования, о которых я не знаю.
Предположу самостоятельно, что 4-5 секундная задержка может быть связана с перегрузкой т 8 разрядного таймера МК, который если не ошибаюсь используется для генерации ШИМ и еще для работы ф-ции time(), delay(). В проекте газонокосилки со сбором травы и питанием от намотанного на катушку кабеля, генериться одновременно 4 ШИМ. Два на колеса с 5 и 6 пинов и два 9 и 10 на катушку, реверсируемую по описанной схеме. Плюс сама работа движков колес есть функция от времени. - Итог первые 5 секунд не хочет работать двигатель катушки. Очевидно необходимо оптимизировать ресурсы МК в составе которых целых 3 или даже 5, в случае с мегой 2560 таймера-счетчика. Вопрос, можно ли это сделать в самой IDE ?
Ну вот так, например кусок кода. Ино во вложении запрещено. По схеме думаю и так понятно к каким пинам что подключено.
void loop() { digitalWrite(2,HIGH);//раскрутка ножа if(n%2==0){pin=5;skat2=0;skat1=220;};//else{pin=6;skat2=220;skat1=0;};//переопределение разворотных и размоточных в чет. нечет. if(n%2!=0){pin=6;skat2=220;skat1=0;}; analogWrite(5,200);analogWrite(6,200);// работа ходовых на 5 и 6 delay(100); analogWrite(9,skat2);analogWrite(10,skat1);// размотка или смотка кабеля на 9 и 10 Time0 = millis();
// === Блок удержания направления на заданной дистанции а по гироскопу === //
do {dist=VX*(millis()-Time0)/1000; // Текущее время и пройденная дистанция сучетом определенной скорости в метрах yaw=0; for(i=0;i<=9;i++){ Wire.beginTransmission(MPU); Wire.write(0x47); // Адрес первого регистра данных гироскопа 0x43 Wire.endTransmission(); Wire.requestFrom(MPU, 2); // Чтение последних 2 регистров, значение каждой оси сохраняется в 2 регистрах GyroZ = (Wire.read() << 8 | Wire.read()) / 131.0; // используем только эту ось delay(90); yaw = yaw+GyroZ+0.5; i++;}
if(yaw>1){dp=10;dl=-10;};if(yaw<-1){dp=-10;dl=10;};//условия коррекции шим положительно против чс analogWrite(5,200+dp);analogWrite(6,200+dl); //5 на левом delay(600);// корректируем работу ходовых на 5 и 6 выводах в течении 0.6 сек analogWrite(5,200);analogWrite(6,200);//сбрасываем шим на прежний уровень и 0.5 сек замеряем в след итерации delay(300); } while(dist <= A); // пока на заданной дистанции
analogWrite(5,0);analogWrite(6,0);//останов ходовых по достижению дистанции А analogWrite(9,0);analogWrite(10,0);// стоп размотки delay(1000);
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения