Перегрев платы

PockerFace
Offline
Зарегистрирован: 18.06.2014

Здравствуйте,

Делаю Hexapod на меге2560. Для того, что бы сделать шаг, нога должна описать её кончиком полукруг в пространстве, а для этого плата просчитывает координаты десяти точек, которые лежат на этой полуокружности с шагом в 18 град от её центра. Просчитала координату первой точки, направила туда ногу, потом delay(40); , далее считает координаты седующей точки, опять направляет туда ногу, потом пауза в 40 микросекунд(дожидаемся, пока кончик ноги дойдет до этой точки) и т.д., пока не будет описана вся полуокружность.

Но вот только я столкнулся с одной проблемой, если уменьшать delay(); и увеличивать кол-во точек, по которым разбивается окружность(для увеличение плавности), то плата начинает нагреваться, видимо, слишком большое кол-во операций... Это нормально? Есть ли какая-то защита от перегрева? 

P.s.увеличение точек необходимо для высокой точности слежения за изменением поверхности, то есть, создание того, чтобы было возможно ходьбы по не ровной поверхности. Нога же хексапода состоит из 3 серв, и на её кончике будет находится резистор давления(FSR).

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

PockerFace
Offline
Зарегистрирован: 18.06.2014

Я уже писал, что мега2560, но забыл упомянуть, что очень сильно греется сам процессор. И с питанием все в порядке.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

PockerFace пишет:

Я уже писал, что мега2560, но забыл упомянуть, что очень сильно греется сам процессор. И с питанием все в порядке.

ну тогда вообще все в порядке.. потому что я ниразу не видел греющуюся амтега2560... когда все правильно подключено, нагреть ее простым выполнением кода врятли получиться..

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Скорее всего что-то из перефирии пытается с логического уровня контроллера слишком много миллиампер откушать.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Может мощности процессора не хватает? Ведь ему еще надо не только просчитать всю кинематику,но и отправить "одновременно" 18 PWM сигналов, может он поэтому и нагревается так сильно, как обычные компьютерные процессоры. Да и если уменьшить кол-во операций в секунду, то он работает нормально, то есть, не греется.

bwn
Offline
Зарегистрирован: 25.08.2014

Количество ваших операций увеличивает частоту вывода управляющих сигналов, при неверном расчете исполнительных цепей начинаете жрать слишком большой ток от ног процессора. Смотрите вашу периферию.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Извините, я вас немного не до понял...Что такое неверный расчет исполнительный цепей и ног процессора?

gena
Offline
Зарегистрирован: 04.11.2012

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

bwn
Offline
Зарегистрирован: 25.08.2014

PockerFace пишет:

Извините, я вас немного не до понял...Что такое неверный расчет исполнительный цепей и ног процессора?

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

PockerFace
Offline
Зарегистрирован: 18.06.2014

Вот схема:

А вот часть кода:

#include <VarSpeedServo.h>
#include <math.h>
#define PI 3.141592653589

VarSpeedServo t_left_front_Servo;
VarSpeedServo d_left_front_Servo;
VarSpeedServo c_left_front_Servo;

VarSpeedServo t_left_mid_Servo;
VarSpeedServo d_left_mid_Servo;
VarSpeedServo c_left_mid_Servo;

VarSpeedServo t_left_back_Servo;
VarSpeedServo d_left_back_Servo;
VarSpeedServo c_left_back_Servo;


VarSpeedServo t_right_front_Servo;
VarSpeedServo d_right_front_Servo;
VarSpeedServo c_right_front_Servo;

VarSpeedServo t_right_mid_Servo;
VarSpeedServo d_right_mid_Servo;
VarSpeedServo c_right_mid_Servo;

VarSpeedServo t_right_back_Servo;
VarSpeedServo d_right_back_Servo;
VarSpeedServo c_right_back_Servo;

