设为首页 | 加入收藏 |
咨询热线:52452488
产品列表
联系我们
电话:

手机:

传真:
邮箱:
地址:
Arduino中PWM调制在电子技术实验中的应用研究

Arduino中PWM调制在电子技术实验中的应用研究

[来源:未知]  [作者admin] [日期:2024-01-27 01:19] [热度:]

  基于开源控制平台 Arduino 控制器的开放性与易用性,在原有的电子技术综合实验中新增了以 Arduino 单片机为核心的实验教学模块。利用 Arduino 单片机中的脉冲宽度调制技术(PWM技术),单片机根据接收到的红外信号对应调节两个直流电机的输入电压,从而控制其转速比,进而控制由电机上的两个偏心镜反射后的点状激光的运动轨迹,利用视觉残留效果形成图案,并通过 MATLAB 设计了仿真实验验证了激光图案的正确性。新增教学模块扩展了传统的电子技术综合设计实验教学中焊接控制电路的内容,丰富了实验教学内容,加强对学生的编程能力和电子技术综合设计能力的培养,激发学生的学习兴趣。

  关键词 Arduino;教学改革;脉冲宽度调制技术(PWM 技术);计算机编程

  电子技术综合设计实验作为光电信息专业、物理学专业的一门重要的综合课程,在本科生经过电子技术理论知识的学习后搅拌机,通过硬件设计、通讯控制、软件编程可以锻炼学生的实验技巧从而全面地提升其电子技术综合设计能力。中山大学物理学院开设的电子技术综合设计实验课中,通过让学生焊接安装控制电路,控制两个直流电机的输入电压,将经过两个不同转速的偏心转轮平面镜的反射后的激光,形成特定形状的激光图案,通过改变两个直流电机的电压比,可以得到不同形貌的激光图案[1]。通过焊接控制电路,学生可实现的几个特定电压比值的输出电路,通过声音采集模块可以实现在几个不同电压比之间的切换。但上述方法会导致输出图案形式单一,并且焊接电路中由于单个坏掉的电子元器件导致的实验问题难以排查,给实验教学带来一些不便。Arduino 作为一款便捷灵敏、易于上手的开源电子开发平台,具有操作简便、功能丰富等特点,已广泛应用于各种电路系统的开发[2-4]。将 Arduino 单片机引入电子技术综合设计实验课程中,不仅可以拓展控制电路的开发设计方式,还可以通过引入其他的传感器模块让学生在 C 语言的基础上自行编程,丰富了实验教学内容。通过引入 Arduino 单片机调控模式,将传统焊接电子电路的内容扩增为“原理设计电路连接软件编程”的连贯模式,提高了学生的学习主动性和学习兴趣,降低电子技术实验中电路焊接不当引起的故障率,促进教学质量的提高。

  本文以 Arduino 单片机作为控制电路的核心部件,结合 L293D 芯片、红外信号接收模块、激光器、直流电机、偏心转轮反射镜等硬件,实现红外信号通讯、PWM 信号输出调控直流电机的转速,从而改变激光图案的形状的目的。

  Arduino 是 2005 年意大利米兰交互设计学院的老师开发设计的一款开源开放的电子技术创意平台。Arduino 包含硬件(各种不同类型的 Arduino 开发板)和软件(用于代码编译的集成开发环境,Arduino IDE,以及第三方提供的图形化编程环境如 Mind+、Scratch3.0 等)。由于 Arduino 的编程具有类似 java、C++ 等常用编程语言的 Processing/Wiring 开发环境[4],入门简单,功能多样,价格低廉,被广泛应用于电子技术设计和互动产品开发等方面,受到广大电子技术开发者的青睐杂散电流腐蚀。

  (1) 1 个 USB 接口,可通过 USB 数据线与电脑实现通信,将 Arduino IDE 程序上传到开发板中,也可通过该口为开发板供电,电压为 5V;

  (2) 1 个电源插口,可使用 DC 电源为开发板供电,电压为 9V,使开发板具有驱动较大功率外部设备的能力;

  (3) 14 个数字 I/O 引脚,可进行数字电信号的输入和输出,其中有 6 个引脚支持 PWM 模式输出;

  Arduino IDE 是一款 Arduino 专用的程序编译器,是Arduino的集成开发环境。它将单片机的寄存器封装在核心库中,是单片机程序代码 GCCAVR 的二次封装。开发者只需了解 Arduino 开发板中各端口的作用,编写程序代码并上传到 Arduino 开发板中,不需要了解开发板内部寄存器的设置方法,降低了 Arduino 开发板的使用难度。同时,Arduino 也兼容 GCCAVR,对于实时性要求较高的项目,开发者也可直接对寄存器进行编程设置[3]。

  正是由于 Arduino IDE 对单片机程序代码的二次封装,使得使用者不需要了解单片机的内部硬件结构和寄存器设置,只需要清楚每一个端口的作用就可以利用基础的 C 语言知识编写程序代码并让 Arduino 实现想要的功能。

  以 Arduino 中自带的闪烁程序为例,按照如图 2 所示的代码上传到 Arduino UNO 板上,并将 13 号引脚连接 LED 正极,LED 负极与 GND 引脚连接,就可以看到灯泡亮暗交替闪烁。通过如上简单的程序,就可以实现利用 Arduino 电路板控制电子元器件的目的。

  除此之外,Arduino 开发板可连接其他输入和输出模块,实现更多的功能设计。开发者在 Arduino IDE 中编写程序并上传到 Arduino 开发板中,通过数字输入接口或模拟输入端连接声音传感器、红外接收模块、超声波接收模块等输入元件,进行信号接收、动作采集等操作,并通过数字输出接口或 PWM 输出端连接直流电机、蜂鸣器、显示屏等输出元件,进行信号发送、动作输出等操作,达到感知外界、影响外界的目的[4,5]。

  PWM(Pulse Width Modulation),即脉冲宽度调制技术,通过对数字电平的输出时间进行调制,改变脉冲宽度,等效获得所需的稳定直流电压输出[6]。对一个周期为 T 、幅值为 Vpp 的脉冲信号,调节其高电平输出的时间为th,

  Arduino 通过计数器与寄存器实现 PWM 输出。计数器按照一定的规则在最低值与最高值之间重复计数,当计数器的值与比较寄存器中设定的值相同时,切换数字输出的逻辑电平,实现对高电平输出时间的调制[7]。

  传统的实验过程采用时钟定时触发或音控触发的方式,学生焊接控制电路板,实现对激光图案的定时变换或音控变换,图 4 为控制电路流程示意图。

  定时触发模式采用 555 多谐振荡电路输出周期可调脉冲信号;音控触发模式通过放大电路和整形电路使声音信号形成稳定的脉冲信号。在方波脉冲信号上升沿的触发下,十进制计数器 4017 循环输出 Q0、Q1、Q2、Q3 四路高电平,再经分压电路获得四组不同的工作电压,进而通过反转电路和驱动电路控制两个直流电机的转向和不同的转速比。激光经过两个电机上的偏心反射镜的连续反射,在白屏上形成不同的激光图案[1,8]。

  实验要求学生焊接复杂的控制电路板,只能实现几个特定电压比值的输出电路,且电路难以采用其他信号触发模式。由于单个坏掉的电子元器件导致的实验问题难以排查,实验耗时长、输出图案形式单一以及实验过程中存在的虚焊等问题导致该实验扩展性低。

  本文引入 Arduino 对实验途径进行扩展,使实验更具创新性。图 5 是改进后的实验的示意图凯发娱发com。其控制过程如下:1)信号模块:摁下红外遥控器发出红外信号,Arduino 通过红外信号接收模块接收读取到电信号,不同的按键对应到 Arduino 中不同的电信号;2)计算模块:Arduino 根据接收到的红外信号计算调控出对应电压比的 PWM 模拟电压信号,再经过 L293D 芯片等比放大并驱动两个直流电机;3)硬件模块:激光经过两个不同转速的偏心旋转镜面的连续反射,在屏幕上形成特定的激光图案。改变两个电机的转速比可得到不同形状的激光图案。

  Arduino 单片机可与时钟传感器、声音传感器、光敏电阻传感器等多种输入模块连接,实现多种信号输入途径。本文采用红外信号输入实现对实验装置的控制。

  图 5 的右下角部分为红外信号接收模块与遥控器。将红外信号接收模块的输出接口(即模块上的 OUT 引脚)与 Arduino UNO 的 7 号引脚连接,用于传输信号,并通过连接 Arduino UNO 的 5V 输出端口为模块提供工作电压。当接收到红外遥控器发出的红外信号时,接收模块内置的程序将对红外信号进行解调、编码,输出六位十六进制编码。

  在 Arduino IDE 库管理器中下载安装 IRremote 库文件,通过调用 enableIRIn()函数可触发模块接收红外信号,再通过调用 decode()函数可将红外信号解调、编码为相应的六位十六进制编码[9]。

  由于 Arduino 单片机的输出电压最高为 5V,不足以驱动 12V 直流电机,本文结合 L293D 芯片实现直流电机驱动电路。图 6 为 L293D 芯片的原理图。16 号引脚连接 5V 电源,为芯片的调控电路提供工作电压;8 号引脚连接 12V 电源摆动导杆机构,为芯片的驱动电路提供工作电压。2、7、10、15 号引脚为控制信号输入引脚;3、6、11、14 号引脚为驱动信号输出引脚,用于输出信号以驱动电机工作。1、9 号引脚为使能引脚,当使能引脚置于高电平时,相应的输入输出引脚被激活启用,输出与控制信号同相的驱动电压[10]。

  将电机1的两端连接 L293D 芯片的 3、6 号输出引脚。相应的 2、7 号输入引脚中的一个引脚置于高电平,另一个引脚置于低电平,两个输出引脚的输出电压形成电势差,驱动电机转动。当不同的引脚被置于高电平时,电势差极性相反,电机转向改变。

  电机 2 的一端连接 L293D 芯片的 11 号输出引脚,另一端接地。当 10 号输入引脚置于高电平时,14 号输出引脚输出高电平电压,形成电势差,驱动电机转动。

  将 PWM 模拟信号输入 1、9 号使能引脚,相应的输出引脚输出相同占空比、峰值较高的 PWM 模拟信号,实现电机两端电压值的改变。

  在 Arduino IDE 上编写程序,根据输入的红外信号调控 PWM 模拟信号的输出,程序设计如图 7 所示。

  程序开始时,定义引脚、转速、转向等变量,设定引脚的模式。使用 enableIRIn()函数触发红外信号接收模块接收信号,通过 decode()函数判断是否成功接收到红外信号,若接收到红外信号,则将接收到的红外信号解调、编码为六位十六进制编码并赋值给变量 results,并在 Arduino IDE 的串口监视器中显示红外信号的编码和编码位数;若未接收到信号,则各变量保持不变,Arduino 输出信号不变。

  接收到红外信号后,使用 if-else 语句将红外信号编码与数字 0~9、符号 +、- 对应,并赋值到变量 Input。根据变量 Input 的值的不同,改变转速 speed、转向 Direction 等变量。

  为实现对两个电机转速的分别调控,定义变量 channal,当按下按键“CH+”时,channal=1,对电机 1 进行调控;当按下按键“CH-”时,channal=2,对电机 2 进行调控。

  为实现多组不同电压比值的输出,定义转速变量 speed 调控电机转速,将数字按键 0~9 对应 speed 变量由 0~255 等间距赋值;

  由于电机 1 正转、电机 2 反转时形成的激光图案与电机 1 反转、电机 2 正转时形成的激光图案一致,在程序中仅定义方向变量 Direction 调控电机 1 的转向,保持电机 2 的转向不变。

  将上述变量作为函数参数,调用 digitalWrite()和 analogWrite(pin,value)函数,改变相应输出引脚的电平状态和 PWM 信号的占空比,控制每个电机的转速和转向。

  将程序上传至 Arduino 中,通过遥控器按键“CH+”“CH-”选择需要控制的电机,再通过数字按键 0~9,设定输出引脚的模拟电压值,得到不同的输出电压,经 L293D 芯片驱动电机以不同的转速或转向转动。激光经由特定转速比的两个直流电机携带的偏心反射镜的连续反射,在白屏上形成特定的激光图案。改变两个直流电机的不同转速比,可以得到不同形状的激光图案。

  以电压比的正负区分电机转向的改变,分别设定两个直流电机的电压比为 -9∶5,-3∶2,3∶2,在白屏上获得相应的激光图案,如图 11 左侧所示。

  为了验证实验设计的准确性,我们还进行了理论上的计算,并使用 MATLAB 软件对激光图案的形成过程进行仿真模拟,理论分析过程如下:

  实验装置中,电机上的偏心反射镜所在平面的法线方向与电机转轴不平行,而是存在一个 3°的夹角。图 8 中电机的两个反射镜面位置为电机转动下反射镜面的两个极端位置,成一个 6°的夹角。点状激光直接照射在直流电机上的偏心反射镜上,由于反射镜所在平面的法线方向与电机转轴方向存在夹角,故当电机转动时,反射的点状激光不是固定的一个方向,而是成一个圆锥面,在白屏上呈现为一个圆形或椭圆。经第一个反射镜反射的激光照射在第二个反射镜上,发生第二次反射,在白屏上呈现的图像为两个圆形轨迹运动的叠加合成[11]。

  在白屏上建立直角坐标系,如图 9 所示。以水平方向为横坐标、竖直方向为纵坐标,记经过两次反射后,在白屏上显示的激光点的横坐标为 x,纵坐标为 y,则

  其中,第一次反射形成的圆形轨迹的半径为R1,角速度为 ω1,第二次反射形成的圆形轨迹的半径为 R2,角速度为 ω2。

  利用 MATLAB 软件对激光图案的形成过程进行仿真实验,代码程序如下。

  修改 MATLAB 代码中的两个转速变量的比值为 -9∶5、-3∶2、3∶2,并适当调节激光时间,运行程序,分别得到相应的仿线 右侧所示。

  从实验结果与仿真结果可以看出,当两个电机的转向相反且转速比为 9∶5 和 3∶2 时,激光图案呈现花瓣形状,随着电压比的增大,“花瓣”越来越窄且多;当两个电机的转向一致且转速比为 3∶2 时,激光图案为心形线绕一点旋转而成。

  需要指出的是,实验过程中由于两个电机转动的初始相位差的存在冷作硬化,激光图案会绕中心缓慢旋转。因此在实验过程中,实际激光图案是通过手机拍照,利用延长手机的快门时间实现的;仿真得到的激光图案是通过在画布上同时绘制激光点的轨迹方程实现的。由于手机设置的快门时间较长,而仿真实验绘制的激光图案为一个周期内激光点的运动轨迹,故在两个直流电机转速比为 9∶5 且转动方向相反时,实验观察到的图形“花瓣”数目要明显多于 Matlab 模拟的实验结果偏心元件。但是实际观测到的激光图案与仿真结果保持一致,由于图案会围绕中心旋转。在另外两个转速比下,实际激光图案也是在围绕着中心旋转的(这一点从实际观测到的激光图并未构成闭合曲线也可以明显看出)。

  实际实验结果与仿真实验结果一致。至此,我们借助 Arduino 中 PWM 调制技术,实现了对激光图案形状的红外遥控控制。

  以 Arduino 单片机为核心,通过“原理设计硬件连接软件编程”实现了用 PWM 调制方式控制激光图案的电子技术综合设计实验内容,丰富了传统的电子实验教学。通过调节占空比,控制输出电压进而生成多种不同的 PWM 信号,调节出多种不同的激光图案。该实验设计方案通过利用 Arduino 单片机中脉冲调制技术,通过让学生亲自动手设计硬件连接、电路设计以及软件编程,在充分学习了电子技术的基础上自行设计出基于 PWM 调制控制的激光图案系统,能够完整地培养学生的电子技术综合设计和应用能力。基于开源系统的 Arduino 单片机实验很适合本科生,结合物理测量和光电技术,开展各种实际应用。

  [6]王兆安, 刘进军. 电力电子技术[M]. 5版. 北京: 机械工业出版社,2011.

  [8]林远芳, 黄元庆. 一种通过对电机可逆调速获得合成图案的激光投射仪[J]. 电子技术应用, 1999(10): 34-36.

  基金项目: 国家级大学生创新创业训练计划项目(202210357);中山大学本科教学质量工程项目(中山大学教务〔2022〕20号,7)。

  通讯作者: 梁飞翔,男,中山大学实验师,研究方向为凝聚态物理、非常规超导、电子技术实验教学,

  引文格式: 林炳权,石皓宇,车宇,等. Arduino中 PWM 调制在电子技术实验中的应用研究[J]. 物理与工程,2023,33(3):80-87.

  吴国祯教授:我的国外研究生经历印象——应清华大学物理系“基科班20年·学堂班10年纪念活动”而写

  《物理与工程》期刊是专注于物理教育教学研究的学术期刊,是中国科技核心期刊,1981年创刊,欢迎踊跃投稿,期刊投审稿采编平台:

  Arduino中PWM调制在电子技术实验中的应用研究原创 林炳权 石皓宇 等物理与工程轻触阅读原文

关键字:偏心元件