Skocz do zawartości

Serwo wraca do poprzedniej pozycji


rizone1234

Pomocna odpowiedź

Witam,

mam problem z serwem które po zadaniu pozycji z PWM, wraca za każdym razem do poprzedniej pozycji. Nie wiem o co chodzi z innymi serwami tak nie miałem. Teraz nie dawno kupiłem nowe dwa serwa i z obiema mam problem by nimi sterować. Nie wiem, może to są jakieś inne rodzaje serw, nie mam pojęcie co jest nie tak, bo pierwszy raz mam taki problem. Prosze o pomoc

Pozdrawiam

rizone1234

Link do komentarza
Share on other sites

(edytowany)

A jakie masz zasilanie tych serw?

I jak wygląda sytuacja gdy tak się dzieje? Program się odpala, serwo ustawia się na jakąś pozycję mija np. sekunda i wraca do poprzedniej?

Jak możesz to podaj kod programu.

Edytowano przez Gieneq
Link do komentarza
Share on other sites

(edytowany)

Dzięki za zainteresowanie tematem. Serwa po zadanej pozycji od razu wracają do poprzedniej. Używam najzwyklejszego zasilacza DC o parametrach 6,5 V  i 3,2 A. Już podaje kod, jako mikrokontrolera używam STM32 F407G-DISC1.

PROGRAM GŁÓWNY:

#include "stm32f4xx.h"
#include <stdio.h>
#include "PWM.h"
#include "PWM1.h"
volatile uint16_t valuee;
volatile uint16_t valueee;
volatile uint32_t msTicks;
void SysTick_Handler(void){
	msTicks++;
}

static void Delay(__IO uint32_t dlyTicks){
	uint32_t curTicks = msTicks;
	while((msTicks - curTicks)<dlyTicks);
}

void setSysTick(void){
	if(SysTick_Config(SystemCoreClock/1000)){
		while(1){};
	}
}
int main(void)
{
SystemInit();
setSysTick();
PWM1(2000);
  while(1){
  }
}

FUNKCJA PLIK .c

#include "PWM1.h"


void PWM1(int value){
		GPIO_InitTypeDef GPIO_InitStruct;
					   TIM_TimeBaseInitTypeDef TIM_BaseStruct;

					   TIM_OCInitTypeDef outputChannelInit;
					   TIM_OCStructInit (&outputChannelInit);

					   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
					   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

					   GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_TIM2);

					   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
					   GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
					   GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
					   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
					   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;

					   GPIO_Init(GPIOB, &GPIO_InitStruct);

					   TIM_BaseStruct.TIM_Prescaler = 83;
					   TIM_BaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
					   TIM_BaseStruct.TIM_Period = 19999;
					   TIM_BaseStruct.TIM_ClockDivision = 0 ;
					   TIM_BaseStruct.TIM_RepetitionCounter = 0;
					   TIM_TimeBaseInit(TIM2, &TIM_BaseStruct);

					   TIM_Cmd(TIM2, ENABLE);

					   outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
					   outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
					   outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;


					   outputChannelInit.TIM_Pulse = value;


					   TIM_OC4Init(TIM2, &outputChannelInit);
					   TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);

	}


 

FUNKCJA PLIK .h

#ifndef __PWM1__
#define __PWM1__
#include <stdint.h>
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_tim.h"

extern void PWM1(int value);

#endif // __PWM1__

Tylko jak wspomniałem z poprzednimi serwami nie było problemu, jak używałem tego programu. Tylko ze tamte serwa to: TOWER PRO MG 996 R z dopiskiem 180 stopni robotic, a te to z którymi mam problem to: TOWER PRO MG 996 R z dopiskiem digi hi torque.

W ogóle te nowe serwa nie chciały na początku działac dopiero później zaczeły działac, tak jak opisałem po zadanej pozycji PWM wracają do poprzedniej pozycji.

Może klucz do poprawnego działania tych serw jest sterownik jaki  posiadają.

Edytowano przez rizone1234
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jak to zasilasz? Jesteś pewien, że twój mikokontroler się nie resetuje? Może dodaj jakieś zamiganie diodą na początku programu, to będziesz widział czy się resetuje.

Masz jakieś narzędzia pomiarowe, żeby zobaczyć jak wygląda sygnał podawany do serw? Oscyloskop? Analizator logiczny? Nawet najtańszy analizator za $2 powinien sobie poradzić z sygnałem 50Hz...

Link do komentarza
Share on other sites

Uciąłem końcówkę od zasilacza i podłączyłem go do przycisku. Potem od przycisku kabelki przylutowałem do goldpinów, a do goldpinów podpinam zwyklymi kabelkami od mikrokontrolerow wspomniane serwa. Sprawdziłem za pomocą lampki czy STM32 sie resetuje, nie resetuje się. A sygnał z zasilacza sprawdzałem na oscyloskopie, pojawiła sie pozioma linia na zakresie 6,5 V. No do niczego sie nie moza przyczepić. Nie wiem czemu te serwa wracają za każdym razem.

Link do komentarza
Share on other sites

Ale jaki zakomentowany kod? W tym co wkleiłeś nie ma żadnych komentarzy. Wkręcasz nas?

Nie pytam jak podłączyłeś do zasilacza, tylko co to za zasilacz.

I nie masz sprawdzać zasilania, tylko sygnał podawany serwom.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.