一、PWM简介

脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

PWM在生活中非常的常见,小到呼吸灯的闪烁,达到航天飞船都会应用到PWM技术。PWM的波形如下图所示。

二、占空比简介

占空比是脉冲宽度调制技术中常用专业术语,占空比是指在一个时钟脉冲周期(T)内,高电平(t1)的时间占总周期时间的比值,即占空比(duty)=t1/T*100%

如下图所示是一系列典型的脉冲波形。

第一个PWM波,周期为10ms,高电平的时间为4ms,所以占空比为40%,同理第二个PWM波为60%,第三个为80%。

一般地,占空比反映了等效幅值的大小:占空比越大,等效幅值越高;占空比越小,等效幅值越低。如下图所示为不同占空比对应等效幅值的关系示意图。

  • STM32的PWM模式

STM32上定时器有专门的PWM模式,它的原理是通过定时器使用比较输出的方式如下图所示产生波形。

ARR为自动重载寄存器,CCR为捕获/比较寄存器,CNT就是定时器的计数器,CNT的值从0开始递增,使用PWM模式后,可以设置有效电平,以及PWM的模式。上图所示的是当CNT的值小于CCRx时,输出低电平,当CNT的值大于CCRx时,输出高点平,所以我们可以通过改变ARR的值来改变PWM的周期,改变CCRx的值来改变PWM的占空比,从而实现任意频率任意占空比的PWM波。

  • 寄存器

STM32的PWM输出模式涉及到以下寄存器。

(1)TIMx_CR1:定时器控制寄存器1,如下图所示。

其中CKD来设置时钟分频,ARPE来使能自动重载预装载,CEN来使能计数器。

(2)TIMx_CCMR1:定时器捕获比较模式寄存器,如下图所示。

OC1M来配置PWM的模式,PWM模式1,CNT<CCR1时为有效状态、CNT>CCR1时为无效状态;PWM模式2,CNT<CCR1为无效状态、CNT>CCR1为有效状态。OC1PE来使能预装载。CC1S来配置通道的输入输出模式(默认为输出模式)。

  1. TIMx_CCER:捕获比较使能寄存器,如下图所示。

CC1P来配置输出极性,可以选择高电平有效或者低电平有效。CC1E来使能捕获/比较。

五、PWM电机控制实验

PWM电机控制实验使用STM32的定时器的PWM输出功能,可对飞控上的电机所在的引脚,产生不同占空比的PWM,从而实现让四个电机以不同的速度旋转。(注意:做实验的时候,占空比不要调节过大,该实验会使旋翼转动,要小心无人机的旋翼划伤手)无人机的四个旋翼如下图所示。

根据原理图,可以看到四个电机分别由两个AO9926C控制,AO9926C其实想当于是两路的N沟道MOS管,两个AO9926C的四个MOS管的G极(栅极)接口分别是:PB6、PB7、PB8、PB9,如下图所示。

查看数据手册可知,PB6、PB7、PB8、PB9分别对应的是TIM4_CH1、TIM4_CH2、TIM4_CH3、TIM4_CH4,即定时器4的输出通道1~4。

配置输出PWM的代码编写的思路如下:

1

管脚配置

1、定义结构体;

2、使能时钟;

3、填充结构体;

4、装载结构体。

2

定时器配置

1、定义结构体;

2、使能时钟;

3、填充结构体;

4、装载结构体。

3

PWM输出参数配置

1、定义结构体;

2、填充结构体;

3、装载结构体;

4、使能输出。

4

改变占空比

1、改变占空比参数。

定时器PWM输出的初始化代码如下:

装载不同的CCR值,产生不同的占空比,从而使四个电机以不同的速度旋转,代码如下图所示。

其中TIM4_CH1装载CCR值为25、TIM4_CH2装载CCR值为50、TIM4_CH3装载CCR值为75、TIM4_CH4装载CCR值为100。如下图所示。

保存、编译、下载代码(注意旋翼会转动,小心划伤),可以看到四个旋翼以不同的速度转动,其中转速的排序为接在PB6的电机<接在PB7的电机<接在PB8的电机<接在PB9的电机。

