方 淼
(安徽大学江淮学院 理工部, 安徽 合肥 230039)
单片机课程是电子类专业开设的一门重要的应用实践类课程, 该课程不仅要求学生理解单片机的架构、 工作原理, 还要熟练掌握单片机的编程方法, 在实践教学的过程中培养学生的工程实践能力和自主创新能力[1-2]. 因此在单片机课程的实践教学中, 教师应考虑从工程应用的角度设计实验案例, 并且案例应体现综合性、 阶段性和创造性, 进而指导学生完成资料查阅, 并确定设计方案和系统的软硬件实现, 这样才能有效地提高实践教学的质量[3-5].
本文设计了一种适合于单片机综合设计要求的实验项目——基于STC89C52单片机的函数信号发生器设计实验, 其要求学生通过Altium Designer 19软件完成硬件电路的设计并制作PCB板, 并针对功能需求和硬件条件进行软件设计, 从而完成一个完整的单片机系统的设计和调试. 该实验不仅能帮助学生理解DAC的工作原理和应用, 还能掌握单片机应用系统的软硬件设计和实现方法[6].
函数信号发生器实验系统主要由STC89C52单片机、 D/A转换模块、 模拟信号处理电路、 按键输入模块以及LCD显示模块等部分构成, 实验系统的原理图如图1所示.
图1 实验系统原理图
单片机的I/O口用于D/A转换, 实验要求实现至少三种以上波形输出, 同时采用独立按键实现各功能的切换, 包括切换输出波形、 信号峰峰值和频率, LCD显示模块用于显示输出波形的相关信息.
实验项目的设计充分考虑学生对课程的掌握情况, 采用层次化的教学方式. 实验要求包括基础部分、 提高部分和创新部分. 基础部分要求学生编程实现:包括实现3种波形输出(正弦波、 矩形波和锯齿波); 输出波形的频率范围为10 Hz~1kHz之间, 输出的波形及频率可以通过按键进行调节; 还要求在LCD显示器上显示输出波形的类型、 频率及峰值. 提高部分要求学生增加输出波形的类型, 对于增加低通滤波器模块, 需要对DAC0832输出的波形进行滤波获取纯净的波形; 对于扩展输出波形的频率范围, 最高频率达到20 kHz. 其要求学生根据自身水平, 进一步提高输出波形的质量, 扩展输出频率范围及幅度范围, 并增加其他模块实现自动控制和多路同步信号输出等.
实验的硬件系统以STC89C52单片机为主控芯片, 结合D/A转换模块、 模拟信号处理电路, 按键输入模块和LCD显示模块实现波形输出. 硬件电路的设计采用Altium Designer 19软件, 学生需利用该软件绘制相应的电路原理图以及PCB板图, 并自作电路板, 以完成元器件的焊接和硬件电路的调试.
本实验选用的是宏晶公司的STC89C52单片机, 该单片机基于8051微处理器, 片内集成了8 kB的flash ROM和512 B的RAM, 支持在系统编程(ISP), 是基础的入门级单片机, 其具有高速、 低功耗、 强抗干扰能力以及价格低等优点[6].
单片机最小系统是让单片机正常工作的最小配置电路, 包括单片机、 电源电路、 复位电路和时钟电路, 其是整个函数信号发生器的核心, 控制系统和其他模块协调工作. 为了保证系统的稳定性, 本实验选用了12 MHz晶振构建时钟电路[7]. 单片机所需工作电压为5 V, 其可以通过USB口供电, 也可以由稳压电源供电, 设计USB口供电的方式是为了便于和各种具有USB接口的设备进行连接. 此外, 单片机还支持上电复位和按键复位两种复位方式. Altium Designer绘制的最小系统原理图如图2所示.
图2 单片机最小系统
实验系统选用8位的D/A转换芯片DAC0832将单片机输出的数字量转换为模拟量, 模拟量的建立时间只需要1μs左右, 故此能够快速地实现D/A转换并产生输出波形. DAC0832和STC89C52单片机的连接方式有三种:直通方式, 单缓冲方式和双缓冲方式. 基础部分实验只要求输出单路的模拟信号, 因此基础部分可采用单缓冲方式将DAC0832接在单片机的P2口上, 使得DAC0832的输出在单片机的控制下随P2口输出的数字量的变化而变化, 提高部分或创新部分实验, 学生须根据设计需要采用双缓冲方式.
DAC0832芯片转换后输出信号为电流信号, 需采用相应的电路将电流信号转换为电压信号, 因此在DAC0832的输出端选用LM324芯片进行电流-电压信号转换和电压信号的放大. LM324芯片内部集成了4个独立的运放, 其中一路运放接DAC0832的Iout1输出端, 其利用芯片内部自带的反馈电阻构建反想放大器, 以实现电流-电压信号转换, 同时可将输出的电压信号接另一路运放, 构成二级放大[8], 以实现波形输出, 波形产生电路如图3所示.
图3 波形产生电路
为了显示输出波形的相关信息, 实验系统还加入了LCD1602液晶显示器. 该显示器属于点阵型液晶显示器, 可显示16(每行)×2(行)个5×10或5×7点阵汉字. 图4为LCD1602模块的驱动电路图, 液晶显示模块通过8位并行数据总线和3条位控制总线实现和单片机的通信, 数据总线接单片机的P0口, 控制引脚由单片机的P2.0~2.2引脚控制.
图4 LCD1602驱动电路图
本实验设计的软件设计[7]包括系统初始化、 按键扫描程序设计、 3种波形输出程序设计以及LCD液晶屏显示程序的实现. 系统的工作流程图如图5所示.
图5 系统软件流程图
本实验系统采用3个独立按键S1~S3, 分别连接STC89C52单片机的P3.2~P3.4引脚, 用于进行各种功能的切换. 其中S1增加输出信号的幅值; S2用于增加信号频率; S3进行波形切换, 采用按键扫描方式获取按键状态, 以切换不同波形存储数据的输出, 从而实现波形切换. 而P3.2和P3.3引脚复用位外部中断0和外部中断1的请求信号输入端, 因此可采用中断方式处理S1和S2按键闭合.
波形的控制输出由软件实现, 对需要输出的波形进行采样取点, 每个周期内取若干采样点并以数组的形式存储, 当需要输出某种波形时, 单片机会根据地址信息搜索对应的数组, 并将数组中的数值送到相应的I/O端口. 本实验要求至少设计输出3种信号波形, 包括正弦波、 三角波和矩形波, 各波形的采样点可以通过计算直接获取. 以正弦波为例, 直接定义数组sin[N]来存储正弦波信号的采样值:
图6 按键流程图
sin[N]=v*(sin(2*pi*i/N)+1),i=0:1:64
(1)
其中N为采样点数,v是8位二进制数, 最大为FFH. 取100个采样点, 输出波形周期设为100 ms,v=FFH时, 每个点的采样时间
(2)
而STC89C52的VREF为5 V, 因此输出正弦波的峰值也为5 V.
在实验过程中, 应根据班级人数灵活安排分组, 通常2~3人一组, 以完成函数信号发生器的软硬件设计及实现, 共同的是使得学生掌握单片机系统的设计方法及步骤, 并学会进行系统设计(包括需求分析、 硬件设计、 原理图设计、 PCB设计及制作、 硬件调试以及模块化的源程序设计和调试等), 从而有效地提高学生的工程设计能力和动手能力, 同时培养学生的团队协作意识和创新能力.
实验采用层次化的教学方式, 考虑学生的理论水平和综合能力, 要求所有学生必须完成基础实验, 并至少选择并一项提高实验. 教师在实验过程中应帮助学生分析遇到的问题, 同时鼓励能力较强的学生选择性地完成创新性实验部分.
本文完成了一种基于STC89C52单片机的函数信号发生器的设计及实现. 学生在实验过程中使用Altium Designer 19进行硬件电路原理图的设计, 并制作PCB板, 焊接元器件, 以及配合相应软件实现函数信号发生器的设计. 学生可根据自身能力以及兴趣层次化地完成实验设计, 并对函数信号发生器的功能进行拓展和改善. 该实验项目具有启发性, 开放性, 能有效地提高学生的实践动手能力及创新性, 在实践教学中取得了较好的效果.