一、实验原理:ADC改变输出PWM波的占空比,应用PWM波来控制LED的明暗程度。
二、K64的AD模块简介
1、最高16位AD转换精度,逐次逼近型;
2、输出精度可选,例如差分的话可编程16位,13位,11位和9位模式,单端的话可编程为16位,12位,10位和8位;
3、输入时钟可选四种时钟,即bus_clock,bus_clock/2,ALTCK,异步时钟。
4、带自校准模式;
5、硬件平均功能;
Kinetis的ADC内部结构框图
三、实验过程:
ADC模块编程要点:
1)初始化
ADC模块初始化的顺序如下:
(1)配置SIM_SCGC6,使能ADC的时钟。使能AD通道的引脚复用功能为ADC功能。
(2)配置ADC配置寄存器(CFG),选择用于产生内部时钟输入时钟源和分频因子。同时可以配置ADC的选择采样时间和低功耗功能。
(3)配置ADC状态和控制寄存器(SC1n),选择转换是否是单端或差分模式,使能或禁止转换完成中断,选择转换的输入通道。
2)开始转换操作
在初始化结束后,当向SC1n的域ADCH写入通道值时,一个AD转换便开始了。
3)完成转换
当转换结果送到数据结构寄存器中转换就完成了。可以通过查看SC1n寄存器中的COCO位来检验转换是否完成。
4)获取AD值
当转换结束后,结果寄存器中的值即为转换结果。最后需要清除标志寄存器的COCO完成转换位
具体寄存器设置:
SC1A寄存器可以用作软件和硬件激活操作模式,
31-8——保留这些位为只读保留位,各位值为0.
7—— COCO 转化完成标志:0转换没有完成;1转换完成。
6—— AIEN 中断使能:0转换完成中断取消;1转换完成时中断有效
5—— DIFF 差分模式使能:0选择单端转换和输入通道;1选择差分转换和输入通道
4-0 ——ADCH 输入通道选择
ADC模块的设置:
adc_calibration_param_t MyAdcCalibraitionParam;
//使能内部中断;硬件触发;转换结束后使能DMA请求
adc_user_config_t MyAdcUserConfig;
adc_state_t MyAdcState;
设置自动校验:
ADC_DRV_GetAutoCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);
ADC_DRV_SetCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);
中断模式初始化:
ADC_DRV_StructInitUserConfigForOneTimeTriggerMode(&MyAdcUserConfig);
MyAdcUserConfig.resolutionMode = kAdcResolutionBitOf12or13;
ADC_DRV_Init(HW_ADC0, &MyAdcUserConfig, &MyAdcState);
PWM波
弹性定时器模块(FTM)是一个支持输入捕捉,输出比较,产生PWM波的2-8通道定时器。
FTM时钟源可选:系统时钟、固定时钟、外部时钟
FTM预分频因子:1,2,4,8,16,32,64或者128
FTM相关寄存器:
计数器初始值寄存器(FTMx_CNTIN):
状态和控制寄存器(FTMx_SC):SC包含溢出状态标志和控制位,用来配置中断使能、FTM配置、时钟源和预分频因子。这些控制和这个模块的所 有通道相关
PWM设置:
提取AD采集到的数据,转化成PWM的占空比:
四、实验现象
随着电位器的旋转,右边的LED的亮度会逐渐变化
|