一、基本概念1. 脉宽调制pwm(pulse width modulation)即脉宽调制,是一种通过调节信号的占空比来控制电路的技术。 在 pwm 技术中,信号的周期保持不变,但是信号的占空比可以随时间变化而改变。 当信号的占空比为 0% 时,表示信号一直处于低电平状态; 当占空比为 100% 时,表示信号一直处于高电平状态; 而在占空比为中间值时,信号将以一定的频率在低电平和高电平之间切换。
在电路应用中,pwm 技术常用于控制电机的转速、控制 led 的亮度和颜色、实现音频数字化等方面。 例如,在控制 led 亮度时,可以通过调节 pwm 信号的占空比来控制 led 的亮度,占空比越大,led 灯亮度越高,反之亦然。
在微控制器中,通过定时器和计数器等硬件模块,可以实现高精度的 pwm 信号输出。 许多单片机和嵌入式系统都提供了 pwm 功能,并且在软件层面提供了相应的 api 和库函数,方便开发者使用。 在使用 pwm 技术时,需要根据具体的应用场景选择合适的 pwm 频率和分辨率,以及合适的占空比范围和切换速率,以达到最优的控制效果。
2. esp8266 的 pwm功能esp8266 是一款高度集成的 wi-fi soc 芯片,内部集成了许多硬件模块,其中包括一个灵活的 pwm 控制器,即 ledc(led 控制器)。 ledc 可以用于实现高精度的 pwm 输出,适用于控制 led 的亮度、颜色和闪烁等效果。
esp8266 的 ledc 控制器可实现同频率、不同占空比的pwm波形输出。 ledc 模块的主要特点包括:
高精度:ledc 支持高达 20 位的 pwm 分辨率,可实现非常精细的 pwm 控制。多路输出:ledc 可以同时控制多达 16 个 pwm 通道,满足多路 pwm 输出的需求。灵活配置:ledc 可以配置不同的 pwm 频率和分辨率,以适应不同的应用场景。低成本:ledc 是 esp8266 芯片内置的硬件模块,使用 ledc 功能无需外接任何外部元器件,节省了硬件成本。在使用 esp8266 的 pwm 功能时,可以使用 esp8266 的官方库文件 esp8266wifi.h 中提供的 ledc 相关函数进行配置和控制。 例如,可以使用 ledcsetup() 函数来初始化 pwm 通道,并使用 ledcwrite() 函数来设置 pwm 占空比。 此外,esp8266 的开发环境也提供了丰富的示例代码和库函数,方便开发者快速上手使用 pwm 功能。
要注意的是,gpio1和gpio3作为调试串口的tx和rx,一般不做pwm使用。
3. node-mcu 引脚图
4. 模拟写入(1)模拟写入要实现输出pwm信号,可以使用analogwrite()函数:
analogwrite(pin,value)1pin:gpio引脚value:默认0-1023
当值为0时,该引脚禁用pwm。 值为1023时 占空比100%。(2)修改频率 analogwritefreqanalogwritefreq(new_frequency);(3)调节分辨率可以用于调节模拟输出的 pwm 范围。
在 esp8266 中,analogwriterange() 函数用于设置 pwm 的分辨率。 默认情况下,esp8266 的 pwm 分辨率为 10 位,即占空比范围为 0~1023。 通过调用 analogwriterange() 函数,可以将 pwm 分辨率调节为 8 位或 9 位,以扩大或缩小 pwm 占空比范围。
二、使用analogwrite实现pwmconst int ledpin = 2; void setup() { }void loop() { // 增加led亮度 for(int dutycycle = 0; dutycycle 0; dutycycle--){ // 通过pwm改变led亮度 analogwrite(ledpin, dutycycle); delay(10); }}三、发送红外信号1. 红外通信原理红外通信是一种无线通信方式,它通过发射红外线来传输数据或控制信号,通常用于红外遥控器、红外传感器等场景。
红外信号是一种电磁辐射,其频率在可见光波和微波之间,一般波长为0.75至1000微米,其中,可见光波长为0.38至0.78微米。 红外线被称为热线,因为物体温度越高,发射的红外线辐射就越多。
在红外通信中,通过对载波信号进行调制,将数字信号转换为红外信号,从而实现数据或控制信号的传输。 调制方式主要有两种:幅度调制和频率调制。
幅度调制:通过改变载波信号的幅度,将数字信号转换为红外信号。 在幅度调制中,通常用一个二进制信号来控制红外发射器的开关状态,从而实现传输数据。频率调制:通过改变载波信号的频率,将数字信号转换为红外信号。 在频率调制中,常用的方式是将数字信号和一个固定的载波信号进行异或运算,从而得到一个频率变化的信号,用来控制红外发射器的开关状态,实现传输数据。接收端通过红外接收器接收到红外信号,然后通过解调的方式提取出携带的数据或控制信号。 解调的过程就是将红外信号转化为电信号,然后提取出载波信号,再将其与一个固定的频率进行比较,从而恢复出原始的数字信号。
2. 载波频率红外信号的载波频率(carrier frequency)指的是红外信号中用于携带信息的载波波形的频率。 在红外通信中,常用的载波频率一般在 20 khz 到 50 khz 之间。
将信息信号和载波信号进行调制后,就可以通过红外发射器将带有载波信号的红外信号发送出去。 接收器可以通过解调过程,将携带的信息信号提取出来。
在红外遥控器中,一般使用一定的载波频率进行通信。 这样可以提高通信的可靠性,同时也可以避免干扰,因为很少有其他的设备会使用相同的载波频率进行通信。
3. 发送周期红外信号的发送周期是指一个完整的红外信号周期所需的时间。 在红外通信中,为了确保通信的可靠性,每一个红外信号周期中一般包含多个载波周期。 具体来说,发送周期包括两部分时间:载波周期和调制周期。
载波周期:指载波信号一个完整的波形所需的时间,它是红外信号的基本单位。 在红外通信中,载波周期通常为一个固定的时间,一般在38khz左右。调制周期:指一个完整的红外信号周期所需的时间,它包括了载波周期和数字信号的调制。 在红外通信中,调制周期的长度取决于传输的数据长度和传输速率。 一般来说,调制周期越长,传输速率就越慢,但是数据传输的可靠性会更高。在红外遥控器中,每一个按键通常对应一个特定的红外信号,这个红外信号的发送周期一般是固定的,以确保遥控器能够正确地发送信号,并且接收器能够正确地解码信号。
4. 使用(1)安装库
库开源地址:
https://github.com/crankyoldgit/irremoteesp8266
(2)代码实现#include #include irsend irsend(4); // 初始化irsend对象并设置输出引脚,gpio4=d2void setup(){ serial.begin(115200); delay(1000);}void loop(){ serial.println(sending ir signal...); irsend.sendsony(0xa90, 12); // 发送sony红外信号,传输数据为0xa90,数据长度为12位 delay(1000); // 等待1秒钟}5. 红外接收示例#include #include #include #include // an ir detector/demodulator is connected to gpio pin 14(d5 on a nodemcu// board).// note: gpio 16 won't work on the esp8266 as it does not have interrupts.// note: gpio 14 won't work on the esp32-c3 as it causes the board to reboot.#ifdef arduino_esp32c3_devconst uint16_t krecvpin = 10; // 14 on a esp32-c3 causes a boot loop.#else // arduino_esp32c3_devconst uint16_t krecvpin = 14;#endif // arduino_esp32c3_devirrecv irrecv(krecvpin);decode_results results;void setup() { serial.begin(115200); irrecv.enableirin(); // start the receiver while (!serial) // wait for the serial connection to be establised. delay(50); serial.println(); serial.print(irrecvdemo is now running and waiting for ir message on pin ); serial.println(krecvpin);}void loop() { if (irrecv.decode(&results)) { // print() & println() can't handle printing long longs. (uint64_t) serialprintuint64(results.value, hex); serial.println(); irrecv.resume(); // receive the next value } delay(100);}
STM32串口中断及DMA接收常见的几个问题
新纪录将可能开创太阳能电池的新纪元
LED产业链结构和格局,LED行业发展现状及前景预测
一文了解bacnet协议的格式和转成modbus协议的方法
传输设备PDH接口对接问题
基于Arduino的PWM与红外信号处理
滤波电容原理
市场竞争激烈,新能源汽车的未来在哪里
10KV宝力科技配电工程电力监控系统的设计与应用
天然气报警器在日常生活中的应用
德国不愿在5G网络受到美国压力,反对对华为发布针对性禁令
农用杀虫灯与传统方法的对比,它的优势是什么
固体继电器实物接线图
雷卯新品:小体积多路低箝位电压防静电ESD
AOC iF22液晶显示器 广视角面板的普及风暴
光电二极管的工作原理和光电二极管的特性解析
日本地震波及全球产业链
中国台湾放无薪假人数再增 某电子零部件厂首度实施
海洋光学推出Torus系列衍射光栅光谱仪
基于Delphi的直流伺服电机自动测试系统的设计