龙华民治网站设计公司,什么平台可以做网站,wordpress页面内容,驻马店北京网站建设目录
1、硬件JIE
2、PWM口配置
3、角度转换
4、main函数中应用
5、工程下载连接 1、硬件介绍
单片机#xff1a;STM32F1
舵机#xff1a;MG995 2、PWM口配置
20毫秒的PWM脉冲占空比#xff0c;对舵机控制效果较好
计算的公式#xff1a; PSC、ARR值的选取#xf…目录
1、硬件JIE
2、PWM口配置
3、角度转换
4、main函数中应用
5、工程下载连接 1、硬件介绍
单片机STM32F1
舵机MG995 2、PWM口配置
20毫秒的PWM脉冲占空比对舵机控制效果较好
计算的公式 PSC、ARR值的选取SG90要求的频率是20ms则72MHz / (PSC1) / (ARR1) 1/0.02这里PSC和ARR的参数是不固定的。经过多次尝试最终确定PSC72-1ARR20k-1时舵机旋转效果最好。
PWM配置程序
void pwm_init(void)
{GPIO_InitTypeDef GPIO_InitStructure_For_Servo;TIM_TimeBaseInitTypeDef TIM_TimeBaseImitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/*µÚÒ»²½¿ªÆôRCCʱÖÓ*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/*µÚ¶þ²½ÅäÖÃGPIO¶Ë¿---PA1Ú*/GPIO_InitStructure_For_Servo.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure_For_Servo.GPIO_Pin GPIO_Pin_1;GPIO_InitStructure_For_Servo.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure_For_Servo);TIM_InternalClockConfig(TIM2);/*??????*//*µÚÈý²½ÅäÖÃʱ»ùµ¥Ôª*/ //20msƵÂÊ(¶æ»úÒªÇóµÄÕâ¸öƵÂÊЧ¹û×îºÃ)TIM_TimeBaseImitStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseImitStructure.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseImitStructure.TIM_Period 20000 - 1;TIM_TimeBaseImitStructure.TIM_Prescaler 72 - 1;TIM_TimeBaseImitStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2,TIM_TimeBaseImitStructure);/*µÚËIJ½ÅäÖÃÊä³ö±È½Ïµ¥Ôª*/TIM_OCStructInit(TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse 0; /*CCR*/TIM_OC2Init(TIM2,TIM_OCInitStructure);/*µÚÎ岽ʹÄÜʱÖÓ*/TIM_Cmd(TIM2,ENABLE);
}
设置脉冲
void pwm_setcompare2(uint16_t compare)
{TIM_SetCompare2(TIM2,compare);
}完整代码 #include pwm.hvoid pwm_init(void)
{GPIO_InitTypeDef GPIO_InitStructure_For_Servo;TIM_TimeBaseInitTypeDef TIM_TimeBaseImitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;/*µÚÒ»²½¿ªÆôRCCʱÖÓ*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);/*µÚ¶þ²½ÅäÖÃGPIO¶Ë¿---PA1Ú*/GPIO_InitStructure_For_Servo.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure_For_Servo.GPIO_Pin GPIO_Pin_1;GPIO_InitStructure_For_Servo.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStructure_For_Servo);TIM_InternalClockConfig(TIM2);/*??????*//*µÚÈý²½ÅäÖÃʱ»ùµ¥Ôª*/ //20msƵÂÊ(¶æ»úÒªÇóµÄÕâ¸öƵÂÊЧ¹û×îºÃ)TIM_TimeBaseImitStructure.TIM_ClockDivision TIM_CKD_DIV1;TIM_TimeBaseImitStructure.TIM_CounterMode TIM_CounterMode_Up;TIM_TimeBaseImitStructure.TIM_Period 20000 - 1;TIM_TimeBaseImitStructure.TIM_Prescaler 72 - 1;TIM_TimeBaseImitStructure.TIM_RepetitionCounter 0;TIM_TimeBaseInit(TIM2,TIM_TimeBaseImitStructure);/*µÚËIJ½ÅäÖÃÊä³ö±È½Ïµ¥Ôª*/TIM_OCStructInit(TIM_OCInitStructure);TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse 0; /*CCR*/TIM_OC2Init(TIM2,TIM_OCInitStructure);/*µÚÎ岽ʹÄÜʱÖÓ*/TIM_Cmd(TIM2,ENABLE);
}void pwm_setcompare2(uint16_t compare)
{TIM_SetCompare2(TIM2,compare);
}
3、角度转换
void servo_set_angle(double angle)
{pwm_setcompare2(angle / 180 * 2000 500);
}
完整代码
#include stepmotor.h
#include pwm.hvoid servo_init(void)
{pwm_init();}void servo_set_angle(double angle)
{pwm_setcompare2(angle / 180 * 2000 500);
}
4、main函数中应用
2秒运动执行一次分别从0度-180度-270度。(若180度舵机运动到180度就不再往后转270度了等到0度的时候转到0度) //2秒运行一次if(i%20000){count;//printf(count:%d \r\n,count);//printf(Pitch: %.2f ,Roll: %.2f,Yaw: %.2f \r\n,Pitch,Roll,Yaw); //Pitch,Roll,YawÊý¾Ý´«µ½´®¿Ú count2;if(count21){angle0;servo_set_angle(angle);printf(angle:%.2f \r\n,angle);}if(count22){angle180;servo_set_angle(angle);printf(angle:%.2f \r\n,angle);}if(count23){angle270;servo_set_angle(angle);count20;printf(angle:%.2f \r\n,angle);}}
完整代码
#include system.h
#include SysTick.h
#include SysDelay.h
#include led.h
#include usart.h
#include mpu6050.h
#include stepmotor.hdouble angle;int main()
{u8 count0;u16 i0; u16 count20;SystemInit(); //ϵͳ³õʼ»¯ SysDelay_Init(72); //×Ô¶¨ÒåÑÓʱº¯Êý³õʼ»¯LED_Init();USART1_Config(); //´®¿Ú1³õʼ»¯ ÉÏλ»úUSART3_Config(); //´®¿Ú3³õʼ»¯ À¶ÑÀÓëUSART3¹«ÓÃÏàͬIO¿ÚSysDelay_ms(10); //10ºÁÃëÑÓʱMPU6050_Init(); //MPU6050 DMPÍÓÂÝÒdzõʼ»¯delay_ms(1000);servo_init();while(1){/* 1¡¢LEDµÆÉÁ˸ */ if(i%5000){led1!led1;}//2ÃëÖ´ÐÐÒ»´Îif(i%20000){count;//printf(count:%d \r\n,count);//printf(Pitch: %.2f ,Roll: %.2f,Yaw: %.2f \r\n,Pitch,Roll,Yaw); //Pitch,Roll,YawÊý¾Ý´«µ½´®¿Ú count2;if(count21){angle0;servo_set_angle(angle);printf(angle:%.2f \r\n,angle);}if(count22){angle180;servo_set_angle(angle);printf(angle:%.2f \r\n,angle);}if(count23){angle270;servo_set_angle(angle);count20;printf(angle:%.2f \r\n,angle);}}//20ºÁÃëÖ´ÐÐÒ»´Îif(i%200){}/*»ñÈ¡MPU6050½Ç¶È״̬*///ÔÚ´®¿ÚÊý¾Ý·¢ËÍÖ®ºó MPU6050_Pose(); //Pitch·¹ö£¬Roll¸©Ñö£¬YawÆ«º½SysDelay_ms(1); //1ºÁÃëÑÓʱi;}
} 5、工程下载连接
https://download.csdn.net/download/panjinliang066333/90437321