上周六,我的老师扔给我一台四轮普通直流电机小车(下图,已组装好),叫我实现无线控制功能,由PC端或手机端发送指令。由于我曾经做过步进电机小车的控制,同时最近学习了一下Stm32CubeMx,想要实战一下,就欣然答应了。后来事实证明,我还是太年轻了/捂脸。
9/15
小车使用是Stm32F103ZET6作为核心板,因为才接触CubeMx没多久,我就先点了个灯看看效果。复位后灯开始闪烁,单片机没有问题。然后,就开始着手写电机驱动代码。
小车用的是普通直流电机,用于驱动的IO口也是普通IO,只能输出高低电平。我疑惑电机不都是用PWM波驱动的吗,如果不用PWM波,只用高低电平驱动,那怎么控制速度?我马上将这个问题发给了老师,老师却说,利用普通IO口也能实现类似PWM波的功能,可以初始化一个时钟,将时钟周期设置成50ms,在这50ms中控制高电平占总周期时长的比例,这样就能控制电机的转速。果然,不仅仅是贫穷限制了我的想象力,还有智商。
因为主要任务是做到遥控控制,所以先将控速功能搁置,只用单纯的输出高电平实现电机的转动。
可就在我敲完代码,点击烧写按钮之后,Keil突然提示“No target connected”,我?????stlink接的好好的,检查设备管理器,没有问题,我????????不慌,拔掉重新连接,没用,换一个stlink,还是没用。难不成单片机烧了?我怎么成了单片机杀手了,我又将这个问题发给了老师。嗯,单片机没坏,是我脑子坏了。
我遇到的这个问题是使用CubeMx进行单片机配置经常会遇到的问题。在配置引脚时,不小心将连接SWD总线上的两个端口都配置了,导致烧写成功一次之后就再也不能烧写了。解决的方法如下:先长按STM32的复位键,再点击下载按钮,再松开复位键(注意并不是一次就能成功,需要重复几次,而且__每次按住复位键的时长都不同__我就是因为每次按住时间过长,导致尝试了很多次都没有成功,最后心灰意冷之际瞎按了一通再点击下载,结果竟然成功了,我????敲代码真是件玄学的事情,不过还是很开心),已经晚上十点了,明天再继续,明天要完成上位机程序,实现蓝牙通信。
9/16
因为之前照着网上的教程学习过一段时间的C#窗体开发,也尝试做过低配版的串口调试助手,实现了基本的收发功能,所以我使用C#窗体来编写上位机程序。具体怎么做,可以去网上找找教程,我觉得是挺简单的,不过前提是得掌握一些C#基本的语法。
当前的界面如下
接下来就是蓝牙模块的设置了。初次接触蓝牙,感觉有点陌生,不过还好,只要将两个蓝牙配对成功,就可以将其像串口一样使用了。嗯,说起来容易,我可是调了一下午的。具体操作还是继续百度吧。
花了一个上午和一个下午,才实现这两个简单的功能。看起来是挺浪费时间的,不过在这段时间里,我完成了两项以前从未做成的事,以后遇到同样的事多少可以节省一些时间了
9/17
今天周一,白天要上课,只有晚上有时间做小车,所以今天只完成了测速功能
待续