roboforum.ru

Технический форум по робототехнике.


Arduino pro mini для управления шаговым двигателем

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 18 янв 2015, 22:37

Гляну завтра. Мог где-то ошибиться. :)
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 20 янв 2015, 22:06

А можно "прохожему" что-то поменять в прошивке (параметр резистора например), чтобы самому подправить... без изучения языков программирования ))
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 05 фев 2015, 21:30

:oops: Не хочу надоедать, но... может подскажете, могу я сам поменять какой-то параметр в прошивке, чтобы "растянуть" зону действия переменного резистора в регулировке оборотов?
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 06 фев 2015, 11:49

Частота какая нужна? Нашел ошибку.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 06 фев 2015, 12:02

Да ну не знаю в цифрах.. Ну чтобы медленно крутил, очень медленно и быстро, оборотов 70-80 в мин.
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 06 фев 2015, 15:26

Допишу, там просто значением не отделаешься, надо для бОльшего диапазрна цикл добавлять и расчет менять.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 09 фев 2015, 16:46

Код: Выделить всёРазвернуть
/*
Управление шаговиком (драйвер степ-дир) переменным резистором */

#define Step_pin 6 //вывод Arduino для ноги STEP контроллера
#define Dir_pin 5 //вывод Arduino для ноги DIR контроллера
#define Resistor_pin A0 //вывод Arduino резистора 0-5вольт


//Переменная для значения таймера
unsigned char timerLoadValue;
//Переменная дляколичества холостых циклов таймера
volatile unsigned char FullTimerCount;
volatile unsigned char FullTimer;

//значение минимальной частоты
#define LowFreq 20
//значение МАКСИмальной частоты
#define HighFreq 12000
//Переменная для шага чаcтоты на едниницу изменения АЦП
float FreqStep;



//Переменная для текущего значения резистора
int sensorValue = 0;
//Переменная для Старого значения резистора
int OLDsensorValue = 0;



void setup() {               
// Конфигурим вывод Step_pin как выход
pinMode(Step_pin,OUTPUT);
// Конфигурим вывод Dir_pin как выход
pinMode(Dir_pin,OUTPUT);
// Конфигурим вывод Dir_pin как вход
pinMode(Resistor_pin,INPUT);


//Установим на выходах 0
digitalWrite(Step_pin, LOW);
digitalWrite(Dir_pin, LOW);

// Посчитаем "шаг" изменения частоты на единицу изменения резистора
FreqStep=(float)(HighFreq-LowFreq)/1024;

//Запускает последовательный порт
Serial.begin(9600);

//Сообщение о запуске программы
Serial.println("Program started"); 
Serial.print("FreqStep="); 
Serial.println(FreqStep); 

//Запускает таймер и получает загружаемое значение таймера.
//Параметр - желаемая частота в герцах.

timerLoadValue=SetupTimer2(50);

//Установки Таймер2: Делитель частоты /8, режим 0
//Частота = 16MHz/256 = 62500 герц или
//Делитель /256 дает нам хороший рабочий диапазон
//так что сейчас мы просто жестко запрограммируем это.
TCCR2A = 0;
//TCCR2B = 1<<CS22 | 0<<CS21 | 0<<CS20; //это на 256
TCCR2B = 4;

//Подключение прерывания по переполнению Timer2
TIMSK2 = 1<<TOIE2;


//Выводит загружаемое значение таймера
Serial.print("Timer2 Load:");
Serial.println(timerLoadValue,HEX);
}

void loop() {

//Тут будем читать занчение
sensorValue=analogRead(Resistor_pin); 

//Сравним значение со старым, если отличается - пересчитаем установку таймера
if (sensorValue!= OLDsensorValue)
  {  //Serial.println("ReCall");
    OLDsensorValue=sensorValue;
   timerLoadValue = SetupTimer2(LowFreq+FreqStep*sensorValue);

  }

/*
  Serial.print("sensor=");
  Serial.println(sensorValue,DEC);
  Serial.print("FullTimerCount");
  Serial.println(FullTimerCount);
  Serial.print("timer=");
  Serial.println(timerLoadValue,DEC);
   Serial.println("***");
      Serial.println("");
delay (1000);
*/
delay (10);
}



//Timer2 указатель вектора прерывания по переполнению
//Собственно говоря частота будет в два раза ниже.
ISR(TIMER2_OVF_vect)
{
  if (FullTimerCount>1)
  {FullTimerCount--;}
  else
  {if (FullTimerCount==1)
      {TCNT2+=timerLoadValue;
       FullTimerCount=0;
      }
    {if (FullTimerCount==0)
        {
         FullTimerCount=FullTimer;
         //Переключение IO-вывода в другое состояние.
         digitalWrite(Step_pin,!digitalRead(Step_pin));
        //Перезагрузка таймера и коррекция по задержке
        if (FullTimerCount)
            {TCNT2=1;} //Если холостые циклы есть  - максимальное значение
        else
            {TCNT2+=timerLoadValue;}
        }

     }
   }
}


#define TIMER_CLOCK_FREQ 62500.0
//15625 for /1024
//2MHz for /8 prescale from 16MHz

  //Установка Таймера2.
//Конфигурирует 8-битный Таймер2 ATMega168 для выработки прерывания
//с заданной частотой.
//Возвращает начальное значение таймера, которое должно быть загружено в TCNT2
//внутри вашей процедуры ISR.
//Смотри пример использования ниже.
unsigned char SetupTimer2(float timeoutFrequency){
unsigned char result; //Начальное значение таймера.

//Подсчет начального значения таймера
//Слегка усложним, добавив холостые просчеты
int ticks = TIMER_CLOCK_FREQ/timeoutFrequency;
FullTimer=ticks/256;
result=(int)(257.0-(ticks-(256*FullTimer)+0.5));
//257 на самом деле должно быть 256, но я получил лучшие результаты с 257.


//загружает таймер для первого цикла
if (FullTimer)
  {TCNT2=1;} //Если холостые циклы есть  - максимальное значение
else
    {TCNT2=result;}
return(result);
}


