|
实验一
实验目标:利用板载电位器控制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.CPWMSWM中间对齐选择
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实战营二期详情
|
|