南京高端网站制作公司,百度首页 百度,青岛网站建设推广服务,鄞州区建网站外包现在学习使用STM32 F103C8T6的定时器PWM模式#xff0c;使用PWM驱动舵机转动不同角度#xff0c;文章提供源码#xff0c;测试工程#xff0c;测试动态效果图。
目录
基础原理#xff1a; 实验目标#xff1a;
测试视频结果#xff1a;
测试工程下载#xff1a; 基…现在学习使用STM32 F103C8T6的定时器PWM模式使用PWM驱动舵机转动不同角度文章提供源码测试工程测试动态效果图。
目录
基础原理 实验目标
测试视频结果
测试工程下载 基础原理
这次依旧拿出之前学习过的舵机DS3115它的基础原理不多加介绍在往期讲MSP432的文章有所提及 MSP432自主开发笔记4DS3115舵机的0~180全角度驱动_NULL指向我的博客-CSDN博客 这里直接作总结 舵机一般接有三根线其中俩根是供电使用还有一根是信号线 我们需要给信号线一个相应频率PWM的信号让其知道有控制信号要到来然后同时调整PWM的占空比即可调整其旋转角度 需要知道的大致有三个重要点1、电压电流 2、PWM频率 3、识别占空比范围 1.PWM频率范围50~330Hz 2.脉宽范围是500~2500 us 3.精度是3us 4.旋转方向是顺时针 实验目标 使用STM32 C8T6的定时器3输出PWM驱动舵机转动从0~180度缓慢转动一周后再次返回0度开始以此循环。 下面的代码是我初始化TIM3的1~3这三个通道来输出PWM控制舵机 总体流程如下 1.定义初始化结构体 2.打开APB2等总线的时钟开启A\B端口 3.配置PWM输出管脚 4.配置TIM定时器ARRPSC等 5.配置PWM模式 void Timer3_PWM_init(u16 arr,u16 psc)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;//开时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //PWM输出管脚配置 GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOB, GPIO_InitStructure);//初始化定时器配置定时器TIM3频率TIM_TimeBaseStructure.TIM_Period arr; TIM_TimeBaseStructure.TIM_Prescaler psc; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); //PWM模式配置分通道进行配置TIM_OCInitStructure.TIM_OCModeTIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OCPolarityTIM_OCPolarity_High;TIM_OCInitStructure.TIM_OutputStateTIM_OutputState_Enable;TIM_OC1Init(TIM3,TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable); TIM_Cmd(TIM3,ENABLE); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC2Init(TIM3, TIM_OCInitStructure); TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC3Init(TIM3, TIM_OCInitStructure); TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_Cmd(TIM3, ENABLE);
}
#include main.h//211uint16_t t1,t2,t3;int main(void)
{ init_ALL(); //初始化所有函数t1150;t2150;t3150; while(1){ delay_ms(300);t1;t2;t3;printf(%d,t1);//到达设定最大角度时返回到0度if(t1263) {t1150;}if(t2263) {t2150;}if(t3263) {t3150;}TIM_SetCompare1(TIM3,t1); //设置舵机占空比控制舵机转动TIM_SetCompare2(TIM3,t2); //设置舵机占空比控制舵机转动TIM_SetCompare3(TIM3,t3); //设置舵机占空比控制舵机转动 }
}//初始化所有函数
void init_ALL(void)
{Usart1_Init(115200); //初始化串口1printf(HELLO \r\n); //串口1 测试重定向PrintfSysTick_Init(72);Timer2_Init();Timer3_PWM_init(2000,719); //初始化定时器3PWM}测试视频结果 STM32 F103C8T6控制舵机视频 测试工程下载 https://download.csdn.net/download/qq_64257614/88206611?spm1001.2014.3001.5503