#define LowFreq 20 - минимальная частота в герцах
#define HighFreq 12000 - максимальная.
Можно править
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 09 фев 2015, 17:37

Большущее спасибо. Сегодня попробую. Достану всё с полок (успел попрятать :) ) и проведу тестдрайв.
Судя по прошивке, резистор 20кОм будет великоват (в смысле не получится плавности регулировки особой)? Ну это в общем то не проблема, главное, чтобы крутилось! :)
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 09 фев 2015, 18:23

Резистор хоть какой. Неважно, лишь бы напряжение на выводе менялось.
Можно прикрутить изменение диапазона регулировки кнопками/переключателями.
Я указал строки, которые задают минимальную частоту импульсов и максимальную. Но надо понимать что частота 20 герц - это 10 импульсов в секунду на двигатель, то есть оборот он совершит за 20 секунд.
Соответственно при 12000 герц - это 30 оборотов в секунду, если ничего не путаю. То есть если нужно оборот в секунду - можно поменять на 400.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 09 фев 2015, 18:57

Примерно понял. Попробую при необходимости и тогда уж точно осмыслю. :)

Сейчас залил скетч. Залилось, но в статусе еще вот такое красным появилось "avrdude: stk500_getsync(): not in sync: resp=0x00"
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 09 фев 2015, 18:59

Пробуем еще раз...
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 09 фев 2015, 19:31

Не крутится. На удержании стоит. Сейчас попробую прежнюю залить, может я что-то накосячил в подключении снова..

Добавлено спустя 8 минут 15 секунд:
К моему сожалению, эксперименты заканчиваются... спалил я ардуину.. Воткнул в неё 12В вместо 5... цветА компьютерного БП перепутал. Хватило и пары секунд. По этому скорее всего и не крутит мотор. Не прошивка виновата. Теперь "устр-во не опознано" :o

Добавлено спустя 18 минут 43 секунды:
Что-то странное нашел в описании :

" Микроконтроллер ATmega168
Рабочее напряжение
3.3 В или 5 В (в зависимости от модели)
Входное напряжение
3.35-12 В (модель 3.3 В) или 5-12 В (модель 5 В)
Цифровые Входы/Выходы
14 (6 из которых могут использоваться как выходы ШИМ)
8 МГц (модель 3.3 В) или 16 МГц (модель 5 В)"

Это что, она должна выдерживать 12В ? Тогда почему у меня теперь "кирпичь"? Или просто УСБ глюкануло (что бывало ранее, правда чуть по другому выражалось) на компьютере?

п.с. и еще одна мысля.. ведь не определяется не ардуино, а УСБ интерфейс? Ему 12В могли в задницу шибануть, верно?

и нашел про ошибку при прошивке. Наверное скорость порта не соответствовала. В общем после перезагрузки узнАю.. жива или нет. Пока работа не даёт комп перегрузить.
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 09 фев 2015, 21:27

На ардуине есть стабилизатор. Если 12 вольт подавать на vin -должно работать.
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Re: Arduino pro mini для управления шаговым двигателем

Сообщение Revenger » 09 фев 2015, 21:53

Сбоку VCC подвод питания на макетке. Но, возможно она и работает, просто недопрошилась, а вот этот УБС штук - "неопознаннное устр-во"теперь. Если после перезагрузки он определится - попробую изменить скорость порта и перепрошить. Нашел вот такую рекомендацию по этой ошибке:

После выбора порта следует обязательно выбрать Сервис/Плата/Arduino Mini. К сожалению, здесь не все так просто. В зависимости от версии bootloader-а у вас может не получится записать программу в контроллер. Если после компиляции будет выдаваться ошибка типа

stk500_getsync(): not in sync: resp=0x00

, то скорее всего скорость COM порта среды разработки не совпадает с этим же параметром, заданным в bootloader. Чтобы это исправить, рекомендуется:

Выбрать Сервис/Плата/Arduino Nano. Обычно это помогает, но если не сработало, то см. следующий пункт.
В папке среды разработки находим файл "\hardware\arduino\avr\boards.txt". В этом файле находим секцию «mini.name=Arduino Mini» и далее параметр «menu.cpu.mini.atmega328.upload.speed=57600». Вот здесь пробуем менять значение 57600 (у вас может быть другое) на другие. Все возможные значения скоростей можно узнать в мониторе: меню Сервис/Монитор порта и здесь выбор в правом нижнем углу. Перед проверкой нужно перегружать среду разработки.
Аватара пользователя
Revenger
 
Сообщения: 1728
Зарегистрирован: 01 ноя 2014, 00:50
Откуда: Ставрополье
ФИО: Александр

Re: Arduino pro mini для управления шаговым двигателем

Сообщение RootAdmin » 10 фев 2015, 10:30

Если до сих пор шилась, а теперь нет - то надо для начала воткнуть питание и пощупать. Если что-то греется - то однозначно чинить. А 12 вольт подавалось на какой вывод?
Дым, идущий из всех устройств в помещении предвещает появление электрика.
RootAdmin
 
Сообщения: 1725
Зарегистрирован: 07 авг 2010, 21:29
Откуда: КМВ
прог. языки: C
ФИО: Андрей

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron
Mail.ru counter