STM32F407 notas de estudio-módulo de mecanismo de dirección MG90S (control básico)

STM32F407 notas de estudio-módulo de mecanismo de dirección MG90S (control básico)

1. Principio básico:
Al cambiar el ciclo de trabajo de PWM, el mecanismo de dirección se puede girar en diferentes ángulos. La relación entre el ángulo de rotación y el tiempo de pulso y el ciclo de trabajo correspondiente se da a continuación (pulso de base de tiempo = 20 ms).

Ángulo de rotación Tiempo de pulso Comparar registro Ciclo de trabajo
0 ° 0,5 ms 195 2,5 %
45 ° 1 ms 190 5%
90 ° 1,5 ms 185 7,5%
135 ° 2ms 180 10%
180 ° 2,5 ms 175 12,5%

Fórmula de cálculo del ciclo de trabajo: tiempo de pulso / registro de
comparación de 20 ms : 200-200 * ciclo de trabajo
El código dado al final del artículo solo necesita cambiar el registro de comparación para controlar el ángulo de rotación del servo.

2. Función de código:
cambia el registro de comparación para controlar el ángulo de rotación del mecanismo de dirección.

3. Cableado:
PA0 —— Cable de señal PWM (cable amarillo), + 5v —— + 5v (cable rojo), GND —— GND (cable marrón)

4. Código de parte:
SG90.h

#ifndef __SG90_H
#define __SG90_H

#include <stm32f4xx.h>
#include <delay.h>
#include "math.h"
void TIM2_PWM_Init(u32 arr,u32 psc);

#endif   //__SG90_H

SG90.h

#include "sys.h"
#include "SG90.h"




void TIM2_PWM_Init(u32 arr,u32 psc)
{
    
    
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);  	 
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 	
	
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM2); 
	
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;        
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;	
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;        
	GPIO_Init(GPIOA,&GPIO_InitStructure);              
	  
	TIM_TimeBaseStructure.TIM_Prescaler=psc;  
	TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; 
	TIM_TimeBaseStructure.TIM_Period=arr;   
	TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
	
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
	

	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; 
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; 
	TIM_OCInitStructure.TIM_Pulse = 0;
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);  

	TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);  
 
    TIM_ARRPreloadConfig(TIM2,ENABLE);
	
	TIM_Cmd(TIM2, ENABLE);  									  
}  


C Principal

#include "sys.h"
#include "HC-SR04.h"
#include "SG90.h"
#include "delay.h"

int main() 
{
    
    
	delay_init(168);
	TIM2_PWM_Init(200-1,8400-1);
	
	while(1)
	{
    
    	
 		delay_ms(1000);	 
		TIM_SetCompare1(TIM2,175);	
		
		delay_ms(1000);	 
		TIM_SetCompare1(TIM2,180);	
		
		delay_ms(1000);	 
		TIM_SetCompare1(TIM2,185);	
		
		delay_ms(1000);	 
		TIM_SetCompare1(TIM2,190);	
		delay_ms(1000);	 
		TIM_SetCompare1(TIM2,195);			
	}
}

PD: Este módulo y código se pueden utilizar con el módulo de giroscopio y el módulo ultrasónico.

Referencia para este artículo: El principio y código del mecanismo de dirección de control STM32

Solo para principiantes para aprender y usar

Supongo que te gusta

Origin blog.csdn.net/weixin_54121461/article/details/113999518
Recomendado
Clasificación