DSP之Psoc学习小结.docx

上传人:b****1 文档编号:11167412 上传时间:2023-05-29 格式:DOCX 页数:15 大小:1.41MB
下载 相关 举报
DSP之Psoc学习小结.docx_第1页
第1页 / 共15页
DSP之Psoc学习小结.docx_第2页
第2页 / 共15页
DSP之Psoc学习小结.docx_第3页
第3页 / 共15页
DSP之Psoc学习小结.docx_第4页
第4页 / 共15页
DSP之Psoc学习小结.docx_第5页
第5页 / 共15页
DSP之Psoc学习小结.docx_第6页
第6页 / 共15页
DSP之Psoc学习小结.docx_第7页
第7页 / 共15页
DSP之Psoc学习小结.docx_第8页
第8页 / 共15页
DSP之Psoc学习小结.docx_第9页
第9页 / 共15页
DSP之Psoc学习小结.docx_第10页
第10页 / 共15页
DSP之Psoc学习小结.docx_第11页
第11页 / 共15页
DSP之Psoc学习小结.docx_第12页
第12页 / 共15页
DSP之Psoc学习小结.docx_第13页
第13页 / 共15页
DSP之Psoc学习小结.docx_第14页
第14页 / 共15页
DSP之Psoc学习小结.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

DSP之Psoc学习小结.docx

《DSP之Psoc学习小结.docx》由会员分享,可在线阅读,更多相关《DSP之Psoc学习小结.docx(15页珍藏版)》请在冰点文库上搜索。

DSP之Psoc学习小结.docx

DSP之Psoc学习小结

Psoc学习小结

什么是Psoc:

可编程+系统+芯片,ΣIP=PSoC

此为Psoc的程序框图

系统

功能

类型

存储器系统

存贮数据和地址数据

FLASH、EEPROM、SRAM

时钟系统

产生、分配和分布时钟

内部主振荡器IMO(InternalMainOscillator)和相位锁相环PLL(PhaseLockedLoop)

电源系统

给数字、模拟供电

●模拟VDDA、数字VDDD、I/OVddiox供电引脚

●数字Vccd和模拟电源Vcca

●活动(Active)、交替活动(AlternateActive)、休眠(Sleep)和冬眠(Hibernate)

IO系统

输入输出模块

●GPIO\SIO\USBIO

●模拟、数字的不同驱动模式

常用模块

特点

数字模块

定时器

固定功能和UDB配置:

后者能实现的模式多,捕获模式可配置

计数器

固定功能和UDB配置:

后者能实现的计数模式多,可选比较输出,具有时能和复位输入

PWM

固定功能和UDB配置:

后者调制模式多,精度高,可以实现死区控制

DFB

24*24乘法器48*48累加器

模拟模块

模拟比较器

输入偏置限制,模式可选,可以运用LUT

运算放大器

可编程SC/CT模块

温度传感器模块

通信模块

总线

同步两线接口(SDA,SCL)100kbps-3.4Mbps,有主从关系

CAN

1Mbps

模数混合模块

A/D

单采样/快速滤波器/连续或快速平均

D/A

4个8位DAC

基础实验:

1.ledpwm实验

A实验目的:

顶层设计涉及到PWM,时钟以及LED的配置,通过配置以上模块实现LED1和LED2的闪烁。

B实验过程:

模块搭建:

其中PWM采用8位UDB输出单路占空比为50%、周期为1.01s的PWM波,驱动LED1,LED2采用软件程序驱动

主程序:

#include

#defineMS_DELAY167u//定义延时

voidmain(void)

{

uint8ledState=0x00;//LED2状态0灭1亮

Clock_1_Enable();//使能时钟

PWM_1_Start();//使能PWM

while

(1)

{

CyDelay(MS_DELAY);//延时

ledState^=0x01u;//标志位取反,0,1变化

LED2_Write(ledState);//控制IO输出

}

}

C实验结果

LED1一秒钟闪烁一次,LED2一秒钟闪烁三次

D讨论与总结

debug查看:

断点查看:

每运行一次循环,ledstate标志位0x000与0x001切换,LED2常亮常暗切换,LED1保持闪烁。

●pwm控制和主程序c控制两种驱动Led的方式实质都与系统时钟有关

