Sterownik modelu helikoptera na STM32 z manipulatorami MEMS
Na rysunku 4 przedstawiono przebiegi ramki danych odpowiadające powyższym zależnościom, są one generowane programowo przez mikrokontroler STM32F4. Dla każdego pola przedstawiono ustawienia timera wbudowanego w mikorkontroler w trybie generacji przebiegu PWM, przy założeniu, że SystemCoreClock = 168 MHz.
Rys. 4. Przebiegi ramki danych wraz z ustawieniem timera w trybie generacji przebiegu PWM, przy założeniu, że SystemCoreClock = 168 MHz
Główna pętla maszyny stanów programu zaimplementowanego w programie dla mikrokontrolera:
switch (cState)
{
case st_Start:
nState = st_Yaw;
TIM_TimeBaseStructure.TIM_Period = 3200*2;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM2->CCR1 = 1600*2;
TIM2->CNT = 3200*2;
cState = nState;
break;
case st_Yaw:
nState = st_Pitch;
Buffer_Yaw = (-1*Buffer[2]);
if (((int8_t)Buffer_Yaw)>MoveRangeValue)
{
YAW_value = 127;
}
else if (((int8_t)Buffer_Yaw)<(-1*MoveRangeValue))
{
YAW_value = 0;
}
else if ((((int8_t)Buffer_Yaw)<(MoveRangeValue/2)) && (((int8_t)Buffer_Yaw)>(-1*MoveRangeValue/2)))
{
YAW_value = 63; // engine off: 63 ~= 127/2
}
else
{
if((((int8_t)Buffer_Yaw+MoveRangeValue)*127/(2*MoveRangeValue)) > 127)
{
YAW_value = 127;
}
else
{
YAW_value = ((int8_t)Buffer_Yaw+MoveRangeValue)*127/(2*MoveRangeValue);
}
}
SetCurrentPWMOutput(YAW_value);
break;
case st_Pitch:
nState = st_Throttle;
if (((int8_t)Buffer[0])>MoveRangeValue)
{
PITCH_value = 127;
}
else if (((int8_t)Buffer[0])<(-1*MoveRangeValue))
{
PITCH_value = 0;
}
else if ((((int8_t)Buffer[0])<(MoveRangeValue/3.5)) && (((int8_t)Buffer[0])>(-1*MoveRangeValue/3.5)))
{
PITCH_value = 63; // engine off: 63 ~= 127/2
}
else
{
if((((int8_t)Buffer[0]+MoveRangeValue)*127/(2*MoveRangeValue)) > 127)
{
PITCH_value = 127;
}
else
{
PITCH_value = ((int8_t)Buffer[0]+MoveRangeValue)*127/(2*MoveRangeValue);
}
}
SetCurrentPWMOutput(PITCH_value);
break;
case st_Throttle:
nState = st_Adjust;
uint8_t i;
for(i = 8; i < 16; ++i)
{
if(GPIO_ReadInputDataBit(GPIOE, (uint16_t)1 << i)==(uint8_t)Bit_SET)
{
varSetBit(Buffer_Throttle,i-8);
}
else
{
varClrBit(Buffer_Throttle,i-8);
}
}
if (((int8_t)Buffer_Throttle)<0)
{
THROTTLE_value = 0;
}
else
{
if((((int8_t)Buffer_Throttle)*127/MoveRangeValue) > 127)
{
THROTTLE_value = 127;
}
else
{
THROTTLE_value = ((int8_t)Buffer_Throttle)*127/MoveRangeValue;
}
}
SetCurrentPWMOutput(THROTTLE_value);
break;
case st_Adjust:
nState = st_Stop;
SetCurrentPWMOutput(ADJUST_value);
break;
case st_Stop:
nState = st_Start;
TIM_TimeBaseStructure.TIM_Period = 32240*2;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM2->CCR1 = 240*2;
TIM2->CNT = 32240*2;
cState = nState;
break;
default:
break;
}
W celu wykorzystania płytki STM32F4DISCOVERY do sterowania helikoptera Syma 107, należy zmodyfikować nieznacznie jego kontroler. Należy wydobyć z obudowy płytkę kontrolera i przeciąć dwie ścieżki, aby wyodrębnić sam moduł nadawczy złożony z diod LED. Na fotografiach 5…11 przedstawiono kolejne etapy modyfikacji kontrolera Syma 107 i jego płytki.

Fot. 5. Kontroler helikoptera Syma 107 (optyczny, emisja sygnału odbywa się za pomocą IRED)

Fot. 6. Kontroler helikoptera Syma 107 po rozebraniu obudowy


Od wzmacniacza nieodwracającego do integratora i wzmacniacza ładunkowego, czyli historia z zaskakującą pointą jak w dobrym kryminale
Green czy smart? Jak decyzje ESG zaczynają optymalizować procesy produkcyjne
Firma Semicon ma w ofercie narzędzia do obróbki przewodów 

![https://www.youtube.com/watch?v=BgxJVTwYJ-s Zapraszamy do obejrzenia filmu i wysłuchania krótkich wypowiedzi prelegentów Hardware Forum 2026 i organizatorów majowej konferencji dla inżynierów z branży elektronicznej: Konrad Bruliński z Lemontech, prof. Krzysztof Kulpa z Politechniki Warszawskiej, Zbigniew Huber z FLC, Ewa Załupska z firmy KROK, Jerzy Kozieł z MPTECH, Grzegorz Potyralski z VIGO Photonics, dr Krzysztof Czuba z Politechniki Warszawskiej, Anna Beata Kalisz Hedegaard z Quantum Security Defence, Adrian Cichosz z Elhurt Dystrybucja Anna Kamińska z Creotech Quantum, oraz Łukasz Jaeszke i Adam Jaeszke z TEK.day [materiał redakcyjny]](https://mikrokontroler.pl/wp-content/uploads/2026/05/tytulowe-film-1.png)



