首页 > 编程知识 正文

stm32结构体定义方法,pwm互补输出怎么控制电机

时间:2023-05-05 05:18:58 阅读:115107 作者:581

参考: stm32定时器输出PWM原理及工作原理控制舵机

作者:小灯

发布时间: 2021-03-09 23:17:52

URL:https://blog.csdn.net/weixin _ 46016743/article/details/11460662

参考: stm32的pwm输出

作者:浇酱油的人;

发布时间: 2021-04-11 14:59:05

URL:https://blog.csdn.net/weixin _ 46098612/article/details/115597823

目录PWM介绍0 .前言1.PWM的工作原理2.PWM的内部工作机理3.PWM的模式单边对齐模式2中央对齐模式4 .自动加载的预载寄存器定时器输出PWM结构定时器输出PWM库函数定时器输出PWM控制舵机

PWM介绍0 .前言

脉宽调制(PWM )是英语“Pulse Width Modulation”的缩写,简称脉宽调制,是一种基于微处理器的数字输出来对模拟电路进行控制的非常有效的技术,从测量、通信到功率控制和调制

1.PWM的结构

2.PWM的内部运行机制

3.PWM模式单边对齐模式

模式2中央对齐模式

4 .自动加载预载寄存器

计时器输出PWM结构体

计时器输出PWM库函数

计时器输出PWM控制舵机硬件接线:

红线: 3.3v/5v

黑线: GND

黄线:信号线

需要配置3个结构体

motor.c

# include ' STM 32 F10 x.h '//设备头# include ' motor.h ' void motor _ config (void ) ) gpio_inittypedefgpio_ //2 .配置通用计时器结构体的曾经的萝莉_OCInitTypeDef的曾经的萝莉PWN_MotorInit 3.PWM结构下的曾经的萝莉_OC2Init曾经的萝莉_OC2PreloadConfig曾经的萝莉_ cmd RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ gpiob, 即使打开ECC _ AP B2 periphclockcmd//4.1 gpio时钟,rcc.h中RCC _ AP B1 periphclockcmd (RCC _ AP B1 per iph _曾经的萝莉3,ENABLE ) //4.2打开计时器时钟RCC _ AP B2 periphclockcmd (RCC _ AP B2 per iph _ afio,ENABLE ); //使能时钟gpio _ pinremapconfig (gpio _ partial remap _曾经的萝莉3,ENABLE ); //4.3部分重映射表曾经的萝莉3gp io _ motor init.gpio _ mode=gpio _ mode _ af _ PP; //推挽输出gpio _ motor init.gpio _ pin=gpio _ pin _ 5; //PB5针脚连接到舵机信号线gpio _ motor init.gpio _ speed=gpio _ speed _ 50m Hz; Gpio_init(gpiob,GPIO_MotorInit ); 曾经的萝莉_MotorInit .曾经的萝莉_ClockDivision=曾经的萝莉_CKD_DIV1; //将时钟分频设定为1,不对以前的旋转_MotorInit进行分频。 曾经的萝莉_CounterMode=曾经的萝莉_CounterMode_Up; //计数模式过去的滚动上传计数模式过去的滚动_MotorInit .过去的滚动_Period=200 - 1 //重载值被设定为下一个更新事件的加载事件的重载值200/10000s 曾经的萝莉_MotorInit .曾经的萝莉_Prescaler=7200 - 1; //预分频的Rolly x时钟频率预分频值的Rolly _ time base init (曾经的Rolly 3,曾经的Rolly _ motor init ); //计时器3曾经的萝莉PWN_MotorInit .曾经的萝莉_OCIdleState=曾经的萝莉_OCMode_PWM1; //计时器模式1曾经的萝莉PWN_MotorInit .曾经的萝莉_OutputState=曾经的萝莉_OutputState_Enable; //比较输出为曾经的萝莉PWN_MotorInit .曾经的萝莉_OCPolarity=曾经的萝莉_OCPolarity_Low; //选择有效输出极性,选择低电平,即小于该低电平有效的曾经的萝莉_OC2Init (曾经的萝莉3、曾经的萝莉PWN_MotorInit ); //因为选择了计时器3的频道2,所以在OC2上曾经的萝莉_OC2PreloadConfig (曾经的萝莉3,曾经的萝莉_OCPreload_Enable ); //在自动加载预加载寄存器中启用以前的萝莉_Cmd (以前的萝莉3,ENABLE ) } motor.h

# include ' STM 32 F10 x.h '//deviceheadervoidmotor _ config (void );main.c

# include ' STM 32 F10 x.h '//设备头# include ' usart.h ' # include ' led.h ' # include '无心热狗. h ' # include while(I----; }intmain(void ) {uint16_t pwmval=155; //约3/4 155/200 (重载值)//舵机转155,再次转motor_config ); while(1) for ) PWMval=195; pwmval=175; pwmval-=5)//计时器3频道2曾经的萝莉_SetCompare2(曾经的萝莉3,pwmval ); //5 .配置PWM比较值占空比delay(500 ); //0.5s }}}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。