Arduino Uno输出自定义频率的PWM(详解)

您所在的位置:网站首页 电磁阀pwm驱动频率怎么调 Arduino Uno输出自定义频率的PWM(详解)

Arduino Uno输出自定义频率的PWM(详解)

2024-07-10 19:08| 来源: 网络整理| 查看: 265

在这里插入图片描述

PWM

PWM(Pulse Width Modulation)是一种方波控制信号。方波高电平的宽度在一个周期里的占比被称为占空比(Duty Cycle)。改变PWM的占空比,可以改变输出信号的平均电压,实现模拟电压的输出。 https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM (官网)

简单的说 ,就是在一些情况下,GPIO脚位不在的切换“有电”“没电”, 每秒种循环的几次即为其 Frequency(频率), 每次“有电”时间站一个循环的百分比称为其占空比

Arduino里的PWM

首先,Arduino Uno的5,6,9,10,3,11接口可以通过简单语句analogWrite(pin, dutyCycle)来实现一个指定占空比的PWM。其中pin的值选择(5,6,9,10,3,11),dutyCycle的值在0~255之间,0为占空比0%,255为占空比100%。但是这种方式PWM信号的频率是固定的默认值,大约1000Hz左右(16MHz/64/256)。

其次,手动切换高电平和低电平,再在中间加入delay函数,可以实现自定义频率的PWM:

void setup() { pinMode(13, OUTPUT); } void loop() { digitalWrite(13, HIGH); delayMicroseconds(100); // Approximately 10% duty cycle @ 1KHz digitalWrite(13, LOW); delayMicroseconds(1000 - 100); //修改这里的1000可以调整频率 }

这个例子中:一个循环是1000us = 1ms,所以一秒循环1000次,因此Frequency是1KHz, 每个循环中:有电的比率是100/1000 * 100% = 10%,所以duty cycle(占空比)为10% 这样就可以模拟出5V * 10%=0.5V的电压 好处是任何一个引脚都能通过这样输出PWM, 但是,这种操作需要CPU全神贯注的查数,任何其他的进程的干扰会导致输出的信号频率不准。

综上,需要底层的手段来控制Arduino实现PWM的频率调节。

调节Arduino里的时钟频率

Arduino Uno里有三个Timer:Timer0,Timer1,Timer2。 三个Timer都可以自定义调整频率,但是各有特点。Timer0负责控制delay等函数,动了Timer0的频率会导致计时函数不准;Timer1的计数器是



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3