😁смотрел видос 2 раза, с разницей пару недель, когда начал изучать ардунку первый просмотр был как просмотр передачи от сверхразума на не пойми каком языке, немного вник и уже понимаю о чем речь, эволюция блеа☝️😂
Спасибо. Встала задача управлять шаговиком, но немного по другому принципу. Продолжительность высокого сигнала должна быть 10микросекунд а низкий должен регулироваться. И при всём при этом должен работать шим на D10 причём не на стандартной частоте, а выше. Возможно это на одном таймере, или нужно будет шим и двигатель на разные таймеры?
@@Aleksander_Shenrok Не очень представляю себе задачу в которой не хватает 16-битного разрешения для установки скорости. Но тогда нужно использовать 32 битный таймер, но, к сожалению, у этих AVR таких нет.
@@TDMLab Например лазерные гравёры при очень слабом лазере. если станок имеет 80 шагов на мм и нужна скорость 100мм в мин (это вполне реально) то на один шаг нужно 120 000 тактов. И даже если использовать ваш способ где высокий и низкий сигнал равны, то это практически на пределе возможностей. Если же использовать стандартный метод , при котором на высокий сигнал даётся только 10 микросекунд (160 тактов) а остальное низкий сигнал, то такая скорость уже выходит за рамки возможностей таймера. Кстати, я немного дополнил ваш скетч и теперь высокий сигнал фиксированный, а низкий можно менять в основном цикле. if (PORTD & 0b00000100) { PORTD &= 0b11111011; OCR1A = sensorValue; } // STEP HIGH else { PORTD |= 0b00000100; OCR1A = 160; } // STEP LOW
Доброго времени суток! Я покупал такие драйвера, вернул деньги за них через спор. Самой микросхемы драйвера TB6600 там нет и ни когда не будет. Там таймер NE555, оптопары и четыре smd-транзистора. На заявленном токе до отказа они работают около 60 минут, после чего ремонт не возможен. При испытаниях советую обвешать вольт и ампер метрами что бы потом доказать продавцу что все правильно было подключено и за заявленные номиналы по току и напряжению не выходили. Плохо что нельзя фото загрузить, я бы показал из чего состоят эти "драйвера".
Здравствуйте. Спасибо все очень доходчиво. Как на счет посотрудничать на комерческой основе. Мне нужны скечи по моему алгоритму. При чем все вы уже там (судя по ролику) сделали. Спасибо.
DC двигатель? Таймер настраиваем как выход ШИМ, с помощью anlagread или регистры настраиваем и включаем АЦП, кидаем полученные значения АЦП в регистр сравнения таймера. Все. Конечно двигателем управляем не напрямую а через mosfet например.
@@TDMLab OCR1A нужно помещать в loop? OCR1A нужно обявить переменной и ее уже изменять? Я понимаю, что если понимаешь то это элементарно. К сажелению я только начинаю изучать ардуино.
@@33021976 OCR1A название регистра сравнения таймера 1, объявлять не нужно т.к. он уже по умолчанию объявлен в скрытой от нас части кода. Да можно, в loop { OCR1A = analogread(A0); delay(100); } Такой момент, я рассказываю в основном как использовать напрямую регистры МК, это более сложный путь программирования. Если вы только начинаете рекомендую начать например с канала заметки ардуинщика или похожие, там можно научится базе.
На счет кода в векторе прерывания скажу. Понятно, что видео уже 2 года назад вышло и может быть неактуально. Вы задаете значения выводов сразу для всего порта! То есть по сути, мы занимаем весь порт D ради одного пина! Гораздо лучше использовать такой код: if ( PIND&(1
Если говорить о том какой код лучше ,то условие вообще использовать не нужно. Просто пишем PORTD ^= 0b00001000; и получаем каждый заход в прерывание инверсию одного бита не трогая ни чего другого А вообще я бы не заходил в прерывание вовсе , просто установить COM в режим 01 и на выходе сразу будет сигнал TOGGLE что значит изменение уровня на противоположный при совпадении.
@@ciklomat ваш код тоже трогает ВЕСЬ порт. Я свой код предложил не для ускорения, а для экономии пинов мк для других задач) А вообще, если бы сработала такая конструкция PORTD ^= (1
Доброго времени суток Хотелось уточнить по поводу проекта на А4899 -2шт, vid2905 -щт с управлением по steep Может доводилось сталкиваться с проектом в качестве спидометр (одометр) и тахометр для автопанели. Сложность в написании скейча для ардуино mega 2560 pro ch340g , . В интернете находил проекты но они не полностью соответствовать моему замыслу,. Плиз в помощи если
помогите заставить вращаться шаговый двигатель на определенный угол в ту или иную сторону в зависимости от температуры. я хочу взять самый дешевый чтобы управлять вращением крана подачи воды.
Написать регулятор типа ПИ (пропорционально-интегральный) вход температура выход управляющее воздействие, далее конвертировать его в положение ШД. На заказ не пишу, есть форумы.
@@TDMLab А ещё скажите пожалуйста, какая минимальная длительность высокого уровня сигнала должна быть, чтобы драйвер успел его воспринять? Достаточно ли просто поднять пин и сразу же его опустить в коде?
@@dmitriibannikovasx Судя по спецификации на микросхему The CLK(H) minimum pulse width - 300nS, один такт на 16МГц это 62,5 nS, вроде быстрее чем за 4 такта не получиться поднять опустить, и еще можно пустую команду nop добавить и все ок, но это в теории:)
Но а со скоростью решили ? Драйвер 200 герц , ардунино только через прерывание, и не берите эти драйвера, они г , аналоговые , берите dm 542/556, двигатели будут плавнее и тише работать
Да. Есть строгое соответствие между пинами и портами images.prismic.io/circuito/e57c56f68189f03145726786306d6a8ca7168571_arduino-uno-pinout-digital-pins-pwm-1.png?auto=compress,format Нет, не выкидываются, написанные команды не изменяют состояние остальных выводов кроме одного, хотя более универсально будет PORTD |= (1
@@TDMLab да, работает, попробовал рулить светодиодом на 13 пине😁, только на меге2560 немного больше регистров для настройки таймера, не понятно только, почему в сетапе нужно объявлять пин выходной, если состояние меняется непосредственно установкой бита🤔
@@АндрейЛенин-п2у если пин установлен на вход, а мы пишем в порт то будет меняться установка внутреннего подтягивающего резистора. То есть функция регистра portx меняется от конфигурации в сетапе вход/выход.
Наконец то благодаря видео начал понимать модули контроллера ,все думал как шим настроить с разной шириной импульса для частотника)))
😁смотрел видос 2 раза, с разницей пару недель, когда начал изучать ардунку
первый просмотр был как просмотр передачи от сверхразума на не пойми каком языке, немного вник и уже понимаю о чем речь, эволюция блеа☝️😂
Я второй день вникаю, столько слов непонятных голова кругом
СПАСИБО, УВАЖАЕМЫЙ! ОЧЕНЬ КРУТОЙ УРОК. ПРЯМО КАК У ДОНОВА ИЗ МФТИ)))
Спасибо. Встала задача управлять шаговиком, но немного по другому принципу. Продолжительность высокого сигнала должна быть 10микросекунд а низкий должен регулироваться. И при всём при этом должен работать шим на D10 причём не на стандартной частоте, а выше. Возможно это на одном таймере, или нужно будет шим и двигатель на разные таймеры?
Для выполнения разных задач конечно должны использоваться отдельные таймеры.
@@TDMLab Спасибо.
А что делать если нужно менять скорость в очень большом диапазоне и в OCR1A ставить значение больше 65535 ?
@@Aleksander_Shenrok Не очень представляю себе задачу в которой не хватает 16-битного разрешения для установки скорости. Но тогда нужно использовать 32 битный таймер, но, к сожалению, у этих AVR таких нет.
@@TDMLab Например лазерные гравёры при очень слабом лазере. если станок имеет 80 шагов на мм и нужна скорость 100мм в мин (это вполне реально) то на один шаг нужно 120 000 тактов. И даже если использовать ваш способ где высокий и низкий сигнал равны, то это практически на пределе возможностей. Если же использовать стандартный метод , при котором на высокий сигнал даётся только 10 микросекунд (160 тактов) а остальное низкий сигнал, то такая скорость уже выходит за рамки возможностей таймера. Кстати, я немного дополнил ваш скетч и теперь высокий сигнал фиксированный, а низкий можно менять в основном цикле. if (PORTD & 0b00000100)
{
PORTD &= 0b11111011;
OCR1A = sensorValue;
} // STEP HIGH
else
{
PORTD |= 0b00000100;
OCR1A = 160;
} // STEP LOW
Доброго времени суток! Я покупал такие драйвера, вернул деньги за них через спор. Самой микросхемы драйвера TB6600 там нет и ни когда не будет. Там таймер NE555, оптопары и четыре smd-транзистора. На заявленном токе до отказа они работают около 60 минут, после чего ремонт не возможен. При испытаниях советую обвешать вольт и ампер метрами что бы потом доказать продавцу что все правильно было подключено и за заявленные номиналы по току и напряжению не выходили. Плохо что нельзя фото загрузить, я бы показал из чего состоят эти "драйвера".
Можно ли по этому принципу подключить два двигателя??
А можно пример с ШД и LCD дисплеем, а то как подключаю дисплей, так ШД начинает жить своей жизнью.
Отличное решение
Эх с чего канал начинался!
Здравствуйте. Спасибо все очень доходчиво. Как на счет посотрудничать на комерческой основе. Мне нужны скечи по моему алгоритму. При чем все вы уже там (судя по ролику) сделали.
Спасибо.
У меня сейчас этот проект, не обещаю что могу заняться вашим, но может советом помогу, напишите все мне на почту, есть в разделе "о канале".
а можно добавит клавиатуру и дисплей,,??
На микросеках можно реализовать?
В справке говорят, что micros() кратен 4 микросекундам. Понятное дело что не риалтайм и нет приоритета
Можно, на любой задержке, но это команды впустую
Не подскажите как управлять таймеров в скетче, например переменным резистором, для уменьшения, увеличения скорости врашения двигателя.
DC двигатель?
Таймер настраиваем как выход ШИМ, с помощью anlagread или регистры настраиваем и включаем АЦП, кидаем полученные значения АЦП в регистр сравнения таймера. Все.
Конечно двигателем управляем не напрямую а через mosfet например.
@@TDMLab шаговый двигатель,. Я имел ввиду как модифицировать ваш скетч, чтобы можно было обороты регулировать переменным резистором.
@@33021976 Аналогично, читаем из АЦП, кидаем в регистр OCR1A.
@@TDMLab OCR1A нужно помещать в loop? OCR1A нужно обявить переменной и ее уже изменять? Я понимаю, что если понимаешь то это элементарно. К сажелению я только начинаю изучать ардуино.
@@33021976 OCR1A название регистра сравнения таймера 1, объявлять не нужно т.к. он уже по умолчанию объявлен в скрытой от нас части кода.
Да можно, в loop
{
OCR1A = analogread(A0);
delay(100);
}
Такой момент, я рассказываю в основном как использовать напрямую регистры МК, это более сложный путь программирования. Если вы только начинаете рекомендую начать например с канала заметки ардуинщика или похожие, там можно научится базе.
На счет кода в векторе прерывания скажу. Понятно, что видео уже 2 года назад вышло и может быть неактуально. Вы задаете значения выводов сразу для всего порта! То есть по сути, мы занимаем весь порт D ради одного пина! Гораздо лучше использовать такой код:
if ( PIND&(1
Да, совершенно верный код. Конечно весь порт дергать это глупость)
Если говорить о том какой код лучше ,то условие вообще использовать не нужно. Просто пишем PORTD ^= 0b00001000; и получаем каждый заход в прерывание инверсию одного бита не трогая ни чего другого А вообще я бы не заходил в прерывание вовсе , просто установить COM в режим 01 и на выходе сразу будет сигнал TOGGLE что значит изменение уровня на противоположный при совпадении.
@@ciklomat ваш код тоже трогает ВЕСЬ порт. Я свой код предложил не для ускорения, а для экономии пинов мк для других задач) А вообще, если бы сработала такая конструкция PORTD ^= (1
@@dmitriibannikovasx Похоже что ты далек от программирования, к твоему сожалению после компиляции эти два варианта на ассемблере будут одинаковы.
@@ciklomat ну уж простите, я просто любитель, а не проф разработчик)
Доброго времени суток
Хотелось уточнить по поводу проекта на А4899 -2шт, vid2905 -щт
с управлением по steep
Может доводилось сталкиваться с проектом в качестве спидометр (одометр) и тахометр для автопанели. Сложность в написании скейча для ардуино mega 2560 pro ch340g , . В интернете находил проекты но они не полностью соответствовать моему замыслу,.
Плиз в помощи если
Здравствуйте, нет спидометров не делал. По ардуино спрашивайте, может что подскажу.
помогите заставить вращаться шаговый двигатель на определенный угол в ту или иную сторону в зависимости от температуры. я хочу взять самый дешевый чтобы управлять вращением крана подачи воды.
Определенный угол это определенное количество шагов ШД. Нужно давать сигнал step нужное количество раз.
@@TDMLab все верно, а как сделать зависимость от термометра, поможете с программой? :)
Написать регулятор типа ПИ (пропорционально-интегральный) вход температура выход управляющее воздействие, далее конвертировать его в положение ШД.
На заказ не пишу, есть форумы.
А на счет не той микросхемы - я бы вообще не удивился, если бы они в этот корпус воткнули модуль для 3д принтеров типа a4988 )
Запросто)))
@@TDMLab А ещё скажите пожалуйста, какая минимальная длительность высокого уровня сигнала должна быть, чтобы драйвер успел его воспринять? Достаточно ли просто поднять пин и сразу же его опустить в коде?
@@dmitriibannikovasx Судя по спецификации на микросхему The CLK(H) minimum pulse
width - 300nS, один такт на 16МГц это 62,5 nS, вроде быстрее чем за 4 такта не получиться поднять опустить, и еще можно пустую команду nop добавить и все ок, но это в теории:)
@@TDMLab Ого) Спасибо большое)
Но а со скоростью решили ? Драйвер 200 герц , ардунино только через прерывание, и не берите эти драйвера, они г , аналоговые , берите dm 542/556, двигатели будут плавнее и тише работать
установка битов порта D, это пины м.к? если так заполнять , то 7 пинов выкидываются для других задачь? а все увидел в коментах😅
Да. Есть строгое соответствие между пинами и портами images.prismic.io/circuito/e57c56f68189f03145726786306d6a8ca7168571_arduino-uno-pinout-digital-pins-pwm-1.png?auto=compress,format
Нет, не выкидываются, написанные команды не изменяют состояние остальных выводов кроме одного, хотя более универсально будет
PORTD |= (1
@@TDMLab да, работает, попробовал рулить светодиодом на 13 пине😁, только на меге2560 немного больше регистров для настройки таймера,
не понятно только, почему в сетапе нужно объявлять пин выходной, если состояние меняется непосредственно установкой бита🤔
@@АндрейЛенин-п2у если пин установлен на вход, а мы пишем в порт то будет меняться установка внутреннего подтягивающего резистора. То есть функция регистра portx меняется от конфигурации в сетапе вход/выход.
@@TDMLab значит не важно что мы делаем установкой бита в isr, пытаемся включить выключить, если порт не объявлен, то и работать не будет
где брать библиотеки
#include
#include
Нигде, они уже встроены в arduino ide
@@TDMLab а если использовать ардуино DUE? У меня именно DUE.
@@сергейсел-ц5у due это тип платы, ide это среда разработки, мы говорим о разном.
@@TDMLab при загрузке скетча программа не может найти первую библиотеку. Посоветуйте выход из положения.
@@TDMLab может я что-то не правильно делаю или не делаю того что необходимо?
почему управление за минусовал а не по плюсу пустил ?
"Заминусовал управление" это катоды опторазвязки управления с общим проводом соединил?
@@TDMLab все плюсовые опторазвязки на прямую подал на 5 в а минуса на управление я так понял
@@каналзакрыт-е2ф нет. Все минусовые опторазвязки (катоды) на общий а все плюсовые к ногам контроллера
@@TDMLab а я думаю чего не работает
@@TDMLab думаю не спалил хотя если светодиод не правильно подключить то он просто не будет гореть правильно это ж опто развязка
57х78
идея хорошая, конечно надо напрягать мозги. У меня проблема с английским, а так докопаться можно.
ааа мои уши ( канал интересный подписка ) лучше бы собрал микрофон себе )