如果不想看的可以直接使用git把我的代码下载出来,里面工程挺全的,后期会慢慢的补注释之类的
如果不会使用git快速下载可以选择直接下载压缩包或者去看看git的使用
git的使用(下载及上传_git如何下载文件_八月风贼冷的博客-CSDN博客
应用为PWM波形,章节使用PWM波驱动电机和使用PWM波混色LED以及呼吸灯LED
目录
一、理论学习部分。
1、输出比较的介绍
通过:CNT:计数器与CCR寄存器比较来产生的,并且输入捕获和输出比较使用的是同一个寄存器,然后有四个输出比较,但是CNT用的是同一个。
2、什么是PWM波形
以数字量等效出来的模拟量变化,效果如左1图,在一个周期内高电平长就等效的为上半,否则为下半。
频率:周期的倒数嘛就是频率,
占空比:如图 就是高电平站一整个周期的大小。
分辨率:补距 就是说占空比精度 比如占空比从50只能到51那分辨率就是1,
原理!!!在一段时间内以快速变换频率让两端时间折中,比如电机马力全开与关闭折中,转速就只有了1/2 这样就是pwm,并且可以看成等效电压(0+5)/2 这样整个电压就是2.5v也可以算作一半功率。
3、输出比较通道
左侧输入为CNT和CCR经过比较寄存器的值,左上角ETRF为定时器的写一个小模式,一般不用占时没管,以后再写,当输出比较之后产生的REF有两路,一个是到主模式控制器,一个是近过非门,上面那个是可以吧REF映射到主模式的TRGP输出(本次不使用)。下方是经过一个寄存器,用户往寄存器写值,如果写的是0,信号直接不改变走上面输出,如果输入为1,信号会经过下面的非门之后再输出。最后经过一个使能寄存器。
ok然后我们看一下输出模式控制器如何输出REF的值,直接看表把= =,用户往寄存器写数据就行,用官方库直接配置函数就行,但还是看一下吧,本次主要使用的是PWM模式,一般习惯向上计数模式,模式1和模式2是取反的,其他的都一样的,
最后看一下PWM的结构,可以很明显看出来输出比较和计数器比较,CCR的值是由直接设定的,在计数器自增或自减到ARR的过程中,达到了用户设定的CCR值后会让REF为高低电平,最后再通过一个极性选择可以再控制一次pwm的占空比(反向一下= =我感觉这个设定还是直接往寄存器写0不反向吧,不然我前面算pwm搞毛???)
4、输出pwm的计算
这个频率就是一次ARR的计数值= =,等于就是一个溢出频率
占空比就是:ccr(自己设定的那个输出比较寄存器的值与ARR计数总数的比值,就比如你这设置的是10,总共要计数100次,那你高电平输出就站总周期的百分之10,占空比就是百分之10
分辨率:还是100呗,1/100是百分之1的精度嘛= =,你也可以让ARR很大,那样就能精确的控制百分之0.1之类的变换,但是肯定是对硬件有一定要求的,
5、高级定时器的输出比较和捕获电路
这一部分不用,先了解一下吧、看着很简单,就多了一个死区生成和一个输出使能,因为外部的两个mos管形成的电路(后面有图,需要两个输出相反的引脚来使能,使用这里就有了两路输出使能,然后为了防止再切换外部两个mos'管状态的时候,因为一些器件原因造成的不能马上切换,所以加了一个死去发生器来防止外部两个mos管的损坏(就是再关闭的瞬间,给了给延时让下面的管子晚一点导通。
这个玩意就能驱动一个电机了,但是电机是大功率的,所以gpio无法直接驱动,只能使用外部驱动。三个mos管组成的这个电路就能驱动一个三相无刷电机了(好像是?后面做飞行器的时候不对我再回来删。