在PWM输出讲解中设计了两个实验,分别是无源蜂鸣器和直流有刷电机的控制,相关电路开发板上都有。无源蜂鸣器通过一个三极管驱动,直流有刷电机通过L9110S这款驱动芯片进行驱动,电路图如下。
ATtiny24/44/84有一个带有两个PWM通道的8位定时器/计数器和一个带有两个PWM通道的16位定时器/计数器,分别在ATtiny的第5脚(PB2)、第6脚(PA7)、第7脚(PA6)、第8脚(PA5)上,其在Arduino IDE中的序号如下图所示。
用Arduino IDE进行编程时PWM输出函数为analogWrite(pin, value),其中pin表示要写入的ATtiny引脚,value表示占空比,介于 0(始终关闭)和 255(始终打开)之间。
用analogWrite这个函数操作第5脚和第6脚以及第7脚和第8脚时,PWM的周期分别为4ms和2ms,我们可以通过一个小程序来验证一下。
该程序将这四个引脚均输出占空比为50%的PWM波,烧录成功后用示波器测量第5(6)脚和第7(8)脚,波形如下。
无源蜂鸣器的控制较为简单,将三极管的基极接到PWM输出引脚上,在频率固定时PWM占空比的大小反映蜂鸣器的响度大小。
L9110S内置了一个H桥驱动电路,其中IA、IB连接单片机,OA、OB连接电机其控制逻辑如下表所示。
IA电平 | IB电平 | 电机状态 |
H | L | 正转 |
L | H | 反转 |
H | H | 停止 |
L | L | 停止 |
调速时我们可以将IB的电平固定,调整IA的占空比。这时需要注意的是控制电机反转时IA低电平为有效电平,函数形参中的占空比为255减去低电平的占空比。当然,控制IA电平固定,调整IB的占空比也是一种选择。
以下为控制电机以一定的速度分别正转、反转、停止的演示视频,完整程序和开发板电路可在本系列第一篇博客中电路城链接中下载。
Arduino IDE开发ATtiny实践