飞思卡尔MAPS系列四色板提供了ADC的实验模块,具体电路如下
![](http://jingyan.eeboard.com/upload/images/FpC2dP9lhD4m-GySA5wDmRggHRAr/w600/QQ%E6%88%AA%E5%9B%BE20150503100036.png)
其中Ain0与Ain1直接连接到MCU的两路ADC引脚,
Ain0连接ADC0_DP0,Ain1连接ADC_DM0,通过采集其中任一一路ADC的数值,来调节LED亮度。
![](http://jingyan.eeboard.com/upload/images/FtEnQRYZBYOqneGtfjQbqqYiWBdB/w600/QQ%E6%88%AA%E5%9B%BE20150503100317.png)
MCU的ADC配置飞思卡尔官方提供了两种配置ADC模块的方法,一种为外设Driver层配置方法,一种为HAL(硬件抽象层)配置方法。
Driver层配置方法:
![](http://jingyan.eeboard.com/upload/images/Fqv_g1kASMAGpMr46v8Lrx2tyfct/QQ%E6%88%AA%E5%9B%BE20150503103742.png)
HW_ADC0在系统头文件M64F12_adc.h中已经宏定义,定义如下:
![](http://jingyan.eeboard.com/upload/images/FvKG1-zaUBsElWkb9bYfxaoDbbuC/QQ%E6%88%AA%E5%9B%BE20150503104009.png)
具体是HW_ADC0代表ADC0,HW_ADC1代表ADC1。在Driver层配置时,先定义两个结构体
![](http://jingyan.eeboard.com/upload/images/Fv_r007QFN3NsmzM2jpyhPXejHp7/QQ%E6%88%AA%E5%9B%BE20150503104214.png)
将MyAdcCalibraitionParam结构体地址传送至
ADC_DRV_GetAutoCalibrationParam (uint32_t instance, adc_calibration_param_t *paramPtr)
可以直接从Driver层的代码中得到ADC的标准配置,以下Driver层部分代码的截选
![](http://jingyan.eeboard.com/upload/images/Fo7Br2p-hYWxFojjirjtXSdv-_Re/QQ%E6%88%AA%E5%9B%BE20150503104920.png)
从上面代码可以看出,Driver层的标准配置其实是调用了HAL层代码,自动配置了寄存器,
这样用户直接调用Driver层即可以依照标准配置ADC模块。在Maximum Average配置中可以看出,其采样32此后取平均值,Lowest ADC Frequency中的代码表示ADC时钟频率为总线频率的8分频,然后设置了参考电压以及是否为触发模式。
在得到以上标准化参数后,通过
ADC_DRV_SetCalibrationParam(uint32_t instance, adc_calibration_param_t *paramPtr)
来设置标准化参数。然后通过结构体MyAdcUserConfig来设置用户自定义的参数
![](http://jingyan.eeboard.com/upload/images/Fg_B0BFB_FMV_KXMW0QnI_XOfQzw/w600/QQ%E6%88%AA%E5%9B%BE20150503112326.png)
在这个结构体中可以设置很多参数,飞思卡尔提供的Driver层中,设计了三种可供选择的模式参数。分别如下,
![](http://jingyan.eeboard.com/upload/images/FsyCmX3zfdL-3Ucp3IE_VeRjZuU6/QQ%E6%88%AA%E5%9B%BE20150503133330.png)
其中分别为阻塞模式,中断模式以及触发模式,在不同的函数中,将自动配置userConfigPtr结构体。
在本次实验中,我们选用的是触发模式。最后
![](http://jingyan.eeboard.com/upload/images/FsXOGYSFV-nxnulBSX7d73G060Ot/w600/QQ%E6%88%AA%E5%9B%BE20150503113018.png)
初始化ADC即完成了ADC模块的配置。
最后通过以下代码段,可以得到ADC返回的值。
![](http://jingyan.eeboard.com/upload/images/FjW9NaRcjL3KpQJtCyazH6U65p3W/QQ%E6%88%AA%E5%9B%BE20150503113202.png)
将得到的MyAdcValue通过转换得到最终的电压值。
MCU的PWM配置本次实验的PWM模式同样是通过Driver层函数编写的初始化。其初始化代码如下,
![](http://jingyan.eeboard.com/upload/images/FnIADaaTgsEykBSDHI8TYJE3Tc9-/QQ%E6%88%AA%E5%9B%BE20150503113510.png)
通过configure_ftm_pins函数完成引脚的复用功能。而memset函数完成对ftmInfo的初始化,通过FTM_DRV_Init对BORAD_FTM_INSTANCE引脚的功能进行初始化。此时的初始化是对FTM的初始化,还未对PWM的功能进行初始化。下面的结构体和函数对FTM的PWM功能进行了初始化
![](http://jingyan.eeboard.com/upload/images/FqFSuFBC8EcIrzLD3L2MRhLErEVa/QQ%E6%88%AA%E5%9B%BE20150503133635.png)
通过改变uDutyCyclePercent的数值可以改变PWM的占空比。以下是占空比设置成50的输出波形。
![](http://jingyan.eeboard.com/upload/images/Fp0XL5kTBvIq01EemNex_CWAot-a/w600/QQ%E6%88%AA%E5%9B%BE20150503114644.png)
最终效果贴上主程序中的部分代码段
![](http://jingyan.eeboard.com/upload/images/Fo1hYoAsNtgy7w_tUR1PVcaElfXV/QQ%E6%88%AA%E5%9B%BE20150503115603.png)
最后的效果~
![](http://jingyan.eeboard.com/upload/images/Fq9gL-2xniXkmwCcEYC3bpiz1gSP/QQ%E6%88%AA%E5%9B%BE20150503115744.png)
|