Arduino的模拟输出是采用PWM(脉冲宽度调制,简称脉宽调制)方式。在PWM口上的电压范围是0~5V(如果你的供电是3.3V,那电压范围就是0~3.3V),相应在代码里的数值范围是0~255。那如果你输出256,会不会输出电压过高呢?不会的。你输出256,等于输出0。
我们编了一段测试代码如下。用万用表的黑表笔接GND,红表笔接D3口。当上电运行代码时,你会发现,万用表的读数从0开始,逐渐增大到5V,然后跌到0V,再逐渐升高到5V,这样子重复4次。由此可见,PWM口的输出,不是简单正比于你给PWM的数值,而是先将你给的数值模余,再送给芯片内的PWM发生器。模数是256。也就是说,对于PWM来说0~255=256~511=512~767=768~1023。你赋值0、256、512、768给D3口,输出电压都是0V;你赋值255、511、767、1023给D3口,输出电压都是5V。如果你要笔算,那就是把赋的数值除以256,送入PWM的是余数。
实际在芯片里更简单。PWM数控口是8位寄存器,因此,你送进去的数值,超过8位二进制的数统统被丢弃。
int v = 0; void setup(){ pinMode(3, OUTPUT);}void loop(){ delay(5000); for(v = 0; v < 1024; v++) { analogWrite(3, v); delay(20); }}
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!