roboforum.ru

Технический форум по робототехнике.
Текущее время: 11 апр 2025, 15:38

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Балансировка мотора с пропеллером на стенде
СообщениеДобавлено: 12 май 2014, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
Занимаюсь разработкой стенда на основе показаний акселерометра.
В природе уже есть подобные разработки.
1)Вот http://habrahabr.ru/post/207478/ без подробностей конструкции. Сложная в изготовлении конструкция.
2)Вот торгуют http://www.dynexhobby.com/ http://www.youtube.com/user/dynexhobby то же не простая основа

общего в них это крепление позволяющее колебаться всей системе с частотой вращения мотора. То есть на показаниях мы видим "чистую"(близкую к "чистой") синусоиду. вида
Изображение
соответственно наибольший геморрой в создании такой системы под конкретные нагрузки обороты и пр.
причем балансировочные грузики тоже влияют.

3) http://youtu.be/eWWOqcSu8IY проект открытый вот исходники http://diydrones.com/forum/topics/balan ... %3A1483203 (они косячные)
тут крепление на упругих демпферов. то есть не надо мудачиться с основой (почти не надо). к колебаниям мотора добавляется реакция опор вида
Изображение
вру. это идеальный вариант где мы видим таки периодичность и max min вибраций. чуть меньше дисбаланса и уже не увидим. будет однородная каша. то есть max точность ниже предыдущих схем.

как мне кажется наиболее высокая точность у систем которые не только колеблются с частотой мотора (вынужденные колебания), но и собственную частоту имеют аналогичную. то есть наступает резонанс и в итоге на показаниях можно отследить наиболее мелкий дисбаланс.
подходящая конструкция эт "станок с качающейся рамой" http://www.cardanbalans.ru/balans.htm
вот как то так (старая версия)


про акселерометры. пока лучший вариант получился на ADXL345 с подключением по шине SPI(4 pin)ибо быстрые (3.2кГц)
из доступного ПО есть исходники автора 3го стенда http://diydrones.com/forum/topics/balan ... %3A1483203 ну тут блин шляпа какая то под arduino 8MHz не хочет толком работать на 16MHz. код для ПК под visual basic релиз вылетает с ошибками регулярно.
в сети есть код и тоже с ошибками. так что наваял по минимуму чтение данных с акселя и датчика оборотов и вывод в порт. экспериментирую дальше.

есть кто в теме? может че посоветуете?


Последний раз редактировалось Nesenin 15 апр 2016, 15:17, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 15:23 
Не в сети

Зарегистрирован: 31 июл 2011, 21:42
Сообщения: 36
_


Последний раз редактировалось Механик 29 авг 2015, 11:58, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 15:46 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Не?
https://www.google.ru/search?q=iSeismom ... g&tbm=isch
https://itunes.apple.com/app/iseismomet ... 90739?mt=8


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 15:50 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
какое еще товарное изделие?!вы ничего не попутали? это форум любителей собирать всякую хрень, в большинстве своем бесполезную, кроме как хобби для хозяина.
кроме того. коль это был бы коммерческий проект, значит исходники закрыты всякие, know how засекречены. и кто бы читал эту тему? люди ждущие коммерческий релиз? е мое. я на форум захожу информацию почерпнуть, что б самому в своих проектах применить иногда другим помогаю. другие люди, как мне думается,делают то же самое.
вот я и делюсь информацией, которую узнал, получил во время экспериментов и прошу поделиться других.
идите на http://boomstarter.ru/ и https://www.kickstarter.com/ со своим желанием товарного изделия

Добавлено спустя 2 минуты 29 секунд:
Dmitry__ писал(а):

ну нет же! это уровень вибрации, а тут поиск угла дисбаланса.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 15:57 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Nesenin писал(а):
ну нет же! это уровень вибрации, а тут поиск угла дисбаланса.

Чуть больше итераций, на ютубе есть методички...

