Контроллер для детской машинки на Arduino Mega 2560

Автор HECTEPOB, 16 Нояб. 2014 в 21:35

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

HECTEPOB

#216
А у Вас есть опыт разработки плат? Вероятно вместо дорогих драйверов BTS7960B можно на рассырухе все собрать. Хотя если эти драйверы "мешками" покупать у китайцев они тоже наверное недорого встанут.

Вот например:
Процы:
http://ru.aliexpress.com/item/Free-Shipping-ATMEGA2560-16AU-ATMEGA2560-100pc-lot-QFP-IC/32328069435.html

Драйверы:
http://ru.aliexpress.com/item/New-original-BTS7960B-TO-263-7-100PCS/32244453849.html

Кварцы:
http://ru.aliexpress.com/item/HC-49S-4-6/1938468538.html?s=p

Резюки:
http://ru.aliexpress.com/item/New-original0402-SMD-Resistor-Assortment-Kit-170-value-total-8500-pcs-chip-resistor-pack/2055482155.html

Конденсаторы:
http://ru.aliexpress.com/item/New-original-0402-SMD-Capacitor-Assortment-Kit-80value-total-4000pcs-chip-capacitors-pack/1917387937.html

Стабилизаторы 5в:
http://ru.aliexpress.com/item/Aerotron-ws-78l05-wst78l05-to-92-5v-trinistor-voltage-stabilizing-tube/1696490692.html?s=p

Посчитал изготовление плат 100х50 мм 2-сторонние текстолит 1мм фольга 0,35мм 100 шт. Изготовление 13300 рэ: http://newservice.rezonit.ru/

Монтаж там же (цена за точку пайки): http://www.rezonit.ru/price/#prototype

Пульты РУ с приемниками (FS-GT3B) по 39 баксов за штуку, но если брать 100 шт. сразу, то ценник думаю будет баксов 25 не больше.

Корпуса:
http://www.korpus-center.ru/Default.aspx
http://www.korpus-center.ru/popup.aspx?catalog=641

Провода:
http://ru.aliexpress.com/item/Free-ship-DHL-900m-lot-9-colors-electronic-wire-1007-24AWG-24-11-strands-tin-plated/32302335371.html

При цене монтажа 18000 (20000 точек по 0,8 рэ + 2000 подготовка производства) и цене за РУ в 25$ получается 2956 рэ. (расчет в аттаче).

Продать думаю по 100 баксов можно....





HECTEPOB

Если еще светом/звуком рулить, то еще элементов надо, транзюки силовые, mp3-плееры, динамики....
Золотой получается контроллер..... Хотя 2000 из них это Пульт РУ и Драйверы

Tygra

Ну во первых 100*50 будет мелковата, во вторых пустить в "производство" это минимум 10к дохлых президентов, с учетом собственно разработки всего и плат и программ. Себестоимость выйдет порядка 100уе, но бесплатно смысл делать, значит продажная минимум 150. Нужно продать хотя бы 100шт. Я думаю больше 20-30 их не продать. По крайней мере я живу далеко не в Москве, а в полной опе, здесь это никому не нужно. Особого опыта изготовления плат такой точности у меня нет, обычные мелкие платки да сборки на макетных платах. Драйвера нужно устанавливать на радиатор, сами драйвера отдельно на радиатор не встанут, только через плату, значит плату надо не простую, а в месте контакта с радиатором и драйвером, как минимум  много металлизированных сквозных отверстий, которые заполнить термопастой. Не каждому нужно 2 движка, кому то нужно на 6в. Кому то не нужно света или пульта, т.е. унифицированное изделие продумать будет очень сложно. Единичные партии по заказу проще изготовить самому с блоком ардуины т.к. МК на ней уже распаян и особой точности в изготовлении платы не требуется, но безусловно себестоимость готового изделия в таком случае будет в разы выше. Я думаю что платы было бы дешевле напрямую в китае заказать. Но нужно учитывать что китайцы могут и "спереть" идею и самим продавать подобные наборы, уж больно они "хитрые". В общем я не думаю что это очень хорошая идея для коммерческого использования. Но это я так думаю, возможно вам покажется иначе.  В целом было бы лучше продавать не наборы, а готовые доработанные автомобили, здесь уже был бы смысл какой то, т.к. не каждый сможет установить правильно датчик холла, не говоря уже о правильном подключении всего набора. А готовые автомобили, с явными "улучшениями" по сравнению с "голым китаем", думаю пошли бы в продаже охотнее ибо сейчас продают все одинаковое китайское гуано (не смотря на разный внешний вид, внутри все клонированное) , кроме Henes и производства США, что сопоставимо по цене с хенес и не конкурентоспособно. 

Добавлено 22 Июнь 2015 в 19:34

