Top.Mail.Ru
Перейти к содержанию
Новости в мире симрейсинга
Новости

mypkuh

Рейсеры
  • Постов

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

  • Посещение

  • Победитель дней

    4

Весь контент mypkuh

  1. mypkuh

    Windows 10

    да уж после последней обновы, синий экраны один раз в день стабильно выскакивает.
  2. почти оффтоп, но всеже, если взять переменный резистор и прибабахать его к оси ручника [spoiler=китайского за 10$] Будет работать как ось на ардуинке?
  3. еще можно аккумулятор автомобильный и зарядку к нему подключить. будет также хорошо работать
  4. в одно прекрасное утро,когда ты будешь спать, и у тебя естественно не будет стоп-лося...вернемся к 700 или 1000$ / может через месяц, а может и через год, но это неизбежно
  5. В старой прошивке управление моторами происходило на очень высокой частоте, из-за чего при работе (в нагрузке и без) был характер высокочастотный писк, почему- во всех гайдах используется именно писклявая прошивка и не слова, что есть тихая. как на этом видео:
  6. Начал копать в сторону прошивок. нашел интересный вариант который не пищит! совсем не пищит :good: Теперь можно катать и без наушников :drive2: [spoiler=прошивка] /* Arduino code for dynamic playseat 2DOF Created 24 May 2011 by Jim Lindblom SparkFun Electronics https://www.sparkfun.com/products/10182 "Example Code" Created 24 Apr 2012 by Jean David SEDRUE Version betatest26 - 24042012 http://www.gamoover.net/Forums/index.php?topic=25907 Updated 20 May 2013 by Mathieu RIVIER in english http://www.xsimulator.net/2dof-wiper-motor-playseat/ in french : http://www.gamoover.net/Forums/index.php?topic=27617 Updated 30 April 2014 by RacingMat (bug for value below 16 corrected) Updated 1 June 2014 by RacingMat: implementation of Ultrasonic PWM (don't stack the motomonster! follow the new pinout!) results in video here : https://www.youtube.com/watch?v=FzhUga64fJs */ #define BRAKEVCC 0 #define RV 2 //beware it's depending on your hardware wiring #define FW 1 //beware it's depending on your hardware wiring #define STOP 0 #define BRAKEGND 3 //////////////////////////////////////////////////////////////////////////////// #define pwmMax 255 // or less than 255, if you want to lower the maximum motor's speed #define pwmMini 150 // defining the range of potentiometer's rotation 0 <-> 1024 const int potMini=300; const int potMaxi=800; //////////////////////////////////////////////////////////////////////////////// #define motLeft 0 #define motRight 1 #define potL A0 #define potR A1 //////////////////////////////////////////////////////////////////////////////// // DECLARATIONS //////////////////////////////////////////////////////////////////////////////// /* VNH2SP30 pin definitions // with 20kHz PWM pinout is changed, you CANNOT stack the motomonster anymore! Arduino /..Motomonster1 ......GND <-> GND pin ........5V <-> 5V .....pin 4 <-> pin 4 inA motor1 .....pin 5 <-> pin 9 inB motor2 .....pin 6 <-> xxxx .....pin 7 <-> pin 7 inA motor2 .....pin 8 <-> pin 8 inB motor1 .....pin 9 <-> pin 5 pwm motor1 .....pin 10 <-> pin 6 pwm motor2 */ int inApin[2] = { 7, 4}; // INA: Clockwise input int inBpin[2] = { 8, 5}; // INB: Counter-clockwise input int pwmpin[2] = { 9, 10}; // PWM input /* init position value at startup */ int DataValueL=512; //middle position 0-1024 int DataValueR=512; //middle position 0-1024 int sensorL,sensorR; //////////////////////////////////////////////////////////////////////////////// // INITIALIZATION //////////////////////////////////////////////////////////////////////////////// void analogWriteSAH_Init( void ) { // Stop the timer while we muck with it TCCR1B = (0 << ICNC1) | (0 << ICES1) | (0 << WGM13) | (0 << WGM12) | (0 << CS12) | (0 << CS11) | (0 << CS10); // Set the timer to mode 14... // // Mode WGM13 WGM12 WGM11 WGM10 Timer/Counter Mode of Operation TOP Update of OCR1x at TOV1 Flag Set on // CTC1 PWM11 PWM10 // ---- ----- ----- ----- ----- ------------------------------- ---- ----------------------- ----------- // 14 1 1 1 0 Fast PWM ICR1 BOTTOM TOP // Set output on Channel A and B to... // // COM1z1 COM1z0 Description // ------ ------ ----------------------------------------------------------- // 1 0 Clear OC1A/OC1B on Compare Match (Set output to low level). TCCR1A = (1 << COM1A1) | (0 << COM1A0) | // COM1A1, COM1A0 = 1, 0 (1 << COM1B1) | (0 << COM1B0) | (1 << WGM11) | (0 << WGM10); // WGM11, WGM10 = 1, 0 // Set TOP to... // // fclk_I/O = 16000000 // N = 1 // TOP = 799 // // fOCnxPWM = fclk_I/O / (N * (1 + TOP)) // fOCnxPWM = 16000000 / (1 * (1 + 799)) // fOCnxPWM = 16000000 / 800 // fOCnxPWM = 20000 ICR1 = 799; // Ensure the first slope is complete TCNT1 = 0; // Ensure Channel A and B start at zero / off OCR1A = 0; OCR1B = 0; // We don't need no stinkin interrupts TIMSK1 = (0 << ICIE1) | (0 << OCIE1B) | (0 << OCIE1A) | (0 << TOIE1); // Ensure the Channel A and B pins are configured for output DDRB |= (1 << DDB1); DDRB |= (1 << DDB2); // Start the timer... // // CS12 CS11 CS10 Description // ---- ---- ---- ------------------------ // 0 0 1 clkI/O/1 (No prescaling) TCCR1B = (0 << ICNC1) | (0 << ICES1) | (1 << WGM13) | (1 << WGM12) | // WGM13, WGM12 = 1, 1 (0 << CS12) | (0 << CS11) | (1 << CS10); } void analogWriteUltrasonic255( uint8_t motor, uint16_t value ) { // My variable value varies from 0 to 255 // but awaited range in OCR1A is from 0 to 799 and nothing else! switch (motor) { case 0: OCR1A=constrain(map(value, 0, 255, 0, 799), 0, 799); //D9 break; case 1: OCR1B=constrain(map(value, 0, 255, 0, 799), 0, 799); //D10 break; } } //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void setup() { analogWriteSAH_Init(); // serial initialization Serial.begin(115200); // initialization of Arduino's pins for (int i=0; i<2; i++) { pinMode(inApin[i], OUTPUT); pinMode(inBpin[i], OUTPUT); pinMode(pwmpin[i], OUTPUT); } // Initialize braked for motor for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); } } //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////// Main Loop //////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void loop() { while (1==1) // to get the fastest loop possible { readSerialData(); // DataValueR & L contain the last order received (if there is no newer received, the last is kept) // the previous order will still be used by the PID regulation MotorMotion Function sensorR = analogRead(potR); // range 0-1024 sensorL = analogRead(potL); // range 0-1024 motorMotion(motRight,sensorR,DataValueR); motorMotion(motLeft,sensorL,DataValueL); }} //////////////////////////////////////////////////////////////////////////////// // Procedure: wait for complete trame //////////////////////////////////////////////////////////////////////////////// void readSerialData() { byte Data[3]={ '0','0','0' }; // keep this function short, because the loop has to be short to keep the control over the motors if (Serial.available()>2){ //parse the buffer : test if the byte is the first of the order "R" Data[0]=Serial.read(); if (Data[0]=='L'){ Data[1]=Serial.read(); Data[2]=Serial.read(); // call the function that converts the hexa in decimal and that maps the range DataValueR=NormalizeData(Data); } if (Data[0]=='R'){ Data[1]=Serial.read(); Data[2]=Serial.read(); // call the function that converts the hexa in decimal and maps the range DataValueL=NormalizeData(Data); } } if (Serial.available()>16) Serial.flush(); } //////////////////////////////////////////////////////// void motorMotion(int numMot,int actualPos,int targetPos) //////////////////////////////////////////////////////// { int Tol=20; // no order to move will be sent to the motor if the target is close to the actual position // this prevents short jittering moves //could be a parameter read from a pot on an analogic pin // the highest value, the calmest the simulator would be (less moves) int gap; int pwm; int brakingDistance=30; // security concern : targetPos has to be within the mechanically authorized range targetPos=constrain(targetPos,potMini+brakingDistance,potMaxi-brakingDistance); gap=abs(targetPos-actualPos); // 0 <-> 1024 if (gap<= Tol) { analogWriteUltrasonic255(numMot,0); //too near to move : stop -> pwm=0 } else { // PID : P only as it calculates speed according to distance // smooth growing of speed //pwm=pwmMini+((255-pwmMini)/(100-Tol))*(gap-Tol); pwm=195; if (gap>50) pwm=215; if (gap>75) pwm=235; if (gap>100) pwm=255; pwm=map(pwm, 0, 255, 0, pwmMax); //adjust the value according to pwmMax for global sensitivity ! // if motor is outside from the range, send motor back to the limit ! // go forward (up) if ((actualPos { digitalWrite(inApin[numMot], HIGH); digitalWrite(inBpin[numMot], LOW); } // go reverse (down) if ((actualPos>potMaxi) || (actualPos>targetPos)) { digitalWrite(inApin[numMot], LOW); digitalWrite(inBpin[numMot], HIGH); } analogWriteUltrasonic255(numMot,pwm); } } //////////////////////////////////////////////////////////////////////////////// // Function: convert Hex to Dec //////////////////////////////////////////////////////////////////////////////// int NormalizeData(byte x[3]) //////////////////////////////////////////////////////////////////////////////// { int result; if ((x[2]==13) || (x[2]=='R') || (x[2]=='L')) //only a LSB and Carrier Return or 'L' or 'R' in case of value below 16 (ie one CHAR and not 2) { x[2]=x[1]; //move MSB to LSB x[1]='0'; //clear MSB } for (int i=1; i<3; i++) { if (x[i]>47 && x[i]<58 ){//for xA to xF x[i]=x[i]-48; } if ( x[i]>64 && x[i]<71 ){//for x0 to x9 x[i]=x[i]-55; } } // map the range from game telemetry which is sent between (0 <-> 255) to the mechanically authorized range (potMini <-> potMaxi) (0<->1024) result=map((x[1]*16+x[2]),0,255,potMini,potMaxi); return result; } [spoiler=видео сравнение]
  7. Ну вот прошел почти месяц, с момента постройки.... И я снова все разбираю и переделываю... уже в 3й раз, Немного расчетов личного времени, получилось около 30 часов, затрачено на этот сим то ли еще будет) Проблемы: Если делаешь кастом, тебя ждет много проблем) Что было: один мотор крутил быстрее чем второй, на долю секунды, вроде бы мелочь, но су*а жопу не обманешь она все чувствует Причины: не правильная развесовка, не правильные распределение нагрузки на рычаги Софтверные проблемы неисправные компоненты (брак чего либо из микросхем) Не правильная сборка кривые руки Следствия: Все должно работать точно! за Дело [spoiler=Перенесен центр тяжести на несколько сантиметров назад] https://photos.app.g...rXKmvj7ls4Er1b2 [spoiler=Левый двигатель установлен точно также как и правый, раньше он был повернут на 180 гр. что повлияло на расположения потов, крепеж рычага и сам рычаг, также переделаны.]https://photos.app.g...5nPhkk4WmLXfly1 Компонеты еще раз все проверены, схема пересобрана. Что-то пошло не так: Проблема сохранилась, возможно стала не такой выраженной, но под нагрузкой один мотор также отстает. Итоги У меня осталось два варианта: -радикальный, замена моторов на более мощные :good:, но $$$ слишком высока. -Возможно не хватает мощности моего текущего бп на 300вт, и мост на один мотор дает меньше чем следует. -Возможно бракованная партия мостов, брал у одного продавца. возможен вариант решения -это подключения на каждый мотор, по 1 мосту. П.С. больше ломаться нечему, победа близка :punk:
  8. ну так, если и ждать, то и пимакса 8к неплохо бы дождаться тоже
  9. из украины 15к гривень. без доставки https://www.olx.ua/o...ve-IDrNzhQ.html
  10. для ардуинки стандартный провод папа-папа, советую брать подленее чем на этом фото раза в 2
  11. у руля свой фб более тонкий, с платформой не смешивается. опять же на машинах с мягкой подвеской так не трясет.
  12. еще немного гемплея [spoiler=клац]https://www.youtube.com/watch?v=WPc2D98MjYU https://tehprivod.ru...ktory-nmrv.html
  13. Родная трапеция отлично подошла, и держит отлично платформу и меня. цена ей новой - 400р. [spoiler=Выглядит вполне надежно] Если сломается перейду на более дорогой вариант [spoiler=С али] Без Наездника симптому теже. хотя... без водителя ей еще сложнее поднимать))
  14. До скольки шумахер катал хоть и с перерывами? Дай старикам волю они никогда не уйдут. В Американских сериях и в 45 лет гоняют
  15. Пересобрал всю электронику на новых компонентах >< Вообщем не знаю с чем это связано, но один мотор работает быстрее и отзывчивее, чем второй при прочих равных, меняя моторы местами ничего не меняется, значит дело не в моторах. До замены электрической части было тоже самое, там второй мотор вообще перестал возвращать платформу в исходное состояние, а позже перемолотил потенциометры вместе с креплением, во как(когда ненужно дури у него хватает) возможно дело в распределении веса по осям, но это не точно. также один мотор перевернут на 180гр относительно другого обратное вращение у обоих, почему то медление чем вращения вперед, мб это тоже как то влияет. похоже это стройка века, набираюсь терпения
  16. странные эти майнеры люди. что мешало купить биткоин по 2500 в июне а продать по 4000 в сентябре, но нет лучше собирать фермы :facepalm:
  17. Хм, а знает кто, есть ли какой-то план развития проекта 'игры' или дорожная карта, стоит ли ждать вторую часть и тд или за этим только к бабе ванге идти?)
  18. В теории такой мост бутерброт держит 60Ампер на постоянку и 120А в пике. обойдется недорого) https://www.xsimulat...ster-jpg.19573/
  19. один канал работает же исправно, можно подключить два таких моста, на каждый мотор по одному мосту. или же на других(аналогах) мостах строить
  20. вы не поняли, моторы впорядке, проблемы с мостом вот с этим: В планах заменить его, если проблема повторится. есть еще пару вариантов решения.
  21. все-таки левый мотор дал о себе знать. один канал на мосту приказал долго жить >< чот я негодую, терпение наисходе. а все потому, что экономил на комплектующих, скупой платит дважды же
  22. С незапамятных времен, кокпит мой меня немного трусил током ну 5 вольт нестрашно. Оказалась эти гады Лоджитековские зачем-то повесили минус на корпус педалей. Пока не снял этот провод на 2дофе отказывались работать
×
×
  • Создать...