4978|8

775

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

【PSoC4心得】虚拟电压计 [复制链接]

PSoC4虚拟电压计
先看视频再看文章,可能会让你更容易体会


1.1
      
实验目的和功能
1)        测试PSoC4内部的ADC性能
2)        使用内部的PWM模块,模拟V/F转换,控制LED的亮度
3)        使用内部的UART模块,把电压数据发送到电脑
1.2      实验工具
1)        PSoC4开发板
2)        数字电源或者电池+电位器
3)        电脑
4)        万能表
1.3      实验总结
1)        这个实验的主要目的是测试PSoC4内部的ADC,从实验过程的体验来看,模块的使用是比较方便的,我们可以直接使用软件自动生成的函数;另外,内部提供的参考源精度还是较高的,相比,板子在USB供电的情况下,使用板子上的VDD电压,精度就稍逊,但可以通过外接旁路电容来改善。
2)        芯片本身在ADCPWM方面的优势较为突出,所以特别使用了这两个模块组合了一个V/F的应用,通过改变电压来改变频率的占空比,实现LED的亮度。整个功能只要几个模块的连接和简单的初始化函数的调用,实际的应用价值还是非常高的。
3)        板子上有USB转串口的功能部分,可以让实验和测试更加通用和灵活,用简单的实验环境就可以体验和测试芯片的功能。
1.4      实验内容1.4.1   创建项目文档
    打开软件CREATOR2.2。然后在菜单栏选>>File>>New>>Project进入项目界面
    我们可以直接选择图中红色框的选项,创建一个全新的项目。另外,我们还可以选择蓝色框中的选项,这些选项可以让我们直接生成对应的完整的项目。我们可以把这些项目作为例程学习。
    我们创建了全新的项目后,软件就已经给我们生成了相关的文件夹和文件。下图是我们完整项目的文件列表


然后我们双击文件1TOPDESIGN.CYSCH,从文件名来看,就已经有点像我们用PROTEL来做硬件电路板的原理图文件名,其实真的是类似的,如下图
     这个项目需要用ADC模块,,所以我们把“Sequencing SAR ADC”直接拖进工作区就添加成功了。然后就要对模块进行设置,模块功能比较多,自然设置的选项也比较多了。具体的设置如下图。
   对其中几个需要经常修改的参数进行说明一下:
1)        Sample rate:采样频率,整个值的设置会受到采样时钟和采样均值次数的限制
2)        Clock source:采样时钟源,可以外部和内部
3)        Sample mode:采样模式,有自动模式和硬件触发
4)        Vref select:参考电压,整个会直接影响到采样精度和范围
5)        Interrupt Limits:触发限制,主要用于限制触发值的范围。
      ADC模块还需要配置这个设置界面
   主要是配置ADC的采样位数和采样方式,添加采样通道等的功能。本实验使用了12位,差分模式。
    接下来再添加两个模拟输入端口,用于输入差分的电压信号。这个实验使用差分信号是为了扩展性能更好,以后在输入端接上温度传感器电路,就可以变成一个数字温度计,其他的模拟实验都是基于这个ADC原理。然后双击刚才添加的PIN,进入对应PIN的配置界面。
    然后我们再添加一个PWM模块,PWM模块的作用是根据电压值的大少来控制频率的占空比,然后反映出来的效果就是LED的亮度会随之变化。这个过程就是V/F的转换。软件提供了两种的PWM模块,一个是标准的PWM,另外一个是PWM(TCPWM mode)PWM(TCPWM mode)是一个功能更全的模块,我们就直接选用这个,另外PWM模块还需要CLOCK提供参考时钟源。下面是PWM(TCPWM mode)的配置界面。
    由于我们这个实验对于频率的要求不高,所以对于PWM提供的很多功能我们就用默认就可以了,具体的功能使用可以参考《PSoC4分频模块》一文。其中要介绍一下图中的两个参数:
1)        Period:这个参数是指把参考时钟细分的值。
2)        Compare:这个就是类似占空比的参数,我们暂且叫占空比,其实际的原理是PWM的计数累加值与这个值比较,到达这个值就翻转。
    频率模块的配置如下图参数,我们使用了1M的频率,这个频率选择没有必然的,只是在这个频率会让显示的效果比较好。最后PWM模块输出的频率F=1M/1000=1000Hz
     再添加两个LED的输出端,分别接在PWM模块的两个互为反相的输出端。这部分的模块连接如下图
    最后我们还需要一个串口模块,也是直接从模块栏拉入工作区。
    串口的配置如下图,其实就是一个标准的串口,我们选用38400的波特率。

     最后要做的就是配置管脚号了,这个管脚配置就相当于C语言的“sbit LED_G= P0^2”,但在这里我们就是通过下拉菜单选择完成。双击文件二(DESIGN04.cydwr),按照表中的参数修改就可以了。
    到这个步骤,我们基本上就完成了M0和逻辑功能的配置,或者说我们已经设计好了我们实验所需要的硬件电路,然后通过菜单栏的BUILD>>GENERATE APPLICATION功能生成系统中模块需要的文件,剩下的工作就是编写MAIN.C函数。
