4333|0

5310

帖子

453

TA的资源

五彩晶圆(高级)

楼主
 

恩智浦LPC1549@eeworld ( 四 ) LPC1549 可配置状态机定时器(SCT) [复制链接]

恩智浦LPC1549@eeworld ( 四 ) LPC1549 可配置状态机定时器(SCT)

在lpcopen_2_08b版本中,NXP发布了SCT  PWM的例程

新LPCOpen版本提供sct_pwm驱动程序。使用此驱动程序的应用程序可以配置和使用SCT作为具有多个通道标准PWM。应用程序可以通过以下给出的步骤执行此操作
1.        使用Chip_SCTPWM_Init()初始化SCT
2.        使用Chip_SCTPWM_SetRate()设置频率/速度
3.        配置引脚(SCT_OUTx)[x为SCT_OUT管脚号] 的PINMUX
4.        使用Chip_SCTPWM_SetOutPin()分配一个PWM输出引脚到通道
5.        使用Chip_SCTPWM_SetDutyCycle()设置这个通道产生的PWM输出的占空比
6.        重复步骤3,4和5为其他PWM通道号配置[可选]
7.        使用Chip_SCTPWM_Start()启动PWM通道
8.        使用Chip_SCTPWM_SetDutyCycle()根据需要更改占空比
9.        使用Chip_SCTPWM_Stop()SCT / PWM可在需要时停止 [可选]




例程
2通道输出PWM
通道1:占空比以10%累加到100%

通道2:占空比以0%累加到100% ,再减到0%

        /* Initialize the SCT as PWM  */
        Chip_SCTPWM_Init(SCT_PWM);
       
        //PWM 频率 10 KHz
        Chip_SCTPWM_SetRate(SCT_PWM, SCT_PWM_RATE);       

        /* 配置PWM输出管脚 */
        /* Connect SCT0 output 1 to PIO0_29 */
        /* Connect SCT0 output 0 to PIO0_3 */
        //Chip_SWM_MovablePinAssign(SWM_SCT0_OUT1_O, 25);//29
        //Chip_SWM_MovablePinAssign(SWM_SCT0_OUT0_O, 3);
        app_setup_pin();

        /*设置 SCT0_OUT1  通道*/
        Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_OUT, SCT_PWM_PIN_OUT);
        Chip_SCTPWM_SetOutPin(SCT_PWM, SCT_PWM_LED, SCT_PWM_PIN_LED);

        /* 初始占空比 0%  */
        Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT, Chip_SCTPWM_GetTicksPerCycle(SCT_PWM)/2);
        Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED, 0);
       
        //Start the SCT PWM
        Chip_SCTPWM_Start(SCT_PWM);

例程中,采用了SYSTICK 定时器1ms唤醒一次
               //1MS周期唤醒
                cnt1 ++;
                cnt2 ++;
               
                //1000MS调整一次通道1占空比
                if (cnt1 >= OUT_STEP_CNT)
                {
                        //占空比每秒累加10%,直到100%,重复
                        out_dp += 10;
                        if (out_dp > 100)
                        {
                                out_dp = 0;
                        }

                        /* Increase dutycycle by 10% every second */
                        Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_OUT,Chip_SCTPWM_PercentageToTicks(SCT_PWM, out_dp));
                        cnt1 = 0;
                }

                //20ms调整一次通道2占空比
                if (cnt2 >= LED_STEP_CNT)
                {
                        led_dp += led_step;//占空比 +1,-1?
                        if (led_dp < 0)
                        {
                                led_dp = 0;
                                led_step = 1;//正方向累加
                        }
                        if (led_dp > 200)
                        {
                                led_dp = 200;
                                led_step = -1;//反方向减
                        }

                        /* Increment or Decrement Dutycycle by 0.5% every 10ms */
                        Chip_SCTPWM_SetDutyCycle(SCT_PWM, SCT_PWM_LED,Chip_SCTPWM_PercentageToTicks(SCT_PWM, led_dp)/2);
                        cnt2 = 0;
                }
               
                //Wait For Interrupt
                __WFI();




此帖出自NXP MCU论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表