Цитата: HECTEPOB от 22 Июнь 2015 в 19:31
Если еще светом/звуком рулить, то еще элементов надо, транзюки силовые, mp3-плееры, динамики....
Золотой получается контроллер.....
К дуине есть еще "сонары" , т.е. можно реализовать авто тормоз при приближении к препятствию : ))))) Есть еще гироскопы .... А есть еще движки на 15к оборотов....... Такими темпами лучше сразу купить хенес и не мучаться.

HECTEPOB

Или открывать ателье по тюнингу детских мобилей!
Идея делать и продавать мобили нравится. Сразу тогда к ним тележку делать с подвесками, как в этой теме: https://electrotransport.ru/index.php?topic=26020.0
А от Китая, только корпуса и редукторы заказывать.

Tygra

Еще чисто теоретически есть радиоинтерфейсы к дуине, т.е. можно пульт тоже в производство : ))) Но шибко это все гиморно будет, я уже отмечал, что проще уже будет готовые автомобили делать и продавать . Помимо этого можно через синий зуб управлять с андроида и пульт ваще не нужен будет . Плюс с андроида проще обратную связь с бортом наладить.

Добавлено 22 Июн 2015 в 19:42:28

В итоге получится "русский" хенес : )))) Я вообще не представляю как корейцы умудрились разработать и внедрить в производство 3юю модель своего авто, это огромное количество разработки и деталей на "заказ" , при относительно не большой стоимости авто в целом, одна независимая полноприводная подвеска чего стоит

Tygra

#221
Цитата: HECTEPOB от 22 Июнь 2015 в 19:38
Сразу тогда к ним тележку делать с подвесками, как в этой теме: https://electrotransport.ru/index.php?topic=26020.0

Прикольно, полноприводный вариант очень интересен, единственное мне не нравятся пружинки вместо нормальных аммортизаторов и вес готового изделия. это 35кг !!! + водитель ~ 20-30 кг итого 50-60 кг не управляемого болида т.к. тормозов у него нет, все тормоза лягут на пластиковые редуктора и не вечные движки. Я не думаю что редукторы  будут долго жить, или же ездить надо будет очень медленно. 60кг / 4 редуктора = по 15 кг на каждый редуктор, при условии что какой то из них не накроется.

P\S 2 раза перечитал ту тему, механика подвески мне показалась через чур сложной. Как кто то отметил, можно уже было и не зависимою подвеску сделать. Я все об этом думал, но вспомнив о своих "кривых ручках" думы пропадали. Задумки есть, но реализовать я сам не смогу. Все на базе тех же газ-лифтов, по аналогии с подвеской оки или как люди это называют "стойка мак ферсона", ну по крайней мере я так понял. Еще был более сложный вариант с расположением аммортов горизонтально, что бы оставить аммортам ход и чтоб они влезли т.к. ход вверх очень ограничен.

HECTEPOB

С другой стороны, детям мне кажется все эти подвески пофиг. Особенно с учетом того, что машина максимум на 2 сезона, потом уже посерьезнее надо аппарат, чтобы быстрее велика ехал.

Tygra

Цитата: HECTEPOB от 22 Июнь 2015 в 20:09
все эти подвески пофиг.
Тут не соглашусь, моя доча любит кататься, но резкий старт ее шибко пугал в начале и ездить на стоковой подвеске это ад который никакому ребенку не пожелаешь ! Всю опу себе отобьет и внутренности перевернет. Хотя бы колеса нормальные сделать, но в ямы или с бордюр прыгать, все равно по попе отбивает...

Tygra

По поводу МК, все же я больше по железу, программная логика мне все таки чужда. Даже описание для чайников идет сразу с того что МК это набор черных ящиков, которые будут делать так то. Я же привык с физической точки зрения понимать что и как работает т.е. что каждая деталь в схеме делает и как взаимодействует с другими, это помогает разобраться с любой схемой. Но тут же мне ничерта не понятно, идет сразу описание работы с областями данных, без описания каким образом это все физически организовано. Что понял, возможно не верно: МК как микро системник большого ПК, внутри проц и прочая "комплектуха". Имеет внутренний счетчик , некий конвеер, работы с памятью, в момент включения заводится тактовый генератор, срабатывает хард резет, все состояния обнуляются, внутренний счетчик "тыкает" носом проц считать пзу с начала, а там уже дальше в зависимости от того что там будет и т.д. по программе. Видов памяти шибко много, ПЗУ - некий аналог биоса, не изменяемая для процессора память с программой работы, ОЗУ - собственно как оперативка в компе для работы с временными данными, ППЗУ - энергонезависимая память доступная для записи процессору - аналог жесткого диска, внутренние регистры процессора - аналог кеша в процессоре системника, то же память но зовется по другому. Каким фигом все это вместе физически работает ??? Порой я думаю что проще было бы мне в машинных кодах сразу понять чем разбираться с ассемблером. Каким образом происходит работа с "переферией", всякие порты , таймеры и прочие, из описания все работа идет с работой с памятью, тупой перезаписью регистров и мне совершенно не понятно как это все так выходит...  Понимаю что ни чего не понимаю : ))) Нужно забыть электронику, станет легче ..... не могууу  :))))