1.4.2   编写函数
       PSoC4的开发软件的优越之处还在于其提供完善的函数,所以在使用过程中,我们不需要去编写接口函数或者其他的功能函数,我们只需要按照我们的使用需求调用合适的函数。但在使用这个软件的时候,我们要养成一个习惯,尽量避免在功能模块提供的C文件中编写应用函数,因为在使用菜单栏的BUILD>>GENERATE APPLICATION功能时,模块是会重新生成会同时更新对应的文件的。
    在编写MAIN.C函数前,推荐大家看一下刚才生成的文档,我们现在就拿文件夹《PWM_1》下的PWM_1.C来看一下(文件名跟我们添加的端口或模块是同名的)
PWM_1.C下有几个函数,其中我们要用的就一下这个
void PWM_1_WriteCompare(uint32 compare)
{
    PWM_1_COMP_CAP_REG = (compare & PWM_1_16BIT_MASK);
}
    上面的函数是用于设置PWM波形的占空比,通过对相应的寄存器写入需要的占空比数值,这个函数所实现的功能也能在刚才配置PWM的界面上实现。硬件生成过程会把我们需要用到的端口函数都准备好了,我们只要懂得使用就是好,十分方便。
MAIN.C函数如下:
void main()
{
    uint8 channel = CHANNEL_1;
    int16 ADC_Val[4u];
    int16 mVolts;
    int16 previousValue = 0;
    UART_Start();      //串口初始化   
    CyGlobalIntEnable;     //终端使能
    ADC_Start();      //ADC使能
    ADC_IRQ_StartEx(ADC_ISR_Handler);    //ADC终端使能
    ADC_StartConvert();     //ADC转换   
    Clock_1_Start();     //打开PWM时钟
    PWM_1_Start();       //打开PWM模块
    PWM_1_WriteCompare(500);    //设置开始的占空比是50%
    for(;;)             //死循环
    {
        if(dataReady == 1u)     //判断ADC数据是否转换完成
            {
            ADC_Val[CHANNEL_1] = ADC_GetResult16(CHANNEL_1); //获取ADC转换数据
            mVolts = ADC_CountsTo_mVolts(channel, ADC_Val[CHANNEL_1]);   //转换为相应的电压值
            if((previousValue != mVolts))    //判断采样数据跟上次数据是否一致,否的话发送数据
                {   
                SendChannelVoltage(channel, mVolts);   //串口发送电压值
                previousValue = mVolts;         //把这次的数值保留,作为下次的比较值
                PWM_1_WriteCompare(mVolts);     //把电压值赋给PWM作为占空比值,LED亮度改变。
                }
                dataReady = 0u;         
            }        
    }
}
    整个实验的流程就在MAIN.C函数中很好的体现出来了。更详细的代码可以直接参考工程文档。然后就是编译和下载。
1.4.3   编译下载
     通过菜单栏的BUILD>>BUILD 文件名”或者shift F6编译工程。
     通过菜单栏的DEBUG>>PROGRAM”或者ctrl F5 下载工程。下载完毕,就连接相关的测试工具进行实验。
1.4.4   仿真
     软件和硬件都支持在线仿真,所以我们可以尝试一下。通过菜单栏的DEBUG>>DEBUG”或者 F5 进入DEBUG。仿真这个环节跟其他的开发工具都是类似的,使用很方便。
1.4.5   上电实验
     在上电前,我们要先连接好串口跳线和电源输入端。
1)        串口跳线:PSoC4(P0.4)------PSoC5LP(P12.7)
          PSoC4(P0.5)------PSoC5LP(P12.6)
