Servo motorun açısı 120 yi aşmıyor .

Başlatan mstfylmz38, 03 Nisan 2015, 14:01:37

mstfylmz38

Aşağıda kodları vereceğim , bu değerlerde servo motor sürmeye çalışıyorum Savöx SC-0352 ve ayrıca başka servoları da denedim aynı sorunla karşılaştım . Servonun açısı 180 e yaklaşmıyor maksimum 120 derecelerde kalıyor .STM32F429 ile sürmeyi denedim .

   
#ifndef TM_DEFINES_H
#define TM_DEFINES_H

#include "stm32f4xx.h"
#include "stm32f4xx_gpio.h"
#include "stm32f4xx_rcc.h"
#include "misc.h"
#include "stm32f4xx_tim.h"

#define RC_MAX_VALUE 40
#define RC_MIN_VALUE 20
#define	RC_SERVO_PWM_TIMER	TIM3
#define RC_SERVO1_VALUE		RC_SERVO_PWM_TIMER->CCR1
#define RC_SERVO2_VALUE		RC_SERVO_PWM_TIMER->CCR2
#define RC_SERVO3_VALUE		RC_SERVO_PWM_TIMER->CCR3
#define RC_SERVO4_VALUE		RC_SERVO_PWM_TIMER->CCR4
#define RC_SERVO_PIN1		GPIO_Pin_6
#define RC_SERVO_PIN2		GPIO_Pin_7
#define RC_SERVO_PIN3		GPIO_Pin_8
#define RC_SERVO_PIN4		GPIO_Pin_9
#define RC_SERVO_GPIO		GPIOC

void SERVO_GPIO_Init(void);
void SERVO_PWM_Init(void);

#endif

#include "Servo.h"

	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
	TIM_OCInitTypeDef TIM_OCInitStructure;
	uint16_t CCR1_Val = 0;
	uint16_t CCR2_Val = 0;
	uint16_t CCR3_Val = 0;
	uint16_t CCR4_Val = 0;
	uint16_t PrescalerValue = 0;

	void SERVO_PWM_Init(void)
	{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	PrescalerValue =(uint16_t) (SystemCoreClock  / 8000000)-1;//3

	TIM_TimeBaseStructure.TIM_Period=400;  //hesapta bulduğumuz ARR değeri ,Hassasiyetitesi :)
	TIM_TimeBaseStructure.TIM_Prescaler=839;//PrescalerValue;
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_TimeBaseStructure.TIM_ClockDivision=0;
	TIM_TimeBaseInit(RC_SERVO_PWM_TIMER,&TIM_TimeBaseStructure);

	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//CCR1_Val;
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC1Init(RC_SERVO_PWM_TIMER,&TIM_OCInitStructure);
	TIM_OC1PreloadConfig(RC_SERVO_PWM_TIMER,TIM_OCPreload_Enable);

	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
	TIM_OC2Init(RC_SERVO_PWM_TIMER, &TIM_OCInitStructure);
	TIM_OC2PreloadConfig(RC_SERVO_PWM_TIMER, TIM_OCPreload_Enable);

	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=CCR3_Val;
	TIM_OC3Init(RC_SERVO_PWM_TIMER,&TIM_OCInitStructure);
	TIM_OC3PreloadConfig(RC_SERVO_PWM_TIMER,TIM_OCPreload_Enable);

	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=CCR4_Val;
	TIM_OC4Init(RC_SERVO_PWM_TIMER,&TIM_OCInitStructure);
	TIM_OC4PreloadConfig(RC_SERVO_PWM_TIMER,TIM_OCPreload_Enable);
	TIM_ARRPreloadConfig(RC_SERVO_PWM_TIMER,ENABLE);
	TIM_Cmd(RC_SERVO_PWM_TIMER,ENABLE);
	}

	void SERVO_GPIO_Init(void)
	{
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);

	GPIO_InitStructure.GPIO_Pin=RC_SERVO_PIN1 | RC_SERVO_PIN2 | RC_SERVO_PIN3 | RC_SERVO_PIN4;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
	GPIO_Init(RC_SERVO_GPIO,&GPIO_InitStructure);

	GPIO_PinAFConfig(RC_SERVO_GPIO,GPIO_PinSource6,GPIO_AF_TIM3);
	GPIO_PinAFConfig(RC_SERVO_GPIO,GPIO_PinSource7,GPIO_AF_TIM3);
	GPIO_PinAFConfig(RC_SERVO_GPIO,GPIO_PinSource8,GPIO_AF_TIM3);
	GPIO_PinAFConfig(RC_SERVO_GPIO,GPIO_PinSource9,GPIO_AF_TIM3);
	}


        #include "stm32f4xx.h"
	#include "stm32f4xx_gpio.h"
	#include "stm32f4xx_rcc.h"
	#include "misc.h"
	#include "stm32f4xx_tim.h"
	#include "Servo.h"

	int motor1;
	int motor2;

	void delay(){
		int a;
		for (a = 0; a < 0x000AFFFF; ++a) ;
	}

	int main()
	{
		SERVO_GPIO_Init();
		SERVO_PWM_Init();

		uint8_t motor1[2]={RC_MIN_VALUE,RC_MAX_VALUE};
		//uint8_t motor2[7]={10,15,20,25,30,35,40};

	while(1)
	{
		RC_SERVO1_VALUE=motor1[0];
		delay();
		RC_SERVO1_VALUE=motor1[1];
		delay();

	}
		}



namso0632

Delay süresi motorun dönmesine izin vermiyor olabilir. Aynı sorunla bende karşılaşmıştım süreyi bir artır istersen. Aynı zamanda debug yaparak da gözlemleyebilirsin motorun dönüş açısını.