25
   
   
Вход
в 2 клика →
25 октября 2021 г.
Заливаем свою прошивку в квакуху Mooer TheWahter

Ча­сто та­кое бы­ва­ет, из-за им­пуль­са в се­ти пи­та­ния, ли­бо из-за раз­ни­цы меж­блоч­ных по­тен­ци­а­лов – устрой­ства вы­го­ра­ют в пе­пел. Про­изо­шла пе­ре­по­лю­сов­ка, ли­бо жив­ность за­ве­лась в устрой­ствах, и за­ко­ро­ти­ло всё внут­ри. Сей­час мы рас­смот­рим как раз та­кой ва­ри­ант, ко­гда у вас по тем или иным при­чи­нам сго­рел кон­трол­лер, в дан­ном слу­чае, на при­ме­ре при­моч­ки Mooer TheWahter. Не рас­стра­и­вай­тесь, по­мо­гу вам на­пи­сать свою про­шив­ку.

Как устро­е­на пе­даль внут­ри, с точ­ки зре­ния блоч­ной схе­мы?

На удив­ле­ние всё эле­мен­тар­но про­сто:

  • В ос­но­ве – эф­фект по схе­ме CryBaby на по­тен­цио­мет­ре в ка­че­стве эле­мен­та сдви­га­ю­щий оги­ба­ю­щую филь­тра;
  • Вме­сто обыч­но­го по­тен­цио­мет­ра филь­тра при­ме­нен циф­ро­вой по­тен­цио­метр с управ­ле­ни­ем по 3 про­во­дам SPI;
  • Ре­зи­стив­ные сен­со­ры 3шт в ка­че­стве кон­тро­ля на­жа­тия и пе­ре­клю­че­ние ре­жи­мов;
  • Ис­тин­ный бай­пас для об­хо­да эф­фек­тов на ос­но­ве би­по­ляр­но­го ми­ни-ре­ле ти­па DPDT;
  • Блок га­ше­ния сиг­на­ла на мас­су – на оп­троне;
  • Блок ин­ди­ка­ции ра­бо­ты на све­то­ди­о­дах.



Ин­те­рес­ная осо­бен­ность ра­бо­ты при­моч­ки на за­вод­ской про­шив­ке.

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

Нели­ней­ность оп­ти­че­ско­го дат­чи­ка вау-эф­фек­та.

Оп­ти­че­ский дат­чик ку­ли­сы вау-пе­да­ли – име­ет са­мые нехо­ро­шие по­ка­за­те­ли ли­ней­но­сти для ра­бо­ты. По­это­му по­сле де­ко­ди­ров­ки я ис­поль­зо­вал ло­га­риф­ми­че­ские функ­ции для то­го, чтобы мак­си­маль­но вы­ров­нять ха­рак­те­ри­сти­ку на­жа­тия пе­да­ли и сде­лать её по­хо­жей на ори­ги­наль­ную CryBaby.

О про­грам­ми­ро­ва­нии

В ARM (со­ве­тую пи­сать про­шив­ку в HALL) в от­ли­чие от AVR всё очень про­сто. По­то­му что всё го­то­во и уже на­пи­са­но за вас. Оста­нет­ся толь­ко под­клю­чить необ­хо­ди­мые биб­лио­те­ки и вы­звать со­от­вет­ству­ю­щие функ­ции.


Об опро­се дат­чи­ков на­жа­тия AD1 AD2 AD3

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

На­при­мер, я сде­лал так: ко­гда ста­вим но­гу – эф­фект вклю­ча­ет­ся. Уби­ра­ем но­гу – эф­фект от­клю­ча­ет­ся. Про­сто и по­нят­но. И ни­ка­кой ошиб­ки не про­изой­дет ни­ко­гда.