疯壳AI开源无人机PWM(电机控制)相关推荐

  1. 疯壳AI开源无人机开机测试及硬件资源介绍

    一.开机测试 1.1 前期准备 疯壳cocofly无人机到手后是一个高耐压防碰撞内置优质海绵泡沫防护的手提铝合金箱子,打开铝合金手提箱子就可以看到包含的物品:无人机一架.遥控手柄一个.无人机电池一个. ...

  2. 疯壳AI开源无人机GPIO(LED航情灯、信号灯控制)

    一.LED LED简介 LED(Light Emitting Diode)即为发光二极管的缩写.LED是一种在生活中非常常见的照明发光器件.LED的在我们生活中形态种类非常的多,如下图所示. 尽管LE ...

  3. 疯壳AI开源无人机地面站上位机的使用和介绍

    地面站上位机使用和介绍 COCOFLY地面站上位机是配套COCOFLY无人机使用的,该地面站上位机功能非常的全.主要分为5大功能板块,分别是基本收发.飞控设置.波形显示.图形编队以及飞控状态. 1.1 ...

  4. 疯壳AI开源无人机中断(按键检测)

    一.轻触按键 1.1轻触按键简介 轻触按键是众多按键中的一款产品,它其实相当于是一种电子开关,只要轻轻的按下按键就可以把开关接通,松开时把开关断开.轻触按键由于微动开关的特性以及体积小.质量轻的优势在 ...

  5. 【CC3200AI 实验教程12】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-语音采集

    CC3200AI实验教程 --疯壳·开发板系列 语音采集 音频采集板卡主要运用的是TI官方的方案TLV320AIC3254音频编解码器+TPA2012D2RTJ功率放大器,如图1.0.1为语音采集主板 ...

  6. 【CC3200AI 实验教程6】疯壳·AI语音人脸识别(会议记录仪/人脸打卡机)-串口

    CC3200AI实验教程 --疯壳·开发板系列 串口 串行接口分为异步串行接口和同步串行接口两种.异步串行接口统称为通用异步收发器(UART)接口,同步串行接口有SPI和I2C等,同步串行接口除了包含 ...

  7. 疯壳AI语音及人脸识别教程3-2语音采集

    详情地址:https://fengke.club/GeekMart/views/offline/ai 购买链接:https://fengke.club/GeekMart/su_fKw7Nb7oC.js ...

  8. 【飞控开发基础教程9】疯壳·开源编队无人机-PWM(电机控制)

    COCOFLY教程 --疯壳·无人机·系列 PWM(电机控制)          图1               一.PWM 简介     脉冲宽度调制(PWM),是英文"Pulse Wi ...

  9. 【开源教程16】疯壳·开源编队无人机-PWM(电机控制)

    COCOFLY教程 --疯壳·无人机·系列 PWM(电机控制)          图1               一.PWM 简介     脉冲宽度调制(PWM),是英文"Pulse Wi ...

最新文章

  1. 借助队列解决Josephus问题
  2. 线程技术 ☞ Future模式
  3. 建立桌面文件管理格子_你不知道文件管理神器,一键收拾乱糟糟的桌面
  4. 阿里云消息队列python_41. Python Queue 多进程的消息队列 PIPE
  5. 服务器水厂物资管理系统,水处理管理系统及水处理管理服务器 Water management systems and water treatment management server...
  6. 【计算机视觉】论文笔记:Ten years of pedestrian detection, what have we learned?
  7. libzdb 连接mysql,数据库连接池库libzdb使用教程
  8. java 线程只执行一次_java – 如何确保方法只执行一次并且只从一个线程执行?...
  9. flask-稿件-环境依赖包的生成与安装-flask虚拟环境的布局
  10. jquery请求后台数据(get请求)
  11. Spring Cloud OAuth2 实现用户认证及单点登录
  12. 页面 动态显示cmd执行结果_把代码执行演示嵌在你的PPT中
  13. [USACO13OPEN]Luxury River Cruise【模拟】
  14. [python3] zipfile压缩目录下所有的文档都被压缩,并解决压缩路径过深的问题
  15. ubuntu无法安装软件问题解决
  16. 《白帽子讲Web安全》注入攻击
  17. linux下dft计算标准函数,FFT/DFT计算方法
  18. 拯救者笔记本 除尘后 开机蓝屏
  19. Ubuntu安装LXDE桌面环境
  20. 使用GCC和Makefile编译c文件

热门文章

  1. 中粮集团-“我买网”领导说了:
  2. python篇 深拷贝与浅拷贝
  3. 功能测试_测试用例设计方法
  4. 强化学习入门系列一VS强化学习的基本概念
  5. NOI:253 丛林里的路
  6. Telegram 搜索机器人BOT
  7. 基于SSM实现的人力资源管理系统【附源码】(毕设)
  8. Unity 3D中的内存管理与优化游戏运行性能的经验
  9. 华大HC32A460 系列介绍(一)
  10. 零基础学习python第二课笔记