打印
[其它应用]

用带PWM功能的MCU产生38kHz更实用的方法.

[复制链接]
1527|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
datouyuan|  楼主 | 2016-7-1 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用PWM功能产生38kHz比使用T2更实用.

例子是使用SH88F2051或SH88F54MCU.

#define FOSC                16.6//11.0592        //
#define MACHINE_NUM 1                //定时器
#define M_NUM       1                //程序  SH88F2051 程序是1T,定时器1T/12T可选

#define GET_PWMP(F)  MIN(MAX((FOSC*250/M_NUM/(F)),4),255)
#define PWM0_SET(d,p) do{PWM0D=(d);PWM0P=(p);PWM0CON=0x91;}while(0)
#define PWM0_ON()     do{PWM0CON |= 0x80;}while(0)
#define PWM0_OFF()    do{PWM0CON &= 0x7f;}while(0)
#define PWM1_SET(d,p) do{PWM1D=(d);PWM1P=(p);PWM1CON=0x91;}while(0)
#define PWM1_ON()     do{PWM1CON |= 0x80;}while(0)
#define PWM1_OFF()    do{PWM1CON &= 0x7f;}while(0)
#define PWM2_SET(d,p) do{PWM2D=(d);PWM2P=(p);PWM2CON=0x91;}while(0)
#define PWM2_ON()     do{PWM2CON |= 0x80;}while(0)
#define PWM2_OFF()    do{PWM2CON &= 0x7f;}while(0)
//PWM0_SET(GET_PWMP(38)/3,GET_PWMP(38));//pwm输出38kHz

#define GET_PWMP(F)  MIN(MAX((FOSC*250/M_NUM/(F)),4),255)
#define PWM_SET(d,p) do{PWMD=(d);PWMP=(p);PWMCON=0x91;}while(0)
#define PWM_ON()     do{PWMCON |= 0x80;}while(0)
#define PWM_OFF()    do{PWMCON &= 0x7f;}while(0)
//PWM_SET(GET_PWMP(38)/3,GET_PWMP(38));//pwm输出38kHz

沙发
datouyuan|  楼主 | 2016-7-1 15:03 | 只看该作者
下面是SH88F2051产生38KHz的例子
void main(void)
{
        CLKCON = 0x00;        //freq=Osc/1--->16.6MHz/1
        PWM_SET(GET_PWMP(38)/3,GET_PWMP(38));//pwm输出38kHz
        while (1)
        {
                PWM_ON();
                delay_mS(5);
                PWM_OFF();
                delay_mS(5);
        }
}

使用特权

评论回复
板凳
mwxpk| | 2016-7-1 17:47 | 只看该作者
来个输出两路

使用特权

评论回复
地板
datouyuan|  楼主 | 2016-7-8 15:35 | 只看该作者
本帖最后由 datouyuan 于 2016-7-8 15:43 编辑

88F2051只有1个PWM.要输出2路要用88F54.
void main(void)
{
        CLKCON = 0x00;        //freq=Osc/1--->16.6MHz/1
        PWM0_SET(GET_PWMP(38)/3,GET_PWMP(38));//pwm输出38kHz,占空比33%
        PWM1_SET(GET_PWMP(100)/2,GET_PWMP(100));//pwm输出100kHz,占空比50%
        while (1)
        {
                PWM0_ON();
                PWM1_ON();
                delay_mS(5);
                PWM0_OFF();
                PWM1_OFF();
                delay_mS(5);
        }
}

使用特权

评论回复
5
bbapple| | 2016-7-9 16:08 | 只看该作者
不错的资料,学习了。。

使用特权

评论回复
6
mwxpk| | 2016-7-10 17:49 | 只看该作者
两路片子多钱?

使用特权

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

本版积分规则

31

主题

1083

帖子

9

粉丝