查看: 979|回复: 0

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

[复制链接]

该用户从未签到

发表于 2015-5-4 20:26:53 | 显示全部楼层 |阅读模式
分享到:
实验一
实验目标:利用板载电位器控制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实战营二期详情
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

手机版|小黑屋|与非网

GMT+8, 2024-4-20 15:27 , Processed in 0.113457 second(s), 17 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.