powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Найти числовую разницу в массиве в С.
25 сообщений из 40, страница 1 из 2
Найти числовую разницу в массиве в С.
    #39596988
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такая вот задача.
Есть массив чисел. Мне нужно сравнить скажем первые 4 числа и если между ними есть разница 10 - поднять флаг.
То есть функция примет аргументы - массив, количество элементов для сравнения и разницу между числами.
Код: plaintext
1.
int GetPosDif(int pos[], int elements, int diff)


У меня получаются какие то громоздкие решения. Как это можно сделать максимально быстро?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39596991
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "если между ними есть разница 10" ?

Между какими разница? Максимальным и минимальным? Соседними? Еще как-то?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597002
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TЧто значит "если между ними есть разница 10" ?

Между какими разница? Максимальным и минимальным? Соседними? Еще как-то?
в принципе мне надо отследить разницу между любым из них. это моторы. когда их было два - я по энкодерам брал их позицию, сравнивал, и если была разница в позициях больше пороговой - один мотор замедлял, другой ускорял. теперь моторов 4 и алгоритмика намного усложнилась, не соображу как отследить разницу в позициях моторов.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597010
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, число парных сочетаний среди 4-х элементов = 6. Наверно вот столько флагов теперь ...
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597045
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот как я делал на два мотора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
uint32_t MOT_GetPosDif(uint32_t pos1, uint32_t pos2, uint32_t *gt)
{
    if( pos1 > pos2)
    {
        *gt = 0;
        return (pos1 - pos2);
    }
    else 
    {
        *gt = 1;
        return (pos2 - pos1);
    }
}


void MOT_PositionLoopDouble(void)
{
    uint32_t position1, position2, posdif, gt;
    uint32_t pwm1, pwm2;
    
    position1 = motor1_data_double->position;
    position2 = motor2_data_double->position;
    
    posdif = MOT_GetPosDif(position1, position2, &gt);
    
    if (posdif > glob_mot_data.max_pos_diff)
    {
        //retry
        glob_mot_data.pos_diff_count++;
        if (glob_mot_data.pos_diff_count > glob_mot_data.max_pos_diff_count)
        {
            //maximum retries - unable to adjust speed
            glob_mot_data.pos_diff_count = 0;
            //send stop command
            MOT_SendData(motor1_data_double, CAN_COM_STOP, 0);
            MOT_SendData(motor2_data_double, CAN_COM_STOP, 0);
            
            sys_status |= MOT_POS_DIFF;
        }
    }
    
    pwm1 = motor1_data_double->speed;   
    pwm2 = motor2_data_double->speed;
    
    //no position difference - maximum speed   
    if (posdif < glob_mot_data.max_pos_diff)
    {
        MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
        MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    }
    else if (gt == 0)  //position1 > position2
    {
        //adjust pwm
        pwm1 -= glob_mot_data.pwm_delta;
        pwm2 += glob_mot_data.pwm_delta;
        
        //check min pwm limit
        if (pwm1 < glob_mot_data.pwm_min)
            pwm1 = glob_mot_data.pwm_min;
        //check max pwm limit    
        if (pwm2 > glob_mot_data.pwm_max) 
            pwm2 = glob_mot_data.pwm_max;  
    }
    else if (gt == 1)  //position2 > position1
    {
        //adjust pwm
        pwm1 += glob_mot_data.pwm_delta;
        pwm2 -= glob_mot_data.pwm_delta;
        
        //check max pwm limit
        if (pwm1 > glob_mot_data.pwm_max)  
            pwm1 = glob_mot_data.pwm_max;
        //check min pwm limit    
        if (pwm2 < glob_mot_data.pwm_min) 
            pwm2 = glob_mot_data.pwm_min; 
    }
     
    //update speed
     MOT_SendData(motor1_data_double, CAN_COM_SSET, pwm1);
     MOT_SendData(motor2_data_double, CAN_COM_SSET, pwm2);
  
}


Вот ломаю голову как сделать на четыре мотора
Модератор: Просьба убирать большие исходники под спойлер
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597108
д0кХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jenya7Вот ломаю голову как сделать на четыре мотора
отсортировать массив .

соотвественно в массиве должны быть структуры
номер двигла и значение параметра.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597213
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TЧто значит "если между ними есть разница 10" ?