HECTEPOB

Цитироватьно резкий старт ее шибко пугал
Так про это никто не говорит, плавный ход - маст хэв

По поводу различных памятей: Ну да все так:

Есть память программ Flash, в ней лежит прога, есть RAM, есть EEPROM, все управление периферией идет через регистры ввода/вывода. Регистры отображаются на некую область RAM. Периферия способна вызывать "прерывания" при возникновении определенных событий. Например состояние входной ноги поменялось, таймер переполнился, завершилось преобразование в АЦП. Прерывания можно включать/отключать. Т.е. есть основной цикл программы (бесконечный) и обработчики прерываний.

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

У меня в программе используется следующая периферия:
1. Таймеры в режиме захвата (прерывание по изменению состояния входной ноги и измерение времени между изменениями), для опроса пульта (3 канала)
2. Таймеры в режиме генерации инвертированного ШИМ с фазовой коррекцией (на них генерируется ШИМ для управления моторами)
3. АЦП для измерения сигналов всех датчиков: Педаль газа, датчик УПРВ, сигналы потребления токов с регуляторов 4 шт.

Т. е. все измерения происходят в прерываниях и значения закидываются в кольцевые буфера (массив в оперативке определенного, заранее заданного размера. В него пишется очередное измеренное значение и индекс текущего элемента инкрементируется, если индекс стал равен размеру массива, то он зануляется и новый элемент запишется вместо самого первого). А уже в основном цикле идет усреднение кольца (уберает "шум" измеренных значений), т.е. допустим есть массив из 16 последних значений какого-либо параметра. По фиг куда кажет индекс текущего элемента, если сложить все элементы массива и сдвинуть сумму на 4 бита вправо, получим текущее усредненное значение этого параметра. После получения усредненных значений всех параметров идет их обработка, т.е. вычисление управляющих воздействий. Ну и в конце полученные значения управляющих воздействий загоняются в ШИМ.

Tygra

Примерная структура понятна, логика ясна, с реализацией в ассе ничерта не понятно , но думаю тут просто вопрос времени изучить команды, книжка попалась занятная "Практич программир МК Atmel AVR на языке ассемблера Ю.Ревич 2011-600RM"  Прочитал 100стр. из 350и.. И на этом месте только начались реальные примеры. ..  Дочитаю книжку , не много "переварю", достану дуину 328 и бум эксперементировать, ее не так жалко. : ))

Добавлено 22 Июн 2015 в 21:39:20

Цитата: HECTEPOB от 22 Июнь 2015 в 21:02
все измерения происходят в прерываниях и значения закидываются в кольцевые буфера
На дуине я вроде ничего подобного не использовал и проблем или нужды с "усреднением" не испытывал, нужно ли оно ?
P\S Я так понимаю если события прерываний совпадают, то то что "обнаружено" первым выполняется, а то что "не успело" игнорируется, до конца выполнения первого вызванного ?

HECTEPOB

#227
[user]Tygra[/user],

Не не не! Не надо книжек!!!! Там врут все!!!! Читаем первоисточник:

http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_instruction_list.html

ЦитироватьНа дуине я вроде ничего подобного не использовал и проблем или нужды с "усреднением" не испытывал, нужно ли оно ?

Без усреднения в реальных условиях будет нестабильно работать.

ЦитироватьЯ так понимаю если события прерываний совпадают, то то что "обнаружено" первым выполняется, а то что "не успело" игнорируется, до конца выполнения первого вызванного ?

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

В момент прерывания проц пишет в стек Program counter и тупо передает управление на заведомо известный адрес (адрес обработчика прерывания в таблице прерываний), по команде reti программный счетчик восстанавливается из стека и управление возвращается в "где было". Т.е. в обработчике прерывания ты не можешь расчитывать, что он выполнится без прерываний. Поэтому в обработчиках прерываний сначала надо сохранить все регистры используемые в обработчике и потом в конце их восстановаить, иначе обьработчики прерываний будут портить жизнь основному циклу и другим обработчикам прерываний.

Tygra