Добавлено спустя 3 минуты 45 секунд:
Вот пример:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 15:59 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
Dmitry__ писал(а):
Nesenin писал(а):
ну нет же! это уровень вибрации, а тут поиск угла дисбаланса.

Чуть больше итераций, на ютубе есть методички...

знаю я. искать методом тыка. сначала ищем угол потом массу. контроль уровня вибраций как душе угодно например зеркальце+лазер. это все не то. не та точность прежде всего.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 17:58 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
forum34/topic10956.html

Добавлено спустя 6 минут 3 секунды:
Там есть ссылка на методу. Делаешь замер, вешаешь груз известной массы в известное место, считаешь по формуле и балансируешь.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 19:07 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Myp писал(а):
хочу ротор дремеля китайского балансировать!

Думаю, будет проще статически на ножах балансировать, ротор снимать по-любому, ибо проще точением ротора балансировать коллекторник...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 19:12 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
Они по-моему и на заводах так балансируются. Видел на каком-то роторе высечку отрезным кругом.

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 19:21 
Не в сети
скрытый хозяин вселенной :)
Аватара пользователя

Зарегистрирован: 18 сен 2006, 12:26
Сообщения: 18018
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Dmitry__ писал(а):
Myp писал(а):
хочу ротор дремеля китайского балансировать!

Думаю, будет проще статически на ножах балансировать, ротор снимать по-любому, ибо проще точением ротора балансировать коллекторник...

на ножах и так сбалансирован
на роторе лунки от сверла есть

_________________
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 12 май 2014, 19:32 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Myp писал(а):
на ножах и так сбалансирован
на роторе лунки от сверла есть

Это сбалансировано для ширпотреба. Теперь надо для себя :)
Я так в 90-х кинескопы для "себя" сводил, можно целый день это делать :D


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 11 июн 2014, 22:19 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
Итак-с у меня кой чего получилось.
Вложение:
SAM_4522.JPG
SAM_4522.JPG [ 2.89 МиБ | Просмотров: 22478 ]

Доработанная качающаяся рама. Есть возможность быстро корректировать собственную частоту колебаний за счет замены пружин и смещения места ее опоры. Точность на такой раме реально выше других.
Аппаратная часть состоит из arduino и акселя adsl 345 подключенного по SPI (вот такой например купить можно за не дорого ) и оптопары (с компаратором например), которая метку на моторе распознает (если корпус темный можно корректором нарисовать белую метку ). Еще можно было бы сделать вариант использующий лазер\датчик и следить по пропеллеру, но до этого я не дошел.
Вот рабочий код:
Код:
//Add the SPI library so we can communicate with the ADXL345 sensor
#include <SPI.h>


#define MAX_SAMPLES 550

//Assign the Chip Select signal to pin 10.
int CS=10;

//This is a list of some of the registers available on the ADXL345.
//To learn more about these and the rest of the registers on the ADXL345, read the datasheet!
char POWER_CTL = 0x2D;   //Power Control Register
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32;   //X-Axis Data 0
char DATAX1 = 0x33;   //X-Axis Data 1
char DATAY0 = 0x34;   //Y-Axis Data 0
char DATAY1 = 0x35;   //Y-Axis Data 1
char DATAZ0 = 0x36;   //Z-Axis Data 0
char DATAZ1 = 0x37;   //Z-Axis Data 1

//This buffer will hold values read from the ADXL345 registers.
unsigned char values[10];
//These variables will be used to hold the x,y and z axis accelerometer values.
int x,y,z;

byte lowbyte_x[MAX_SAMPLES], highbyte_x[MAX_SAMPLES];
//byte lowbyte_y[MAX_SAMPLES], highbyte_y[MAX_SAMPLES];
//byte lowbyte_z[MAX_SAMPLES], highbyte_z[MAX_SAMPLES];
byte zero[MAX_SAMPLES];

int inPin = 2;
int val = 0; 
int sample_index,t;
const int dataReadyPin = 4;