Между какими разница? Максимальным и минимальным? Соседними? Еще как-то?
в принципе мне надо отследить разницу между любым из них. это моторы. когда их было два - я по энкодерам брал их позицию, сравнивал, и если была разница в позициях больше пороговой - один мотор замедлял, другой ускорял. теперь моторов 4 и алгоритмика намного усложнилась, не соображу как отследить разницу в позициях моторов.
ИМХО в случае с 4-мя моторами, как понимаю, может потребоваться коррекция работы нескольких моторов. Как вариант выводить какое-то среднее и относительно него выравнивать работу всех моторов.

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

Опиши не на двигателях, а на массивах, т.е.: массив такой-то на входе, на выходе такой-то результат.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597220
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Вот как я делал на два мотора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    //no position difference - maximum speed   
    if (posdif < glob_mot_data.max_pos_diff)
    {
        MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
        MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    }
...


Пытаюсь понять как два работают. Непонятно это место. Как понимаю это случай когда оба мотора работают почти синхронно, т.е. расхождение в пределах нормы. Но зачем-то происходит изменение их скоростей. Они не могут дальше работать как работали?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597223
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как тебе такой алгоритм:
1. Считаем медиану массива.
2. Проверяем каждый элемент на отклонение от медианы, если отклонение более допустимого, то корректируем работу данного двигателя.

Для расчета медианы необязательно сортировать, можно поизобретать альтернативные алгоритмы.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597226
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7Вот как я делал на два мотора
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    //no position difference - maximum speed   
    if (posdif < glob_mot_data.max_pos_diff)
    {
        MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
        MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    }
...


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

в этом месте если расхождения нет или оно приемлимо я устанавливаю максимальную скорость для двух моторов.
не пойму какой алгоритм выбрать. наверно нужна какая то структура для каждого мотора содержащая разницу по отношению к каждому из соседних моторов. но как тогда принимать решение? какой замедлить а какой ускорить?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597229
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TКак тебе такой алгоритм:
1. Считаем медиану массива.
2. Проверяем каждый элемент на отклонение от медианы, если отклонение более допустимого, то корректируем работу данного двигателя.

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

то есть принимать решение ускорить или замедлить мотор относительно среднего значения?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597237
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Dima TКак тебе такой алгоритм:
1. Считаем медиану массива.
2. Проверяем каждый элемент на отклонение от медианы, если отклонение более допустимого, то корректируем работу данного двигателя.

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

то есть принимать решение ускорить или замедлить мотор относительно среднего значения?
Да. Думаю что медиана тут больше подходит, но можно среднее арифметическое взять вместо нее. Его считать проще.

По сути с двумя ты именно так и делаешь: если оба отклонились от среднего больше нормы и ты корректируешь оба двигателя.

Еще могут возникнуть неразрешимые состояния из-за ограничений максимума: допустим все 4 двигателя на максимуме, но один из двигателей отстает, но ускорять его нельзя, т.к. максимум, т.е. надо замедлить остальные три. Подобное надо как-то обрабатывать.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597249
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, Вам виднее. От задачи тоже зависит, среднее: константа/статическое/динамическое, траектория: гладкая/неважно ...
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597303
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А что если так.
Создаю структуру содержащую сортированые позиции, указатели на моторы, и адейтированые значения скорости
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
typedef struct MOTOR_POS_DIFF_S
{
    MOTOR_DATA * mot;
    int32_t pos;
    uint32_t pwm;
}MOTOR_POS_DIFF;

MOTOR_POS_DIFF mot_pos_diff[4];


Сортирую позиции

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void MOT_SortPositions(void)
{
    int i,j=0;
    
    for (i = 0; i < g_dbl_motors; i++)
    {
        if (j==0)
        {
            mot_pos_diff[j].pos =  motor_data_double[i]->position; 
            mot_pos_diff[j].mot = motor_data_double[i];
            //mot_pos_diff[j].up_down = SPEED_UP;
        }
        else
        {
            if (motor_data_double[i]->position > mot_pos_diff[j-1].pos)
                mot_pos_diff[j].pos =  motor_data_double[i]->position; 
            else
            {
                mot_pos_diff[j].pos = mot_pos_diff[j-1].pos;
                mot_pos_diff[j-1].pos = motor_data_double[i]->position;
            }
             mot_pos_diff[j].mot = motor_data_double[i];     
        }       
        j++;
    }
}