●pwm控制灯闪烁频率与pwm模块设置有关,而且通过修改占空比可以调节亮暗时常

●软件控制灯闪烁的频率与延时的设置有关

2.ADCtoLCD实验

A实验目的:

顶层设计涉及到ADC模块以及LCD驱动模块,配置以上模块实现AD采样,并在LCD上显示

B实验过程:

模块搭建:

主程序:

#include

voidUpdateDisplay(uint16voltageRawCount);//更新AD采样

voidmain()

{

uint16voltageRawCount;

ADC_DelSig_1_Start();//启动ADC

LCD_Char_1_Start();//初始化ADC

LCD_Char_1_Position(0,0);//光标移到0行0列

LCD_Char_1_PrintString("VCount:

");//显示字符:

VCount:

ADC_DelSig_1_StartConvert();//开始AD转换

while

(1)

{

ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);//等待AD转换完成

voltageRawCount=ADC_DelSig_1_GetResult16();//存储采样数据

if(voltageRawCount>256)//输出数据范围限制

voltageRawCount=0;

UpdateDisplay(voltageRawCount);//显示AD值

}

}

voidUpdateDisplay(uint16voltageRawCount)

{

LCD_Char_1_Position(0,9);//光标移动到0行9列

LCD_Char_1_PrintNumber(voltageRawCount);//显示AD结果

if(voltageRawCount<10)

{

LCD_Char_1_Position(0,10);

LCD_Char_1_PrintString("");//AD10以内,输出两个空格清除上一次显示的百位和十位

}

elseif(voltageRawCount<100)

{

LCD_Char_1_Position(0,11);

LCD_Char_1_PrintString("");//AD100以内,输出两个空格清除上一次显示的百位

}

LCD_Char_1_Position(1,0);

LCD_Char_1_PrintString("ByYSC");

}

C实验结果:

调整电位器位置,LCD显示AD采样值由0到256变化,当电位器超过一定范围时,LCD显示AD采样值为0。

D讨论与总结

电位器的电压经过模拟采样AD转化之后得到采样值,将连接VR的电压线移除后,LCD的采样值会在之前采样点的数值附近跳动,但是不稳定,主要原因是输入悬空,无采样输入。

3.ADCtoUARTwithDAC实验

derived

Risingedge均可以

A实验目的:

顶层设计涉及到ADC,DAC,DMA,运放以及LCD模块,通过控制以上模块,实现串口通讯,以及通过电位器控制LED闪烁频率。

B实验过程:

模块搭建:

主程序:

#include

voidUpdateDisplay(uint16*voltageRawCount);

voidTxHex(uint16voltageRawCount);

constuint8voltageWave[]=

{

0x6D,0x6F,0x71,0x73,0x75,0x77,0x79,0x7B,0x7D,0x7F,0x81,0x83,0x85,

0x87,0x89,0x8B,0x8D,0x8F,0x91,0x93,0x95,0x97,0x99,0x9B,0x9C,0x9D,0x9D,0x9E,

0x9E,0x9F,0x9F,0x9F,0x9E,0x9E,0x9E,0x9C,0x9C,0x9B,0x99,0x97,0x95,0x93,0x91,

0x8F,0x8D,0x8B,0x89,0x87,0x85,0x83,0x81,0x7F,0x7D,0x7B,0x79,0x77,

0x75,0x73,0x71,0x6F,0x6D,0x6B,0x69,0x67,0x65,0x63,0x61,0x5F,0x5D,

0x5B,0x59,0x57,0x55,0x53,0x51,0x4F,0x4D,0x4B,0x49,0x47,0x45,0x43,

0x41,0x40,0x40,0x3F,0x3F,0x3D,0x3D,0x3D,0x3D,0x3D,0x3D,0x3F,0x41,

0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,0x51,

0x53,0x55,0x57,0x59,0x5B,0x5D,0x5F,0x61,0x63,0x65,0x67,0x69,0x6B

};//直流偏置电压范围数组

voidmain()

