电子系统综合设计PSoC.doc_第1页
电子系统综合设计PSoC.doc_第2页
电子系统综合设计PSoC.doc_第3页
电子系统综合设计PSoC.doc_第4页
电子系统综合设计PSoC.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验名称及要求1.1 实验名称简易数字电压表设计1.2 实验任务 对此次设计作品的方案选定:采用PSOC3作为核心;采用内部AD作为电压测量计;采LCD1602字符液晶作为显示模块;使用四个开关来控制;蜂鸣器和LED的闪烁用作报警;一个串口用于通讯。1.3 实验系统要求(1)测量电位器输出电压,显示在LCD第一行,保留1位整数,2位小数,单位“V”;(2)通过按键设置电压报警上下限,显示在第二行。保留1位整数和2位小数。下限最小值0.5V,上限最大值5V。设置步进0.06V,上限必须大于下限;(3)当测试电压低于下限或大于上限时,蜂鸣器产生报警声,同时LED闪烁。要求报警声音和LED闪烁有区别1.4 实验设备及环境微机一台 PSoC Creator软件;PSoC3实验操作板;USB连接线一根;9V电压源一台;电压连线1根;导线若干根。 2、背景知识介绍2.1 PSoC简介 可编程化系统单芯片(PSoC),是一种可编程化的混合讯号阵列架构,由一个芯片内建的微控制器(MCU)所控制,整合可组态的类比与数位电路,内含UART、定时器、放大器(amplifier)、比较器、数位类比转换器(ADC)、脉波宽度调变(PWM)、滤波器(Filter)、以及SPI、GPIO、I2C等元件数十种元件,协助客户节省研发时间。Altera、Atmel、Xilinx、Lattice皆有推出PSoC产品。实现PSoC有两种方法:利用 FPGACPLD;另一是在ASIC中加入可编程模组。凭借其独特的可配置模块阵列, PSoC3 成为一个真正的系统级解决方案,可在单个芯片中提供微控制器单元(MCU)、存储器、模拟和数字外设功能。CY8C32 系列提供了一种新型的信号采集、信号处理和控制方法,并具有高精度、高带宽和高灵活性等特点。其模拟功能涵盖了从热电偶信号 (接近直流电压)到超声波信号的广泛信号范围。CY8C32 系列可以处理数十个数据采集通道和模拟输入,这在每个通用输入/输出(GPIO)引脚上都可实现。CY8C32 系列还是一个高性能的可配置数字系统,部分器件具有USB、多主控内部集成电路(I2C)等接口。除了通信接口之外,CY8C32 系列还具有易于配置的逻辑阵列,至所有 I/O 引脚的灵活走线,以及高性能的单周期 8051 微处理器内核。借助 PSoC Creator 这一基于层级的原理图设计输入工具,您可使用丰富的预建组件和布尔基元库来轻松创建系统级设计。使用 CY8C32 系列不仅可以实现模拟和数字材料表的集成,而且只需通过简单的固件更新,即可轻松纳入最新的设计变更。2.2 LCD模块工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)。1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。在PSOC中,字符 LCD 组件包含一组库例程,通过这些库例程易于使用遵循 Hitachi 44780 标准 4 位接口的一行、两行或四行 LCD 模块。该组件提供 API 用于实现水平和垂直条形图,您也可以创建和显示自己的自定义字符。使用字符 LCD 组件可向产品用户,或在设计和调试过程中的开发人员显示文本数据。2.3 PSOC中的串口模块UART 提供异步通信,常用串行异步通信设备为 RS232 或 RS485。UART 组件可配置为全双工、半双工、单接收 RX 或单发送 TX 通信方式。所有通信方式都提供相同的基本功能。它们之间的差异仅在于使用的资源量。为了帮助处理 UART 接收和传送数据,提供了独立大小可配置的缓冲区。SRAM 中的独立循环接收和发送缓冲区和硬件 FIFO 缓冲区可确保数据不会被遗漏。这种机制有利于 CPU 利用更多的时间处理关键的实时任务而不是专职服务 UART。在多数应用中,可通过选择波特率、奇偶校验、数据位数以及起始位数轻松配置 UART。RS232最常见的配置通常列为“8N1”(全称为八个数据位、无奇偶校验、一个停止位)。这是 UART组件的默认配置。因此,在多数应用中只需设置波特率。UART 的第二个常见用途是用于多节点RS485 网络。UART 组件支持带有硬件地址检测功能的 9 位寻址模式,以及用于在传输过程中控制 TX 收发器和输出的使能信号。UART 具有悠久的历史,因此随时间推移产生了许多物理层和协议层的接口形式。这些接口形式包括(但不限于)RS423、DMX512、MIDI、LIN 总线、传统终端协议和 IrDa。为了支持常用的UART 接口形式,UART 组件支持对数据位数、停止位数、奇偶校验、硬件流控制以及奇偶校验生成和检测的配置。2.4 PSOC中的AD模块Delta Sigma 模数转换器(ADC_DelSig)可为精密测量应用提供低功耗、低噪声前端。它可用于多种应用,具体取决于分辨率、采样速率和操作模式。它能够对 16 位音频进行高速低分辨率通信处理,并且能够对应变计、热电偶和其他高精度传感器进行高精度的 20 位低速转换。处理音频信息时,ADC_DelSig 采用连续操作模式。当用于扫描多个传感器时,ADC_DelSig 采用其中一个多样本采样模式。用于单点高分辨率测量时,ADC_DelSig 采用单一样本采样模式。Delta sigma 转换器使用过采样在更广泛的频谱上扩展量化噪声。该噪声的形成是为了将其大部分移至输入信号的带宽之外。内部低通滤波器用于滤出所需输入信号带宽外的噪声。这使 delta-sigma 转换器能够良好地用于高速中分辨率(8 至 16 位)和低速高分辨率(16 至 20 位)应用。采样速率可调整为每秒 10 至 384000 次采样,具体取决于工作模式和分辨率。选择转换模式可简化与音频等单流信号的连接,或多个信号源间的复用。其特点:分辨率可选,8 至 20 位;每个分辨率有 11 个输入范围;采样速率为 8 到 384 ksps;工作模式:单样本采样模式、多样本采样模式、连续模式、多样本(加速)采样模式;高输入阻抗输入缓冲器;可选的输入缓冲器增益(1、2、4、8)或输入缓冲器旁路;多个内部或外部电压参考选项;自动功耗配置;最多四个 ADC 动态配置。3、原理介绍3.1 按键介绍本次实验中共用到了4个按键,效果分别为增加与减少上限与下限。按键Pin_2效果为增加0.06的上限;按键Pin_3的效果为减少0.06的上限;按键Pin_4效果为增加0.06的下限;按键Pin_5效果为减少0.06的下限。并且按键上限最大为5V,下限最小为0.5V,下限不能超过上限。由于key0和key1为上拉输入,所以初始化为低电平,判断按键是否按下的标准为读取的引脚电平为高电平,同理,key2和key3为下拉输入,所以初始化为高电平,判断按键是否按下的标准为读取的引脚电平为低电平。原理图及其配置如下:图13.2 蜂鸣器和LED灯通过电平的翻转来驱动蜂鸣器的鸣叫,而蜂鸣器音调的高低跟电平的持续时间有关,蜂鸣器的鸣叫条件为当测量电压超过设定的上限或下限时。且到达下限与上限的鸣叫音调不同。在此试验中我们采用PWM模块输出驱动波形来驱动蜂鸣器发声和LED的闪烁。其具体原理图和配置如下:图2图33.3 液晶显示器这里使用1602液晶显示屏,它是字符型显示器。在液晶屏上第一行显示测得的电位器传递过来的电压,第二行分别显示低电压阀值和高电压阀值,通过芯片的P20-6引脚对LCD进行控制显示。使用内部资源的元器件配置,原理图如下:图43.4 AD采样因为采样电压的最高范围为5V,保留1位整数和2位小数。理论下限最小值0.00V,上限最大值5.00V。PSoC3系列芯片ADC模块拥有1.024V的内部参考电压,此处我们采用16-bit模式分辨率,因为电压输入为正,所以采用单端输入方式。在采样结束后需要把采样结果转换为电压值显示在LCD上,转化公式为:Vin = CODE / (2 n) * M * Vref 。原理图及配置如下:图5图63.4 总模块图PSOC开发包括原理图设计和软件设计两部分,硬件原理图设计是根据用户需求选择合理的内置模拟数字资源,并进行合理配置和连线,让其组成一个完整的硬件系统。软件设计是通过编写用户命令来合理调用系统内置API函数,让硬件系统可靠、有序的工作。模拟图如下:图73.5 软件流程3.5.1 整个实验的程序设计流程图图83.5.2 键盘扫描程序设计流程图图93.5.3 LCD显示程序设计流程图图104、实验步骤(1)新建工程,并添加ADC模块、LCD模块、四个按键引脚和PWM模块及相关时钟输入和输出。如下图:图11(2)ADC模块配置为单端输入,分辨率15-bit,输入电压范围为Vssa-6.144V;按键配置为输入模式,软件连接,同时设置为上拉或下拉输入;PWM模块配置为两路输出,分别控制LED和Bell蜂鸣器,并把相关的器件连接在一起。如下图:图12图13图14(3)进行引脚的分配,ADC的模拟输入引脚分配P17,四个按键分别分配P40-P43,而LED引脚和Bell引脚分别分配P46和P45,完成分配后保存。如下图:图15(4)编写代码,通过调用库函数和自己编写键盘扫描函数KeyScan()和LCD显示函数Display2()。(5)进行Build编译,然后Program下载,再调试。5、测试方法、结果与分析测试方法:1、通电前检查,导线是否连接正确,元器件是否安装正确。2、通电检查,先观察有无异常现象,LCD等元器件电压供应是否正常,能否正常显示。 3、下载调试,把编译后的程序下载到开发板,观察LCD是否有读数显示,测试按键是否有作用,并用万用表测试ADC模块读取的电压值是否正确,误差多少。测试结果:程序编译无错后下载,显示结果如下:(此处有图)结果分析:从图中可以看出,LCD分两行显示,第一行显示测量得到的电压值,第二行显示的分别是下限值和上限值,按下按键key0时,可以看到上限值增大了0.06V,一直重复key0知道上限值到达4.49时停止了增加,因此符合最大上限不超过5V的要求;此时按下key1时,上限值减少0.06V,同理,按下key2时,下限值增加0.06V,一种重复按键key2,看可以看到当下限值接近上限值时便不再增加,保持下限值始终小于上限值。当按下key3时,下限值减少0.06V,当在减少到0.5V附近是便停止减少。从而完全符合题目要求。在用万用表进行电压测量时,LCD显示读数为3.21V,而万用表显示的读数为3.18V,误差0.03V,误差比例为0.93。我们分析,误差的来源主要是:1) ADC的精度相关,通过提高精度可以达到减小误差的目的;2) 在程序设计时电压值的转换上,由于小数位的舍取导致一定的误差,通过改善程序的质量从而减小误差;6、心得体会在电子系统综合设计实训中,在小组成员的合作下成功的实现了想要的功能,得到老师的认可。从资料的搜集到程序的编写及撰写报告,整个过程中使我们学到了很多专业性的知识,对片上系统PSoC更是有了进一步的学习。更加深刻理会到将理论与实践相结合的重要性,真正把两者相结合,运用好的话,才能做到学以致用的效果。在设计的过程中,我们遇到了很多小问题,譬如精度的把握、程序上的调试。在克服这些困难后,使我们对PSoC的知识有了更深一步的理解,不仅提高了动手能力,而且使我们对产品开发的过程有了更深刻的了解,也深刻了用理论来指导实践的方法,理论指导的重要性。通过本次设计我们积攒了很多经验并收获了很多知识,真是受益匪浅。在成功模拟的背后,老师的帮助与组员之间的互相合作是必不可少的。在我们实训完成过程中,老师提供了许多宝贵意见,让我们学到了许多知识,开阔了眼界,增强了我们的动手和动脑能力。同时,在设计本系统的时候,我们组里面的同学之间的相互探讨、取长补短,大家受益匪浅。所以感谢老师能够给我们这个机会来进行这次实训。7、程序附录#include #include #define ROW_0 0 /* LCD row 0 */#define ROW_1 1 /* LCD row 0 */#define COLUMN_0 0 /* LCD column 0 */#define COLUMN_9 9 /* LCD column 9 */#define COLUMN_10 10 /* LCD column 10 */#define COLUMN_11 11 /* LCD column 11 */ void UpdateDisplay(uint16 voltageRawCount); void Delay(uint16 z); void KeyScan(); void Display2 (double Down,double Up); double topnum = 3.20, lownum = 1.22;int main() uint16 voltageRawCount,volt_m; ADC_DelSig_1_Start(); /* Configure and power up ADC */ LCD_Char_1_Start(); /* Initialize and clear the LCD */ LCD_Char_1_Position(ROW_0,COLUMN_0); /* Move the cursor to Row 0 Column 0 */ /* Print Label for the pot voltage raw count */ LCD_Char_1_PrintString(V Count: ); ADC_DelSig_1_StartConvert(); /* Force ADC to initiate a conversion */ while(1) /* Wait for end of conversion */ ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT); voltageRawCount = ADC_DelSig_1_GetResult16(); /* Get converted result */ if (voltageRawCount 0x7FFF) voltageRawCount = 0; volt_m = voltageRawCount/53; UpdateDisplay(volt_m); KeyScan(); if(volt_m (topnum*100) Clock_1_SetSourceRegister( CYCLK_SRC_SEL_IMO ); Clock_1_Enable(); PWM_1_Start(); else if(volt_m lownum*100) Clock_1_SetSourceRegister(CYCLK_SRC_SEL_ILO); Clock_1_Enable(); PWM_1_Start(); else PWM_1_Stop(); void KeyScan() /Pin2为高电平加,Pin3为高电平减,Pin4为低电平加,Pin4为低电平减 if (Pin_2_Read() = 1 & (topnum + 0.06) lownum)/高电压减少 CyDelay(10); if(Pin_3_Read() = 1) while(Pin_3_Read()!=0); topnum = topnum - 0.06; if (Pin_4_Read() = 0 & (lownum + 0.06) =0.5)/低电压减少 CyDelay(10); if(Pin_5_Read() = 0 ) while(Pin_5_Read() != 1); lownum = lownum - 0.06; Display2(lownum,topnum ); void Display2 (double Down,double Up) /显示第二行 uint16 voltD3,voltU3,numD,numU; numD = Down*100; numU = Up*100; voltD0 = numD/100;/百位 voltD1 = numD%100/10;/十位 voltD2 = numD%100%10;/个位 voltU0 = numU/100;/百位 voltU1 = numU%100/10;/十位 voltU2 = numU%100%10;/个位 LCD_Char_1_Position(ROW_1,1); LCD_Char_1_PrintString(D:); LCD_Char_1_Position(ROW_1,3); LCD_Char_1_PrintNumber(voltD0); LCD_Char_1_Position(ROW_1,4); LCD_Char_1_PutChar(.); LCD_Char_1_Position(ROW_1,5); LCD_Char_1_PrintNumber(voltD1); LCD_Char_1_Position(ROW_1,6); LCD_Char_1_PrintNumber(voltD2); LCD_Char_1_Position(ROW_1,7); LCD_Char_1_PutChar(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论