野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10612|回复: 4

STM32野火开源平衡小车(三)之外设搭建之PWM

[复制链接]

发表于 2020-8-23 16:55:27 | 显示全部楼层 |阅读模式

野火开源平衡车官网板块

https://www.firebbs.cn/forum.php?mod=forumdisplay&fid=129&page=1

参考资料

暂无

参考视频(这个群主讲的不错)

https://www.bilibili.com/video/BV1j7411z7uX

硬件平台

开发平台

KEIL5, STM32F103X主控,程序用的SWD下载(啥下载器都行,能下载进去就好,用串口下载也是可以的)

开发(一)

配置基本定时器

配置PWM模式 用了高级定时器的CH1和CH4通道

代码跟视频UP主一样 不用改

PWM配置完毕

回复

使用道具 举报

发表于 2020-11-12 21:04:31 | 显示全部楼层
你好,可以请教一下大佬吗,为什么我用的和他的一样的硬件,而我输出的PWM波智能通过TB6612FNG控制一个轮转动呢。软件仿真显示是有两路PWM输出的。
  1. /*INT1~INT4和PWMA,PWMB GPIO初始化*/
  2. void Motor_Direction_GPIO_Config(void )
  3. {
  4.         /*INT1~INT4*/
  5.         GPIO_InitTypeDef GPIO_InitStruct;
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  8.        
  9.   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;        //端口配置
  10.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;      //推挽输出
  11.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;     //50MHZ
  12.   GPIO_Init(GPIOB, &GPIO_InitStruct);                                              //根据设定参数初始化GPIOB
  13.         /*PWMA,PWMB*/
  14.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  15.         GPIO_InitStruct.GPIO_Pin =GPIO_Pin_11| GPIO_Pin_8;
  16.         GPIO_Init(GPIOA,&GPIO_InitStruct);
  17.        
  18. }
复制代码

  1. void Motor_Forward(void)
  2. {
  3.         /*IN1->GPIO_Pin_12
  4.                 IN2->GPIO_Pin_13
  5.                 IN3->GPIO_Pin_14
  6.                 IN4->GPIO_Pin_15*/
  7.         /*右轮正转,超声波方向*/
  8.         GPIO_SetBits(GPIOB,GPIO_Pin_12);//1
  9.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);//0
  10.         /*B轮*/
  11.         GPIO_SetBits(GPIOB,GPIO_Pin_14);//1
  12.         GPIO_ResetBits(GPIOB,GPIO_Pin_15);//0
  13. }
复制代码

  1. void Motor_Pwm_Tim(void)
  2. {
  3.         TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  4.         TIM_OCInitTypeDef                         TIM_OCInitStruct;
  5.        
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);/*开启TIM1时钟*/
  7.        
  8.         /*定时器基本配置*/
  9.         TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;/*时钟分频*/
  10.         TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;/*向上计数*/
  11.         TIM_TimeBaseInitStruct.TIM_Period = 1000;//计数器周期arr
  12.         TIM_TimeBaseInitStruct.TIM_Prescaler = 7200-1;//分频系数psc
  13.         TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
  14.        
  15.         /*输出比较寄存器配置*/

  16.         TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//输出模式
  17.         TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//比较输出极性
  18.         TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
  19.         TIM_OCInitStruct.TIM_Pulse = 1000;//脉冲宽度
  20.        
  21.         //使能通道1和通道4
  22.         TIM_OC1Init(TIM1,&TIM_OCInitStruct);       
  23.         TIM_OC4Init(TIM1,&TIM_OCInitStruct);
  24.        
  25.         TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable);
  26.         TIM_OC4PreloadConfig(TIM1,TIM_OCPreload_Enable);
  27.        
  28.         /*使能TIM1在ARR上的预装载值*/
  29.         TIM_ARRPreloadConfig(TIM1,ENABLE);
  30.        
  31.         TIM_CtrlPWMOutputs(TIM1,ENABLE);
  32.         /*使能定时器1*/
  33.         TIM_Cmd(TIM1,ENABLE);
  34. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2020-11-12 21:31:21 | 显示全部楼层
,这是我仿真出来的结果。大佬可以给个意见吗。调了好久了
PWM输出.JPG
回复 支持 反对

使用道具 举报

发表于 2020-11-13 19:03:43 | 显示全部楼层
解决了,把初始函数调换了个位置就解决了(也就是先初始化TIM1,再初始化GPIO),不知道为啥。。。玄学吗。。。。
回复 支持 反对

使用道具 举报

发表于 2020-11-13 19:04:24 | 显示全部楼层
解决了,把初始函数调换了个位置就解决了(也就是先初始化TIM1,再初始化GPIO),不知道为啥。。。玄学吗。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-3-29 17:13 , Processed in 0.044997 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表