решаю задачу, в которой нужно выполнять довольно много операций с числами с плавающей точкой. сейчас используется atmega32 на частоте 16мгц. рассчёт по формуле она делает около 30ms. нужно, чтобы было ~1..3ms, т.е. производительность нужно поднять раз этак в 30. понятно, что увеличение тактовой частоты здесь много не даст. думаю, имеет смысл заюзать какой-нибудь 32х арм. проблема в том, что не могу найти ни одного арма в DIP корпусе. можно было бы заюзать и TQFP/MLF, но я не умею паять ножки на расстоянии 0.5 мм, да и плату с таким плотным монтажом в моих условиях вытравить не удастся. 1. посоветуйте, если есть, контроллер, подходящий для моей задачи, желательно, в DIP корпусе 2. если мощных DIP'ов не бывает - посоветуйте выход, как в домашних условиях распаять TQFP/MLF.
32 bit в dip не встречал. http://easyelectronics.ru/pajka-planarnyx-mikrosxem-samodelnoj-mikrovolnoj.html#more-99 Плату делай лутом.Сам юзаю фоторезист.0.3мм без проблем.
Вот ссылочка, я думаю тебе подойдет: http://www.evodbg.com/index.php?option=com_content&task=view&id=19&Itemid=46 У нас например на радиобазаре их платы продаются, качество хорошое. Но например в плате USB-FIFO подписи не правильные.
АРМов в ДИП-корпусах не существует, насколько мне известно. Проще взять готовый процессорный модуль, на котором распаян сам проц, ОЗУ и ПЗУ. Ну и разъёмы для подсоединения всего, что нужно.
ру http://www.evodbg.com/index.php?option=com_content&task=blogsection&id=5&Itemid=38 http://starterkit.ru/html/index.php?name=shop&cat=6 http://www.ldm-systems.ru/price_konstructors.htm уа http://www.flycont.com/html/prog_kit.html есть и дешевле. тут главное поискать
по поводу плат. есть один сайтик - http://starterkit.ru/. вот не знаю - имеет ли смысл вообще юзать такие мозги для моей задачи.. зато всё просто. пишешь прогу (!!! не прошивку) под линь, закидываешь на флешку - делаешь почти любые вычисления, генерируешь любые сигналы.. красота ))
cupuyc есть смысл. разве только вы умеете травить и распаивать многослойные платы с шагом 0.5 мм. это в лучшем случае. кстати, если вам надо не один, то можно заказать разводку/сборку. раз в несколько дешевле может выйти. ЗЫ отладочную можно и дешевле найти
похоже, нашёл то, что нужно. http://www.terraelectronica.ru/pdf/PROPOX/MMSAM7S256-2.pdf контроллер at91sam7s256 может работать на тактовой частоте до 55Мгц. на плате установлен кварц 18.432MHz. Могу ли я для разгона просто поменять кварц - вместо 18.432MHz поставить на 50мгц (ну, ещё если нужно, установить фузы) или не всё так просто?
cupuyc Это надо вникать. АРМ -- это не АТмега, там далеко не так просто. В частности, надо смотреть, какая периферия (память, в частности) подключена к процессору и что будет твориться с частотами для неё.
letopisec Угу, но вроде как есть ограничения. Я в АРМ только начал вникать, поэтому утверждать не буду, но пока сложилось именно такое впечатление (что частоты будут подстроены автоматом только в определённых пределах). Правда, применительно к этой задаче есть другой вопрос: а нужен ли разгон вообще? АРМ -- достаточно мощный процессор, так что и на 18,5 МГц может сделать очень многое...
SII letopisec большое спасибо за советы. я сам ещё не вникал, да и плата придёт ещё только через 2 недели. что касается разгона - я не могу даже предположить насколько эффективно арм будет справляться с моей задачей. критерий тут один - скорость вычисления тригонометрических функций, логарифмов и пр. операций с плавающей точкой. в своём первом посте я указал время вычислений: atmega32 на частоте 16мгц рассчитывает выражение ~ 30мс, нужно в 10 раз меньше. + возникли проблемы с нехваткой памяти. в арме с памятью проблем точно не будет. надеюсь, что с производительностью тоже )
cupuyc http://www.atmel.com/dyn/resources/prod_documents/6175s.pdf В этом документе написано что ядро может работать на частотах до 55МГц, а flash с программой без циклов ожидания на частотах до 30МГц.
cupuyc ну чтож вы тогда спешите так деньги выбрасывать? арм - это ж ядро только. целочисленное. а обвеска может быть любая. в том числе и достаточно серьезное фпу http://en.wikipedia.org/wiki/Texas_Instruments_OMAP внизу там смотрите. (и неужели заказать плату дешевле и проще, чем заюзать старый смарт/покет? учитывая, что под последние есть тулчейны, мастера, эмули, отладчики, примеры, дока, комунити? камень то один, потом перенести несложно будет (ээмм, тут сильно зависит от непользования непереносимыми "удобствами"). ну и частоты в них >> 50мгц)
А формулу не пробовал упростить? Если можно, формулу в студию. Мне стало интересно, что там за... "Сложная формула" и какая нужна точность расчета?
Code (Text): static const t_double paw_lever_width = 18.0; static const t_double paw_lever_height = 19.0; static const t_double draft_len = 28.0; static const t_double servo_lever = 9.0; static const t_double paw_opt_1 = 12.0; static const t_double paw_opt_2 = 24.0; static const t_double paw_opt_3 = 8.75; static const t_double paw_opt_4 = 30.0; static const t_double paw_opt_5 = 12.94; static const t_double phi_1_offset = - 90.0 * M_PI / 180.0; static const t_double phi_2_offset = 90.0 * M_PI / 180.0; static const t_double paw_hand_1 = 107.0; static const t_double paw_hand_2 = 197.0; static const t_double paw_eta_angle = GRAD_TO_RAD(90.0); struct t_paw_pos { t_double height; t_double azimuthal_angle; }; inline void calc_servo_angle(t_double *p_servo_angle, const t_paw_pos *p_paw) { *p_servo_angle = calc_servo_angle(p_paw->azimuthal_angle, height_to_polar_angle(p_paw->height)); } inline t_double height_to_polar_angle(t_double height) { double a, b, c; a = paw_hand_2 * cos(paw_eta_angle) - paw_hand_1; b = paw_hand_2 * sin(paw_eta_angle); c = - height; return acos( (- b * c - a * sqrt(a * a + b * b - c * c)) / (a * a + b * b) ); } t_double calc_servo_angle(t_double psi, t_double theta) { t_double a, b, c, x, y, z; x = paw_lever_width * sin(psi) + paw_lever_height * sin(theta) * cos(psi) - paw_opt_2 * cos(theta) * cos(psi) - paw_opt_1 * cos(psi) - paw_opt_3; y = - paw_lever_width * cos(psi) + paw_lever_height * sin(theta) * sin(psi) - paw_opt_2 * cos(theta) * sin(psi) - paw_opt_1 * sin(psi) + paw_opt_5; z = paw_lever_height * cos(theta) + paw_opt_2 * sin(theta) - paw_opt_4; a = 2.0 * servo_lever * y; b = 2.0 * servo_lever * x; c = x * x + y * y + z * z + servo_lever * servo_lever - draft_len * draft_len; return acos( (- b * c + a * sqrt(b * b + a * a - c * c)) / (b * b + a * a)); }
cupuyc а точность в градусах какая? нельзя ли все эти cos/acos свести к таблице 0-45o? (если в спец к вашему камню не указан фпу, то его нет и он будет эмулироваться. в этом случае может быть стоит перейти на фиксед пойнт? скам, 32 бита после запятой. не хватит?)
cupuyc Зачем тебе такие жуткие формулы? Мне кажется что они не будут описывать положение ног таракана даже в статике - ноги ведь не абсолютно жёсткие?! А в динамике точность позиционирования будет вообще наверно не лучше одной десятой диапазона перемещения. Твоя жуткая формула не влезла в таблицу? - это не страшно: можно сделать сетку таблицы с переменным шагом, или вообще сплайны использовать. Про (би)кубические сплайны слышал? Для твоего случая их должно быть более чем достаточно. А таракана точное положение его ног вообще мало волновать должно, три ноги стоят? - стоят, значит можно перемещать другие три.