Принимаю решение относительно средней позиции

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void MOT_ProccesPositions(void)
{
    int i;
    uint32_t mid_idx = g_dbl_motors/2;
    
    for (i = 0; i < g_dbl_motors; i++)
    {
        if ( (abs(mot_pos_diff[i].pos-mot_pos_diff[mid_idx].pos)) > glob_mot_data.max_pos_diff)
        {
            mot_pos_diff[i].pwm -= glob_mot_data.pwm_delta;
            if (mot_pos_diff[i].pwm < glob_mot_data.pwm_min)
                mot_pos_diff[i].pwm = glob_mot_data.pwm_min;
        }
        else
        {
            mot_pos_diff[i].pwm += glob_mot_data.pwm_delta;
            if (mot_pos_diff[i].pwm > glob_mot_data.pwm_max)
                mot_pos_diff[i].pwm = glob_mot_data.pwm_max;
        }
    }  
}


...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597345
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jenya7А что если так.
Создаю структуру содержащую сортированые позиции, указатели на моторы, и адейтированые значения скорости
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
typedef struct MOTOR_POS_DIFF_S
{
    MOTOR_DATA * mot;
    int32_t pos;
    uint32_t pwm;
}MOTOR_POS_DIFF;

MOTOR_POS_DIFF mot_pos_diff[4];


Сортирую позиции

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void MOT_SortPositions(void)
{
    int i,j=0;
    
    for (i = 0; i < g_dbl_motors; i++)
    {
        if (j==0)
        {
            mot_pos_diff[j].pos =  motor_data_double[i]->position; 
            mot_pos_diff[j].mot = motor_data_double[i];
            //mot_pos_diff[j].up_down = SPEED_UP;
        }
        else
        {
            if (motor_data_double[i]->position > mot_pos_diff[j-1].pos)
                mot_pos_diff[j].pos =  motor_data_double[i]->position; 
            else
            {
                mot_pos_diff[j].pos = mot_pos_diff[j-1].pos;
                mot_pos_diff[j-1].pos = motor_data_double[i]->position;
            }
             mot_pos_diff[j].mot = motor_data_double[i];     
        }       
        j++;
    }
}



Принимаю решение относительно средней позиции

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
void MOT_ProccesPositions(void)
{
    int i;
    uint32_t mid_idx = g_dbl_motors/2;
    
    for (i = 0; i < g_dbl_motors; i++)
    {
        if ( (abs(mot_pos_diff[i].pos-mot_pos_diff[mid_idx].pos)) > glob_mot_data.max_pos_diff)
        {
            mot_pos_diff[i].pwm -= glob_mot_data.pwm_delta;
            if (mot_pos_diff[i].pwm < glob_mot_data.pwm_min)
                mot_pos_diff[i].pwm = glob_mot_data.pwm_min;
        }
        else
        {
            mot_pos_diff[i].pwm += glob_mot_data.pwm_delta;
            if (mot_pos_diff[i].pwm > glob_mot_data.pwm_max)
                mot_pos_diff[i].pwm = glob_mot_data.pwm_max;
        }
    }  
}




Правильно, по науке нужно считать через
Среднеквадрати́ческое отклоне́ниестанда́ртное отклоне́ние, станда́ртный разбро́с) — в теории вероятностей и статистике наиболее распространённый показатель рассеивания значений случайной величины относительно её математического ожидания.


Массив должен быть 2-х мерным
по строкам отколнение между двигателями.
по стобцам - статистика плавности изменения скоростей.

Конечно же, от задачи зависит,
от необходимой точности позиционирования.

Если задача требует изменение скоростей и точность позиционирования,
а не только их синхронизацию на одной скорости
то нужен думерный массив и среднеквадратичное отколение скоростей
, в противном случае вы будет пролетать позиции за счет инерции
и дергать двигателями в пустую ( бороться с законами физики) .
Еще рекомнедую в массивах держать значение тока двигателя
что бы через него параметризовать управление
текущим( динамическим) значением момента инерции.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597347
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
д0kХПравильно, по науке нужно считать через
Среднеквадрати́ческое отклоне́ниестанда́ртное отклоне́ние, станда́ртный разбро́с) — в теории вероятностей и статистике наиболее распространённый показатель рассеивания значений случайной величины относительно её математического ожидания.


Массив должен быть 2-х мерным
по строкам отколнение между двигателями.
по стобцам - статистика плавности изменения скоростей.

Конечно же, от задачи зависит,
от необходимой точности позиционирования.

Если задача требует изменение скоростей и точность позиционирования,
а не только их синхронизацию на одной скорости
то нужен думерный массив и среднеквадратичное отколение скоростей
, в противном случае вы будет пролетать позиции за счет инерции
и дергать двигателями в пустую ( бороться с законами физики) .
Еще рекомнедую в массивах держать значение тока двигателя
что бы через него параметризовать управление
текущим( динамическим) значением момента инерции.
а компот пример?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597350
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
д0kХЕще рекомнедую в массивах держать значение тока двигателя
что бы через него параметризовать управление
текущим( динамическим) значением момента инерции.

