和爷爷一起学Arduino:模拟输出(PWM输出)是模余的

和爷爷一起学Arduino:模拟输出(PWM输出)是模余的

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

标签:余数   读数   寄存器   万用表   赋值   发生器   脉冲   正比   数值   宽度   电压   数控   爷爷   芯片   代码   简单

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top