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