Управление шаговым двигателем с мк
|
|
stefan | Дата: Четверг, 14.04.2011, 23:22 | Сообщение # 1 |
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
| Привет всем. Подскажите пожайста, как заставить мк ATtiny2313 управлять шаговым движком, вобщем нужно, чтобы движок работал допустим 10 оборотов влево и 10 - вправо и опять 10 влево и так бесконечно. Заранее спасибо.
|
|
|
|
Krish | Дата: Пятница, 15.04.2011, 10:55 | Сообщение # 2 |
Группа: Пользователи
Сообщений: 184
Репутация: 2
Статус: Offline
| Это не трудно, вот посмотри тему, когда то такую штуку собрал, работает: http://www.bezkz.su/publ/12-1-0-172
LacOS
|
|
|
|
stefan | Дата: Суббота, 16.04.2011, 01:38 | Сообщение # 3 |
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
| да. Ну там управление с компа, а мне нужно чтобы именно мк управлял, пытался найти в инете, именно такого не нашол, везде упрвление или с компа или с мк но нужно нажимать кнопки. я хочу чтобы шаговый движок работал на автомате.
|
|
|
|
MysterySt | Дата: Суббота, 16.04.2011, 14:10 | Сообщение # 4 |
Язык программированя: Verilog, C/C++
Группа: Проверенные
Сообщений: 8
Репутация: 0
Статус: Offline
| напрямую с мк управлять не получится, т.к. обмотки движка будут потреблять высокие токи (по сравнению с допустимыми токами линий порта). Потребуется драйвер. Это может быть несколько транзисторных ключей, существуют специальные микросхемы, которые содержат в себе такие ключи. Пример микросхем: L293 - на токи до 1А, L298 - на токи до 2А. Применяя ключи на транзисторах (чаще полевых), можно построть драйвер, рассчитанный на большие токи. Смотрите готовую схему (их много) и выбираете под свой двигатель. Обмотки двигателя подключаются к выводам мк через эти ключи. Для обеспечения вращения двигателя необходимо подавать лог. единицы (или нули, там по схеме как) на эти выводы в определенной последовательности. Например, если у двигателя 2 обмотки (А и B), обзовем выводы как А, А', B, B'. Если подавать единички в такой последовательности: A, B, A', B', вал двигателя будет поворачиваться. Если подавать в обратной последовательности, вращение будет происходить в другую сторону. Для того, чтобы вращение было более или менее постоянным, можно использовать цикл. А для того, чтоб направление сменялось тоже цикл можно сделать. примерно алгоритм while(1) { for (int i=0; i<1000; i++) // задали в не совсем явном виде кол-во оборотов { A, B, A', B' } for (int i=0; i<1000; i++) { B', A', B, A } }
Работаем быстро, качественно, недорого. Выбирайте любые 2.
Сообщение отредактировал MysterySt - Суббота, 16.04.2011, 15:35 |
|
|
|
Space | Дата: Суббота, 16.04.2011, 17:09 | Сообщение # 5 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Поищи на робозон. Там было несколько плат для управления шаговым. Ток мк там PIC.
|
|
|
|
stefan | Дата: Суббота, 16.04.2011, 17:11 | Сообщение # 6 |
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
| ясно. но это код походу на ассемблере, Quote (MysterySt) while(1) { for (int i=0; i<1000; i++) // задали в не совсем явном виде кол-во оборотов { A, B, A', B' } for (int i=0; i<1000; i++) { B', A', B, A } } а можно на бейсике для Bascom-AVR, там я хоть немного соображаю
|
|
|
|
Space | Дата: Суббота, 16.04.2011, 17:12 | Сообщение # 7 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| вообще это на си. На баскоме к сожалению не встречал кодов.
|
|
|
|
MysterySt | Дата: Суббота, 16.04.2011, 21:20 | Сообщение # 8 |
Язык программированя: Verilog, C/C++
Группа: Проверенные
Сообщений: 8
Репутация: 0
Статус: Offline
| Ну,{ A, B, A', B' } это просто последовательность управляющих сигналов так нарисовал. Так вот, если конкретезировать, то. Пусть на PORTC.1 подключен вывод A, на PORTC.2 A', PORTC.3 B, PORTC.4 B' Тогда реальный код выглядит так (на сишнике) Code while (1) // раскрываю запись {A, B, A', B' }. {PORTC.1 =1 ; // если так оставить, будет только в одну сторону крутиться delay_ms(10); PORTC.1 =0 ; PORTC.3 =1 ; delay_ms(10); PORTC.3 =0 ; PORTC.2 =1 ; delay_ms(10); PORTC.2 =0 ; PORTC.4 =1 ; delay_ms(10); PORTC.4 =0 ; } Это самое простое, что можно придумать. Я думаю, идея дожна быть понятна. А как ее реализовать на другом языке программирования, это уж сами думайте.Добавлено (16.04.2011, 21:20) --------------------------------------------- Тут, кстати, от синтаксиса С только цикл while и операция присваивания. че такое delay_ms(10), должно быть интуитивно понятно. Разбирайтесь)
Работаем быстро, качественно, недорого. Выбирайте любые 2.
Сообщение отредактировал MysterySt - Суббота, 16.04.2011, 21:13 |
|
|
|
stefan | Дата: Понедельник, 18.04.2011, 02:08 | Сообщение # 9 |
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
| идею понял, буду пробывать. Всем огромное спасибо.
|
|
|
|
Space | Дата: Среда, 20.04.2011, 11:13 | Сообщение # 10 |
Администратор
Язык программированя: BascomAVR
Группа: Администраторы
Сообщений: 327
Репутация: 8
Статус: Offline
| Stefan, вот держи, наткнулся случайно. Там как раз управление шаговым без пк. Прога в BascomAVR
|
|
|
|
stefan | Дата: Воскресенье, 24.04.2011, 01:22 | Сообщение # 11 |
Группа: Пользователи
Сообщений: 8
Репутация: 0
Статус: Offline
| Space спасибо. Это впринципе что надо.
|
|
|
|