![](https://habrastorage.org/webt/97/oj/ug/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 <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();
}
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;
}
}
Затем уже были заказаны в поднебесной более презентабельные платки:
![](https://habrastorage.org/webt/nh/ot/6g/nhot6gddzj8nb1h5ha0mvpvwc4o.jpeg)
После регистрации (ну вот так требуют) можете бесплатно скачать файлы проекта. Или сразу же заказать платы здесь.
О «пересадке сердца»
Осталось дело за малым — достать из корпуса HDD мотор, который кстати говоря, в 2.5 дисках (и в большинстве 3.5) является его неотъемлемой частью. Вкратце можно процесс описать известной фразой "Пилите, Шура, пилите!":
![](https://habrastorage.org/webt/jo/5u/uk/jo5uukkufahdroybnebr5yjgbs8.jpeg)
Из фанеры изготавливается внешняя направляющая под коронку по металлу с креплением к корпусу диска. Для сохранности шлейф мотора приклеивается к его основанию, чтобы не был срезан коронкой
![](https://habrastorage.org/webt/97/oj/ug/97ojuga_jqyheaiultzk5b3fpla.jpeg)
После высверливания получаем кругляшки с моторчиком. После обработки напильником получаем диаметр основания около 25мм.
Подготовка реципиента к трансплантации:
Мозги и сердце будущей помпы отлично ладят друг с другом и готовы обрести новое место обитания. Так что самое время подумать о корпусе и крыльчатке.
Так как нужно получить при малом рабочем объеме высокое давление, крыльчатку спроектировал с 7 лучами:
![](https://habrastorage.org/webt/d5/qt/ow/d5qtowle2rmjlwupcxrs6uvkeok.jpeg)
Печать на 3D принтере поликарбонатом
3D модель
Поликарбонат — вещь для корпуса отличная. Но печатать целый корпус им дорого. Куски толстых листов очень трудно найти да и фрезеровка не бесплатна (для меня). Зато у рекламщиков за спасибо можно выпросить обрезки от листов толщиной 4мм и 2мм. Так что корпус проектировался для последующего нарезания лазером деталей и их склейкой в единое целое без необходимости фрезеровки. Потребуется разве что высверливание отверстий под фитинги и гайки.
![](https://habrastorage.org/webt/mu/rx/u0/murxu0_euh0xdhgrwy0oden45rm.png)
Вид 3D модели
3D модель
![](https://habrastorage.org/webt/9y/ij/7n/9yij7n0qgvuuq_be0kwo2mf0de4.jpeg)
Набор деталей для склейки «топа» помпы. В местах сопряжения каналов притока и оттока срезаны грани
Ход операции:
Тут хотелось бы сделать лирическое отступление и напомнить желающим повторить и не только, что дихлорэтан, которым проводилась склейка —
![](https://habrastorage.org/webt/uh/at/2t/uhat2t0bw0yz9gqqw3yqlfiggja.jpeg)
Стек деталей «топа» на сушке после склейки — верх-приток-сепаратор-крыльчатка-ротор. Аналогично склеивается основание для мотора (или изготовить из 6мм куска поликарбоната целиком)
![](https://habrastorage.org/webt/kr/dp/ic/krdpicydaqvtafojqwyskmros1o.png)
После склейки высверливаются отверстия для фитинга — 8мм латунной трубки по насечкам на детали «сепаратор»
![](https://habrastorage.org/webt/qx/hi/za/qxhizalki9yeppwa1ug0dmyqmzm.jpeg)
Старый добрый состав БФ-4 как по мне дает надежную склейку латуни и поликарбоната
![](https://habrastorage.org/webt/hl/hv/t4/hlhvt4b78jlgrxybtnjthv0oysw.jpeg)
Тем же клеем приклеивается основание мотора в нижней части помпы. В верхней части рассверливаются (не насквозь!) отверстия под вклейку гаек-заклепок М3. И на фото видна прокладка из тонкого силикона
Тестирование:
Вот и пришла пора проверить в работе самоделку. Для этого был наскоро собран тестовый стенд. Так как Хабр читают
![](https://habrastorage.org/webt/r2/xw/fo/r2xwfokhm72vrvqev85bntydnr8.jpeg)
Ардуинка подаёт управляющий сигнал PWM, коэффициент заполнения которого задается вручную переменным резистором, считывает значение конфигурационных регистров, а так же определяет скорость вращения как через внутренние регистры драйвера (RPMrg), так и по сигналу FG (RPMfg). Питание мотора — 12v
Запуск мотора без нагрузки. Регулировка оборотов и замер энергопотребления
Мотор успешно стартует от 6% управляющего PWM сигнала. А в конце видео видно, как на высоких оборотах значения скорости во внутреннем регистре «подвисают» на интервале от 10к до 13к оборотов, хотя через выход FG частота фиксируется без изменений.
С холостым ходом всё понятно — получили 13к оборотов при напряжении 12v и потреблении 0.16A. Но собиралась водяная помпа, а я тут воздух гоняю. Так что следующий этап — сопровождение домочадцев на улицу, дабы не мешались, и оккупация ванной комнаты!
![](https://habrastorage.org/webt/bb/9o/fx/bb9ofxhylu__vmtln1pbj3sqtqu.jpeg)
Делать замеры и снимать видео у меня, увы, не получилось. Так что обойдемся фото общего плана. К измерительному оборудованию добавились секундомер и банка на 3л
![](https://habrastorage.org/webt/oq/1l/ds/oq1ldsu_mnitngnwdyt0-quplo4.jpeg)
По итогам замеров получилась вот такая таблица
![](https://habrastorage.org/webt/5h/9a/ga/5h9agafcrkufho0pp6ccxioipv8.png)
График расхода
Как итог — данная поделка целиком удовлетворяет моим требованиям. А в случае поломки, благодаря разборной конструкции и наличию в любых ремонтных мастерских / сервисных центрах ящиков с дохлыми 2.5HDD — починить не составит труда. И путь к дальнейшему построению СВО открыт! Так что продолжение следует!