02.03.2016, 19:04 | #1 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
FDD 5'25 моторколесо
Берем старый 5ти дюймовый дисковод за 2$, а именно mf501c-318mg
разбираем и видим статор с 30-ю полюсами и ротор с 20-ю магнитами. Придумываем и делаем схему управления с ATMega8, чтоб крутилось. SprintLayout - 5.25.zip Из него, у меня, получилось моторколесо. Ток потребления 400 мА, при питании от двух 18650 (7,2В). Тишина и габариты - супер, потребление и тяга под вопросом. Китайский моторчик с редуктором при соизмеримом токе, но от 3 вольт и с редуктором даст больший момент. Однако, мой колесик легко переезжает через провода и ездит по ковру. ATMega 8 всем управляет. PC0, PC1, PC2 - входы датчиков Холла (1116КП4) они по паспорту с триггером, но от 5ти вольт работают как обычные. PB0-PB5 - управление MOSFET катушек статора. Датчики Холла делают моторчик синхронным, с их помощью можно получить шесть положений ротора и соответственно задать 6 состояний (вектров) намагниченности статора. Они соответствуют нечетным строкам в таблице состояния порта PORT.B. Еще шесть векторов, я их называю виртуальными, создаются только двумя полюсами статора. Итого 12 векторов магнитного поля на один электрический оборот и в десять раз больше (120) на один механический оборот, полюсов ведь у нас не три а тридцать. Колесо, на ощупь, почти не дергается. Под нагрузкой, и наверное благодаря подшипникам, с их густой смазкой, от дисковода, тележка едет как сало по сковороде! 8)) Когда раму с колесами рукой по полу катишь, прям удовольствие получаешь! (что они в смазку клали?) Да, еще, на роторы/диски я наклеил полоски резины. На фото они уже есть, поэтому кажется что толщина ободка большая. Диаметр колеса - 92мм. Толщина покрішки 9мм. Общая толщина двигателя - 24мм. После обработки может сократиться до 19 мм. С платы выведены 4 проводочка. Два для питания и два сигнальных. Впринципе этого уже достаточно для управления. Езда вперед или назад, тормоз или качение в зависимости от состояния логических уровней на сигнальных проводах. Но хочется все же большего. Имеем: ATmega328 16МГц в качестве мастера ATmega8 12МГц в качестве слейва подтянутые к +5В линии аппаратного I2C Как от мастера к слейву передать две переменные (bite), скажем DATA1 и DATA2. Поделитесь простейшим кодом плз. Без всяких обработок ошибок и прочего. Только запись. В слейве интересно получить именно готовые переменные DATA1 и DATA2, а не фразу: "...теперь читаешь состояние регистра TWCR и выходишь из прерывания." Я такого сделать не смог 8( Последний раз редактировалось Disha; 06.10.2016 в 15:19. |
06.10.2016, 15:18 | #2 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
После небольшой переделки платы, переписывания программы и замены магнитов, колесо берет 200мА и управляется по I2C!! Пока правда оно только в одну сторону крутится, но скоростью можно управлять присылая ему нужное число от 100 до 255. Что характерно, потребление почти не зависит от нагрузки на колесо. Расходы на 1 устройство - 5-6$.
|
07.10.2016, 01:05 | #3 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: FDD 5'25 моторколесо
КПД не измерял?
|
09.10.2016, 23:10 | #4 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
Честно говоря, я слабо себе представляю как его можно измерить у тихоходного двигателя. При напряжении питания ниже 5ти вольт, вырубится контроллер, то-есть я даже потери в механике не смогу определить. Да и не важно это для "домашнего" робота. Мне важнее было:
1. Надежность 2. Компактность 3. Управляемость (тут кстати расход энергии увеличится) и только потом 4. Энергоэффективность Последний раз редактировалось Disha; 10.10.2016 в 11:00. |
01.11.2016, 14:55 | #5 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
ARDUINщики, подскажите такой код правильный для МАСТЕРА I2C, или Wire.beginTransmission можно только один раз в void setup() прописАть?
Код:
#include <Wire.h> #include <CyberLib.h> const uint8_t sla_addr50 = 50; void setup() { Wire.begin(); // подключиться к i2c как ведущий pinMode(13, OUTPUT); D11_Out; D11_Low; //динамик randomSeed(A6_Read); //Получить случайное значение for(uint8_t i=0; i<12; i++) beep(70, random(100, 2000)); //звуковое оповещение готовности робота } void loop() { digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) Wire.beginTransmission(sla_addr50); // передать на устройство 0x50 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.endTransmission(); // остановить передачу delay(5000); digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level) Wire.beginTransmission(sla_addr50); // передать на устройство 0x50 Wire.write(0x00); // передать один байт 0х00 Wire.write(0x00); // передать один байт 0х00 Wire.write(0x00); // передать один байт 0х00 Wire.endTransmission(); // остановить передачу delay(5000); digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) Wire.beginTransmission(sla_addr50); // передать на устройство 0x50 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.write(0xFF); // передать один байт 0хFF - 255 Wire.endTransmission(); // остановить передачу delay(5000); digitalWrite(13, LOW); // turn the LED on (HIGH is the voltage level) Wire.beginTransmission(sla_addr50); // передать на устройство 0x50 Wire.write(0x00); // передать один байт 0х00 Wire.write(0x00); // передать один байт 0х00 Wire.write(0x00); // передать один байт 0х00 Wire.endTransmission(); // остановить передачу delay(5000); } Последний раз редактировалось Disha; 01.11.2016 в 15:11. |
01.11.2016, 16:51 | #6 |
Administrator
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,618
Вес репутации: 9823 |
Re: FDD 5'25 моторколесо
Вопрос не понятен, что один раз прописать?
|
01.11.2016, 17:29 | #7 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
Я не лучший програмист....
1. Wire.endTransmission(); - на самом деле и есть команда к передаче всего что было объявлено ранее. 2. Wire.begin(); - инициализировали шину 3. Wire.beginTransmission(sla_addr50); - что кроме адреса "слейва" определяет в приведенном примере? Можно этого не делать в каждом сеансе передачи? |
01.11.2016, 17:32 | #8 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
СТОП, вопрос снимаю. Пока писАл сам все понял. Или не все......
Последний раз редактировалось Disha; 01.11.2016 в 17:34. |
01.11.2016, 17:55 | #9 |
Junior Member
Регистрация: 02.03.2016
Адрес: Киев
Возраст: 52
Сообщений: 11
Вес репутации: 0 |
Re: FDD 5'25 моторколесо
Admin, если используем аппаратный I2C на Меге-8 - это PC4 и PC5 програмно "подтянутые" к Vcc
DDRC=(0<<DDC6) | (0<<DDC5) | (0<<DDC4) | (0<<DDC3) | (0<<DDC2) | (0<<DDC1) | (0<<DDC0); // State: Bit6=T Bit5=P Bit4=P Bit3=T Bit2=T Bit1=T Bit0=T PORTC=(0<<PORTC6) | (1<<PORTC5) | (1<<PORTC4) | (0<<PORTC3) | (0<<PORTC2) | (0<<PORTC1) | (0<<PORTC0); , остальные "пины" PORT_C можно использовать как вход? У меня при подключении "слейва" SCL и SDA (PC4 и PC5) получаются на осцилогофе == 0!!!!!!!!! |
Здесь присутствуют: 5 (пользователей: 0 , гостей: 5) | |
|
|