2)        ADC检测的电源输入端:电源正(P2.0,电源负(P2.1
        连接好后如下图,不需要其他的外围电路。
       我们在设置ADC的参考电压时选择了1.024V,所以检测的有效范围0~1.024V,大家在做实验的时候可以用可调电源,或者更通用的1.5V的电池加上一个电位器。我们实验就选用了可调电源。
USB线连接电脑和PSoC4板子,现在电脑上多了一个串口,记下串口号,然后打开实验用的电脑软件。如下图,现在发现的串口号是COM14,然后按“打开串口”按键,接通可调电源,我们就可以看到软件显示出当前的电压值。调节可调电源,显示的电压随之变动。通过跟数字电压表做对比,检测的精度还是比较好的,误差在10mV内。我们还可以换取其他的参考电压源,但我们要注意参考电压源的精度会直接影响ADC的输出值。
1.4.6   使用比较
1)        设置比较直观
    软件提供了很多配置的界面和功能选项,这些功能都可以让用户非常直观的了解到这个芯片系统的构成,而且很容易上手,这点非常好,更可以说明软件的功能强大。但有的朋友可能比较习惯直接用代码来配置功能,其实都是可以的。现在我们举个例子来说明一下。
文件夹《LED_R》下的LED_R.C有这么一段函数,是用来配置端口的模式的
void LED_R_SetDriveMode(uint8 mode)
{
    SetP4PinDriveMode(LED_R__0__SHIFT, mode);
}
    其实上面的一段代码可以通过软件提供的选项来实现,刚才我们在配置PIN功能的时候有这么一个界面,在这个界面我们也可以配置相同的功能。
    所以软件提供的强大的功能,能够方便我们在编程时候了解芯片的性能,在时候的工程中,我们还是需要去了解芯片的内部寄存器和原理。
3)        信号采集和电机驱动较为突出
ADC的使用比较方便,另外,芯片还提供了内部的运放,在信号采集,调整,转换溶于一体,减小外部器件和干扰源。另外内部还有PWM,定时器,分频器等模块都非常适合电机应用场合。
4)        M0+可编程逻辑器件
PSoC4芯片整体来看仿佛就是M0和可编程逻辑器件的组合体,内部的PWM,定时器,分频器等模块都是用逻辑来动态重组,这个是很灵活的应用。从众多的模块来看,内部的逻辑资源还是十分充足的,体现出十分强大的灵活性。



以下是文章的PDF文件
PSOC4虚拟电压计.pdf (705.81 KB, 下载次数: 99)

以下是配套的电脑端的测试软件
电压计.zip (21.18 KB, 下载次数: 57)

以下是配套的工程代码
Design04.rar (1.76 MB, 下载次数: 112)


[ 本帖最后由 fsyicheng 于 2013-10-17 18:41 编辑 ]
此帖出自单片机论坛

最新回复

很棒,前两天我也搞了一个,不过是因为工作需要,做了一个简单的电压基准源,精确度是相当的高~~~~~~~~  详情 回复 发表于 2014-7-15 02:09
点赞 关注
 

回复
举报

208

帖子

3

TA的资源

纯净的硅(初级)

沙发
 
你太牛了 ,我天天加班没时间玩,看好你
此帖出自单片机论坛

点评

谢谢支持啊,迟点再把视频和工程文件放上来,这个项目11号就好了,本来想12号发的,可喜的是12号5点老婆肚子作动,到医院生小孩去了,昨天孩子睡了就上来加加油。:)  详情 回复 发表于 2013-10-15 20:49
 
个人签名人要学会逆流而上,适者生存
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

板凳
 

回复 沙发tangjianyuan 的帖子

谢谢支持啊,迟点再把视频和工程文件放上来,这个项目11号就好了,本来想12号发的,可喜的是12号5点老婆肚子作动,到医院生小孩去了,昨天孩子睡了就上来加加油。
此帖出自单片机论坛

点评

生娃了,能抽出点儿时间就更不容易了。 楼主加油。  详情 回复 发表于 2013-10-16 11:49
 
 
 

回复

2万

帖子

71

TA的资源

管理员

4
 
原帖由 fsyicheng 于 2013-10-15 20:49 发表
谢谢支持啊,迟点再把视频和工程文件放上来,这个项目11号就好了,本来想12号发的,可喜的是12号5点老婆肚子作动,到医院生小孩去了,昨天孩子睡了就上来加加油。
生娃了,能抽出点儿时间就更不容易了。

楼主加油。
此帖出自单片机论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

5
 
视频和工程文档已经更新到楼主位了,希望能给大伙带来帮助
此帖出自单片机论坛
 
 
 

回复

775

帖子

0

TA的资源

纯净的硅(高级)

6
 

原来还要授权,希望有机会拿NO.1

Cypress可以在任何场合以任何形式公开与该作品相关的任何资料
此帖出自单片机论坛
 
 
 

回复

323

帖子

1

TA的资源

一粒金砂(高级)

7
 
很棒,前两天我也搞了一个,不过是因为工作需要,做了一个简单的电压基准源,精确度是相当的高~~~~~~~~
此帖出自单片机论坛
 
 
 

回复

323

帖子

1

TA的资源

一粒金砂(高级)

8
 

很棒,前两天我也搞了一个,不过是因为工作需要,做了一个简单的电压基准源,精确度是相当的高~~~~~~~~
此帖出自单片机论坛
 
 
 

回复

323

帖子

1

TA的资源

一粒金砂(高级)

9
 

很棒,前两天我也搞了一个,不过是因为工作需要,做了一个简单的电压基准源,精确度是相当的高~~~~~~~~
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表