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);
}
}
页面更新:2024-05-07
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号