STM32F103RCt6 与 MG996R
发一张我自己的舵机
老习惯,直接放代码,然后说说遇到的问#include"PWM.h"
#include"stm32f10x.h" #include"sys.h" void PWM_Init(u16 arr,u16 psc) { GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; //使能A组和TIM1的时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //c初始化IO口为复用推挽输出 GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_8; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStruct); //初始化定时器 TIM_TimeBaseInitStruct.TIM_ClockDivision=0; TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; ; TIM_TimeBaseInitStruct.TIM_Period=arr; TIM_TimeBaseInitStruct.TIM_Prescaler=psc; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct); //初始化外设TIM1 TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2; TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable; TIM_OCInitStruct.TIM_Pulse=0; TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High; TIM_OC1Init(TIM1,&TIM_OCInitStruct); //主输出使能 TIM_CtrlPWMOutputs(TIM1,ENABLE); //CH1预装载使能 TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); //使能TIM在ARR上的预装载寄存器 TIM_ARRPreloadConfig(TIM1,ENABLE); //使能TIM1 TIM_Cmd(TIM1,ENABLE); } int main() { u16 LPV=0; u8 K=1; delay_init(); LED_Init(); PWM_Init(199,7199); while(1) { TIM_SetCompare1(TIM1,175); delay_ms(5); TIM_SetCompare1(TIM1,175); delay_ms(2000); TIM_SetCompare1(TIM1,185); delay_ms(5); TIM_SetCompare1(TIM1,190); delay_ms(3000); TIM_SetCompare1(TIM1,195); delay_ms(5); delay_ms(3000); TIM_SetCompare1(TIM1,190); delay_ms(5); TIM_SetCompare1(TIM1,185); delay_ms(5); delay_ms(1000); delay_ms(1000); delay_ms(1000); TIM_SetCompare1(TIM1,170); delay_ms(5); } return 0;
}
第一个问题:PWM有PWM1和PWM2的区别,你还记得么,
第二个问题:写好程序舵机抖动抖动,有两个原因,电源不稳定,或者是转动的角度过大,
第三个问题:接线和电源的电压问题,