Поделки из нерабочих HDD — мини-помпа

97ojuga_jqyheaiultzk5b3fpla.jpeg

Понадобилась мне как-то для будущих самоделок водяная помпа. Да не простая — с ограничениями по габаритам — толщина до 25 мм, ширина до 50 мм (длина — уже можно варьировать). Из желаемых характеристик — напор 1 м и расход 100л/ч. Не найдя в продажах желаемого (в основном — по габаритам), по своей упоротойупорной натуре приступил к реализации своего решения данного вопроса!

Внимание — много фото!

«Мозги» и немного предыстории:


Строго говоря, идея использовать для помп моторчики HDD не нова. C 2009 года ведётся целая ветка на одном известном форуме. Так что изначально был нацелен на изготовление помпы из «ноутбучного» жёсткого диска и поиска подходящего драйвера c интегрированными силовыми ключами и бессенсорным управлением.

Но «из коробки» перенять опыт мне не удалось. Череда тестов с разными драйверами (MTD6501C, DRV11873 и ряда прочих китайских поделок) давали неутешительный итог: более крупные моторы от 3.5 дисков работают идеально. А вот с мелкими моторами в лучшем случае удается запустить единицы, и те работают крайне нестабильно. С таким неутешительным результатом давняя идея была заброшена и находилась на грани забвения.

Но относительно недавно наткнулся на довольно любопытный драйвер от TI — DRV10987. При своих скромных габаритах обладает довольно внушительным потенциалом:

  • Рабочее напряжение от 6v до 28v
  • Интегрированный понижающий преобразователь на 5v (можно запитать МК для управления)
  • Постоянный рабочий ток до 2А (пиковый — 3А)
  • Огромное число программно определяемых параметров (задание значений конфигурационных регистров по шине I2C) для управления работой мотора


Вооружившись ардуинкой (да простят меня за это ругательное слово местные электронщики) для задания параметров, изготовленной ЛУТом платой под данный драйвер, углубился в опыты по запуску моторчиков. Что же, данный контроллер меня не разочаровал! Несмотря на примененный метод «научного тыка» при подборе параметров, удалось найти подход к любому мотору от HDD!

Помог мне в этом самописный онлайн-конфигуратор настроек. Пользуйтесь на здоровье!)

Вот скетч по заливке параметров через ардуино:
#include 
#include 

#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(); 
}

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() {
    if(flag){
        unsigned int onReady = 0;
        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;
    }    
}


Затем уже были заказаны в поднебесной более презентабельные платки:

nhot6gddzj8nb1h5ha0mvpvwc4o.jpeg

После регистрации (ну вот так требуют) можете бесплатно скачать файлы проекта. Или сразу же заказать палаты здесь.

О «пересадке сердца»


Осталось дело за малым — достать из корпуса HDD мотор, который кстати говоря, в 2.5 дисках (и в большинстве 3.5) является его неотъемлемой частью. Вкратце можно процесс описать известной фразой »Пилите, Шура, пилите! »:

jo5uukkufahdroybnebr5yjgbs8.jpeg
Из фанеры изготавливается внешняя направляющая под коронку по металлу с креплением к корпусу диска. Для сохранности шлейф мотора приклеивается к его основанию, чтобы не был срезан коронкой

97ojuga_jqyheaiultzk5b3fpla.jpeg
После высверливания получаем кругляшки с моторчиком. После обработки напильником получаем диаметр основания около 25 мм.

Подготовка реципиента к трансплантации:


Мозги и сердце будущей помпы отлично ладят друг с другом и готовы обрести новое место обитания. Так что самое время подумать о корпусе и крыльчатке.

Так как нужно получить при малом рабочем объеме высокое давление, крыльчатку спроектировал с 7 лучами:

d5qtowle2rmjlwupcxrs6uvkeok.jpeg
Печать на 3D принтере поликарбонатом
3D модель

Поликарбонат — вещь для корпуса отличная. Но печатать целый корпус им дорого. Куски толстых листов очень трудно найти да и фрезеровка не бесплатна (для меня). Зато у рекламщиков за спасибо можно выпросить обрезки от листов толщиной 4 мм и 2 мм. Так что корпус проектировался для последующего нарезания лазером деталей и их склейкой в единое целое без необходимости фрезеровки. Потребуется разве что высверливание отверстий под фитинги и гайки.

murxu0_euh0xdhgrwy0oden45rm.png
Вид 3D модели
3D модель

9yij7n0qgvuuq_be0kwo2mf0de4.jpeg
Набор деталей для склейки «топа» помпы. В местах сопряжения каналов притока и оттока срезаны грани

Ход операции:


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

uhat2t0bw0yz9gqqw3yqlfiggja.jpeg
Стек деталей «топа» на сушке после склейки — верх-приток-сепаратор-крыльчатка-ротор. Аналогично склеивается основание для мотора (или изготовить из 6 мм куска поликарбоната целиком)

krdpicydaqvtafojqwyskmros1o.png
После склейки высверливаются отверстия для фитинга — 8 мм латунной трубки по насечкам на детали «сепаратор»

qxhizalki9yeppwa1ug0dmyqmzm.jpeg
Старый добрый состав БФ-4 как по мне дает надежную склейку латуни и поликарбоната

hlhvt4b78jlgrxybtnjthv0oysw.jpeg
Тем же клеем приклеивается основание мотора в нижней части помпы. В верхней части рассверливаются (не насквозь!) отверстия под вклейку гаек-заклепок М3. И на фото видна прокладка из тонкого силикона

Тестирование:


Вот и пришла пора проверить в работе самоделку. Для этого был наскоро собран тестовый стенд. Так как Хабр читают дети серьезные разработчики, у которых внешний вид и состав стенда может вызвать приступы паники, ужаса и дезориентации, хотел его спрятать под спойлер…, но надеюсь всё обойдётся и потом не говорите, что я Вас, уважаемые читатели, не предупреждал!

r2xwfokhm72vrvqev85bntydnr8.jpeg
Ардуинка подаёт управляющий сигнал PWM, скважность которого задается вручную переменным резистором, считывает значение конфигурационных регистров, а так же определяет скорость вращения как через внутренние регистры драйвера (RPMrg), так и по сигналу FG (RPMfg). Питание мотора — 12v


Запуск мотора без нагрузки. Регулировка оборотов и замер энергопотребления

Мотор успешно стартует от 6% управляющего PWM сигнала. А в конце видео видно, как на высоких оборотах значения скорости во внутреннем регистре «подвисают» на интервале от 10к до 13к оборотов, хотя через выход FG частота фиксируется без изменений.

С холостым ходом всё понятно — получили 13к оборотов при напряжении 12v и потреблении 0.16A. Но собиралась водяная помпа, а я тут воздух гоняю. Так что следующий этап — сопровождение домочадцев на улицу, дабы не мешались, и оккупация ванной комнаты!

bb9ofxhylu__vmtln1pbj3sqtqu.jpeg
Делать замеры и снимать видео у меня, увы, не получилось. Так что обойдемся фото общего плана. К измерительному оборудованию добавились секундомер и банка на 3л

oq1ldsu_mnitngnwdyt0-quplo4.jpeg
По итогам замеров получилась вот такая таблица

5h9agafcrkufho0pp6ccxioipv8.png
График расхода

Как итог — данная поделка целиком удовлетворяет моим требованиям. А в случае поломки, благодаря разборной конструкции и наличию в любых ремонтных мастерских / сервисных центрах ящиков с дохлыми 2.5HDD — починить не составит труда. И путь к дальнейшему построению СВО открыт! Так что, продолжение следует!

© Habrahabr.ru