Arduino DUE - немного вопросов

Kislorof
Offline
Зарегистрирован: 30.10.2012

Добрый день. Подскажите, какие ноги у due работают на прерывания? И где то читал, что, вроде как в ней их можно переназначить - т.е. повесить прерывание на любую ногу?

Вопрос 2 - на каких ногах висят таймеры?

Вопрос 3 - можно ли на ноги вешать диоды без токоограничивающих резисторов? (Диодов 8шт. Максимум, по одному на ногу)

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

на каждую ногу можно назначит прерывание(зменение сигнала, задний/передний фронт и доп функции ног)

распиновка Due

резисторам быть

Kislorof
Offline
Зарегистрирован: 30.10.2012

Спасибо, с этими вопросами разобрался. Дальше - веселее вопрос:

Как правильно организовать работу с драйвером ШД?
Т.е. драйвер работает по степ/дир. А вопрос - в скорости сигнала степ.

Надо:
1. Регулировать длительность этого сигнала (слишком короткий драйвер может и не увидеть) и регулировать скорость отправления сигналов (что бы получить нужную скорость вращения, разгон-торможение и т.д.)
Поскольку параллельно с этим могут выполняться и другие задачи - правильно ли я понимаю, что нужно все это выстраивать через прерывания таймера?

И если строить это все через таймеры, то вопрос такой - насколько быстро происходит включение/выключение прерываний в ардуине в принципе и таймеров в частности?

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

возьмите готовую бибилиотеку для шд

Kislorof
Offline
Зарегистрирован: 30.10.2012

Какой смысл в библиотеке под эти задачи? Тут все, что надо - дергать двумя ножками, а библиотеки по моему для шилдов, на которые шим надо гнать

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

использование дуе что бы дергать 2 ножками тоже как то безсмыслено...

Kislorof
Offline
Зарегистрирован: 30.10.2012

Ну помимо этого нужно слушать очень быстрый энкодер, эмулировать двигатели по матмодели, рулить другими двигателями и все это в режиме жесткого тайминга. Но так да - по итогу лишь дергать ножками. И как правильно деграть через таймеры с нужной частотой - я уже давно разобрался. 

И еще - почти любой сложности проект в результате имеет как раз таки дергание ножками. 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Kislorof пишет:

И еще - почти любой сложности проект в результате имеет как раз таки дергание ножками. 

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

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

столкнулся с забавной фигней кстати.. переделывал програмку которая раньше на меге бегала.. оказалось что Дуе опрашивает сенсоры быстрей чем они успевают обновится :) приходиться городить огород с задержками :)

Kislorof
Offline
Зарегистрирован: 30.10.2012

Ну у меня все на прерываниях - поэтому скорость только в плюс

mishakadochnikov
Offline
Зарегистрирован: 13.11.2016

Как плату дуе подключить к планшету, какой кабель?

StrangerM
Offline
Зарегистрирован: 02.11.2013

А зачем DUE, TMS320f28377 или 28027 есть по схожей цене специализированные для приводов с аппаратным чтением энкодеров и тп,  лаунчпады.

Kairos
Offline
Зарегистрирован: 21.09.2016

Пробовал получить с DUE  шим с разрешением 12 бит используя функцию  analogWriteResolution(), но по факту на выходе все тот же 8 битный шим, т.е. ширина импульса изменяется с шагом 16 и имеет все те же 256 значений. 

Можно ли получить с DUE  ШИМ 12 бит, используя функцию  analogWriteResolution() ?

void setup()
{
  pinMode(11, OUTPUT);
  analogWriteResolution(12);
  analogWrite(11, 16 );
 }

void loop()
{
}

Ведь, в описании к DUE сказано:

"Provide 8-bit PWM output with the analogWrite()function. the resolution of the PWM can be changed with the analogWriteResolution() function. "

Вроде бы есть возможность изменять разрешение ШИМ функцией analogWriteResolution. Об этом так же написано в описании к функции analogWriteResolution:

"The Due has the following hardare capabilities:

"-12 pins which default to 8-bit PWM, like the AVR-based boards. These can be changed to 12-bit resolution.

-By setting the write resolution to 12, you can use analogWrite() with values between 0 and 4095 to exploit the full DAC resolution or to set the PWM signal without rolling over. "

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Ну и что при Вашем коде получается на пине 11?

А если заменить в 5-й строке "16" на "8"?

Kairos
Offline
Зарегистрирован: 21.09.2016

при значениях параметра от 0 до 15 на выходе "0". 

16-31 - длинтельность имп. 4 мкс (1 кГц), при изменении параметра в диапазоне от 16 до 31 длительность импульса шим не изменяется.  

32-47 - 8 мкс,  48-63 - 12 мкс. и т.д.  

Т.е. длительность импульса шим прирастает с шагом примерно 4 мкс, что соответствует шиму с разрешением 8 бит.

пс: На плате, на впаян кварц для встроенного RTC, может ли это влиять на работу шим - я хз. (Кстати, если судить по фоткам алишным, на многих китайских DUE не впаян этот кварц.)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Кварц RTC - это 32768Hz?

Если так, то на работу данной ШИМ он повлиять не может никак.0

Странно это. Дойдут руки - посмотрю.

Kairos
Offline
Зарегистрирован: 21.09.2016

Продолжу.

Изменив в файле variant.h строки:

/*
 * PWM
 */
#define PWM_INTERFACE		PWM
#define PWM_INTERFACE_ID	ID_PWM
#define PWM_FREQUENCY		1000
#define PWM_MAX_DUTY_CYCLE	255
#define PWM_MIN_DUTY_CYCLE	0
#define PWM_RESOLUTION		8

/*
 * TC
 */
#define TC_INTERFACE        TC0
#define TC_INTERFACE_ID     ID_TC0
#define TC_FREQUENCY        1000
#define TC_MAX_DUTY_CYCLE   255
#define TC_MIN_DUTY_CYCLE   0
#define TC_RESOLUTION		8

#ifdef __cplusplus
}
#endif

заменил на:

/*
 * PWM
 */
#define PWM_INTERFACE		PWM
#define PWM_INTERFACE_ID	ID_PWM
#define PWM_FREQUENCY		1000
#define PWM_MAX_DUTY_CYCLE      4095
#define PWM_MIN_DUTY_CYCLE	0
#define PWM_RESOLUTION		12

/*
 * TC
 */
#define TC_INTERFACE            TC0
#define TC_INTERFACE_ID         ID_TC0
#define TC_FREQUENCY            1000
#define TC_MAX_DUTY_CYCLE       4095
#define TC_MIN_DUTY_CYCLE       0
#define TC_RESOLUTION	        12
#ifdef __cplusplus
}
#endif

Получил шим 12 бит, 1 кГц, ширина импульса увеличивается с шагом примерно 0,2 мкс на каждое приращение параметра функции analogWrite().

Естественно, догадался не сам, а нашел на каком то форуме.  Собственно, вопрос в том, кто может объяснить, что это за файл variant.h и на что могут повлиять изменения?