上图就是生成PWM所需要的模型了,我们编写代码就是以这个模型来进行模拟的。
因为主程序需要执行其他的操作,所以我们因该使用定时器中断的方法来实现PWM。
PWM需要三个参数,第一个是频率,第二个是占空比,第三个就是分辨率
频率:因为我们的PWM是通过方波信号来等效的模拟成平滑的信号,所以如果频率越高,那么模拟的效果也会越好。
占空比:因为PWM的一个周期是一次高电平和一次低电平,高电平时间/PWM的周期 = 占空比,通过控制占空比我们就可以调整电机的速度或者LED的亮度。
分辨率:也就是如果你的占空比是如果是以1%, 2%, 3%的大小来变化的,那么分辨率就是1%,如果是0.1%, 0.2%, 0.3%来变化占空比,那么分辨率就是0.1%,分辨率越高那么占空比的变化也就会越细致。
对于代码而言,我该怎么控制我的频率呢?
因为我们使用的是定时器,那么我们通过PWM的周期就可以控制频率了,我们设置进入中断需要的时间,每次进中断都会对计数器进行+1,然后和比较值进行比较,如果计数器小于比较值那么为一个状态,计数器大于比较值又是另一个状态,我们可以算出 PWM的周期 = 计数器可以达到的最大值 * 定时器进入中断所需要的时间。计数器的作用就是将一个PWM周期进行均分为每个时间段,这样我们就可以通过对比价值进行修改完成对一个PWM周期内高低电平的时间也就是占空比的调节。这就是代码思路