void setup()  {
 Serial1.begin(9600);
 Serial1.setTimeout(7);
  c_left_back_Servo.attach(40,700,2200);
  t_left_back_Servo.attach(39,700,2200);
  d_left_back_Servo.attach(38,700,2200);

  c_left_mid_Servo.attach(49,700,2200);
  t_left_mid_Servo.attach(48,700,2200);
  d_left_mid_Servo.attach(47,700,2200);

  c_left_front_Servo.attach(53,700,2200);
  t_left_front_Servo.attach(52,700,2200);
  d_left_front_Servo.attach(51,700,2200);


  c_right_front_Servo.attach(6,700,2200);
  t_right_front_Servo.attach(7,700,2200);
  d_right_front_Servo.attach(8,700,2200);

  c_right_mid_Servo.attach(2,700,2200);
  t_right_mid_Servo.attach(3,700,2200);
  d_right_mid_Servo.attach(4,700,2200);

  c_right_back_Servo.attach(29,700,2200);
  t_right_back_Servo.attach(28,700,2200);
  d_right_back_Servo.attach(27,700,2200);

}

struct _tdcV  {
float t;
float d;
float c;

int Vt;
int Vd;
int Vc;
};


struct _tdcV calc( float x, float y, float z, int V)  {

  int max;
  float g = sqrt(sq(x) + sq(y));
  float k = sqrt(sq(g) - 0.09) - 6;
  float b = sqrt(sq(z) + sq(k));

 _tdcV tdcV;
    tdcV.t = 90 + (acos((sq(b) - 57) / (16 * b))* 180.0 / PI) + (asin(z / b)* 180.0 / PI);
    tdcV.d = acos((185 - sq(b)) / (176))* 180.0 / PI;
    tdcV.c = (asin(x / g)* 180.0 / PI) + (acos(0.03 / g)* 180.0 / PI);
    if (tdcV.c < tdcV.d)  {
      max = tdcV.d;   }
    else  {
      max = tdcV.c;   }
    if (max < tdcV.t)  {
      max = tdcV.t;   }
    int time = max / V;
    tdcV.Vt = tdcV.t / time;
    tdcV.Vd = tdcV.d / time;
    tdcV.Vc = tdcV.c / time;
 return tdcV;
}


void move_left_front_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_left_front_Servo.slowmove (s.c, s.Vc);
t_left_front_Servo.slowmove (s.t, s.Vt);
d_left_front_Servo.slowmove (180 - s.d, s.Vd);
   }}
void move_left_mid_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_left_mid_Servo.slowmove (s.c, s.Vc);
t_left_mid_Servo.slowmove (180 - s.t, s.Vt);
d_left_mid_Servo.slowmove (s.d, s.Vd);
   }}
void move_left_back_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_left_back_Servo.slowmove (s.c, s.Vc);
t_left_back_Servo.slowmove (180 - s.t, s.Vt);
d_left_back_Servo.slowmove (s.d, s.Vd);
   }}

void move_right_front_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_right_front_Servo.slowmove (180 - s.c, s.Vc);
t_right_front_Servo.slowmove (180 - s.t, s.Vt);
d_right_front_Servo.slowmove (s.d, s.Vd);
   }}
void move_right_mid_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_right_mid_Servo.slowmove (180 - s.c, s.Vc);
t_right_mid_Servo.slowmove (s.t, s.Vt);
d_right_mid_Servo.slowmove (180 - s.d, s.Vd);
    }}
void move_right_back_leg(float x, float y, float z, int V)  {
   _tdcV s = calc(  x, y, z, V);
   if (s.t<=180 && s.t>=0 && s.d<=180 && s.d>=0 && s.c<=180 && s.c>=0)  {
c_right_back_Servo.slowmove (180 - s.c, s.Vc);
t_right_back_Servo.slowmove (s.t, s.Vt);
d_right_back_Servo.slowmove (180 - s.d, s.Vd);
    }}
