本帖最后由 短发小黄毛 于 2015-5-8 09:02 编辑
本文引用自 爱板网 经验频道,作者: ECBC_LYX
ECBC电子工程师实战训练二期学员招募活动现正如火如荼地进行,我们也为您带来ECBC课堂上的实时报道,欢迎大家踊跃报名。加入ECBC实战训练营,3个月的集中训练,海内外名师的倾心授课,资深工程师的贴身辅导,用三个月换一个美好将来!值!
首家ECBC电子工程师实战训练二期开营:从无到有,全程介入新产品诞生过程:调研论证、竞争分析、方案确定、器件选型、工具使用......在实战中解读理论、提炼经验、培养习惯;全面了解职场生存的必备技能:商业思维、技术型项目立项与管理、团队协作、专业英语、项目答辩技巧与规范;三个月高强度实战训练,锻造工程精英,成就行业领袖——ECBC电子工程师进阶实战训练营(http://www.ecbcamp.com/camp)。
下面为大家带来ECBC实战营Freescale四色板初体验:
实验一: 实验目标:利用板载电位器控制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四色板专业评测
ECBC实战营:国内外知名电子技术专家、资深工程师和研发经理贴身指导…… 了解高校电子专业相关教育特点, 熟悉行业产品设计、项目管理的开发流程与技术规范, 对教育有情结,对育人有情怀,借助名师指点,榜样同行, 让你迅速抛弃迷茫,清晰方向,积累技能,默化素养, 积累人脉,做好一切准备——为梦想!详情关注ECBC电子工程师进阶实战训练营(http://www.ecbcamp.com/camp)。
本文为ECBC实战营独家授权爱板网经验频道发布,未经允许,谢绝转载。
|