void setup(){
  //Initiate an SPI communication instance.
  SPI.begin();
  //Configure the SPI connection for the ADXL345.
  SPI.setDataMode(SPI_MODE3);
  //Create a serial connection to display the data on the terminal.
  Serial.begin(115200);
 
    pinMode(dataReadyPin, INPUT);
    pinMode(inPin, INPUT);
   
  //Set up the Chip Select pin to be an output from the Arduino.
  pinMode(CS, OUTPUT);
  //Before communication starts, the Chip Select pin needs to be set high.
  digitalWrite(CS, HIGH);
 
 

  //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
  writeRegister(POWER_CTL, 0x08);  //Measurement mode 
    //Put the ADXL345 into +/- 8G range by writing the value 0x01 to the DATA_FORMAT register.
  writeRegister(DATA_FORMAT, 0x02);
  writeRegister(0x2C, 0x0F); // 3200 HZ
    writeRegister(0x2E, 0x80); // set dataready to interrupt pin INT1 and active high
/* writeRegister(0x1E, 0x00); // X-offset to 0
  writeRegister(0x1F, 0x00); // Y-offset to 0
  writeRegister(0x20, 0x00); // Z-offset to 0
  */  delay(100);
}

void loop(){
               for (sample_index=0; sample_index<MAX_SAMPLES; sample_index++)
               {
                 while (digitalRead (dataReadyPin) == LOW) ;
               

  //Reading 6 bytes of data starting at register DATAX0 will retrieve the x,y and z acceleration values from the ADXL345.
  //The results of the read operation will get stored to the values[] buffer.

  readRegister(DATAX0, 6, values);
 
  zero[sample_index] = digitalRead(inPin) ;//digitalRead (dataReadyPin); //
 
  //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis.
  //The X value is stored in values[0] and values[1].
  lowbyte_x[sample_index]=values[0];
  highbyte_x[sample_index]=values[1];
  //x = ((int)values[1]<<8)|(int)values[0];
  //The Y value is stored in values[2] and values[3].
//  lowbyte_y[sample_index]=values[2];
//  highbyte_y[sample_index]=values[3];
  //y = ((int)values[3]<<8)|(int)values[2];
  //The Z value is stored in values[4] and values[5].
//  lowbyte_z[sample_index]=values[4];
//  highbyte_z[sample_index]=values[5];
// z = ((int)values[5]<<8)|(int)values[4];
               }
               
               
 
  for (t=0; t < MAX_SAMPLES; t++)
  {
    x = ((int)highbyte_x[t] << 8) | (int)lowbyte_x[t];
//   y = ((int)highbyte_y[t] << 8) | (int)lowbyte_y[t];
//   z = ((int)highbyte_z[t] << 8) | (int)lowbyte_z[t];
    val = zero[t];
  //Print the results to the terminal.
  Serial.print(x, DEC);
  Serial.print("\t");
/*  Serial.print(y, DEC);
  Serial.print("\t");
  Serial.print(z, DEC);
  Serial.print("\t"); */
  Serial.println(val);   
 
// delay(1);
  }
  Serial.println ("End");
}

//This function will write a value to a register on the ADXL345.
//Parameters:
//  char registerAddress - The register to write a value to
//  char value - The value to be written to the specified register.
void writeRegister(char registerAddress,unsigned char value){
  //Set Chip Select pin low to signal the beginning of an SPI packet.
  digitalWrite(CS, LOW);
  //Transfer the register address over SPI.
  SPI.transfer(registerAddress);
  //Transfer the desired register value over SPI.
  SPI.transfer(value);
  //Set the Chip Select pin high to signal the end of an SPI packet.
  digitalWrite(CS, HIGH);
}

