Перейти к содержанию
    

Olegus

Участник
  • Постов

    51
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Olegus

  • Звание
    Участник
    Участник

Посетители профиля

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

  1. Вот как смог своим осциллографом заснял два случая (рабочий и нет). Если что-то можно увидеть.
  2. Здравствуйте. Соединил по I2C MPU6050 and F28069M LaunchPad все работает хорошо. Но при соединении по I2C MPU6050 and F28379D LaunchPad нет данных и такое ощущение, что датчик молчит. Датчик тот же, процессоры из одной и той же линейки, т.е. шлю те же запросы в те же регистры, а на выходе нуль. Скрин SDA and SCL прикрепил (снимал анализатором Logic 2). Как видно датчик не прижимает шину к земле на девятом такте, как я понимаю, а почему не понимаю? Соединение с подтяжкой линий SDA and SCL на 2,2кОм к питанию - схемотехника такая же как и для нормально работающего варианта F28069M LaunchPad. Может кто подскажет или натолкнет на мысль новичка в чем разница может быть? Спасибо.
  3. Может кто-то пользовался примерами Matlaba из Motor Control Blockset (TI LAUNCHXL-F28379D controller, BOOSTXL-DRV8305 inverters)? Не могу запустить. Поговорить бы с кем-нибудь у кого получилось. Использую BLDC с треугольной обмоткой может в этом дело (а у них примеры для Звезды, как я думаю)? Косвенно проверил это железо все работает (прошил на мигание светодиодом, прошил синусоиду на МК и передал по последовательному каналу на комп-все отображается, т.е. канал работает). Использую обычный Serial (у них есть Serial XCP, в чем разница пока не понял). Возможно проблема какая-то в выставляемой скорости СОМ порта по умолчанию в примерах для TI LAUNCHXL-F28379D стоит значение 5e6 или 12е6, но у меня максимальная скорость 921600 в свойствах в диспетчере задач я могу выбрать и когда я делаю пример Open Loop Control of 3-phase motors я не могу установить свою скорость она опять сбрасывается по началу моделирования в скорость, которая стояла по умолчанию 5e6, может тут что-то?
  4. Это вкладка Diagnostics? Галочка Treat all warnings as errors не стоит!? Или же может во вкладке Extra Options убрать --warnings_are_errors?!
  5. А на сайте IAR можно скачать старую версию или они только последнюю толкают, нужен IAR 7.0?
  6. Я сам не шибко программист, но просто вроде с официального сайта серьезной фирмы выкачал данный проект и неужели там могут быть ошибки в коде? Я делаю по их AN, они говорят откомпилировать и загрузить и все.
  7. ST Nucleo STM32F411 + ICM 20948

    Я использую ST Nucleo STM32F411 + ICM 20948 daughterboard + Nucleo Carrier Board verB and ICM-20948 eMD 1.0 for Nucleo Board. ICM 20948 -это акселерометры фирмы InvenSense, они предлагают готовый проект для IAR, но когда пытаюсь откомпилировать и загрузить выдает ошибку: Error[Pa149]: some enum values are not handled in this switch statement: “DYN_PRO_TRANSPORT_EVENT_TX_START_DMA” D:\1.0.0\sources\examples\example-icm20948\example.c 1062. Error while running C/C++ Compiler. Эта ошибка указывает на строку кода в файле example.c, но переменной с именем DYN_PRO_TRANSPORT_EVENT_TX_START_DMA в этом файле вообще нет. Может кто подскажет о чем это?
  8. Передаю и принимаю пакеты через COM порт. Прием и передачу по Rx и Tx осуществляю последовательно. Вопрос нельзя ли это делать параллельно для увеличения скорости передачи по каждой линии. Пакеты по 63 байта, если только передаю то вроде скорость получается около 100 Гц, но если еще принимать, то скорость падает. Использую стандартные fwrite(port, data) и fread(port, data) последовательно, но как бы их вызывать параллельно чтобы скорость 100 Гц сохранить. Спасибо.
  9. Matlab_plot

    Не могу понять почему не рисует. Вроде как в хелпе пишу, по одному без проблем. Два без указания свойств тоже рисует. y1 = sin(x); y2 = cos(x); plot(x,y1,'LineWidth',2, 'Color','red', x,y2); Error using plot Data must be a single matrix Y or a list of pairs X,Y.
  10. Даже если так, то с передачей у меня как раз-то нет проблем (хотя на данном этапе я об этом думал что мои числа могут совпасть с значениями конца и начала- я просто выбрал для передачи числа заведомо не совпадающие). Эту проблему надо будет решать и наверно как вы правильно указали. Почему у меня прием на Arduino идет через раз? Если один раз проходит, а числа я не меняю (одни и тоже значение передаю) то совпадений для маркера начала пакета нет и Arduino принимает адекватно, но почему не постоянно.
  11. Привет. Возникла необходимость взаимного обмена данными float между Matlab и Arduino. Взял пример https://github.com/leomariga/Simulink-Arduino-Serial. Но возникает проблема неустойчивого приема данных на Arduino. Могу два раза запустить число из Matlab в Arduino и затем опять в Matlab для отображения на графике все будет ок, а на третий раз бред полный потом несколько запусков все хорошо, потом опять бред или пару секунд норм, а потом все скачет прыгает, т.е. начинается раздрай. Передача с Arduino на Matlab идет устойчиво (передаются float без сбоя) значит проблема именно в передаче из Matlab в Arduino . Использую Header для проверки начала пакета. Может кто что подскажет. //In Arduino IDE Float(4 byte) and In Matlab Single(4 byte) --> We can exchange these varibales between Matlab and Arduino // Create a union to easily convert float to byte typedef union{ float number; // for this variable allocated 4byte uint8_t bytes[4]; // for this variable allocated 4*1byte(8 bit) = 4 byte } FLOATUNION_t; uint8_t test = 'A'; // for check transmitting packet uint8_t header = 0; // initial conditions // Create the variables you want to receive FLOATUNION_t myValue1; FLOATUNION_t myValue2; FLOATUNION_t myValue3; FLOATUNION_t myValue4; FLOATUNION_t myValue5; FLOATUNION_t myValue6; // Create the variables to send FLOATUNION_t send1; FLOATUNION_t send2; FLOATUNION_t send3; void setup() { // initialize serial, use the same boudrate in the Simulink Config block Serial.begin(38400); } void loop(){ // Get the floats from serial if (Serial.available()>1) { header = Serial.read(); if (header == test)// { myValue1.number = getFloat(); // Give your float a value myValue2.number = getFloat(); // Give your float a value myValue3.number = getFloat(); // Give your float a value myValue4.number = getFloat(); // Give your float a value myValue5.number = getFloat(); // Give your float a value myValue6.number = getFloat(); // Give your float a value } } // do something with numerals from serial send1.number =myValue1.number+myValue2.number; // new variables 2.4;// send2.number = myValue3.number+myValue4.number; // 3.6;// send3.number = myValue5.number+myValue6.number; //4.7;// // Print header: Important to avoid sync errors! Serial.write('A'); // Print float data for (int i=0; i<4; i++){ Serial.write(send1.bytes[i]); } for (int i=0; i<4; i++){ Serial.write(send2.bytes[i]); } for (int i=0; i<4; i++){ Serial.write(send3.bytes[i]); } // Print terminator Serial.print('\n'); //Serial.flush(); // Use the same delay in the Serial Receive block delay(50); } float getFloat(){ int cont = 0; FLOATUNION_t f; while (cont < 4 ){ f.bytes[cont] = Serial.read() ; cont = cont +1; } return f.number; }
  12. Пересобрал проект все пошло. Что было так и не понял глюк какой-то.
  13. В True Studio написал простую функцию, подключил ее к main, все компилируется, пошагово ее выполняю в функцию заходит считает там правильно, но как только дохожу до конца функции и надо возращать полученное значение и выходить, все виснет. Что-то похожее у меня было с выводом в порт чисел с плавточкой но оказалась у меня были подключены обрезанные библиотеки (Проект генерю CubeMx). Раньше делал тоже самое все работало, а сейчас не пойму в чем дело. Может кто подскажет?
  14. Использую LSM303DLHC. Задал скорость считывания данных для акселерометра 50 Гц, а для магнитометра 30Гц. Для акселерометра проверяю в регистре STATUS_REG_A (с.28 LSM303DLHC datasheet)состояние 3-го бита и в момент =1 считываю данные из выходных регистров, и у меня этот флаг поднимается с частотой 50 Гц. int8_t n_bit_status_ready_Acc = 3; status_ready_Acc = Accel_IO_Read(0x32,LSM303DLHC_STATUS_REG_A); if ( ((1 << n_bit_status_ready_Acc) & status_ready_Acc) == (1 << n_bit_status_ready_Acc) ) { ptr = Accel_ReadAcc(); Ax_3 = ptr[0]; Ay_3 = ptr[1]; Az_3 = ptr[2]; Ax_sum3 = Ax_sum3 + Ax_3; Ay_sum3 = Ay_sum3 + Ay_3; Az_sum3 = Az_sum3 + Az_3; Ncal_current = Ncal_current + 1; free(ptr); } т.е. переменная Ncal_current за 1 секунду достигает значение 50. То же самое делаю для магнитометра. Регистр статуса SR_REG_M (09h) (с.39 LSM303DLHC datasheet). Вижу по графику данных с магнитометра, что частота меняяется (если меняю частоту выдачи данных), т.е. магнитометр программируется адекватно, но также как с акселерометром проверяю нулевой бит Регистр статуса SR_REG_M (09h) а там почти все время 1. И получается скорость сотни Гц вместо моих 30Гц. Почему так? Вроде один и тот же чип, с акселем работает, а с магнитометром нет.
  15. Может кто-нибудь сталкивался с AN3192 Application note ("Using LSM303DLH for a tilt compensated electronic compass"). Там описан процесс калибровки акселерометра и магнитометра. С акселерометром разобрался и проделал все работает, а с магнитометром не могу вдуплится. Не могу понять как получен вектор X (стр.28-29, выражения 27-28). Вдруг кто-то сталкивался.
×
×
  • Создать...