{

uint16voltageRawCount;

uint8myChannel;

uint8myTd;

ADC_DelSig_1_Start();//启动AD

LCD_Char_1_Start();//初始化LCD

VDAC8_1_Start();//启动DA

Opamp_1_Start();//启动运放

UART_1_Start();//启动串口通讯

CyDmacConfigure();//初始化TD链表

myChannel=DMA_1_DmaInitialize(1,1,0,0);//初始化DMA通道

myTd=CyDmaTdAllocate();//从创建的链表里配置TD

LCD_Char_1_Position(0,0);

LCD_Char_1_PrintString("VCount:

");

CyDmaTdSetConfiguration(myTd,sizeof(voltageWave),myTd,TD_INC_SRC_ADR);//配置TD

CyDmaTdSetAddress(myTd,(uint16)(voltageWave),(uint16)VDAC8_1_viDAC8__D);//数据传送设置

CyDmaChSetInitialTd(myChannel,myTd);//初始化TD

CyDmaChEnable(myChannel,1);//使能DMA通道

Clock_1_Start();//启动时钟控制DMA传送

ADC_DelSig_1_StartConvert();//开始AD转换

while

(1)

{

ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);//等待转换完成

voltageRawCount=ADC_DelSig_1_GetResult16();//存储AD结果

if(voltageRawCount>256)//设置AD采样值范围

voltageRawCount=0;

UpdateDisplay(&voltageRawCount);//LCD输出

TxHex(voltageRawCount);//串口发送

Clock_1_SetDivider((((uint32)voltageRawCount*1000)/(261-(uint32)voltageRawCount))+1000);//用AD值控制分频(分频系数1000~52200)

}

}

voidUpdateDisplay(uint16*voltageRawCount)

{

/*MovethecursortoRow0,Column9*/

LCD_Char_1_Position(0,9);

LCD_Char_1_PrintNumber(voltageRawCount[0]);/*Printtheresult*/

if(voltageRawCount[0]<10)

{

LCD_Char_1_Position(0,10);

LCD_Char_1_PrintString("");

}

elseif(voltageRawCount[0]<100)

{

LCD_Char_1_Position(0,11);

LCD_Char_1_PrintString("");

}

}

voidTxHex(uint16voltageRawCount)//显示4位+h

{

staticchar8consthex[16]="0123456789ABCDEF";

UART_1_PutChar(hex[(voltageRawCount>>12)&0xF]);

UART_1_PutChar(hex[(voltageRawCount>>8)&0xF]);

UART_1_PutChar(hex[(voltageRawCount>>4)&0xF]);

UART_1_PutChar(hex[voltageRawCount&0xF]);

UART_1_PutString("h\r");

}

C实验结果:

AD→LCD模块显示结果与上一个实验的结果一致,DA转化后控制LED闪烁频率,AD采样值越大LED的闪烁频率越低,当AD采样值>256时,LED显示突变为0,LED闪烁频率与AD采样值为0是一样大。

D讨论与总结:

本实验实现了AD和DA转换过程,但是没有串行通讯线以及无法在计算机端运行串口通讯调试工具,无法在电脑端查看AD采样值数据。

此外需要注意一点是,一般软件版本都是向下兼容的,高版本可以实现低版本的功能,Cypress也是如此,但它还存在模块高低版本的区别,配置上有一定变化,如本例的DMA的设置:

DMA_1是1.7版本,DMA_2是1.0版本,设置标签不同,如本例要实现数据发送控制,1.0要将be_request_enabled设置为true,而1.7版本是设置HardwareRequest,经过尝试derived和risingedge两种方式都能实现LED频率变化的驱动,而disabled和level下LED闪烁频率不受电位器控制。

随着CypressCreator的版本的上升,各种模块的版本也变高了,设置过程有所变化,不能按照老版本进行设置。

4其他模块的学习以及功能实现

以下模块仅做了Cypress端的配置过程,并没有进行硬件连接和实验,基本原理都比较简单,与模拟电路中提到的电压跟随器以及运放相关内容相关,不再此赘述。

主程序的设定也比较简单,主要是启动运放模块,因而主程序不单独列出。

✧数字电压表(电流表)

数字电压表在实验3中已经有了,IDAC模块与VDAC模块类似,只是此处输入为电流而已。

✧简单电压跟随器

✧加法器

✧一阶同相低通滤波器

✧方波发生器

✧峰值检测电路

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2