电子系统综合设计PSoC剖析.docx
- 文档编号:12456480
- 上传时间:2023-04-19
- 格式:DOCX
- 页数:20
- 大小:304.13KB
电子系统综合设计PSoC剖析.docx
《电子系统综合设计PSoC剖析.docx》由会员分享,可在线阅读,更多相关《电子系统综合设计PSoC剖析.docx(20页珍藏版)》请在冰豆网上搜索。
电子系统综合设计PSoC剖析
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实验设备及环境
微机一台PSoCCreator软件;PSoC3实验操作板;USB连接线一根;9V电压源一台;电压连线1根;导线若干根。
2、背景知识介绍
2.1PSoC简介
可编程化系统单芯片(PSoC),是一种可编程化的混合讯号阵列架构,由一个芯片内建的微控制器(MCU)所控制,整合可组态的类比与数位电路,内含UART、定时器、放大器(amplifier)、比较器、数位类比转换器(ADC)、脉波宽度调变(PWM)、滤波器(Filter)、以及SPI、GPIO、I2C等元件数十种元件,协助客户节省研发时间。
Altera、Atmel、Xilinx、Lattice皆有推出PSoC产品。
实现PSoC有两种方法:
利用FPGA/CPLD;另一是在ASIC中加入可编程模组。
凭借其独特的可配置模块阵列,PSoC3成为一个真正的系统级解决方案,可在单个芯片中提供微控制器单元(MCU)、存储器、模拟和数字外设功能。
CY8C32系列提供了一种新型的信号采集、信号处理和控制方法,并具有高精度、高带宽和高灵活性等特点。
其模拟功能涵盖了从热电偶信号(接近直流电压)到超声波信号的广泛信号范围。
CY8C32系列可以处理数十个数据采集通道和模拟输入,这在每个通用输入/输出(GPIO)引脚上都可实现。
CY8C32系列还是一个高性能的可配置数字系统,部分器件具有USB、多主控内部集成电路(I2C)等接口。
除了通信接口之外,CY8C32系列还具有易于配置的逻辑阵列,至所有I/O引脚的灵活走线,以及高性能的单周期8051微处理器内核。
借助PSoCCreator这一基于层级的原理图设计输入工具,您可使用丰富的预建组件和布尔基元库来轻松创建系统级设计。
使用CY8C32系列不仅可以实现模拟和数字材料表的集成,而且只需通过简单的固件更新,即可轻松纳入最新的设计变更。
2.2LCD模块
工业字符型液晶,能够同时显示16x02即32个字符。
(16列2行)。
1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。
它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。
在PSOC中,字符LCD组件包含一组库例程,通过这些库例程易于使用遵循Hitachi44780标准4位接口的一行、两行或四行LCD模块。
该组件提供API用于实现水平和垂直条形图,您也可以创建和显示自己的自定义字符。
使用字符LCD组件可向产品用户,或在设计和调试过程中的开发人员显示文本数据。
2.3PSOC中的串口模块
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.4PSOC中的AD模块
DeltaSigma模数转换器(ADC_DelSig)可为精密测量应用提供低功耗、低噪声前端。
它可用于多种应用,具体取决于分辨率、采样速率和操作模式。
它能够对16位音频进行高速低分辨率通信处理,并且能够对应变计、热电偶和其他高精度传感器进行高精度的20位低速转换。
处理音频信息时,ADC_DelSig采用连续操作模式。
当用于扫描多个传感器时,ADC_DelSig采用其中一个多样本采样模式。
用于单点高分辨率测量时,ADC_DelSig采用单一样本采样模式。
Deltasigma转换器使用过采样在更广泛的频谱上扩展量化噪声。
该噪声的形成是为了将其大部分移至输入信号的带宽之外。
内部低通滤波器用于滤出所需输入信号带宽外的噪声。
这使delta-sigma转换器能够良好地用于高速中分辨率(8至16位)和低速高分辨率(16至20位)应用。
采样速率可调整为每秒10至384000次采样,具体取决于工作模式和分辨率。
选择转换模式可简化与音频等单流信号的连接,或多个信号源间的复用。
其特点:
分辨率可选,8至20位;每个分辨率有11个输入范围;采样速率为8到384ksps;工作模式:
单样本采样模式、多样本采样模式、连续模式、多样本(加速)采样模式;高输入阻抗输入缓冲器;可选的输入缓冲器增益(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为下拉输入,所以初始化为高电平,判断按键是否按下的标准为读取的引脚电平为低电平。
原理图及其配置如下:
图1
3.2蜂鸣器和LED灯
通过电平的翻转来驱动蜂鸣器的鸣叫,而蜂鸣器音调的高低跟电平的持续时间有关,蜂鸣器的鸣叫条件为当测量电压超过设定的上限或下限时。
且到达下限与上限的鸣叫音调不同。
在此试验中我们采用PWM模块输出驱动波形来驱动蜂鸣器发声和LED的闪烁。
其具体原理图和配置如下:
图2
图3
3.3液晶显示器
这里使用1602液晶显示屏,它是字符型显示器。
在液晶屏上第一行显示测得的电位器传递过来的电压,第二行分别显示低电压阀值和高电压阀值,通过芯片的P2[0-6]引脚对LCD进行控制显示。
使用内部资源的元器件配置,原理图如下:
图4
3.4AD采样
因为采样电压的最高范围为5V,保留1位整数和2位小数。
理论下限最小值0.00V,上限最大值5.00V。
PSoC3系列芯片ADC模块拥有1.024V的内部参考电压,此处我们采用16-bit模式分辨率,因为电压输入为正,所以采用单端输入方式。
在采样结束后需要把采样结果转换为电压值显示在LCD上,转化公式为:
Vin=CODE/(2^n)*M*Vref。
原理图及配置如下:
图5
图6
3.4总模块图
PSOC开发包括原理图设计和软件设计两部分,硬件原理图设计是根据用户需求选择合理的内置模拟数字资源,并进行合理配置和连线,让其组成一个完整的硬件系统。
软件设计是通过编写用户命令来合理调用系统内置API函数,让硬件系统可靠、有序的工作。
模拟图如下:
图7
3.5软件流程
3.5.1整个实验的程序设计流程图
图8
3.5.2键盘扫描程序设计流程图
图9
3.5.3LCD显示程序设计流程图
图10
4、实验步骤
(1)新建工程,并添加ADC模块、LCD模块、四个按键引脚和PWM模块及相关时钟输入和输出。
如下图:
图11
(2)ADC模块配置为单端输入,分辨率15-bit,输入电压范围为Vssa-6.144V;按键配置为输入模式,软件连接,同时设置为上拉或下拉输入;PWM模块配置为两路输出,分别控制LED和Bell蜂鸣器,并把相关的器件连接在一起。
如下图:
图12
图13
图14
(3)进行引脚的分配,ADC的模拟输入引脚分配P1[7],四个按键分别分配P4[0]-P4[3],而LED引脚和Bell引脚分别分配P4[6]和P4[5],完成分配后保存。
如下图:
图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
#defineROW_00/*LCDrow0*/
#defineROW_11/*LCDrow0*/
#defineCOLUMN_00/*LCDcolumn0*/
#defineCOLUMN_99/*LCDcolumn9*/
#defineCOLUMN_1010/*LCDcolumn10*/
#defineCOLUMN_1111/*LCDcolumn11*/
voidUpdateDisplay(uint16voltageRawCount);
voidDelay(uint16z);
voidKeyScan();
voidDisplay2(doubleDown,doubleUp);
doubletopnum=3.20,lownum=1.22;
intmain()
{
uint16voltageRawCount,volt_m;
ADC_DelSig_1_Start();/*ConfigureandpowerupADC*/
LCD_Char_1_Start();/*InitializeandcleartheLCD*/
LCD_Char_1_Position(ROW_0,COLUMN_0);/*MovethecursortoRow0Column0*/
/*PrintLabelforthepotvoltagerawcount*/
LCD_Char_1_PrintString("VCount:
");
ADC_DelSig_1_StartConvert();/*ForceADCtoinitiateaconversion*/
while
(1)
{
/*Waitforendofconversion*/
ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
voltageRawCount=ADC_DelSig_1_GetResult16();/*Getconvertedresult*/
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();
}
elseif(volt_m { Clock_1_SetSourceRegister(CYCLK_SRC_SEL_ILO); Clock_1_Enable(); PWM_1_Start(); } else { PWM_1_Stop(); } } } voidKeyScan() { //Pin2为高电平加,Pin3为高电平减,Pin4为低电平加,Pin4为低电平减 if(Pin_2_Read()==1&&(topnum+0.06)<=5.00)//高电压增加 { CyDelay(10); if(Pin_2_Read()==1) { while(Pin_2_Read()! =0); topnum=topnum+0.06; } } if(Pin_3_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) { CyDelay(10); if(Pin_4_Read()==0) { while(Pin_4_Read()! =1); lownum=lownum+0.06; } } if(Pin_5_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); } voidDisplay2(doubleDown,doubleUp) { //显示第二行 uint16voltD[3],voltU[3],numD,numU; numD=Down*100; numU=Up*100; voltD[0]=numD/100;//百位 voltD[1]=numD%100/10;//十位 voltD[2]=numD%100%10;//个位 voltU[0]=numU/100;//百位 voltU[1]=numU%100/10;//十位 voltU[2]=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(voltD[0]); LCD_Char_1_Position(ROW_1,4); LCD_Char_1_PutChar('.'); LCD_Char_1_Position(ROW_1,5); LCD_Char_1_PrintNumber(voltD[1]); LCD_Char_1_Position(ROW_1,6); LCD_Char_1_PrintNumber(voltD[2]); LCD_Char_1_Position(ROW_1,7); LCD_Char_1_PutChar('V'); LCD_Char_1_Position(ROW_1,9); LCD_Char_1_PrintString("U: "); LCD_Char_1_Position(ROW_1,11); LCD_Char_1_PrintNumber(voltU[0]); LCD_Char_1_Position(ROW_1,12); LCD_Char_1_PutChar('.'); LCD_Char_1_Position(ROW_1,13); LCD_Char_1_PrintNumber(voltU[1]); LCD_Char_1_Position(ROW_1,14); LCD_Char_1_PrintNumber(voltU[2]); LCD_Char_1_Position(ROW_1,15); LCD_Char_1_PutChar('V'); } voidUpdateDisplay(uint16voltageRawCount) { uint16volt[3],num; num=voltageRawCount; volt[0]=num/100;//百位 volt[1]=num%100/10;//十位 volt[2]=num%100%10;//个位 LCD_Char_1_Position(ROW_0,COLUMN_9); LCD_Char_1_PrintNumber(volt[0]); LCD_Char_1_Position(ROW_0,10); LCD_Char_1_PutChar('.'); LCD_Char_1_Position(ROW_0,11); LCD_Char_1_PrintNumber(volt[1]); LCD_Char_1_Position(ROW_0,12); LCD_Char_1_PrintNumber(volt[2]); LCD_Char_1_Position(ROW_0,13); LCD_Char_1_PutChar('V'); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 综合 设计 PSoC 剖析