void move_1(int speed, float ang, float hight, float step_ , float length_foot, float step_hight , int r)  {


////...../////
//формулы//
////.....////


  for(int angel = 0; angel <= 180; angel += 10)  {
       float rad = (angel * (PI / 180));
       int angel_2 = 180 - angel;
       float rad_2 = (angel_2 * (PI / 180));
       
       float m1_coner_mid = cos(rad) * m_r_coner_mid;
       float z_1_coner_mid = sin(rad) * step_hight;
       float x2_mid = m1_coner_mid/a_r_mid;
       float y2_mid = m1_coner_mid/b_r_mid;
       
       float m2_coner_front = cos(rad_2) * m_r_coner_front;
       float z_2_coner_front = sin(rad) * step_hight;
       float x2_front = m2_coner_front/a_r_front;
       float y2_front = m2_coner_front/b_r_front;
       
       float m2_coner_back = cos(rad_2) * m_r_coner_back;
       float z_2_coner_back = sin(rad) * step_hight;
       float x2_back = m2_coner_back/a_r_back;
       float y2_back = m2_coner_back/b_r_back;
       
       
       float m2_coner_mid = cos(rad) * m_coner_mid;
       float x1_mid = m2_coner_mid/a_mid;
       float y1_mid = m2_coner_mid/b_mid;
       
       float m1_coner_front = cos(rad_2) * m_coner_front;
       float x1_front = m1_coner_front/a_front;
       float y1_front = m1_coner_front/b_front;
       
       float m1_coner_back = cos(rad_2) * m_coner_back;
       float x1_back = m1_coner_back/a_back;
       float y1_back = m1_coner_back/b_back;
       move_right_back_leg( (-y_r_s_front - y2_front), (x_r_s_front + x2_front), (z_2_coner_front + hight), (speed));
       move_left_mid_leg( (-y_r_s_mid - y2_mid), (x_r_s_mid + x2_mid), (z_1_coner_mid + hight), (speed));
       move_right_front_leg( (-y_r_s_back - y2_back), (x_r_s_back + x2_back), (z_2_coner_back + hight), (speed));
       
       move_left_back_leg( (y_s_back + y1_back), (x_s_back + x1_back), (hight), (speed));
       move_right_mid_leg( (y_s_mid + y1_mid), (x_s_mid + x1_mid), (hight), (speed));
       move_left_front_leg( (y_s_front + y1_front), (x_s_front + x1_front), (hight), (speed));  
       delay(40);
  }}

Slowmove - это тоже самое,что и write, только есть возможность задать скорость...

VarSpeedServo - это объявление сервы(Servo myservo = VarSpeedServo myservo).

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

Что такое "Servo"?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

)) сами сервы от чего питаешь?

PockerFace
Offline
Зарегистрирован: 18.06.2014

jeka_tm,

От аккумулятора 

gena
Offline
Зарегистрирован: 04.11.2012

  Так что такое "Servo"?

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Вот схема:

по этой схеме питание на сервы не подаётся и ничего греться не должно.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Вот схема:

по этой схеме питание на сервы не подаётся и ничего греться не должно.

А что, процессор не может греться, если его загрузка в 100%?Компьютерные тоже греются...

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

А что, процессор не может греться, если его загрузка в 100%?Компьютерные тоже греются...

отключи сервы, проверь и не задавай тупых вопросов.

*и, ты не ответил, каким образом у тебя работают сервы, если они не запитаны?

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

А что, процессор не может греться, если его загрузка в 100%?Компьютерные тоже греются...

отключи сервы, проверь и не задавай тупых вопросов.

*и, ты не ответил, каким образом у тебя работают сервы, если они не запитаны?

Я уже писал, что от аккумулятора, питание серв никак не связано с платой, все отдельно.

gena
Offline
Зарегистрирован: 04.11.2012

 "Я уже писал, что от аккумулятора, питание серв никак не связана с платой, все отдельно." - а вот это уже наводит на размышления. Как это без общего провода? Гальванически развязано? На схеме это не показано.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Я уже писал, что от аккумулятора, питание серв никак не связано с платой, все отдельно.

будешь продолжать меня троллить?: говоришь одно, а на схеме другое - нет питания.

gena
Offline
Зарегистрирован: 04.11.2012

   Хорошо. Схему разрисовывать не охота. Тогда отключите все Servo, дайте программе поработать минут 10-ть. Измерьте температуру процессора.  Было бы неплохо включить в основную программу измерение температуры с выводом на ПК. Затем поэтапно подключайте Servo и следите за температурой. Нам тоже будет полезно узнать результат такого способа поиска нагрева.

Radjah
Offline
Зарегистрирован: 06.08.2014

Аккум в USB заведен что ли? o_0

