ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

桌面宠物项目复盘

桌面宠物项目复盘 前语该项目适合学完stm32标准库之后进行的复习大部分都是模块的堆叠。不过作为练手项目还是挺不错的。项目来自嘉立创开源广场Sngels_wyh成品展示一.首先是电路图复盘完整电路图如上图所示先来看一下整体思路1.舵机需要pwm信号进行驱动所以定时器2的4个通道包括定时器3的通道1全部用于发送pwm信号驱动舵机此外舵机还需要5V电压进行供电。此桌面宠物还有LED呼吸灯所以定时器3的通道34输出pwm给LED供电并串联电阻进行限流。3.OLED屏幕为4引脚需要使用I2C进行通信软件模拟I2C,无需使用硬件I2C语音模块和蓝牙模块则需使用串口通信可以参考下图辅助理解4.PA4引脚为AD通道4引脚可以用于检测电压R9,R10,R11为分压电阻R12为采样电阻PA4检测的带电压就是R12分到的电压由于语音模块对电源稳定性要求较高所以还需对流入模块电源进行滤波所以电路图加了两个电容还有一个pai型滤波。其余部分都比较简单就不多阐述二.软件部分大致流程动起来-能控制-配置OLED屏幕-进行功能整合现在从0开始重新敲桌面宠物的代码创建项目的流程我就不多阐述了第一步是配置PWM因为有五个舵机和4个LED所以需要使用两个定时器这里我们使用定时器2和定时器3定时器2的所有通道和定时器3的通道1分别给5个舵机提供PWM信号定时器3的通道34分别给4个LED供电1.PWM配置流程开启时钟-配置GPIO口-配置定时器-定时器通道配置-使能定时器为了缓解软件压力LED呼吸灯这种重复简单的操作就交给定时器中断实现所以上述流程还需加一个开启定时器3的中断。5960行写错了改为TIM_OC3Init(TIM3,TIM_OCInitStructure);//开启TIM3通道3 TIM_OC4Init(TIM3,TIM_OCInitStructure);//开启TIM3通道4上面是完整代码定时器频率的计算公式为频率 主频 / 分频1 / 重装值1目前的频率为72000000 / 72 / 20000 50Hz20ms注意中断开启后一定要写中断函数不然程序会跑飞暂时不想写可以把TIM3中断部分注释掉TIM3的定时中断放在主函数存放后面写完LED呼吸灯的时候再添加之后再写6个用于设置CRR的函数方便外部调用和辨别对于CRR不清楚的可以去看手册之后再.h文件声明一下就可以进行下一步了2.舵机控制这个就是将PWM的函数进行包装方便我们进行使用右前右后的角度反向是为了与左边舵机的角度统一方便我们写代码舵机的驱动依赖PWM信号的占空比在周期为20ms的信号中高电平宽度0.5ms~2.5ms对应舵机的0~180°。定时器设置的周期就是20ms也就是说在给CCR寄存器的数字500~2500中对应着舵机的0~180°而且是线性分布。这就是上面算式的由来3.蓝牙通信我们用的这个蓝牙模块本质上就是蓝牙转串口至于蓝牙是怎么接收到手机发的信号的你别管。配置这个模块的流程跟配置串口通信的流程是一样的因为语音模块也是使用串口通信在这里就一起配置了。流程开启时钟-配置GPIO-配置串口-开启串口中断-配置中断-开启中断与时钟然后再加上两个外部中断函数然后就可以测试一下之前写的功能了蓝牙调试器可以去Sngels_wyh博主分享的电子狗资料包里面找最好每做完一个功能都要测试一下方便及时更改错误4.动作的设置与执行重新建一个文件里面用于包装动作与动作的执行因为中断里要尽量避免耗时操作所以动作的执行不能放在中断里面。除此之外还需要一个变量来确认执行什么动作所以还需创建一个文件来放置可供别的文件调用的变量且方便链接各个模块。目前只加上了基础动作其他动作可以自己研究加入最下面的是动作执行判断代码直接放在main的循环里面持续判断即可对于蓝牙控制部分蓝牙通过改变Action_Mode的值来控制电子狗的动作这个文件用来创建可供外部调用的变量可以通过这些变量来链接各个文件就比如蓝牙模块通过改变Action_Mode的值来控制PecAction的动作执行同时也方便我们对某项值的更改就例如运动速度的更改。到这里我们的电子宠物就能动起来了5.LED呼吸灯配置因为LED的初始化已经在PWM.c里面写好了这里只需要写驱动就行了如果注释了TIM3的定时中断记得去取消注释这部分也是比较简单的后续可以将这些变量也加入蓝牙中断当中从而实现控制LED呼吸灯由于步骤和上面的一样我就不一一演示了。6.OLED屏幕部分这个是直接使用了B站江协科技老师的代码因内容过多具体请看江协科技老师的视频这里只展示表情切换部分表情的像素数据存放在OLED_Data.c里面将Face_Config()放进mian函数的while循环里面之后再往蓝牙和语音模块的中断里面补控制表情的代码就搞定了。7.电量检测这个功能需要用到ADC功能所以需要配置AD流程开启时钟-配置串口-配置AD-开启AD-校准AD知识点复习分频器有2468分频主频为72MHz,但ADCCLK最大为14MHz所以只能使用68分频其他分频都会超过ADCCLK的最大限制。AD包装和电量显示部分注电量处理部分CurBattery120中120给的太大了实际测试中电压达不到120所以给110就可以了之后将电量显示的开关也加到蓝牙中断和语音中断里面就大功告成了补个变量表所有控制都是通过这些变量实现的8.结语到这里整个桌面宠物项目的核心功能已经全部跑通。回顾整个实现流程大致可以概括为先完成电路图复盘理清舵机、LED、OLED、语音和蓝牙等模块的供电与通信关系再进入软件部分从 PWM 配置开始逐步完成舵机控制、蓝牙通信、动作设置与执行、LED 呼吸灯、OLED 表情显示以及电量检测最后通过变量表把各个模块串联起来实现一个能听指令、会做动作、能显示表情的桌面宠物。总的来说这个项目虽然不算复杂但麻雀虽小五脏俱全通过它可以把 STM32 的定时器、PWM、串口、I2C、ADC、中断等常用外设都复习一遍非常适合作为学完标准库之后的练手项目。
返回列表