//This function will read a certain number of registers starting from a specified address and store their values in a buffer.
//Parameters:
//  char registerAddress - The register addresse to start the read sequence from.
//  int numBytes - The number of registers that should be read.
//  char * values - A pointer to a buffer where the results of the operation should be stored.
void readRegister(char registerAddress, int numBytes,unsigned char * values){
  //Since we're performing a read operation, the most significant bit of the register address should be set.
  char address = 0x80 | registerAddress;
  //If we're doing a multi-byte read, bit 6 needs to be set as well.
  if(numBytes > 1)address = address | 0x40;
 
  //Set the Chip select pin low to start an SPI packet.
  digitalWrite(CS, LOW);
  //Transfer the starting register address that needs to be read.
  SPI.transfer(address);
  //Continue to read registers until we've read the number specified, storing the results to the input buffer.
  for(int i=0; i<numBytes; i++){
    values[i] = SPI.transfer(0x00);
  }
  //Set the Chips Select pin high to end the SPI packet.
  digitalWrite(CS, HIGH);
}

Тут у нас чтение данных с акселя ( с 1 координаты) и оптопары, запись в память (на atmega328 влазят 550 значений) и выдача их в порт. В конце передачи еще пишется "end" для того что ПО на компе разбивала на части.

А вот что я наваял для компа в LabVIEW естественно...
Вложение:
прога.png
прога.png [ 180.64 КиБ | Просмотров: 22456 ]

тут у нас прием всего,корректировок всякого, есть подсчет оборотов, есть фильтр данных с акселя, есть выдача фильтрованных данных за 1 оборот в полярных координатах (кружки такие получаются когда синусоида четкая). Ну и собственно считается всякими хитрыми преобразованиями спектр всего этого дела. Можно с обработанных и необработанных данных считать. Отдельно просматривается наш рабочий диапозон (10Гц это 600об\мин 100Гц-6000об\мин). Для нашей частоты смотрим фазу вычитаем фазу сигнала оптопары и находим искомое смещение масс. Уровень того смещения у нас по амплитуде смотрится. На графике 10 последних значений рисуются. Исходник под labview 13 (там еще надо ставить visa,robotics модули):
Вложение:
подvi.rar [69.56 КиБ]
Скачиваний: 0

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 17 июн 2014, 19:41 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
опробовал такой датчик
Вложение:
$T2eC16JHJF0FF,DyI9elBSefVfn7Ig~~60_12.JPG
$T2eC16JHJF0FF,DyI9elBSefVfn7Ig~~60_12.JPG [ 93.38 КиБ | Просмотров: 22293 ]

(купил тут)
он как бы на отражение своего ИК диода, но ловит свет и от солнца и от ламп и от лазера (проверял).
хорошего в нем то, что таки он позволил сделать вариант синхросигнала по пропеллеру.
по прерыванию флаг меняется с 0 на 1 и обратно. данные в ПО на ПК выглядят таким образом:
Вложение:
прога2.png
прога2.png [ 191.03 КиБ | Просмотров: 22472 ]

(данные с другой платформы с большого мотора и пропа. фото будут позже)
ничего в расчетах не меняется все работает норм с подсчетом по фронту нарастания.
прошивка поменялась на это
Код:
//Add the SPI library so we can communicate with the ADXL345 sensor
#include <SPI.h>


#define MAX_SAMPLES 550

//Assign the Chip Select signal to pin 10.
int CS=10;

//This is a list of some of the registers available on the ADXL345.
//To learn more about these and the rest of the registers on the ADXL345, read the datasheet!
char POWER_CTL = 0x2D;   //Power Control Register
char DATA_FORMAT = 0x31;
char DATAX0 = 0x32;   //X-Axis Data 0
char DATAX1 = 0x33;   //X-Axis Data 1
char DATAY0 = 0x34;   //Y-Axis Data 0
char DATAY1 = 0x35;   //Y-Axis Data 1
char DATAZ0 = 0x36;   //Z-Axis Data 0
char DATAZ1 = 0x37;   //Z-Axis Data 1

