ESP32-学习(2)

1.ADC的使用

把模拟量转换为数字量的一个过程

ADC是12位,因此读到的数值为0-4096

1.先设置该引脚为输出

 pinMode(num,INPUT);    //设置为num引脚输入

2.读入该引脚的数值

ADC为12位,因此读的值大小为0-4096

x = analogRead(num);  //读14引脚的值读取范围0-4096,即采样值

使用x接受读到的ADC值

3.代码演示

读取GPIO14,对应ADC2_CH6,然后通过串口监视器打印出来

// ADC为12位
const int num = 14;     //设置引脚14    对于ADC为 ADC2_CH6
int x = 0;            
void setup() {
 Serial.begin(115200);  //设置波特率
 pinMode(num,INPUT);    //设置为14引脚输入
}
void loop() {
  x = analogRead(num);  //读14引脚的值读取范围0-4096,即采样值
  Serial.println(x);    //打印ADC的值
  delay(500);
}

2.DAC的使用

将数字量转换成模拟量的一个过程

DAC    引脚
DAC1(GPIO25)
DAC2(GPIO26)

DAC是8位,因此读到的数值为0-255,引脚输出的最大电压3.3V

1.定义25号引脚为输出(定义引脚25为DAC1)

#define DAC1 25     //定义引脚25为DAC1
pinMode(DAC1,OUTPUT);    //设置为25引脚输出

2.使用函数dacWrite()输出电压

dacWrite(DAC1,x);     //引脚输出150      150/255  =  y/3.3    y即为输出电压

dacWrite(DACx,X);  第一个参数是引脚号,仅限于DAC1与DAC2,第二个参数是DAC输出的值范围0-255,输出0及电压0V,输出255及输出电压3.3V

3.代码演示

#define DAC1 25     //定义引脚25为DAC1
int x = 0;            
void setup() {
 pinMode(DAC1,OUTPUT);    //设置为25引脚输出
}
void loop() {
  for(x=0;x<=255;x++)
  {
   dacWrite(DAC1,x);     //引脚输出150      150/255  =  y/3.3    y即为输出电压  
   delay(500);    
  }
}

4.map函数的使用

map(x,x0,y0,x1,y1);     把x进行映射,按照x0-y0与x1到y1进行映射

下面代码即把x从0-10,映射到0-50,就是说把x扩大5倍

当x = 0  X = 0;     x = 1 X=5;    x = 2 X = 10;

int X=0;     
void setup() {
 Serial.begin(9600);
}
void loop() {
  for(int x=0;x<=10;x++)
  {
       X = map(x,0,10,0,50);
       delay(500);
       Serial.println(X);
  }
}

应用就是ADC与DAC的转化

例如把读取到的ADC值返回给DAC输出。ADC的范围是0-4096,而DAC输出的范围是0-255;

因此使用map(x,0,4096,0,255)把X等比列的转化为0-255范围内

3.PWM的使用

pwm是Pulse Width Modulation 的缩写,中文意思就是脉冲宽度调制,简称脉宽调制。

PWM有高速模式和低速模型两种。从0到15共有16个通道,所有带有输出的引脚都可以输出PWM。高速通道(0 ~ 7)由80MHz时钟驱动,低速通道(8 ~ 15)由 1MHz 时钟驱动。

1.定时器配置,指定PWM信号的频率和占空比分辨率。

ledcSetup(Channel, freq, resolution);   

参数作用
Channel  通道通道号0-15
freq    频率希望得到的频率(高速的不要超过80MHz低速不要超过1MHz)
resolution  分辨率计数位数,取值0 ~ 20

resolution  分辨率 :(该值决定后面 ledcWrite 方法中占空比可写值,该值写8,则占空比最大可写255,该值写10,则占空比最大可写1023,值写成12,则占空比最大4095。

double ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits)

该函数的返回值为最终频率ledcSetup()

2.通道配置,绑定定时器和输出PWM信号的GPIO。

ledcAttachPin(Pin, Channel);

将指定的 LEDC 通道绑定到指定的 IO 口上以实现PWM的输出。

3.改变PWM信号输出PWM信号

ledcWrite(Channel, Value); 指定的 PWM通道的输出占空比

// GPIO_13 输出PWM
// GPIO_12 读取IO14输出的信号

void setup()
{
  Serial.begin(115200);
  Serial.println();

  ledcSetup(0, 1000, 8);   //设置LEDC通道0频率为1KHz,分辨率为10位,即占空比可选0~255
  ledcAttachPin(26, 0);    //设置LEDC通道8在IO26上输出
  
  pinMode(25, INPUT_PULLDOWN);   //引脚25,下拉输入
}

void loop()
{
  for (int i = 0; i <= 20; i++)
  {
    ledcWrite(0, 10 * i); //设置输出PWM
    delay(500);
    Serial.println(analogRead(25));  //读取引脚25的电平并输出
  }
    for (int i = 20; i >=0 ; i--)
  {
    ledcWrite(0, 10 * i); //设置输出PWM
    delay(500);
    Serial.println(analogRead(25));  //读取引脚25的电平并输出
  }
}
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值