飞思卡尔MAPS四色板体验(二)

作者: ECBC_zsy
上传时间为: 2015-05-05 05:07 PM

实验一

实验目标:利用板载电位器控制LED的亮度变化。

实验原理:

(1)FTM(弹性定时器模块)是一个支持输入捕捉、输出比较、产生可用来控制电机的PWM信号和电源管理应用的通道定时器。

每一个通道都可配置为输入捕捉、输出比较或者边缘对齐的PWM模式。

(2)K60的ADC模块支持差分模拟输入和单端输入模式。其中单端支持16位、12位、10位以及8位模式。

知识点1:ADC部分

(1)SIM_SCGC6使能ADC的时钟:这里选择第27位ADC0=1

(2)配置ADC配置寄存器(CFG)

7.ADLPC: 低功耗选择;

6-5.ADIV: 时钟分频选择,1/2/4/8分频;

4.ADLSMP:采样时间配置;

3-2.MODE:转换模式选择,单端或差分,不同的精度选择

1-0.ADICLK:输入时钟选择,总线时钟或交替时钟等;

(3)配置ADC状态和控制寄存器(SC1n)

7.COCO:转换完成标志

6.AIEN:中断使能

5.DIFF:差分输入使能

4-0.ADCH:输入通道选择

知识点2:FTM的PWM部分

(1)状态和控制寄存器(FTMx_SC)

7.TOF:定时器溢出标志

6.TOIE:定时器溢出中断使能

5.CPWMS:PWM中间对齐选择

4-3.CLKS:时钟源选择

2-0.PS:预分频系数选择

(2)计数器寄存器(FTMx_CNT)

15-0.COUNT:16位计数器,主要由向上计数和向上向下计数

(3)通道n控制和状态寄存器(FTMx_CnSC)

  (4)模寄存器(FTMx_MOD)

实验步骤:

1.电路图引脚

飞思卡尔四色板板载两个可调电位器用来模拟ADC输入信号,我们选择其中的RV1来作为信号源:

另外我们选择PORTA7作为FTM控制输出边缘对齐的PWM波形的引脚。

2软件编程

主要分为两个部分,分别是ADC采样可调电位器电压部分和FTM受控制输出PWM波形

(1)ADC部分

ADC配置与初始化:采用ADC0通道单端模式,12位分辨率,其他参数采用默认设置

adc_calibration_param_t MyAdcCalibraitionParam;//calibration parameters

adc_user_config_t MyAdcUserConfig;//ADC parameters

adc_state_t MyAdcState;

volatile int32_t adcValue;//the value we get

/* Auto calibration.自动校准 */

ADC_DRV_GetAutoCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);

ADC_DRV_SetCalibrationParam(HW_ADC0, &MyAdcCalibraitionParam);

/* Initialization for interrupt mode.中断模式初始化 */

ADC_DRV_StructInitUserConfigForOneTimeTriggerMode(&MyAdcUserConfig);//set as one time trigger mode

MyAdcUserConfig.resolutionMode = kAdcResolutionBitOf12or13;//12位单端分辨率,13位为差分模式

ADC_DRV_Init(HW_ADC0, &MyAdcUserConfig, &MyAdcState);

(2)FLM的PWM模式

配置:

ftm_pwm_param_t ftmParam = {

.mode = kFtmEdgeAlignedPWM,//边沿对齐PWM模式

.edgeMode = kFtmLowTrue,

.uFrequencyHZ = 240000,

.uDutyCyclePercent = 50,//占空比

.uFirstEdgeDelayPercent = 0,

};

configure_ftm_pins(BOARD_FTM_INSTANCE);//FTM0通道输出

ftm_user_config_t ftmInfo;

memset(&ftmInfo, 0, sizeof(ftmInfo));

FTM_DRV_Init(BOARD_FTM_INSTANCE, &ftmInfo);//初始化

(3)主循环

//获取AD值

adcValue = getVoltage(0, false, MyAdcUserConfig.resolutionMode);

//PWM输出

FTM_DRV_PwmStart(BOARD_FTM_INSTANCE, &ftmParam, BOARD_FTM_CHANNEL);

OSA_TimeDelay(50); //delay 50ms

FTM_DRV_PwmStop(BOARD_FTM_INSTANCE, &ftmParam, BOARD_FTM_CHANNEL);

//AD转换值作为PWM占空比输出

float a=adcValue;

float b= a/4095;

ftmParam.uDutyCyclePercent =(b*100);

实验现象:

如下图所示

(1)RV2电位器调到最小的时候,LD1灯不亮

(2)RV2逐渐调大至最大值,LD1灯的逐渐变亮

飞思卡尔MAPS四色板体验一

MAPS四色板专业评测

本文为ECBC实战营独家授权爱板网经验频道发布,未经允许,谢绝转载。


ECBC实战营:以实际产品为切入点,通过实际产品解耦信号链各个节点中的重点技术、产品、设计思路,同时会在整个实战过程中锻炼每个学员的项目分割能力、团队协调能力、表达演讲能力等综合素养。借助三个月的高强度、快节奏的系统性实战训练,让真正热爱电子技术的学生、工程师、创客迅速积累真正优秀工程师和技术管理者应该具备的专业技能、全局思维、职业素养,不仅让学员走向实际工作岗位后迅速适应、迅速成为职场的中坚力量,更为学员未来成为技术型管理人才和技术型创业人才奠定必要、坚实的综合基础

ECBC实战营二期详情

全部评论 ()

创建讨论帖子

登录 后参与评论
系统提示