//This buffer will hold values read from the ADXL345 registers.
unsigned char values[10];
//These variables will be used to hold the x,y and z axis accelerometer values.
int x,y,z;

byte lowbyte_x[MAX_SAMPLES], highbyte_x[MAX_SAMPLES];
//byte lowbyte_y[MAX_SAMPLES], highbyte_y[MAX_SAMPLES];
//byte lowbyte_z[MAX_SAMPLES], highbyte_z[MAX_SAMPLES];
byte zero[MAX_SAMPLES];

int inPin = 2;
int LedPin = 3;
int val = 0; 
int sample_index,t;
const int dataReadyPin = 4;
byte prop = LOW;

void setup(){
  //Initiate an SPI communication instance.
  SPI.begin();
  //Configure the SPI connection for the ADXL345.
  SPI.setDataMode(SPI_MODE3);
  //Create a serial connection to display the data on the terminal.
  Serial.begin(115200);
 
    pinMode(dataReadyPin, INPUT);
    pinMode(inPin, INPUT);
     pinMode(LedPin, OUTPUT);
  //Set up the Chip Select pin to be an output from the Arduino.
  pinMode(CS, OUTPUT);
  //Before communication starts, the Chip Select pin needs to be set high.
  digitalWrite(CS, HIGH);
  digitalWrite(LedPin, LOW);
 
  //Digital Pin 2 Set As An Interrupt
attachInterrupt(0, prop_interrupt, FALLING); //RISING c LOW на HIGH, FALLING с HIGH на LOW
 

  //Put the ADXL345 into Measurement Mode by writing 0x08 to the POWER_CTL register.
  writeRegister(POWER_CTL, 0x08);  //Measurement mode 
    //Put the ADXL345 into +/- 8G range by writing the value 0x01 to the DATA_FORMAT register.
  writeRegister(DATA_FORMAT, 0x02);
  writeRegister(0x2C, 0x0F); // 3200 HZ
    writeRegister(0x2E, 0x80); // set dataready to interrupt pin INT1 and active high
/* writeRegister(0x1E, 0x00); // X-offset to 0
  writeRegister(0x1F, 0x00); // Y-offset to 0
  writeRegister(0x20, 0x00); // Z-offset to 0
  */  delay(100);
}

void loop(){
               for (sample_index=0; sample_index<MAX_SAMPLES; sample_index++)
               {
                 while (digitalRead (dataReadyPin) == LOW) ;
               

  //Reading 6 bytes of data starting at register DATAX0 will retrieve the x,y and z acceleration values from the ADXL345.
  //The results of the read operation will get stored to the values[] buffer.

  readRegister(DATAX0, 6, values);
 
 
  zero[sample_index] = prop ;//digitalRead (dataReadyPin); //
 
  //The ADXL345 gives 10-bit acceleration values, but they are stored as bytes (8-bits). To get the full value, two bytes must be combined for each axis.
  //The X value is stored in values[0] and values[1].
  lowbyte_x[sample_index]=values[0];
  highbyte_x[sample_index]=values[1];
  //x = ((int)values[1]<<8)|(int)values[0];
  //The Y value is stored in values[2] and values[3].
//  lowbyte_y[sample_index]=values[2];
//  highbyte_y[sample_index]=values[3];
  //y = ((int)values[3]<<8)|(int)values[2];
  //The Z value is stored in values[4] and values[5].
//  lowbyte_z[sample_index]=values[4];
//  highbyte_z[sample_index]=values[5];
// z = ((int)values[5]<<8)|(int)values[4];
               }
               
               
 
  for (t=0; t < MAX_SAMPLES; t++)
  {
    x = ((int)highbyte_x[t] << 8) | (int)lowbyte_x[t];
//   y = ((int)highbyte_y[t] << 8) | (int)lowbyte_y[t];
//   z = ((int)highbyte_z[t] << 8) | (int)lowbyte_z[t];
    val = zero[t];
  //Print the results to the terminal.
  Serial.print(x, DEC);
  Serial.print("\t");
/*  Serial.print(y, DEC);
  Serial.print("\t");
  Serial.print(z, DEC);
  Serial.print("\t"); */
  Serial.println(val);   
 
// delay(1);
  }
  Serial.println ("End");
}