Если у вас начинает расти ток , но скорость еще укладывается
в допуск , можете потихоньку начинать увеличивать скорость ,
потому как через несколько тактов измерений она вылетит за допуск.
инфа сотка :)
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597356
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jenya7д0kХПравильно, по науке нужно считать через
пропущено...


Массив должен быть 2-х мерным
по строкам отколнение между двигателями.
по стобцам - статистика плавности изменения скоростей.

Конечно же, от задачи зависит,
от необходимой точности позиционирования.

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

пример чего ?

Долить литр воды в компот мне не жалко
абстрактный пример для двигателя переменного тока.

:)
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597364
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доработал функцию принятия решения. Добавил счетчик попыток. Если он превышен - немедленная остановка всех моторов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
void MOT_ProcessPositions(void)
{
    int i;
    uint32_t mid_idx = g_dbl_motors/2;
    
    for (i = 0; i < g_dbl_motors; i++)
    {
        if (i != mid_idx)
        {
            if ( (abs(mot_pos_diff[i].pos-mot_pos_diff[mid_idx].pos)) > glob_mot_data.max_pos_diff)
            {
                if (mot_pos_diff[i].pos > mot_pos_diff[mid_idx].pos)
                {
                    mot_pos_diff[i].retries++;
                    mot_pos_diff[i].pwm -= glob_mot_data.pwm_delta;
                    if (mot_pos_diff[i].pwm < glob_mot_data.pwm_min)
                        mot_pos_diff[i].pwm = glob_mot_data.pwm_min;
                }
                else
                {
                    mot_pos_diff[i].pwm += glob_mot_data.pwm_delta;
                    if (mot_pos_diff[i].pwm > glob_mot_data.pwm_max)
                        mot_pos_diff[i].pwm = glob_mot_data.pwm_max;
                }
            }
            else
            {
                mot_pos_diff[i].retries = 0;
            }
        }
    }  
}



Вопрос будет ли это работать. Скажем в одной итерации средняя позиция у мотора №3 в другой - позиции поменялись и средняя позиция у мотора №2.
Не создаст ли это race condition?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597366
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Принимаю решение относительно средней позиции
Код: plaintext
1.
    uint32_t mid_idx = g_dbl_motors/2;


Для массивов четного размера решение не очень.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597367
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если у вас двигатели постоянного тока
то компот можно развести 50 на 50 .
авторКоэффициент мощности математически можно интерпретировать как косинус угла между векторами тока и напряжения. Поэтому в случае синусоидальных напряжения и тока величина коэффициента мощности совпадает с косинусом угла, на который отстают соответствующие фазы.


что бы небыло приторно, а компот оставался компотом.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597377
д0kХ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вобще компот есть на алиэкспрессе :)
Гораздо дешевле и вкуснее, чем варить его из костылей )


.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597382
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7Принимаю решение относительно средней позиции
Код: plaintext
1.
    uint32_t mid_idx = g_dbl_motors/2;


Для массивов четного размера решение не очень.
а что если привязку делать к минимальной позиции а не к средней? все моторы замедлять до минимальной позиции?
только раньше я компенсировал скорости
Код: plaintext
1.
2.
3.
4.
5.
6.
 //no position difference - maximum speed   
if (posdif < glob_mot_data.max_pos_diff)
{
    MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
}


а теперь что делать ума не приложу.
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597393
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Раньше у тебя вообще как-то коряво написано
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
    pwm1 = motor1_data_double->speed;   
    pwm2 = motor2_data_double->speed;
    
    //no position difference - maximum speed   
    if (posdif < glob_mot_data.max_pos_diff)
    { 
       MOT_SendData(motor1_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
       MOT_SendData(motor2_data_double, CAN_COM_SSET, glob_mot_data.pwm_max);
    }
    else if (gt == 0)  //position1 > position2
    {...}
    else if (gt == 1)  //position2 > position1
    {...}

    //update speed
     MOT_SendData(motor1_data_double, CAN_COM_SSET, pwm1);
     MOT_SendData(motor2_data_double, CAN_COM_SSET, pwm2);


Т.е. ты включаешь на максимум, а потом возвращаешь как было. Что на самом деле происходит?
...
Рейтинг: 0 / 0
Найти числовую разницу в массиве в С.
    #39597412
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа товарищи, сформулируйте сначала алгоритм схематично: что я хочу.
Затем: что из этого у меня не получается.
Потом примерную формализацию на псевдокоде.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Найти числовую разницу в массиве в С.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]