打印
[技术问答]

PWM驱动蜂鸣器

[复制链接]
1400|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
micropoints|  楼主 | 2019-1-1 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 micropoints 于 2019-1-1 18:09 编辑
#define MAXPWMFREQ                                                         8000000
#define MINHZ                                                                                100
#define UNIT                                                                                 100
#define MINUNIT                                                                        1

#define PWM_CHANNEL_ENABLE                         PWM2_P05_OUTPUT_ENABLE
#define PWM_CHANNEL_INVERSE                         PWM2_OUTPUT_INVERSE
#define PWM_CHANNEL_H                                         PWM2H
#define PWM_CHANNEL_L                                         PWM2L

void beep_init(void) {
        PWM_CHANNEL_ENABLE;
        PWM_IMDEPENDENT_MODE;
        PWM_CLOCK_DIV_2;
        PWM_CHANNEL_INVERSE;
}

bool beep_work_freq(uint8_t freq,uint8_t duty) {
        if((freq >= (MINUNIT + 1) && freq <= UNIT) && (duty >= MINUNIT && duty <= UNIT)) {
                uint16_t PwmFreq = ((MAXPWMFREQ / (freq * MINHZ)) - 1);
                uint16_t PwmDuty = (PwmFreq / UNIT) * duty;
                PWMPH = ((PwmFreq >> 8) & 0xFF);
                PWMPL = (PwmFreq & 0xFF);
                PWM_CHANNEL_H = ((PwmDuty >> 8) & 0xFF);        
                PWM_CHANNEL_L = (PwmDuty & 0xFF);        
                return true;
        }
        return false;
}

void beep_work_start(void) {
        set_LOAD;
        set_PWMRUN;        
}

void beep_work_stop(void) {
        set_CLRPWM;
}

void beep_2K_50_work(void) {
        if(PWMRUN) {
               beep_work_stop();               
        }
        beep_work_freq(20,50);
        beep_work_start();        
}

void beep_2K_70_work(void) {
        if(PWMRUN) {
                beep_work_stop();               
        }        
        beep_work_freq(20,70);
        beep_work_start();        
}


刚刚使用新唐的003 ,写了个蜂鸣器的测试代码,跑了一下,蜂鸣器不响应,各位大大帮忙看看这个pwm的配置对不对?手头上没有示波器量不了输出频率。。
沙发
jasontu| | 2019-1-2 08:12 | 只看该作者
你的pwm gpio使能没有开吧。
如下
PWM0_P12_OUTPUT_ENABLE;
PWM2_P10_OUTPUT_DISABLE;
PWM4_P01_OUTPUT_ENABLE;
PWM5_P03_OUTPUT_ENABLE;

PWM_IMDEPENDENT_MODE;

使用特权

评论回复
板凳
dongnanxibei| | 2019-1-3 15:31 | 只看该作者
你示波器看看你的PWM出波了没?你还不如用定时器输出功能呢。反正都是方波

使用特权

评论回复
地板
734774645| | 2019-1-3 20:55 | 只看该作者
波没出来吧

使用特权

评论回复
5
734774645| | 2019-1-3 20:56 | 只看该作者
BSP下载了吗,有PWM参考啊。

使用特权

评论回复
6
734774645| | 2019-1-3 20:56 | 只看该作者
https://www.nuvoton.com/hq/resource-download.jsp?tp_GUID=SW0720181228172729
昨天更新的

使用特权

评论回复
7
734774645| | 2019-1-3 20:57 | 只看该作者
搞错了,上面是ML51,貌似新唐出的新品,还没看到。

003的是。
https://www.nuvoton.com/hq/resource-download.jsp?tp_GUID=SW0720170213111242

使用特权

评论回复
8
木木guainv| | 2019-1-8 12:48 | 只看该作者
哇 感谢分享

使用特权

评论回复
9
yiyigirl2014| | 2019-1-9 12:29 | 只看该作者
弄好了吗

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