//This function will write a value to a register on the ADXL345.
//Parameters:
//  char registerAddress - The register to write a value to
//  char value - The value to be written to the specified register.
void writeRegister(char registerAddress,unsigned char value){
  //Set Chip Select pin low to signal the beginning of an SPI packet.
  digitalWrite(CS, LOW);
  //Transfer the register address over SPI.
  SPI.transfer(registerAddress);
  //Transfer the desired register value over SPI.
  SPI.transfer(value);
  //Set the Chip Select pin high to signal the end of an SPI packet.
  digitalWrite(CS, HIGH);
}

//This function will read a certain number of registers starting from a specified address and store their values in a buffer.
//Parameters:
//  char registerAddress - The register addresse to start the read sequence from.
//  int numBytes - The number of registers that should be read.
//  char * values - A pointer to a buffer where the results of the operation should be stored.
void readRegister(char registerAddress, int numBytes,unsigned char * values){
  //Since we're performing a read operation, the most significant bit of the register address should be set.
  char address = 0x80 | registerAddress;
  //If we're doing a multi-byte read, bit 6 needs to be set as well.
  if(numBytes > 1)address = address | 0x40;
 
  //Set the Chip select pin low to start an SPI packet.
  digitalWrite(CS, LOW);
  //Transfer the starting register address that needs to be read.
  SPI.transfer(address);
  //Continue to read registers until we've read the number specified, storing the results to the input buffer.
  for(int i=0; i<numBytes; i++){
    values[i] = SPI.transfer(0x00);
  }
  //Set the Chips Select pin high to end the SPI packet.
  digitalWrite(CS, HIGH);
}

void prop_interrupt()
{
   prop = !prop;
   digitalWrite(LedPin, prop);
}

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 19 июн 2014, 00:57 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
вон оно как предполагалось (изолента там временно):
Вложение:
SAM_4597.JPG
SAM_4597.JPG [ 351.09 КиБ | Просмотров: 22319 ]

амплитуда нашей частоты (42гц или 2520об\мин) уменьшается (см. было download/file.php?id=33063&mode=view ) в 6 с лишним раз по сравнению с статическим методом (не предел).
Вложение:
прога2баланс.png
прога2баланс.png [ 178.2 КиБ | Просмотров: 22293 ]

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Динамическая балансировка ВМГ стенд
СообщениеДобавлено: 20 июн 2014, 18:56 
Не в сети
Аватара пользователя

Зарегистрирован: 26 янв 2012, 03:59
Сообщения: 1344
Откуда: Казань
прог. языки: LabVIEW
ФИО: Никита Есенин
Методика получается такая:
1)подбираем обороты такие чтоб получить наибольшую амплитуду. то есть резонанс и все такое.
2)лепим груз побольше чтоб он нам точно давал знать где у нас лишний вес. корректируем сдвиг фазы чтоб на полярных графиках было указано что куда (я еще сделал смену направления построения графиков для учета направления вращения. эт надо значения углов на -1 умножать иль 1)
3)снимаем груз, крутим на подобранных оборотах смотрим таки на каком угле у нас искомое смещение ( если добавочный угол +180 то сразу показывает куда груз вешать). потом если датчик работает по пропам и таки теряет проп отсчетный появляется подпункт 3.1 в ином случае пункт 4:
3.1) вешаем небольшой груз смотрим на изменение амплитуды: увеличился ? значит промахнулись. клеем груз по тому же углу но относительно другого пропа.
4)вешаем груз смотрим на амплитуду нужной частоты. на остальные пофиг. повторять пока не снизится до минимума.

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 53 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO