打印
[资料分享与下载]

【YL-KL26Z开发】+ PWM控制LED亮度

[复制链接]
536|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
大苏牙|  楼主 | 2015-10-11 08:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
实验程序很简单,就如同上面大神说的一样,用AD采样电位器的电压值,来作为PWM的脉冲宽度值(占空比值)。
光盘里的程序是现成的PWM控制LED亮度,只不过少了给AD采样,将之前的程序加进去,稍作修改就可以了:
void tpmInit(void)
{
    SIM_SCGC5 |= SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTD_MASK;            /* 打开GPIO时钟                */
    SIM_SCGC6 |= SIM_SCGC6_TPM0_MASK | SIM_SCGC6_TPM2_MASK;              /* 打开TPM时钟                 */
    SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK | SIM_SOPT2_TPMSRC(1);         /* 打开时钟门                  */

    PORTB_PCR18 = ( 0 | PORT_PCR_MUX(3));                                /* TPM2_CH0 enable on PTB18    */
    PORTB_PCR19 = ( 0 | PORT_PCR_MUX(3));                                /* TPM2_CH1 enable on PTB19    */
    PORTD_PCR1  = ( 0 | PORT_PCR_MUX(4));                                /* TPM0_CH1 enable on PTD1     */

    TPM0_MOD  = TPM_MODULE;                                              /* 1999 / 50MHz = 40uS PWM     */
    TPM0_C1SC = TPM_Cn_MODE;                                             /* No Interrupts; High True
                                                                             pulses on Edge Aligned PWM */
    TPM0_C1V  = TPM_INIT_VAL;                                            /* 90% pulse width             */
    TPM2_MOD  = TPM_MODULE;                                              /* 1999 / 50MHz = 40uS PWM     */
    TPM2_C0SC = TPM_Cn_MODE;                                             /* No Interrupts; Low True
                                                                            pulses on Edge Aligned PWM  */
    TPM2_C0V  = TPM_INIT_VAL;                                            /* 90% pulse width             */
    TPM2_C1SC = TPM_Cn_MODE;                                             /* No Interrupts; Low True
                                                                            pulses on Edge Aligned PWM  */
    TPM2_C1V  = TPM_INIT_VAL;                                            /* 90% pulse width             */

    TPM2_SC   = TPM_SC_CMOD(1) | TPM_SC_PS(0);                          /* Edge Aligned PWM running from
                                                                           BUSCLK / 1                   */
    TPM0_SC   = TPM_SC_CMOD(1) | TPM_SC_PS(0);                          /* Edge Aligned PWM running from
                                                                           BUSCLK / 1                   */
}

TMP初始化:

相关帖子

沙发
大苏牙|  楼主 | 2015-10-11 08:06 | 只看该作者
主程序:
#include "includes.h"

#define SET_LED_D3(x)     TPM2_C1V = (x)
#define SET_LED_D2(x)     TPM2_C0V = (x)
#define SET_LED_D4(x)     TPM0_C1V = (x)

int  main (void)
{
    INT16U ADC = 0;
    gpioInit();                                                         /* 管脚初始化                   */
    tpmInit();                                                          /* TPM 初始化                   */
    adcInit();  
        
    while(1) {

                        ADC = adcGetUint();
                        SET_LED_D2(ADC);
                        SET_LED_D3(ADC);
                        SET_LED_D4(ADC);   
                        
    }
}

使用特权

评论回复
板凳
大苏牙|  楼主 | 2015-10-11 08:07 | 只看该作者
把工程源码贴到这里吧

PTM_PWM.zip

972.39 KB

使用特权

评论回复
地板
FSL_TICS_Jeremy| | 2015-10-12 08:54 | 只看该作者
谢谢楼主分享,还请帮忙及时结贴!!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

27

主题

278

帖子

4

粉丝