Шаговый двигатель X27 для приборной панели и драйвер AX1201728




Здравствуйте.

Маленькая заметка, которая может быть, кому-то поможет.


Однажды мне потребовалось восстановить приборную панель от старенького автомобиля, но оказалась, что нужно переделывать всё что связано со стрелками. Поискав в сети информацию, выяснилось, что в современной автомобильной промышленности, для вращения стрелками, используются различные шаговые двигатели и драйвер AX1201728 (часто встречается).

приборка от Hummer


Белые моторчики и драйвер между ними, справа.





На Aliexpress были найдены похожие моторы и драйвер…


Находится по фразам «X27 168» и «AX1201728».

спойлер
Для удобства прототипирования, можно приобрести вот такую платку…



Находится по фразе «SSOP28 SOP28 TSSOP28 на DIP 28».


Разобравшись во всём этом хозяйстве, решил что мой опыт может пригодится кому-нибудь ещё.


Моторчик не сильно мощный, но для вращения стрелками хватает с лихвой. Подключается так же как популярные шаговые двигатели типа «Nema», по четырём проводам. Работает от 5В, потребление ничтожное — десятки миллиампер. У моторчика есть особенность — сделан ограничитель, не позволяющий оси поворачиваться больше чем на 315 градусов. При желании можно разобрать моторчик и откусить этот ограничитель (располагается на шестерёнке с осью). Вот тут человек разбирает моторчик. И вот документ, который удалось найти.


Драйвер прикольный, подключается предельно просто и может управлять четырьмя моторчиками, независимо. Дробление шага настроить нельзя, но оно тут и не нужно, драйвер сделан так, что на один градус поворота моторчика приходится 12 шагов. Благодаря этому получается очень плавное вращение.

Распиновка…



VDD — 5В. (два контакта)

VSS — земля.

CW/CCW — выбор направления вращения. Подаём «минус» — крутится в одну сторону, подаём «плюс» — крутится в обратную сторону. То есть этот пин, то же самое, что у других драйверов называется DIR (Direction).

Буквы в конце (здесь и у других обозначений) соответствует одному из четырёх подключаемых моторчиков — мотор А, мотор В, мотор С, мотор D.

f(scx) — пин для подачи импульсов шагов. То же самое, что у других драйверов называется STEP.

OUT (1,2,3,4) — подключаются к соответствующим контактам мотора…


Вид со стороны контактов.


Документации на этот драйвер я не нашёл, но есть парочка похожих микросхем — Switec X12.017 Quad Driver и VID66-06 Quad Driver.


Работает всё просто. Перед стартом делаем «ресет» драйверу (см. код ниже), выбираем направление вращения, и подаём импульсы шагов. Подаём высокий уровень (импульс) — ждём 500мкс, подаём низкий уровень — ждём 2мкс. Если уменьшить время после высокого уровня, то будет вращаться быстрее, но могут быть пропуски шагов (не уверен, надо тестить). Если время увеличить, то будет вращаться медленнее. Так же можно увеличить время после низкого уровня — будет вращаться медленнее. Указанные выше интервалы времени вполне подходят для работы спидометра/тахометра.

Чтобы сделать полный оборот мотора (315 градусов), надо подать 3780 импульсов (315 * 12).



Подключение к ардуино


Используем мотор А.


Названия см. в коде. Питание можно взять прямо с ардуино.



Код для ардуино


Программка простенькая — крутится туда-сюда.



#define STEP_A   8          // пин  f(scx)
#define DIR_A    9          // пин  CW/CCW
#define RESET    10         // пин  RESET

#define ROTATE   (315 * 12) // полный оборот (315 градусов, 12 шагов на градус)

int steps = 0;
bool dir = true;

void setup() 
{
  pinMode(DIR_A, OUTPUT);
  pinMode(STEP_A, OUTPUT);
  pinMode(RESET, OUTPUT);

  /////// инициализация драйвера ///////
  digitalWrite(RESET, LOW);  // прижимаем ресет к земле
  digitalWrite(STEP_A, LOW); // пин импульсов прижимаем к земле
  digitalWrite(DIR_A, HIGH); // выбираем направление
  delay(1);                  // ждём 1 мс
  digitalWrite(RESET, HIGH); // отпускаем ресет
}

void loop() 
{
  digitalWrite(STEP_A, HIGH);
  delayMicroseconds(500);    // ждём 500 мкс
  
  digitalWrite(STEP_A, LOW);
  delayMicroseconds(2);      // ждём 2 мкс
  
  steps++;
  
  if(steps > ROTATE) // если полный оборот, тогда меняем направление
  {
    steps = 0;
    dir = !dir;
    digitalWrite(DIR_A, dir ? LOW : HIGH);
  }
}

Если ROTATE сделать так — (140 * 12), тогда соответственно будет поворачиваться на 140 градусов.



Для stm32


Расписывать подробности не имеет смысла, по ардуиновскому коду понятно что у чему, поэтому просто оставлю ссылку на гитхаб с проектом для BluePill. Всё что нужно находится в файле main.c.




Это всё, всем спасибо


Телеграм-чат istarik

Телеграм-чат STM32


  • 0
  • 4495
Поддержать автора


Telegram-чат istarik

Задать вопрос по статье
Telegram-канал istarik

Известит Вас о новых публикациях






Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.