PSoC4 开发板收到!先上图!
然后我们双击文件1(TOPDESIGN.CYSCH),从文件名来看,就已经有点像我们用PROTEL来做硬件电路板的原理图文件名,其实真的是类似的,如下图
这个项目需要用ADC模块,,所以我们把“Sequencing SAR ADC”直接拖进工作区就添加成功了。然后就要对模块进行设置,模块功能比较多,自然设置的选项也比较多了。具体的设置如下图。
对其中几个需要经常修改的参数进行说明一下:
1) Sample rate:采样频率,整个值的设置会受到采样时钟和采样均值次数的限制 2) Clock source:采样时钟源,可以外部和内部 3) Sample mode:采样模式,有自动模式和硬件触发 4) Vref select:参考电压,整个会直接影响到采样精度和范围 5) Interrupt Limits:触发限制,主要用于限制触发值的范围。 ADC模块还需要配置这个设置界面
接下来再添加两个模拟输入端口,用于输入差分的电压信号。这个实验使用差分信号是为了扩展性能更好,以后在输入端接上温度传感器电路,就可以变成一个数字温度计,其他的模拟实验都是基于这个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,定时器,分频器等模块都是用逻辑来动态重组,这个是很灵活的应用。从众多的模块来看,内部的逻辑资源还是十分充足的,体现出十分强大的灵活性。
视频教程地址如下
http://v.youku.com/v_show/id_XNjIyNzAzNDUy.html
设计教程
PDF文件教程
上位机软件
工程的打包
1:首先相关资料分享:
关于RTOS设计及教程
2:开发板配置说明
首先我们来看CY8CKIT-042_Kit_Guide.pdf中PSoC4的开发板结构,在开发板中,PSoC 5LP作为PSoC4的编程器和调试器(Using the Onboard PSoC 5LP Programmer and Debugger)
具体说明如下:
对于Cortex-M0来讲因为flash和ram空间较小,无法实现rtos操作系统的运行,因此,我们选择使用开发板上的PSoC 5LP来运行FreeRTOS,如下节所示。
首先需要我们下载FreeRTOS,其中FreeRTOS最新版本7.5.3已经支持PSoC5的移植和匹配。下载地址如下:
www.freertos.org
其中FreeRTOS软件包在
http://sourceforge.net/projects/freertos/files/
下载FreeRTOS-7.6.0并解压到某个硬盘目录下,如e:\workshop\下面
下面启动Creator
打开FreeRTOS的PSoC 5的操作系统demo工程
E:\workshop\FreeRTOSV7.6.0\FreeRTOS\Demo\CORTEX_CY8C5588_PSoC_Creator_GCC\FreeRTOS_Demo Workspace.cywrk
我们看到了FreeRTOS工程中PSoC 5LP的内部逻辑连接关系:
我们需要选择开发板上对应的芯片打开工程中的cydwr的系统设置如下图:
选择开发板对应的芯片型号
然后编译工程及操作系统:
最后是对PSoC 5LP的外部引脚资源进行合理配置,使其能够在操作系统运行中通过LED指示灯,指示操作系统的运行;
最后操作系统开发就完成了。
下面讲解一下,FreeRTOS的功能组织结构:
5:相关代码和工程
操作系统实现及Creator下的工程文件
讲解结束,谢谢各位观赏
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 | |
【FRDM-MCXN947评测】核间通信MUTEX被打赏50分 |