【用音量控制器介绍GD32F330C8T6单片机外设应用(二)——整机硬件原理设计介绍】

系列文章目录

第一章 GD32F330单片机、编码开关、音量控制芯片功能介绍
第二章 整机硬件原理介绍
第三章 程序代码详解和调试过程介绍



前言

本章节将介绍整机原理图的设计内容。
笔者目前大方向需求已经明确:了解旋转编码开关的工作原理,并通过音量调节芯片将工作原理实现出来。
开始实现这个目标的过程中,绘制硬件原理图时第一步,这时候很多细节问题也一并出现,也就是出现很多新的设计需求,必须通过合适的方案一个个解决掉。


一、整机原理关键设计说明

整机原理

1、编码旋转开关的设计

SW1、SW2、SW3是旋转编码开关,A,B两个端接10kΩ上拉电阻,保证稳定状态时引脚为高电平,A,B对地接0.1uF电容,起到消除机械抖动的作用,理论上高于160Hz的机械抖动会被滤掉,1/2ΠRC = 1/23.1410k*100n ≈ 160Hz

C端是旋转开关的公共端,同单片机的GPIO参考端相同,都接了GND。

D和E端是独立的复位式按键的两端,与普通微动开关的处理方式相同,接到了单片机的引脚上,并且同AB端一样配置了上拉电阻和滤波电容。
SW1、SW2、SW3是旋转编码开关

2、LED指示灯接在PWM输出引脚

LED1、LED2、LED3分别接在可输出PWM的引脚上,这样不只有亮灭,还可以通过改变电平占空比来改变亮暗的程度。这个设计是准备用于测试编码开关步进方向的大小——逆时针旋转,LED变暗,反之变亮。GD32F330的数据手册详见链接:GD32F330数据手册下载
LED1、LED2、LED3分别接在可输出PWM的引脚上

3、M62429可双声道也可单声道

在M62429芯片输入VIN1和VIN2,以及输出VOUT1和VOUT2,各有一个0Ω短接电阻,当不用双声道分别控制的场合时,可以焊接其上。

数据引脚DATA和时钟引脚CLK,不需要PWM功能引脚,普通I/O即可,在程序处理时,按照手册时序的要求进行控制,
M62429

二、电路板设计

1、布局一览

顶视图

2、电路板参数

1、尺寸:80*80mm,板厚1.6mm
2、输入电压:9-24V,消耗电流:<10mA
3、编码器型号:EC11
4、晶振:8MHz
5、音频端子:3.5mm双声道或者单声道焊盘

总结

硬件设计基本能涵盖预想的设计需求,更多需求需要通过程序实现。

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GD32F330是一款高性能的32位微控制器,支持多种外设驱动。要驱动蜂鸣器,可以使用GD32F330的定时器和通用脉冲宽度调制(PWM)模块。 具体步骤如下: 1. 配置GPIO口,将蜂鸣器连接到GPIO口。 2. 配置定时器,设置其工作模式为PWM模式,同时设置PWM占空比,使得输出电平变化频率在人耳可接受范围内。 3. 启动定时器,使得PWM波形输出到GPIO口,从而驱动蜂鸣器。 以下是一个简单的代码示例: ``` #include "gd32f3x0.h" void buzzer_init(void) { rcu_periph_clock_enable(RCU_GPIOB); gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_0); rcu_periph_clock_enable(RCU_TIMER0); timer_oc_parameter_struct timer_ocinitpara; timer_parameter_struct timer_initpara; timer_struct_para_init(&timer_initpara); timer_deinit(TIMER0); /* initialize TIMER init parameter struct */ timer_initpara.prescaler = 119; // 时钟预分频值 timer_initpara.alignedmode = TIMER_COUNTER_EDGE; timer_initpara.counterdirection = TIMER_COUNTER_UP; timer_initpara.period = 799; // PWM周期 timer_initpara.clockdivision = TIMER_CKDIV_DIV1; timer_init(TIMER0, &timer_initpara); /* initialize TIMER channel output parameter struct */ timer_channel_output_struct_para_init(&timer_ocinitpara); timer_ocinitpara.ocpolarity = TIMER_OC_POLARITY_HIGH; // 输出高电平 timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH; timer_ocinitpara.outputstate = TIMER_CCX_ENABLE; // 使能输出 timer_ocinitpara.ocidlestate = TIMER_OC_IDLE_STATE_HIGH; timer_channel_output_config(TIMER0, TIMER_CH_1, &timer_ocinitpara); /* enable TIMER counter */ timer_enable(TIMER0); } int main(void) { buzzer_init(); while (1) { // do something else } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值