По просьбам читателей
Из истории. Валялись они у меня в столе с пол года, как-то было скучно, взял 2 провода от блока питания и попробовал потыкать ими в клемы мотора, внимательно наблюдая за его поведеннием. Так, что не читая книжек и не пользуясь плодами прогресса типа гугл выяснил как там что устроено. Советую повторить эксперимент для закрепления знаний.
Далее, уже с подачи прочитанного здесь и на подобных ресурсах обзавелся мелкосхемой L293B. Распаял на монтажке и подключил к LPT-порту. Набросал прогу на LV7 и начал экспериментировать с тем как и что надо переключать.
В итоге получилось, что для того что бы мотор крутился в нужную сторону необходимо последовательно выводить на 4 линии управления ключами следущую последовательность:
порядок соответствует 4 выводам на клемнике моторчика
Катушка А -> биты 7, 6
Катушка В -> биты 5, 4 порта D (в моём случае)
7 - 1-0-0-0
6 - 0-0-1-0
5 - 0-1-0-0
4 - 0-0-0-1
или если изменить способ что бы катушки подкулючались по 2 (то есть промежуточные шаги)
7 - 1-1-0-0-0-0-0-1
6 - 0-0-0-1-1-1-0-0
5 - 0-1-1-1-0-0-0-0
4 - 0-0-0-0-0-1-1-1
Итак, к сути, как это сделано програмно:
Глобальный массив и указатель (что бы постоянно помнил текущее состояние)
Код:
char mstp[8] = {0x80,0xA0,0x20,0x60,0x40,0x50,0x10,0x90};
char m1; //
и функция, которая собственно и управляется с этим
Код:
void M_Naklon(char dir)
{
switch(dir)
{
case 1: // left
{
if(++m1 > 17)
m1=10;
PORTD = (PORTD & 0x0F) | (mstp[m1-10]);
break;
}
case 2: // right
{
if(--m1 < 10)
m1=17;
PORTD = (PORTD & 0x0F) | (mstp[m1-10]);
break;
}
case 0:
{
PORTD = (PORTD & 0x0F) | 0x0;
break;
}
}
};
Входной параметр - направление, если влево (например) то надо выводить следующий элемент массива, если наоборот, то предыдущий. Если "0" значит везде вывести ноль. Это что бы отключить обмотки от батарейки. (сначала забыл об этом и моторчики просто кипели)
Такой огород с выводом в порт - ничего умнее не придумал. Но работает. В маске еденичками отмечено то, что изменять не надо.
Из порта D для управления пользуем старшие 4 бита
Цифры 17 и 10 вместо 7 и 0 в кольце потому что это первое что пришло в голову, когда понял что надо было использовать беззнаковую переменную для указателя
И самое последнее
В ходе программы вызывать эту функцию с определённым интервалом и нужным направлением шага. В моём случае интервал 2 милисекунды.
Медленне не интересно, хотя чуть увеличивается момент (субъективно, характеристик мотора не знаю), быстрее - у меня не работало, наверное слишком большая нагрузка, в холостую крутится нормально и смешно гудит
Всем творческих успехов
Добавлено спустя 59 минут 45 секунд:А , и вот ещё. плиз как разберётесь со своими непонятками отпишите что и как было не так