PockerFace
Offline
Зарегистрирован: 18.06.2014

У меня термометра нет, буду пробовать без него по своим ощущениям..)

PockerFace
Offline
Зарегистрирован: 18.06.2014

Плата немножко отличается от оригинала, и там есть отдельные разъемы для питания.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

Radjah пишет:

Аккум в USB заведен что ли? o_0

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

PockerFace
Offline
Зарегистрирован: 18.06.2014

Вот,доделал:

 

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Вот,доделал:

ясно - подключай аккумулятор в Power Jack.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Вот,доделал:

ясно - подключай аккумулятор в Power Jack.

у меня и так уже подключено в него... На схеме не так изобразил...

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999,

Какой же вы хам..

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Клапауций 999,

Какой же вы хам..

ок.

я - хам.

ты - кретин.

 

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Клапауций 999,

Какой же вы хам..

ок.

я - хам.

ты - кретин.

 

Я с вами на Ты не переходил...Не позволяйте больше дозволенного.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Я с вами на Ты не переходил...Не позволяйте больше дозволенного.

дык, перейди и не парь мосги своими моральноэтическими ограничениями.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Я с вами на Ты не переходил...Не позволяйте больше дозволенного.

дык, перейди и не парь мосги своими моральноэтическими ограничениями.

Вы со своим деректором/учителем/преподом также разговариваете?Нет. А здесь вы себя чувствуете неприкосаемым,так как нас могут разделять тысячи км.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

PockerFace пишет:

Плата немножко отличается от оригинала, и там есть отдельные разъемы для питания.

Ну ё-моё, так с какого хера Вы нам тут мозги пудрите? Так что у Вас за плата? Что у Вас за сервы? Что за аккумулятор? И как Вы это всё-таки соединили?

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

А здесь вы себя чувствуете неприкосаемым,так как нас могут разделять тысячи км.

ну, разбей своему преподу голову за то, что он тебя не научил внятно и чётко формулировать свои вопросы в текстовом и графическом виде.

*пойми, я могу начать поиски тараканов в твоей схеме, но окажется, что ты, снова, выдал ложную схему.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

значит все так в питании. какие у тебя сервы? не встречал сервы которые можно питать от 2S аккурулятора напрямую

а еще подумай. такое количество серв, аккумулятор точно не проседает?

PockerFace
Offline
Зарегистрирован: 18.06.2014

Вот моя плата с шилдом:

Мне кажетя,что дело вовсе не в сервах\акк,так как если уменьшить кол-во операций в сек,то процессор не греется и все в порядке... 

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну теперь больше похоже на правду, кроме той что греется

да и ты му...к если честно. не мог сразу дать картинку или ссылку? отсеивай варианты

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

jeka_tm пишет:

да и ты му...к если честно. не мог сразу дать картинку или ссылку?

jeka_tm, добро пожаловать в хамский клуб джентельменов.

PockerFace
Offline
Зарегистрирован: 18.06.2014

jeka_tm пишет:

ну теперь больше похоже на правду, кроме той что греется

да и ты му...к если честно. не мог сразу дать картинку или ссылку? отсеивай варианты

Так я в самом начале и писал,что если уменьшать нагрузку на процессор в 2 раза,то он не греется.

Есть ли какая нибудь защита у процессора от перенагревания? Должен ли он так сильно грется,если загружен на максимум?

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Так я в самом начале и писал,что если уменьшать нагрузку на процессор в 2 раза,то он не греется.

снова ребусы-загадки - каким образом ты уменьшаешь нагрузку на процессор в два раза?

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999,

PockerFace пишет:

 

Но вот только я столкнулся с одной проблемой, если уменьшать delay(); и увеличивать кол-во точек, по которым разбивается окружность(для увеличение плавности), то плата начинает нагреваться, видимо, слишком большое кол-во операций...

