这是我嵌入式应用的一个项目,使用STM32CubeMX和keil软件进行编程。断断续续花了好几天完成,期间踩了很大hal库的坑和proteus的坑。
感觉做这个仿真的人很少,现在把资源分享给大家,因为程序还在修改还没有提交,所以先分享一下我粗略的设计思路
一、设计思路: 使用STM32CubeMX软件进行资源初始化(Cube资源配置很方便),使用HAL库进行程序设计。 图1 资源配置图 二、功能介绍:
三、功能的实现方法: - 可调转速通过可调电阻和STM32的ADC功能,实现500-4596范围的速度调节。使用的是简单的比例控制,并未使用复杂的PID控制(太难了,一直调不好)。
- 通过定时器1的PWM互补输出六路PWM控制电机的转动,驱动器使用L293D和IRF540 MOS管。
- 换向使用的是外部中断,测速使用的是定时器2的三鹿输入捕获,这里有一个坑,proteus中三路输入捕获无法同时工作,本来打算三路都做测速逻辑,但是速度变化很大,所以最后只使用了一路作为测速通道。
- 正反转使用的是外部中断。
- 显示转速和目标转速使用的是lcd1602,在proteus仿真中,显示转速有一定的延时和误差(其实是proteus的仿真太慢了,多开一个任务就慢的要死)
图2 电机刚启动,速度未达到最小速度500
速度未达到最小速度时加载很快,大概加载到300rpm左右开始pid控制。
图3 仿真过程中 图4 仿真过程中
图5 反转时的调速过程
仿真过程中可以看到定时器PWM输出之间的切换以及脉宽的变化。 图6 接近稳定时 图7 稳定后增大转速 图8 反转时接近稳定
由于proteus中stm32 的定时器计时很坑,延时根本不对,需要修改芯片的时钟源频率,改大了仿真慢,改小了又不准,所以ADC采样值和转速之间只能近似转换,也造成了目标转速和实际转速的误差。 图9 整体电路图
以上的Word格式文档51黑下载地址:
设计报告.docx
(755.87 KB, 下载次数: 185)
|