历史上的今天
今天是:2025年04月14日(星期一)
2020年04月14日 | 基于Stm32F407的步进电机的速度控制方案------初步
2020-04-14 来源:eefocus
这里跟大家分享一下我的步进电机的速度控制思路(最终初步解决了问题)
这里我选择的是 Stm32F407 作为主控芯片,我的大致速度控制思路就是通过调整PSC 和ARR的值来实现对速度的控制。对应于我的代码的定时器框图如下(我用的是TIM14)

为了实现修改定时器的频率我们需要修改对应的PSC和ARR的值、 这里的定时器模式我选择是PWM模式
对应的定时器部分的初始化代码如下

以上代码完成了定时器的IO复用和对应的时钟的初始化,这里我们不在赘述! 我们接下来就是需要通过修改 定时器对应的PSC和ARR值来实现对定时器输出的脉冲的频率进行调整

所以我考虑的是 我们写一个数组,将不同的转速下对应的PSC和ARR值都分别写入数组,每一次当我们需要设置新的速度是我们就去查找对应速度对应的PSC和对应的ARR值

这是速度设置的函数,代码部分只是简单的对数据的搬迁 查表获得对应的速度信息

接下来是 PSC和ARR的计算函数,这一部分我没有完成,

我希望可以通过我们需要的速度自动计算出比较合理的PSC和ARR值 Step_Speed[ ][ ] 第一个参数是速度我们的速度设想单位是转每分钟、我们已知的参数是 定时器所在总线的时钟频率,步进电机的细分数。这一部分的代码比较难实现,一方面是参数PSC、和ARR都是整数,且数字大小严格显示在 unsigned short范围(如果是32位定时器 另说)现在的情况是(PSC-1)*(ARR-1) = (一个关于转速,细分,系统时钟 的数字)目前还没有找到有效的算法可以对一个数字进行拆分。
经过再次的研究 问题已经得到了解决 最新的速度计算代码部分如下

这里采用了固定 PSC的方案,PSC固定 简化了运算的逻辑,在步进电机转速的低速段部分,我采用了手工计算的PSC值
这里 考虑到了可以简单的计算出速度单位 6(任意设定的一个数字没什么实际意义) 之后的所有速度,依据速度的比例关系 通过修改 PSC可以实现对 极低速度的计算。
初步测试可以使用 ,但是完整的代码必然还需要 设计加减速部分 以及 适应多路电机!
这些等以后有机会再去完善!
史海拾趣
|
这个东西不是很希罕,只是大家注不注意的问题 1994年,在英国成立了一个叫做汽车工业软件可靠性联合会(The Motor Industry Software Reliability Association,简称MISRA)的组织。它是致力于协助汽车厂商开发安全可靠的软件的跨国协会,其成员包 ...… 查看全部问答> |
|
最近写了个程序,用的是内存映射,在WinCE5.0中运行蛮顺畅的,速度也挺快,但是到了WinCE6.0中好像变慢了。 听前人说5.0的内存映射交换区会到1G的时候再去交换,而6.0的交换区到了1M就要交换了,交换频繁了所以相关处理也变慢了。 听说6.0的1M交 ...… 查看全部问答> |
|
System.Net.WebRequest request = WebRequest.Create(\"http://xxx.xxx/prog1.exe\"); request.Credentials = CredentialCache.Defa ...… 查看全部问答> |
|
各位大哥,在win ce上如何做GPS导航软件的开发啊? 公司现在要做一个车载的GPS导航产品,已经决定用WIN CE了,我负责做导航软件这一块,想问下大家都要做些什么东西? 要做一个导航软件要经过哪几步?我们之前是在UC OS上做的,熟悉NEMA协议。 ...… 查看全部问答> |
|
这段时间编写51的控制板程序,两个大牛技术指导对51中断嵌套问题的看法不一样,后来亲自验证了一下,得到了一下的一些结论,发上来大家参考,表达不清的地方还望理解,呵呵。 51单片机的中断可嵌套,但至多支持二级嵌 ...… 查看全部问答> |
|
各位好:此问题已困扰很久,我用的是449的片子,要用定时器A产生200Hz的采样频率,定时器时钟才用SMCLK,为1M,下面是所有程序: #include <msp430x44x.h> void init_TimerA(void); void init_ADC12(void); char adc_Flag = 0; int n ...… 查看全部问答> |




