Я имел в виду, что при дроблении шага можно повысить плавность хода. Может быть можно добавить ШИМ для плавности хода? В википедии сказано: "Режим дробления шага (микрошаг) реализуется при независимом управлении током обмоток шагового электродвигателя. Управляя соотношением токов в обмотках можно зафиксировать ротор в промежуточном положении между шагами. Таким образом можно повысить плавность вращения ротора и добиться высокой точности позиционирования."
И второй вопрос: можно ли уменьшить количество полушагов до изменения направления вращения до 1 полушага?
У меня нет желания и времени изучать википедию, как и устройство шагового двигателя. Вы мне даете диаграмму работы, а я смотрю можно ли это реализовать в данном проекте.
ШИМ плавности хода не добавит. Двигатель шаговый, то есть изменение положения производится дискретно. Уменьшение питающего напряжения приведет к снижению его мощности, но не к изменению скорости его вращения. Конечно в определенный момент, когда он уже не сможет нормально провернуть ротор, скорость неконтролируемо упадет. Это приведет к потере позиционирования и возможно полной остановке...
stasser68 писал(а):можно ли уменьшить количество полушагов до изменения направления вращения до 1 полушага?
Можно, но Вы просили:
stasser68 писал(а):Регулировку можно сделать с дискретностью 10 шагов.
Указывайте новый диапазон и способ отображения (если шагов будет более 99), я сделаю.
Я не хотел Вас обидеть, но шаговые двигатели не очень хорошо знаю.
Диапазон шагов (полушагов) от 1 до 99.
И ещё, можно ли добавить регулируемую паузу в крайних точках: влево-пауза-реверс-вправо-пауза-реверс. Диапазон паузы от 0 до 2 секунд
stasser68 писал(а):Я не хотел Вас обидеть, но шаговые двигатели не очень хорошо знаю.
За что тут обижаться? Я их тоже не знаю и готов только реализовать программно нужный алгоритм. Если приведете устраивающий Вас алгоритм работы, я посмотрю можно ли его в рамках этого проекта реализовать.
stasser68 писал(а):Диапазон шагов (полушагов) от 1 до 99.
И ещё, можно ли добавить регулируемую паузу в крайних точках: влево-пауза-реверс-вправо-пауза-реверс. Диапазон паузы от 0 до 2 секунд
stasser68 писал(а):Диапазон шагов (полушагов) от 1 до 99.
И ещё, можно ли добавить регулируемую паузу в крайних точках: влево-пауза-реверс-вправо-пауза-реверс. Диапазон паузы от 0 до 2 секунд
Сделал. Все во вложении. Проверяйте.
Поскольку дискретность установки паузы не была указана, на свой выбор сделал 0,1 сек. В связи с этим в схеме небольшое изменение для индикации разделительной точки.
При отключении питания сохраняются только те настойки, которые были занесены в энергонезависимую память. Т. е. если после нажатия кнопки старт мы изменили скорость, то после повторного включения питания будет скорость, которая была занесена в память. И крайние позиции тоже не запоминаются. Но это только при отключении питания, а при останове кнопкой стоп- все сохраняется.
P.S. В протеусе всё наглядно показано. Всё так и в реальности.
Строительство заняло у меня,поэтому я построил из того,что дом дал. Я протестировал в реальной жизни. Скорость и количество шагов помнит , при потере питания, но не позиции, было бы возможно это исправить?
ссылка на видео http://zalil.ru/34153362
pert
pert писал(а):Скорость и количество шагов помнит , при потере питания, но не позиции, было бы возможно это исправить?
Контроллер должен знать, что питание отключится до того как оно отключится, чтобы успеть записать текущее состояние. Для этого нужно вводить схему контроля питающего напряжения.
Второй вариант, это установка датчиков конечного положения (концевиков), которые будут реверсировать направление вращения.
Какой вариант Вам больше подходит?
Я так понял, что для первого варианта необходим источник бесперебойного питания, который при отключении основного должен питать некоторое время контроллер, чтобы он успел записать данные в энергонезависимую память?
stasser68 писал(а):Я так понял, что для первого варианта необходим источник бесперебойного питания, который при отключении основного должен питать некоторое время контроллер, чтобы он успел записать данные в энергонезависимую память?
В принципе, да. Таким источником может быть просто правильно подобранные конденсаторы в блоке питания и отдельная цепочка - детектор наличия основного питания.
Вопрос только в том, что изначально такой поворот не предполагался (впрочем, как многие другие) и выводы МК использовались не рационально и не оптимально для решения данной задачи. Оставшийся свободный вывод требует большего времени для детектирования отсутствия питания, чем, скажем, RB0 (вывод 6). Если ничего существенно не менять в схеме, то обнаружение отсутствия питания займет до 2 мсек (так в программе, и на незапланированные ранее фишки радикально менять я ее не буду). Сама запись в память займет времени 40-50 мсек (навскидку, надо еще глянуть какие параметры записывать). То есть, между отключением основного питания и отключением питания МК должно быть не менее 50 мсек. Отсюда и выбор схемы...
Пример схемного решения этого вопроса во вложении. Прошивка и описание тоже.
Кнопка POWER нужна только для симуляции отключения питания в Proteus. Кроме того, при симулировании схемы следует учитывать, что в Proteus не предусмотрено иного отключения питания МК, как остановка симуляции.
Так я это пробовал,но это не функциональное, позиция не записалась ни при регулярной остановке или при потере питания.
Иногда сделать при запуске скачок обратным направлением. При остановке в конечном положении и нажатие старт остается светить пауза
pert писал(а):Так я это пробовал,но это не функциональное, позиция не записалась ни при регулярной остановке или при потере питания.
Попробуйте следующее.
1. После отключения питания считать данные из EEPROM программатором. Запись текущих данных производится в ячейки с адресами 0x06 - 0x0A.
2. Если в этих ячейках записаны 0xFF, то сделайте следующее. При работе шагового двигателя замкните на общий провод вывод 4 МК. При этом двигатель должен остановиться, индикатор погаснуть. Выключите полностью питание и снова включите, посмотрите с какой позиции стартует устройство. Снова считайте данные с EEPROM.
3. Если по п.1 запись не произвелась, а по п.2 все отработало согласно описанию, то у Вас неправильно выбраны номиналы деталей детектора питания и/или стабилизатора +5V.
4. Если запись не произошла ни в п.1, ни в п.2, значит я допустил ошибку в программе.
5. Если запись произошла в обоих случаях, но устройство все равно стартует не из запомненной позиции, значит тоже моя недоработка.
pert писал(а):Иногда сделать при запуске скачок обратным направлением.
Возможно это следствие проблемы записи положения. Устройство не знает в каком положении находится ротор двигателя и куда он вращался до отключения питания...
pert писал(а):При остановке в конечном положении и нажатие старт остается светить пауза
Остановили на паузе, потому и светится. При повторном нажатии на START запустится с продолжения выполнения паузы. Или не так? Или надо не так?
Проверил на макете, все записывается и считывается. Шагового двигателя у меня нет, так что полностью проверить не смог. Но текущее состояние запоминает, это точно.
Так что займитесь формирователем и стабилизатором +5V. Можете применить любой другой. Главное, чтобы после падения напряжения на выводе 4 МК питание самого МК сохранялось еще не менее 50 мсек. Лучше по-больше, с запасом... Запитайте двигатель от отдельного выпрямителя. Или, по аналогии с предложенным вариантом, через диод, если трансформатор с одной обмоткой, чтобы предотвратить быструю разрядку конденсаторов стабилизатора +5V.
другие результаты
- Данные записываются в память
- питание двигателя из другого источника
- при регулярной остановке в конечном положении (L или R) - выключение питания- включение питания позиция не записалась
- при регулярной остановке в положении между L или R -выключение питания- включение питания позиция обычно хорошо.
- то же самое при потере питания.
pert