电子系统综合设计PSoC剖析Word文档下载推荐.docx
- 文档编号:4099859
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:20
- 大小:304.13KB
电子系统综合设计PSoC剖析Word文档下载推荐.docx
《电子系统综合设计PSoC剖析Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子系统综合设计PSoC剖析Word文档下载推荐.docx(20页珍藏版)》请在冰点文库上搜索。
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<
project.h>
math.h>
#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<
lownum*100)
Clock_1_SetSourceRegister(CYCLK_SRC_SEL_ILO);
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)//高电压减少
if(Pin_3_Read()==1)
while(Pin_3_Read()!
topnum=topnum-0.06;
if(Pin_4_Read()==0&
(lownum+0.06)<
topnum)//低电压增加
if(Pin_4_Read()==0)
while(Pin_4_Read()!
=1);
lownum=lownum+0.06;
if(Pin_5_Read()==0&
(lownum-0.06)>
=0.5)//低电压减少
if(Pin_5_Read()==0)
while(Pin_5_Read()!
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);
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);
V'
LCD_Char_1_Position(ROW_1,9);
U:
LCD_Char_1_Position(ROW_1,11);
LCD_Char_1_PrintNumber(voltU[0]);
LCD_Char_1_Position(ROW_1,12);
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);
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_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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 系统 综合 设计 PSoC 剖析
![提示](https://static.bingdoc.com/images/bang_tan.gif)