Agkz.ru - игровой новостной портал
Миниатюрная помпа из мотора от 2.5` HDD

Миниатюрная помпа из мотора от 2.5` HDD


Миниатюрная помпа из мотора от 2.5` HDD

Добрый день, уважаемые читатели!

Сейчас я расскажу о своих мучениях изысканиях и что на текущий момент получилось.

Итак, понадобилась мне как то тонкая помпа для своих будущих задумок. Как основное требование — толщина не более 25мм. Поток ~100лч и напор ~2м водяного столба. Ни на тот момент, ни на текущий я так и не встретил подходящего кандидата, выпускаемого серийно и имеющего хотя бы номинальную доступность. (тут можете меня поправить если таковой вариант Вам известен)

Такое положение дел неминуемо привело к самому главному в жизни самодельщиков вопросу «а что если…» и тут понеслась!

Изначально было необходимо определится с сердцем затеи — мотором. Он должен быть весьма компактным и широко доступным — ведь в случае поломки потребуется оперативная замена! И тут на меня нагуглилось озарение в виде обширной темы одного из довольно известных форумов под стать моим запросам:

https://forums.overclockers.ru/viewtopic.php?f=47&t=331512

Ведь действительно, почти в любой мастерской по ремонту ПК и ноутбуков найдутся мертвые HDD и отдадут их либо за так, либо по весу. Сами моторы обладают высоким ресурсом и надежностью, отлично отбалансированы. А требования к компактности свели мой выбор к моторам из 2.5 дюймовых дисков:

Миниатюрная помпа из мотора от 2.5` HDD

Конечно, я не смог себе отказать в удовольствии поиграться и поковыряться в этих бесколлекторных моторах и произвести некоторые извращения, наподобие такого:

Но итогом всех этих действий стал весьма досадный факт — более крупные моторы от 3.5 дисков прекрасно работали под управление широко доступных и популярных драйверов, как например MTD6501C или TDA5140А даже после моих вмешательств, а вот так полюбившиеся мне от 2.5 дисков упорно отказывались стабильно работать в любом виде.

Однако, спустя некоторое время на глаза попался мне программируемый драйвер бесколлекторных моторов DRV10987. Так как решение интегрированное, то обвязка минимальна, зато имеет широкие возможности по заданию параметров как самого мотора, так и его управления.

Недолго думая, были заказаны сами контроллеры, разведены и заказаны платки под него:

Заказатьскачать.

Вот что получилось в итоге:

Миниатюрная помпа из мотора от 2.5` HDD

Доставать из монолитных корпусов моторчики в целости и сохранности я наловчился при помощи коронки по металлу и направляющих для неё из фанеры:

Миниатюрная помпа из мотора от 2.5` HDD

Кстати пару слов об основных параметрах, поигравшись с которыми я добился стабильной работы моторов:

— Kt константа (соотношение оборотов без нагрузки в сек. к напряжению) mV/Hz

— TCtrlAdv задержка (опережение?) коммутации обмоток

— RMS сопротивление обмоток

— FGCycle число магнитов

— StAccel1 и StAccel2 — ускорение мотора в начале (попытка раскрутить мотор вслепую до попытки детектировать ЭДС свободной фазы для управления)

— SWiLimitThr — ограничение по току

— HWiLimitThr — величина тока для определения заклинивания мотора

Заливал конфигурацию с помощью ардуино и простенького скетча (стоит иметь ввиду, шина I2C драйвера имеет уровень 3.3V):

Код
#include <Arduino.h>

#include <Wire.h>
#define I2C_DRV10983_Q1_ADR 0x52
#define Fault_Reg 0x00
#define MotorSpeed_Reg 0x01
#define DeviceIDRevisionID_Reg 0x08
#define SpeedCtrl_Reg 0x30
#define EEPROM_Access_Code_Reg 0x31
#define EEPROM_EeReady_Reg 0x32
#define EEPROM_Iindividual_Access_Adr_Reg 0x33
#define EEPROM_Individual_Access_Data_Reg 0x34
#define EEPROM_Access_Reg 0x35
#define EECTRL_Reg 0x60
void setup() {
Serial.begin(9600);
Wire.begin();
pinMode(5, OUTPUT);
analogWrite(5, 0);
delay(4000);
}
byte readByAdress(byte reg_adr, unsigned int &result) { //I2C write 2-byte register
byte i = 0, err = 0;
byte bytes[2] = {0, 0};
Wire.beginTransmission(I2C_DRV10983_Q1_ADR);
Wire.write(reg_adr);
err = Wire.endTransmission();
if(err!=0)
return err;
Wire.requestFrom(I2C_DRV10983_Q1_ADR, 2);
while(Wire.available())
{
bytes[i] = Wire.read();
i++;
}
result = ((bytes[0] << 8) | bytes[1]);
return 0;
}
byte writeByAdress(byte reg_adr, unsigned int value) { //I2C read 2-byte register
byte bytes[2];
bytes[1] = value & 0xFF;
bytes[0] = (value >> 8) & 0xFF;
Wire.beginTransmission(I2C_DRV10983_Q1_ADR);
Wire.write(reg_adr);
Wire.write(bytes,2);
return Wire.endTransmission();
}
boolean flag = true;
void loop() {
flag = false;
if(flag){
unsigned int onReady = 0;
delay(7000);
writeByAdress(EECTRL_Reg, 0xFFFF);

writeByAdress(EEPROM_Access_Code_Reg, 0x0000); //Reset EEPROM_Access_Code_Reg
writeByAdress(EEPROM_Access_Code_Reg, 0xC0DE); //Set EEPROM_Access_Code_Reg
while(onReady == 0){ // Wait EEPROM ready
readByAdress(EEPROM_EeReady_Reg, onReady);
}
Serial.println("EEPROM_Access.");
onReady = 0;
//Write values on shadow registers
//writeByAdress(EEPROM_Access_Reg, 0x1000); //Not use EEPROM storage. Store values in shadow registers
writeByAdress(0x90, 0x154F);
writeByAdress(0x91, 0x042C);
writeByAdress(0x92, 0x0090);
writeByAdress(0x93, 0x09EA);
writeByAdress(0x94, 0x3FAF);
writeByAdress(0x95, 0xFC33);
writeByAdress(0x96, 0x016A);
writeByAdress(EEPROM_Access_Reg,0x0006); //EEPROM mass access enabled && update
while(onReady == 0 ){ // Wait EEPROM ready
readByAdress(EEPROM_EeReady_Reg, onReady);
}
Serial.println("EEPROM_Update.");
writeByAdress(EECTRL_Reg, 0x0000); //Run motor
flag = false;
}
}

Вот с этой конфигурацией моторчики стабильно работали и даже под нагрузкой! А благодаря автозапуску не приходилось беспокоиться о вероятных остановках.

Так как самый важный вопрос был решён, на скору руку был набросан, вырезан и склеен корпус из листового поликарбоната корпус, на 3d принтере напечатана крыльчатка и из медной трубки изготовлены фитинги:

Миниатюрная помпа из мотора от 2.5` HDD

Как промежуточный итог:

Расход составил примерно 120л/ч.

Напор более 2м (из поднятой вверх на 2м трубки всё ещё бил небольшой фонтанчик)

При перекачке воды потребляет 0.67а (12v питание)

Но впереди ещё много работы, так как это лишь бы прототип на предмет проверки работоспособности идеи. А дальше нужно увеличивать эффективность, снижать уровень шума…

И если данная статья оказалась интересной и возможно полезной читателю, постараюсь поделиться будущими изысканиями!