STM32学习笔记-pwm生成-舵机控制

首先感谢河北科技大学航模协会-能给我这样的学习机会-感谢那些带我们教我们的学长学姐们.

pwm是由定时器产生的



这是一个定时器3控制舵机的例子

不同舵机pwm的频率和占空比不同,用改变定时器初值和预分频值即可.

声明:转载请注明出处,本人入门级菜鸟,内容大多学习于网络,存在问题太多不一一列举,大佬多多指教.本人QQ941131649

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用STM32生成PWM控制舵机左转右转,需要进行以下步骤: 1. 配置GPIO口为PWM输出模式。 2. 初始化定时器,设置PWM频率和占空比。 3. 根据舵机的需要,设置左转和右转的占空比。 4. 在主程序中,通过改变PWM占空比的值,控制舵机的转动。 下面是一个简单的示例程序,可以通过改变PWM占空比的值控制舵机的左转和右转: ``` #include "stm32f10x.h" #define PWM_FREQ 50 // PWM频率,单位Hz #define PWM_PERIOD (72000000/PWM_FREQ/1000) // PWM周期,单位us #define SERVO_LEFT_DUTY (PWM_PERIOD/20) // 左转占空比,单位us #define SERVO_RIGHT_DUTY (PWM_PERIOD/10) // 右转占空比,单位us void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); 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); } void TIM_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); TIM_TimeBaseStructure.TIM_Period = PWM_PERIOD - 1; TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock / 1000000 - 1; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); TIM_Cmd(TIM3, ENABLE); } void Servo_Left(void) { TIM_SetCompare1(TIM3, SERVO_LEFT_DUTY); } void Servo_Right(void) { TIM_SetCompare1(TIM3, SERVO_RIGHT_DUTY); } int main(void) { GPIO_Config(); TIM_Config(); while(1) { Servo_Left(); delay_ms(1000); Servo_Right(); delay_ms(1000); } } ``` 在这个程序中,GPIO口PA7被配置为PWM输出模式,使用定时器TIM3生成PWM信号。左转和右转的占空比分别为PWM周期的1/20和1/10。在主程序中,控制舵机左转和右转的函数通过改变PWM占空比来实现。函数中的delay_ms()函数用于延时,可以使用其他方式实现延时。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值