Чтобы лег­ко бы­ло ра­бо­тать, и не опра­ши­вать по­сто­ян­но АЦП, луч­ше сде­лать чте­ние сра­зу в па­мять при по­мо­щи DMA. Та­ким об­ра­зом у нас бу­дет мас­сив с дат­чи­ка­ми, со зна­че­ни­ем ко­то­рых мож­но уже ра­бо­тать.

ADC_Val[0] в мо­ем слу­чае это дат­чик за­свет­ки вау-пе­да­ли,
ADC_Val[2] – это сен­сор вклю­че­ния/от­клю­че­ния пе­да­ли.

Есть ещё дру­гие сен­со­ры, ко­то­рые раз­ли­ча­ют на­жа­тие толь­ко на верх­нюю часть пе­да­ли, ли­бо толь­ко на ниж­нюю, но в си­лу из­бы­точ­но­сти мне это не по­на­до­би­лось.

Фраг­мент ко­да, ко­то­рый си­му­ли­ру­ет фир­мен­ный за­пуск пе­да­ли, как у за­вод­ской про­шив­ки (ми­га­ет све­то­ди­од при вклю­че­нии еди­но­ра­зо­во и ждёт иг­ры):

set_relay_on(0);
HAL_Delay(300);
set_relay_on(1);
HAL_Delay(300);
set_relay_on(0);

Сле­ду­ю­щий фраг­мент ко­да, от­ве­ча­ю­щий за вклю­че­ние-вы­клю­че­ние эф­фек­та:

if(ADC_Val[2]>1200){ // вкл вау-педаль
  set_relay_on(1);
}if(ADC_Val[2]<500){  // откл вау-педаль
  set_relay_on(0);
}

Функ­ция, ко­то­рая вклю­ча­ет и от­клю­ча­ет ре­ле:

void set_relay_on(bool stat){
  if(relaystate!=stat){
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0, (GPIO_PinState)stat);  //запаливаем лампочки
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, (GPIO_PinState)stat);  //даем напряжение на первую ногу
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_10, (GPIO_PinState)!stat); //убираем напряжение с другой ноги
    relaystate = stat;
  }
}

Под­сказ­ка: да­лее необ­хо­ди­мо это зна­че­ние под­кор­рек­ти­ро­вать с точ­ки зре­ния ли­ней­но­сти функ­ции. Вприн­ци­пе, ес­ли это­го не де­лать – ра­бо­тать то­же бу­дет.

В свя­зи с тем, что мик­ро­схе­ма элек­трон­но­го по­тен­цио­мет­ра – 255 сту­пен­ча­тая, то ее мак­си­маль­ное зна­че­ние бу­дет 255. Им и нуж­но огра­ни­чить на­шу пе­ре­мен­ную:

if(adc>255){adc=255;}

Да­лее неза­мед­ли­тель­но от­прав­ля­ем дан­ные пря­мо в элек­трон­ный по­тен­цио­метр:

SPI_SendData(adc1);

Функ­ция от­прав­ки дан­ных по SPI:


void SPI_SendData(uint8_t data){
if(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_READY){ 
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
    uint8_t td = 0x11;
    HAL_SPI_Transmit(&hspi1, &td, 1, 100);   while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY);
    HAL_SPI_Transmit(&hspi1, &data, 1, 100); while(HAL_SPI_GetState(&hspi1) == HAL_SPI_STATE_BUSY);
    HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
  }
}


Ком­пи­ли­ру­ем, за­ли­ва­ем в кон­трол­лер, те­сти­ру­ем. Есте­ствен­но, для про­фес­сио­наль­но­го ис­поль­зо­ва­ния нуж­ны му­зы­кан­ты-те­сти­ров­щи­ки, ко­то­рые мно­го лет ра­бо­та­ют с пе­да­лью. Имен­но они вам да­дут пра­виль­ную ин­фор­ма­цию о том, как нуж­но на­стро­ить или пра­виль­ные ли вы уста­но­ви­ли па­ра­мет­ры для ком­форт­ной иг­ры.

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

Поделиться в социальных сетях:

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

Комментарии ()

    Яндекс.Метрика