for(int angel = 0; angel <= 180; angel += 10)  {
       float rad = (angel * (PI / 180));
       int angel_2 = 180 - angel;
       float rad_2 = (angel_2 * (PI / 180));
        
       float m1_coner_mid = cos(rad) * m_r_coner_mid;
       float z_1_coner_mid = sin(rad) * step_hight;
       float x2_mid = m1_coner_mid/a_r_mid;
       float y2_mid = m1_coner_mid/b_r_mid;
        
       float m2_coner_front = cos(rad_2) * m_r_coner_front;
       float z_2_coner_front = sin(rad) * step_hight;
       float x2_front = m2_coner_front/a_r_front;
       float y2_front = m2_coner_front/b_r_front;
        
       float m2_coner_back = cos(rad_2) * m_r_coner_back;
       float z_2_coner_back = sin(rad) * step_hight;
       float x2_back = m2_coner_back/a_r_back;
       float y2_back = m2_coner_back/b_r_back;
        
        
       float m2_coner_mid = cos(rad) * m_coner_mid;
       float x1_mid = m2_coner_mid/a_mid;
       float y1_mid = m2_coner_mid/b_mid;
        
       float m1_coner_front = cos(rad_2) * m_coner_front;
       float x1_front = m1_coner_front/a_front;
       float y1_front = m1_coner_front/b_front;
        
       float m1_coner_back = cos(rad_2) * m_coner_back;
       float x1_back = m1_coner_back/a_back;
       float y1_back = m1_coner_back/b_back;
       move_right_back_leg( (-y_r_s_front - y2_front), (x_r_s_front + x2_front), (z_2_coner_front + hight), (speed));
       move_left_mid_leg( (-y_r_s_mid - y2_mid), (x_r_s_mid + x2_mid), (z_1_coner_mid + hight), (speed));
       move_right_front_leg( (-y_r_s_back - y2_back), (x_r_s_back + x2_back), (z_2_coner_back + hight), (speed));
        
       move_left_back_leg( (y_s_back + y1_back), (x_s_back + x1_back), (hight), (speed));
       move_right_mid_leg( (y_s_mid + y1_mid), (x_s_mid + x1_mid), (hight), (speed));
       move_left_front_leg( (y_s_front + y1_front), (x_s_front + x1_front), (hight), (speed)); 
       delay(40);
  }}

В цикле for angel увеличиваем не на 10,а на 1 и уменьшаем delay с 40 до 4 микросекунд.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Клапауций 999,

PockerFace пишет:

 

Но вот только я столкнулся с одной проблемой, если уменьшать delay(); и увеличивать кол-во точек, по которым разбивается окружность(для увеличение плавности), то плата начинает нагреваться, видимо, слишком большое кол-во операций...

Клапауций 999 пишет:

отключи сервы, проверь и не задавай тупых вопросов.

будем по кругу цитатами разговаривать?

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Греется то хоть до сколько градусов? Хоть примерно.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Gres пишет:
Греется то хоть до сколько градусов? Хоть примерно.

Примерно 60 градусов

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Клапауций 999,

PockerFace пишет:

 

Но вот только я столкнулся с одной проблемой, если уменьшать delay(); и увеличивать кол-во точек, по которым разбивается окружность(для увеличение плавности), то плата начинает нагреваться, видимо, слишком большое кол-во операций...

Клапауций 999 пишет:

отключи сервы, проверь и не задавай тупых вопросов.

будем по кругу цитатами разговаривать?

Так я же писал,что попробую, сейчас не могу..

 

Gres
Gres аватар
Offline
Зарегистрирован: 26.03.2013

Рабочая температура проца от -50 до +125, рекомендуемая от-40 до+85, так, что у Вас все в порядке, если переживаете, приклейте небольшой радиатор непосредственно на сам проц.

Клапауций 999
Offline
Зарегистрирован: 06.06.2015

PockerFace пишет:

Так я же писал,что попробую, сейчас не могу..

так и не парь людям мосги, если физически не в состоянии заниматься отладкой балалайки.

PockerFace
Offline
Зарегистрирован: 18.06.2014

Клапауций 999 пишет:

PockerFace пишет:

Так я же писал,что попробую, сейчас не могу..

так и не парь людям мосги, если физически не в состоянии заниматься отладкой балалайки.

Мне начали задавать вопросы...Не мог же я на них не ответить.

KVadik
KVadik аватар
Offline
Зарегистрирован: 15.06.2014

PockerFace пишет:

Примерно 60 градусов

Так это нормально.