Что то меня уже "бесят" эти регистры и гоняния данных с одной ячейки в другую, с параллельным изменением этих данных. Кто вообще эту бредятину придумал, капец просто.  %-) , логику работы понял, но раздражает что все происходит через массивы данных, т.е. плевать как работает электрически, тупо нужно помнить или знать что куда записать и откеда взять то что нужно записать, бррр. Очень много мелких нюансов, все сразу вьехать не возможно. Добрался до описания счетчиков и организации на их основе ШИМ. Но у нас уже пол второго ночи, пшел спать, завтра дочитаю .... может голова к утру что нибудь переварит и будет яснее.... ну или все начисто забудет нафиг, и такое бывает : ))))) 

Добавлено 22 Июнь 2015 в 22:21

Цитата: HECTEPOB от 22 Июнь 2015 в 22:07
Без усреднения в реальных условиях будет нестабильно работать.
Ну на дуине же работает как то и стабильно работает. М\б потому что аппа цифровая ?

HECTEPOB

[user]Tygra[/user],
Аппа и у меня цифровая (FS-it4 купил), сигнал с аппы действительно достаточно стабильный, но бывают выбросы по питанию, наводки и т.д., "дергается" машина.
А вот остальные сигналы: педаль, холл, сигналы тока - без усреднения вообще никак, руль и моторы будут "дергаться", электроусилитель (самое сложное место) вообще работать не будет. Ну вернее у меня не заработало (я пробовал без усреднения). Если у тебя заработает, пожму руку! Если нет, будешь знать куда копать.

Главное упаси тебя бог от pulseIn: https://www.arduino.cc/en/Reference/PulseIn

Я когда увидел как оно реализовано, мне аш поплохело......  90% процессорного времени тратится именно на эту функцию!
Опрос пульта полюбому по таймеру!!!!

Tygra

P\S С прерываниями примерно ясно, т.е. теоретически если прерывания будут идти быстрее чем их может переварить процессор, то МК будет глухо тормозить, пока частота событий по прерываниям не снизится до значений которые МК сможет в адекватный период времени обработать... Как то так понял.

HECTEPOB

#231
Так точно! В основной цикл не выйдет, если стек переполнится, то RESET будет вроде.

Нагнал про одновременность: оказывается флаги могут встать и одновременно, но проверки их происходить в соответствие с приоритетом http://gammon.com.au/interrupts:
1  Reset
2  External Interrupt Request 0  (pin D2)          (INT0_vect)
3  External Interrupt Request 1  (pin D3)          (INT1_vect)
4  Pin Change Interrupt Request 0 (pins D8 to D13) (PCINT0_vect)
5  Pin Change Interrupt Request 1 (pins A0 to A5)  (PCINT1_vect)
6  Pin Change Interrupt Request 2 (pins D0 to D7)  (PCINT2_vect)
7  Watchdog Time-out Interrupt                     (WDT_vect)
8  Timer/Counter2 Compare Match A                  (TIMER2_COMPA_vect)
9  Timer/Counter2 Compare Match B                  (TIMER2_COMPB_vect)
10  Timer/Counter2 Overflow                         (TIMER2_OVF_vect)
11  Timer/Counter1 Capture Event                    (TIMER1_CAPT_vect)
12  Timer/Counter1 Compare Match A                  (TIMER1_COMPA_vect)
13  Timer/Counter1 Compare Match B                  (TIMER1_COMPB_vect)
14  Timer/Counter1 Overflow                         (TIMER1_OVF_vect)
15  Timer/Counter0 Compare Match A                  (TIMER0_COMPA_vect)
16  Timer/Counter0 Compare Match B                  (TIMER0_COMPB_vect)
17  Timer/Counter0 Overflow                         (TIMER0_OVF_vect)
18  SPI Serial Transfer Complete                    (SPI_STC_vect)
19  USART Rx Complete                               (USART_RX_vect)
20  USART, Data Register Empty                      (USART_UDRE_vect)
21  USART, Tx Complete                              (USART_TX_vect)
22  ADC Conversion Complete                         (ADC_vect)
23  EEPROM Ready                                    (EE_READY_vect)
24  Analog Comparator                               (ANALOG_COMP_vect)
25  2-wire Serial Interface  (I2C)                  (TWI_vect)
26  Store Program Memory Ready                      (SPM_READY_vect)


[user]Tygra[/user],
Я в итоге нашел пример, как на ардуинском языке прерывания использовать, там вроде просто все. Вот только возникает один вопрос: Когда пишем обработчик прерывания, как узнать какие регистры он использует и как их сохранить и восстановить потом...

Tygra

По мне так нет никакого смысла в дуине, если все штатные функции типа того же pulsin намеренно игнорировать и весь код приводить к виду на ассе.

Что за таблица в конце кода ?
; Таблицы преобразования сигналов

Tygra


Интересно, указано что разрешение ШИМ 12 бит, а в реальности макс. 10 и то в дуине только 8 т.е. дискретность 255 значений.