Управление приводом
В том то и дело что не фабричная сборка. Сборка на макетке, и без отладки…
тоже набросал ,для так поигратса ,написано на базе VarSpeedServo эта библиотека должна быть в IDE
Решение очень простое. Нужно взять электронику от мощной рулевой машинки и встроить в редуктор. Если диапазон работы вашего редуктора с резистором обратной связи будет не в “рамках”, то необходимо будет добавить резисторы (методом подбора) с двух сторон вашего встроенного резистора.
Решил кстати узнать, сколько будет стоить разработка данного устройства, создал тему на форуме радиокот
интересно что там написали, иногда страшно что-то спрашивать у этих сумошедших программистов
Мда… Думал микроконтроллеры проще освоить… Скачал Atmel Studio 7.0, смотрел уроки… Но пока только примерно понял как ШИМ генерировать на attiny2313…
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>int main(void)
{
DDRB = 0xff; // все выводы порта B сконфигурировать как выходы
DDRD = 0x00; // все выводы порта D сконфигурировать как входыPORTD = 0xff; // установить “1” на всех выводах порта D,
// включаем подтягивающие резисторы
while (1)
{
if (!(PIND & (1<<PIND1))) // проверить “0” на линии 1 порта D
{
TCCR1A = (1<<COM1B1) | (1<<WGM10);
TCCR1B = (1<<WGM12) | (1<<CS10);
OCR1B = 240;
DDRB |= (1<<PB4);
}
else
{
TCCR1A = (1<<COM1B1) | (1<<WGM10);
TCCR1B = (1<<WGM12) | (1<<CS10);
OCR1B = 10;
DDRB |= (1<<PB4);
}
}
}
Но вот с подключением резистора и написание кода под него вообще не поддается.
Кто готов помочь?
Но вот с подключением резистора и написание кода под него вообще не поддается. Кто готов помочь?
Мда. Так правильней. extremeelectronics.co.in/…/servo-motor-control-by-… Ну там с азов надо начинать, да и у 2313 нету ADC. Можно, но надо заморочиться. Может всё-таки так проще
doc.arduino.ua/ru/prog/AnalogWrite Под ваш привод точно пойдёт. Пару строк дописать 😃
P. S. Из нужного вам вооружения на борту 2313 только компаратор. Может только сравнивать 2 напряжения и говорить выше или ниже. Либо ваяйте каким-нибудь ШИМом на резистор пилу и теми же таймерами мерить время, или транзистор с конденсатором и… тоже.
Любая задача должна начинаться с техзадания. Оно как-бы было озвучено в первом пункте:
Имеется привод (см. вложение), необходима схема управления приводом с трёх кнопок, желательно на avr. Принцип работы следующий…
Там было три кнопки, сейчас в схеме откуда-то появился переменный резистор. Еще в ТЗ не отображено, как должен вести себя мотор-редуктор при не нажатых кнопках - просто обесточиваться или удерживать текущее положение. Если первый вариант, то никакого контроллера там не нужно, можно оттолкнуться от этой схемы: rcopen.com/forum/f68/topic138133/36242 В вашем случае нарисованный на схеме регулятор не нужен, все подключается прямо к источнику питания. Концевики шунтируются управляющими кнопками крест-накрест, третья кнопка для медленного хода должна подключаться параллельно одной их первых двух, но последовательно со своим балластным резистором.
Любая задача должна начинаться с техзадания.
Полностью согласен. Видимо тем и отличаются любители, что любят переобуваться по нескольку раз. 😃
Концевики шунтируются управляющими кнопками крест-накрест, третья кнопка для медленного хода должна подключаться параллельно одной их первых двух, но последовательно со своим балластным резистором.
И никаких процессоров нафинг !
сейчас в схеме откуда-то появился переменный резистор
а как кнопка и резистор вчесте работать должны , я пробовал у них тупо конфликт , я так понял нужно две переменные к кнопке и к переменнику
Щас практически на каждом китайском сервотестере стоит переменник и батарея кнопок. В общем случае там организован цикл с частотой 50 Гц. Первыми опрашиваются кнопки и от них серва либо уходит в заданное крайнее положение, либо начинает елозить из края в край. Опрос канала АЦП на время нажатия кнопки должен блокироваться. Когда кнопки отпущены, доходит очередь до переменника. Для резвого и вменяемого распределения ресурсов такие вещи лучше писать на ассемблере. Для задачи автора темы достаточно чего-то совсем мелкого, типа тини13а.
Управление приводом
Егор вот посмотри здесь ,правда там для сервы ,но может что то интересное для себя найдете там с права оглавление,есть и написанные программы под Пик контролер.
alex-exe.ru/radio/robotics/servo-pic/
Всем спасибо за советы, особенно Вам Дмитрий. Про Ардуино даже и не думал… Попробую на нем сделать.
Согласен, на концевиках проще всего, но моторчик в данном редукторе имеет хорошую инерцию, и после пары применений на схеме с концевиками, я этот редуктор скорей всего выкину.
Резистор вроде в ТЗ присутствовал всегда, см. вложение.
И не надо говорить, что я переобуваюсь… Хотя да, скорей всего я буду переобуваться, т.к. сам до конца не знаю что в итоге хочу получить, и я не только про привод…
Сам руковожу проектным отделом, самого бесят заказчики, которые дают невнятное ТЗ, а потом переобуваются в самый последний момент.
Согласен, на концевиках проще всего, но моторчик в данном редукторе имеет хорошую инерцию, и после пары применений на схеме с концевиками, я этот редуктор скорей всего выкину.
Погуглите фразу “кулачок механизм”.
Все, стоп. Забыли про концевики и кулачковые механизмы… Это не наш метод, и не интересно… Пока электриком работал на них насмотрелся.
Буду делать на Ардуино. Сижу изучаю…
Все, стоп. Забыли про концевики и кулачковые механизмы… Это не наш метод, и не интересно… Пока электриком работал на них насмотрелся.
Буду делать на Ардуино. Сижу изучаю…
Вы только не исчезайте , всётаки будет интересен результат
Буду делать на Ардуино. Сижу изучаю…
Хотите вместе поизвращаемся. 😃 Та китайская мандула с фото всё ещё в работе. И да. Больше чем ардуинку я к ней, видимо, не подключу.
P. S. У меня случай тяжелее. Она вот к чему прикручена. Сразу не бейте. Каждый сходит с ума по-своему. 😃 Там ещё и ROS распределённый а ардуинка нодой. Надо было его на помойку отпереть. Теперь жалко.
Что это? С одной стороны напоминает человеческий скелет… С другой - концептуальную вешалку
И то и другое верно. 😃 И вопрос хороший. Это нечто упрощённо подделывающее человеческую анатомию, из всякого мусора, но с компьютерами в башке и в заднице. Оно пластмассовое и гнётся. Ну бред короче, но забористый оказался. 😃
И снова обращаюсь к Вам за помощью, нужно проверить код… Двигаюсь конечно потихоньку, времени мало свободного, но все же двигаюсь…
Итак, решил начать с малого. Так сказать без всяких кнопок и прочего. Оставляю только мотор и потенциометр (так сказать код открытия):
int motorPin = 10; // мотор подключен к цифровому выводу 10
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int val = 0; // переменная для хранения считанного значения с потенциометраvoid setup() {
pinMode(motorPin, OUTPUT); // переключение вывода в режим “выход”
}
void loop() { // этот цикл выполняется бесконечное количество раз
val = analogRead(analogPin); // записываем в переменную показания с потенциометра
if (val<700) {
analogWrite(motorPin, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val>700&&val<1000) {
analogWrite(motorPin, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val>1000) {
analogWrite(motorPin, 0); // если переменная меньше больше 1000 отрубаем ШИМ
}
}
Я в правильном направлении двигаюсь?
/В правильном.
Только учтите
/
{Analogread() Щупает от 0 до 1023,
А AnalogWrite() может вписать только до 255.}
/Constrain между ними поставьте. doc.arduino.ua/ru/prog/Constrain
И только если это по кругу как пони.
Ну для начала.
что я делаю/
И снова здравствуйте, и снова нужна ваша помощь.
к предыдущему скетчу пытаюсь добавить кнопку:
int motorPin = 10; // мотор подключен к цифровому выводу 10
int analogPin = A0; // потенциометр подключен к аналоговому выходу А0
int buttom1Pin = 22; // кнопка подключен к входу 22
int val = 0; // переменная для хранения считанного значения с потенциометра
int openn = 0; // переменная для хранения считанного значения с потенциометраvoid setup() {
pinMode(motorPin, OUTPUT); // переключение вывода в режим “выход”
}
void loop() { // этот цикл выполняется бесконечное количество раз
val = analogRead(analogPin); // записываем в переменную показания с потенциометра
if (digitalRead(buttom1Pin) == HIGH) {
do {
if (val<500) {
analogWrite(motorPin, 255); // если переменная меньше 700 включаем ШИМ на полную
}
if (val>500&&val<1000) {
analogWrite(motorPin, 150); // если переменная меньше от 700 до 1000 убавляем ШИМ на некоторое значение
}
if (val>1000) {
analogWrite(motorPin, 0); // если переменная меньше больше 1000 отрубаем ШИМ
}
}while (val>1000);
}
}
Но, при симуляции в протеусе происходит следующее:
- начальные параметры, кнопка не нажата, переменник в нуле, мотор не крутится;
- при нажатии кнопки начинает вращатся мотор с максимальной скоростью;
- начинаю “крутить” переменник, скорость мотора изменяется согласно алгоритма скетча;
- при достижении переменника 100%, мотор останавливается.
Вроде все хорошо, но…
Если я правильно понимаю свой скетч, то после всех этих действий, изменении положения резистора и повторного нажатия кнопки цикл (do-while) должен запустится заново, и мотор снова должен вращатся по алгоритму, но этого почему-то не происходит…
В чем проблема?