STM32
登录
直播中
CDCNKA
8年用户
1207经验值
擅长:385288
私信
关注
[问答]
基于STM32103主控板的娃娃机该如何去设计呢
开启该帖子的消息推送
STM32103
主控板
蓝牙模块
基于
STM32
103主控板的娃娃机的硬件该如何去设计呢?
基于STM32103主控板的娃娃机的软件该如何去设计呢?
回帖
(1)
颜廷波
2021-12-22 15:48:19
前言
不知道大家有没有和我一样,有时候脑子里突然冒出来一个大胆的想法,然后就立马行动,学习,努力去实现它!
这不,有一次我去游乐场,看到商场里的娃娃机,理工男思维马上上线:这个娃娃机的主控板是什么呢?整个程序的代码是怎么样的呢?步进电机怎么控制爪子的移动,爪子抓取收放又是怎么样的呢?
于是,半年后,就有了下面这个东西。
夹娃娃
一、硬件材料
原本只想搭个简易版的,但是越做下去就野心越大,买的东西越来越多:
带显示屏的主控板STM32103探索者100+,木板+亚克力50+,亚克力爪子套件30+,遥控手柄30+,蓝牙音箱40+,HC-05蓝牙模块30+,电机3x20+,舵机,红外传感器,霍尔传感器*3,稳压模块,5V升9V的数据线(插上充电宝就能用),H桥驱动模块x2,传送带齿轮联轴器,游戏币,一堆小娃娃…
二、软件设计
1.实现功能
LCD屏幕显示操作界面与动画。
投币检测。
索尼PS2手柄无线控制娃娃机。
舵机控制爪子抓取,减速电机控制爪子前后左右上下移动。
HC-05蓝牙模块接收来自手机APP端发来的指令。
支持60s倒计时无投币动作就待机睡眠。
2.设计思路
整个程序搭载在UCOSIII实时多任务操作系统中运行:
把各个功能独立至一个个任务中,每个任务按重要性划分出优先级,采用时间片轮换调度的方式给任务分配合适的时间片来占用CPU,确保每个任务都能在较短的时间完成一个任务周期。
把所有任务分成三种类型,方便管理:
(1)
在特定时间环节才要执行的任务
。整个娃娃机的功能实现可以根据不同的环节把它们划分成三步任务:1等待投币->2选择模式->3夹娃娃 ->回到1。这些任务按顺序运行,当判断到该结束当前任务时就挂起它,然后切换至下个任务,如此循环往复,便实现了整个娃娃机的功能。
(2)
全程都要执行的任务
。例如读取PS2手柄数据,接收蓝牙收到来自手机的信息等。把它们创建成一个个独立出来的任务,按照实际情况设定间隔多少时间运行一次,定时更新接收的数据信息。
(3)
不确定何时会发生的任务
。比如说投币检测、暂停调试按键等这些外部事件。这些重要的意外发生任务就交由外部中断函数处理,把中断的优先级设置到最高,可以打断正常运行的程序,确保投币、调试等动作能快速准确地响应。
3.资源分配
USART3串口连接HC-05模块(USART3_TX 接 PB10,USART3_RX接 PB11)接收APP上位机数据。
定时器TIM2用于夹娃娃倒计时。
TIM3_CH1~CH2(PC6 ~7)输出PWM方波控制爪子前后、左右的电机。
TIM4_CH1~CH2(PD 12-13))输出PWM方波,分别控制上下收发爪子的电机和爪子抓取的舵机。
按键WK_UP(PA0)占用IO总线0外部中断,用于待机唤醒。
IO口PA2占用IO总线2外部中断,连接红外传感器,用于投币检测。
按键KEY0~KEY1(PE4、PE3)占用IO总线4、3外部中断,用于调试爪子上下位置故障。
IO口PF6接霍尔传感器,占用IO总线EXTI9_5外部中断,用于检测爪子上下电机旋转的圈数。
PAin(4)、PAin(5)连接两个霍尔传感器,用于爪子前后左右移动的限位检测。
PB12~15接PS2接收器(分别对应DI、DO、CS、CLK),接收PS无线手柄的数据。
注: 写这部分的目的是记录下资源使用情况,这样出问题了方便检修。
三、总结
最后,整个项目从外形框架的搭建到程序规范收尾,修修补补写了几千行代码,做做停停也用了大半年,整个过程下来还是有所感悟有所收获的:
一旦下定决心做一件事情,就一定要坚持到底,只要你努力去学习和付出,到最后肯定会成功的!
遇到问题卡住无法前行时,千万不要气馁,可以先冷静放松一下,过一段时间再去思考这个问题时,你会有不一样的思路的。要相信若遇到的问题和障碍上百,那解决克服它们的方法肯定上千。
例如,我在想如何升降爪子的时候,就卡了很久,一开始想的是用舵机配合伸缩杆的方案的,但是舵机的扭矩不够大;于是只能用电机,电机方案则需要带有编码器来记录上下圈数的,由此去找了带编码器的电机,如步进电机等,但是找到的体积重量功率都太大了;于是最后找了全网体积最小的减速电机,扭矩功率都满足要求,但是它没有自带编码器,我就想,都到了这一步了,就自己设计一个编码器吧,然后一个基于霍尔传感器+磁铁的方案就产生了,但是做好之后又出现了新问题:当磁铁刚好停在传感器附近时,就会产生很多毛躁干扰信号,直接导致数据错误!濒临崩溃的时候我想到了解决方法:检测完后强制延时让电机转出这个干扰区再停下!哈哈,最后终于得出了一套稳定的方案了,感谢当时的坚持!
每一部分的程序都要先单独测试一遍先,切忌全部程序写好再测试!切忌全部程序写好再测试!切忌全部程序写好再测试!重要的事情说三遍,特别是程序量大的时候,这是血的教训!
刚开始的时候我就异常自信,非常相信自己的逻辑思维能力,然后直接写了个几个模块集成到一起的程序,编译的时候也没问题,但是下载到板子上后程序跑飞了!我检查了好久,浪费了很多时间跟精力!最后才发现是定时器的一个参数配置错了!
所以,我就记住了,以后每创建一个任务以实现某个功能前,都要先备份好,写个独立于其他模块的简单例程,看看这份新加上去的代码有没有Bug,能不能实现预期效果;因为如果全部程序写完的话出错是很难定位查Bug 的。
有时候,按部就班是最有效率的。
前言
不知道大家有没有和我一样,有时候脑子里突然冒出来一个大胆的想法,然后就立马行动,学习,努力去实现它!
这不,有一次我去游乐场,看到商场里的娃娃机,理工男思维马上上线:这个娃娃机的主控板是什么呢?整个程序的代码是怎么样的呢?步进电机怎么控制爪子的移动,爪子抓取收放又是怎么样的呢?
于是,半年后,就有了下面这个东西。
夹娃娃
一、硬件材料
原本只想搭个简易版的,但是越做下去就野心越大,买的东西越来越多:
带显示屏的主控板STM32103探索者100+,木板+亚克力50+,亚克力爪子套件30+,遥控手柄30+,蓝牙音箱40+,HC-05蓝牙模块30+,电机3x20+,舵机,红外传感器,霍尔传感器*3,稳压模块,5V升9V的数据线(插上充电宝就能用),H桥驱动模块x2,传送带齿轮联轴器,游戏币,一堆小娃娃…
二、软件设计
1.实现功能
LCD屏幕显示操作界面与动画。
投币检测。
索尼PS2手柄无线控制娃娃机。
舵机控制爪子抓取,减速电机控制爪子前后左右上下移动。
HC-05蓝牙模块接收来自手机APP端发来的指令。
支持60s倒计时无投币动作就待机睡眠。
2.设计思路
整个程序搭载在UCOSIII实时多任务操作系统中运行:
把各个功能独立至一个个任务中,每个任务按重要性划分出优先级,采用时间片轮换调度的方式给任务分配合适的时间片来占用CPU,确保每个任务都能在较短的时间完成一个任务周期。
把所有任务分成三种类型,方便管理:
(1)
在特定时间环节才要执行的任务
。整个娃娃机的功能实现可以根据不同的环节把它们划分成三步任务:1等待投币->2选择模式->3夹娃娃 ->回到1。这些任务按顺序运行,当判断到该结束当前任务时就挂起它,然后切换至下个任务,如此循环往复,便实现了整个娃娃机的功能。
(2)
全程都要执行的任务
。例如读取PS2手柄数据,接收蓝牙收到来自手机的信息等。把它们创建成一个个独立出来的任务,按照实际情况设定间隔多少时间运行一次,定时更新接收的数据信息。
(3)
不确定何时会发生的任务
。比如说投币检测、暂停调试按键等这些外部事件。这些重要的意外发生任务就交由外部中断函数处理,把中断的优先级设置到最高,可以打断正常运行的程序,确保投币、调试等动作能快速准确地响应。
3.资源分配
USART3串口连接HC-05模块(USART3_TX 接 PB10,USART3_RX接 PB11)接收APP上位机数据。
定时器TIM2用于夹娃娃倒计时。
TIM3_CH1~CH2(PC6 ~7)输出PWM方波控制爪子前后、左右的电机。
TIM4_CH1~CH2(PD 12-13))输出PWM方波,分别控制上下收发爪子的电机和爪子抓取的舵机。
按键WK_UP(PA0)占用IO总线0外部中断,用于待机唤醒。
IO口PA2占用IO总线2外部中断,连接红外传感器,用于投币检测。
按键KEY0~KEY1(PE4、PE3)占用IO总线4、3外部中断,用于调试爪子上下位置故障。
IO口PF6接霍尔传感器,占用IO总线EXTI9_5外部中断,用于检测爪子上下电机旋转的圈数。
PAin(4)、PAin(5)连接两个霍尔传感器,用于爪子前后左右移动的限位检测。
PB12~15接PS2接收器(分别对应DI、DO、CS、CLK),接收PS无线手柄的数据。
注: 写这部分的目的是记录下资源使用情况,这样出问题了方便检修。
三、总结
最后,整个项目从外形框架的搭建到程序规范收尾,修修补补写了几千行代码,做做停停也用了大半年,整个过程下来还是有所感悟有所收获的:
一旦下定决心做一件事情,就一定要坚持到底,只要你努力去学习和付出,到最后肯定会成功的!
遇到问题卡住无法前行时,千万不要气馁,可以先冷静放松一下,过一段时间再去思考这个问题时,你会有不一样的思路的。要相信若遇到的问题和障碍上百,那解决克服它们的方法肯定上千。
例如,我在想如何升降爪子的时候,就卡了很久,一开始想的是用舵机配合伸缩杆的方案的,但是舵机的扭矩不够大;于是只能用电机,电机方案则需要带有编码器来记录上下圈数的,由此去找了带编码器的电机,如步进电机等,但是找到的体积重量功率都太大了;于是最后找了全网体积最小的减速电机,扭矩功率都满足要求,但是它没有自带编码器,我就想,都到了这一步了,就自己设计一个编码器吧,然后一个基于霍尔传感器+磁铁的方案就产生了,但是做好之后又出现了新问题:当磁铁刚好停在传感器附近时,就会产生很多毛躁干扰信号,直接导致数据错误!濒临崩溃的时候我想到了解决方法:检测完后强制延时让电机转出这个干扰区再停下!哈哈,最后终于得出了一套稳定的方案了,感谢当时的坚持!
每一部分的程序都要先单独测试一遍先,切忌全部程序写好再测试!切忌全部程序写好再测试!切忌全部程序写好再测试!重要的事情说三遍,特别是程序量大的时候,这是血的教训!
刚开始的时候我就异常自信,非常相信自己的逻辑思维能力,然后直接写了个几个模块集成到一起的程序,编译的时候也没问题,但是下载到板子上后程序跑飞了!我检查了好久,浪费了很多时间跟精力!最后才发现是定时器的一个参数配置错了!
所以,我就记住了,以后每创建一个任务以实现某个功能前,都要先备份好,写个独立于其他模块的简单例程,看看这份新加上去的代码有没有Bug,能不能实现预期效果;因为如果全部程序写完的话出错是很难定位查Bug 的。
有时候,按部就班是最有效率的。
举报
更多回帖
rotate(-90deg);
回复
相关问答
STM32103
主控板
蓝牙模块
如何
去
实现
STM32103
定时器3输出四路PWM
呢
2021-12-13
1906
LED应用
主控板
都是单片
机
吗?设计起来复杂吗
2020-05-22
2064
arm9做
主控板
与
stm32
做从
机
,如何实现
stm32
从
机
模式
2015-04-01
2876
需求
STM32103
控制超声波测距,并通过3.2寸的触摸屏显示实时距离的程序?
2017-01-06
2944
主控板
上电初始化输出端子上电电平反转的原因?
2024-05-11
4880
STM32
L152程序下载不进去
2013-08-04
5749
怎样
去
设计一种基于
STM32
的遥控小车
呢
2021-12-17
1247
STM32103
系列的PE端口2,3,4,5,6引脚用作JTAG/SWD调试,如何将这些IO用作普通IO而不影响SWD调试
2018-09-26
6989
UCOSII移植出现以下的错误
该
怎么办?
2019-08-14
3531
请问在
stm32
f103ve上面移植lwip遇到以下情况
该
怎么办?
2019-11-04
935
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分