第一次发帖图片编排有问题,建议坛友们下载最下面百度云链接里面pdf格式原文来看
评论里面喷我的人,估计都单纯只是DIY爱好者,而不是电子爱好者,请你们直接路过无视这篇文章。 这段话之前写过,貌似被删了。很多人不理解做这个东西有什么用,特别做作。如果做这个东西纯粹是为了占领别人的封面,那确实太愚蠢了。我们DIY一个东西,更多是为了享受制作的过程。对我而言,我可以接触到未曾接触过的机械结构和硬件模块。同时更多是为了学习stm32单片机,增加调试经验(也许我更应该发到 我爱单片机 板块)至于为什么选择做摇摆机,我就喜欢了,你管我。 作者:广大电协阿瓜
日期:2016/11/17
实物图1
实物图2
下面我将介绍我做这台机器的几个主要过程。
1.画概念图
这个idea好像是我在晚上入睡前思考人生的黄金时间中想到的,简单的把手机放在一个摆篮里,用步进电机带动摆篮来回摆动,模拟人正常走路时手机采集重力变化的姿态,简约的东西既能充当刷步机,又能起摆饰作用(至少我是这么认为的)。
上图是用Solidworks 机械绘图软件画的3D模型图,我本人是电子相关专业,solidworks是自学的,多一门技能多一门手艺哈。机器的支撑骨架用的是
2020铝型材,所看到的平面板用的都是
亚克力板,步进电机转轴通过
圆柱形联轴器跟粗
螺栓相连,然后整个摆篮就通过那个四只脚的东西(自己画的零件,用3d打印机打印)挂在螺栓上面(里面有
轴承,减小摩擦),黄色的零件是
万向联轴器,用来连接
金属杆和亚克力板,后来在板子四周加装了
角铁,保证手机不会飞出(一开始没有画是因为还没想到好办法),摆篮下面预留了一定的空间,保证其摆起来不会有磕碰。(摆篮上面放的是魅族MX4!逼不逼真!)(ps:加下划线的是所用到的材料和机械零件,仅供参考)
写到这里才想起我应该上tb搜索一下,然后都千篇一律长这样,看了下介绍,
原理我想大概是摇篮下挂一个配重的磁铁,底座电池供电给内部线圈产生磁场,给摇篮一个初始动力后,配重磁铁和线圈相互吸引来保持转动惯性。好吧我承认这种方案比我做的要先进,没有噪音,而且也更加精致小巧,但是,我的看起来更加高大上啊!
2.组装机器
像铝型材、联轴器、金属杆、角铁、轴承这些金属零件可直接上淘宝买,然后亚克力板是之前做的项目的余料,也是在淘宝上定制的,然后那个四只脚的零件则是在学校实验室里的3D打印机打印得到。这是组装完成后的样子,没有任何硬件电路(除了步进电机)(同学送的),组装过程没有拍太多照片。
3.绘制硬件连接原理图
3.1 stm32f103c8t6核心板
在淘宝买的模块,因为flash被锁被大量吐槽,我也是尝试了好久才能正常使用。
3.2 A4988步进电机驱动模块
第一次使用这个模块(以前用的是TB6560),因为便宜。但便宜有便宜的缺点,TB6560驱动模块使用起来感觉特别的顺,即使相位引脚乱接都能照样能顺畅地转动;但是这个A4988的使用效果就差一点了,一是相位标法跟正常不同,这里的2B、2A应该是正常的A+、A-,1A、1B是正常的B+、B-,而且相位没接对的话电机会一直堵转并发出难听的噪声,我摸索了很久才能让它正常转动;其次是我在测试不同频率下的转速时内部线圈有时会跟不上节拍而出现堵转的现象,虽然TB6560有时也会这样,但也只是转得不顺畅而已,不会完全堵转;再其次是只能通过MS1、MS2、MS3调节细分步数,而且要手焊而不是用拨码开关;最后一点,我想也是造成使用效果较差的一点,就是驱动电路和控制电路没有用光耦隔离,是共地的!难怪用起来总感觉那么“抖“,在电机转动的时候数码管和指示灯总是会闪烁!
3.3数码管驱动电路
使用6位共阳数码管(但我只用了5位,最大计数99999步),正端用NPN三极管9013驱动,IO输出低电平NPN不导通时有效;负端用ULN2803 八位达林顿晶体管来驱动,因为有反相,所以同样是IO输出高电平有效。
3.4 按键蜂鸣器驱动电路
按键IO口配置为上拉输入,然后配置下降沿触发中断。
蜂鸣器同样是用NPN三极管来驱动(后来因为太吵而舍弃)
3.5 霍尔传感器模块
这是网上搜的原理图,原理很简单。霍尔传感器输出信号通过LM393比较器和参考电压比较,大于则输出高电平,小于则输出低电平。实际使用时我把LM393的2、3脚对调了,因为要用负跳变触发的外部中断。
3.6 DC12V转DC5V LM2596稳压模块
直接上淘宝买的模块,比自己做更有保障。(2576和2596用法相同,只是2596的开关频率更高,工作效率高一些)
4.测试硬件电路
这是我做这部机器最关键、也是最困难的部分,由于刚刚入门stm32(之前学的51和arduino),如果直接搭建好所有电路再一个个调试我肯定吃不消,所以只好先单独连接各个部分的硬件,如数码管、蜂鸣器、按键、步进电机,并测试好各部分的代码,确定无误后再将所有电路和代码进行合并。因为这是我第一次使用stm32作为核心控制器的作品,最初我甚至花了很长时间在解决烧录不进程序的问题上,然后又被各种问题像IO的配置、定时器的频率、步进电机的节拍时序困扰了很久,导致调试的进度非常缓慢。
5.搭建硬件电路,测试总代码
连接所有硬件电路(飞线有点凌乱),测试过程就不详细写了。
下面是在调试过程中遇到的问题及解决办法:
q 一开始在淘宝买的stm32f103c8t6核心板一直烧不进程序,看卖家才知道原来是核心板在出厂时默认烧录了flash保护程序,要用swd下载方式解锁了才行。
q PB5一直输出高电平,不受单片机控制 。解除jtag绑定,正常。
q 我用flymcu烧录器来下载程序,烧录是要手动切换boot0电平并复位的,然后下载成功后不知什么鬼程序运行不正常,因为经验不足一直以为是程序问题困扰了好久,后来才发现要把boot0打回低电平并复位才行,被烧录器上面的“编程后执行”选项给坑了,烧录后只会运行main函数的程序,其它程序如定时器中断函数并不会执行!
q 定时器问题,我看正点原子计算定时频率公式是:72M÷时钟分频系数PSC÷自动重装载值ARR ,但是实际运行时频率(示波器测量)却比计算值小9倍,不解。
q 应该同样是定时器的定时问题,导致在用定时器给蜂鸣器报警延时和控制步进电机转动节拍时效果一直不理想。后来只好舍弃蜂鸣器,步进电机改用便宜的A4988驱动模块来控制(一开始用的uln2003)。
q 最初想着完全用定时器来控制摆篮摆动的频率,但是有两个严峻的问题。一是摆动的频率难以测量,虽然通过实测可知不管摆动幅度多大这个频率都是固定的(至少大概相等),但是要用定时器准确模拟出这个频率不大可能,多多少少会存在误差。这时候我偶然想起我在很久之前做的霍尔传感器模块,将霍尔传感器固定在一侧,并在摆篮上粘一磁铁,这样摆篮经过传感器被检测到信号后,单片机才控制电机转动不就行了!同时还能用来计步数!二是难以确定电机转动的速度和时间,转得太快摆得太高,转得太慢又摆不起来,而且转动时间跟摆篮的摇摆不同步的话又会导致整个机身剧烈晃动。后来我的解决办法是不将电机转轴跟联轴器完全固定,让它们有一定相对摩擦,然后利用这些摩擦来让摆篮摆动。(这样带来的问题是转久之后摆篮容易脱落,后来我又想到的办法是用一个橡皮筋把它们给套住,这是后话)
q 在调试时发现即使磁铁离霍尔传感器远远的,一旦我把双手靠近它也会检测到!然后我转了下精密电位器把灵敏度降低了才不会被检测到,莫非是当时灵敏度太高连我的人体静电也被它检测到了?!
6.正常使用测试
经过多次修改转速和转动频率后,现在摆动幅度基本合适,而且数码管显示的计数值能跟微信运动上的基本吻合,哈哈!但是现在还是存在一些问题,比如摆动起来惯性有时还是有点大,整个机器也跟着左右轻微晃动,我已经在底板上粘了防滑垫了还是这样;因为电机转轴跟联轴器没有完全固定,摆久了摆篮容易脱落,还好摆篮是稳稳地跳出来的,不然手机就惨了。最后附一段使用视频,看官们请轻喷。(正在上传,等下补上)
7.最最后再附上我的高中学霸同桌(现在上海交大巴黎学院)对小球(摆篮)进行单摆运动,从不同高度下摆的摆动周期的计算过程。
然后我简单总结一下(反正我是看不懂):
忽略空气阻力,θ为摆动夹角,ω为小球角速度,R为杆的长度,g为重力加速度
因为摆篮的摆动幅度肯定要足够大才能被手机检测到,所以可以忽略第一种情况而只看第二种情况,因此可以得出这么个结论:
摆篮的摆动频率只跟杆长有关,而跟摆动幅度基本无关,所以别指望这台摇摆机能够以不同的步速来刷步了!
全文完。 下面是源程序,欢迎提出意见。取消百度云链接了。
[ 此帖被aa阿瓜在2016-11-18 22:40重新编辑 ]