大四轴四旋翼制作思路算法过程(4)

2019-03-11 14:25

好的。参见手册(《STM32 中文参考手册》)81 页。其中,我用 TIM2 输入 PWM,所以对 应 PA0~3,用 TIM4 输出 PWM,对应 PB6~9。

而原来产生任务时钟基的定时器变为了 TIM3 任务,留出 TIM2 给 PWM 输入,其实用基本 定时器 6 或 7 就可以给任务产生时基,但是还不会配置基本定时器,留给以后改变吧。这样 可以把 TIM3 通用定时器留给其他功能。毕竟简单任务就应该配置简单定时器

然后我在程序中加入了滑动均值滤波器,基本原理是依次更新数组的数据,然后每次调用 都把数组所有数据相加再除以数组大小。代码如下

接下来是头疼了好久的 PWM 输入的问题,程序是参考的 MWC 飞控。MWC 飞控接收遥 控信号给了两种方式,一种是用一个端口检测一路 PPM 信号,另一种是用 8 个端口依次扫 描每个端口的 PWM 脉宽。这里我采用了后一种,这样可以直接使用遥控接收机的信号,否 则要用 PPM 信号需要从接收机里的一个引脚里引出 PPM 信号,或者用解码器,都比较麻烦。

MWC 的流程是先初始化 TIM2,用 TIM2 的四个通道进行读取。当时犯了一个错误就是 MWC 程序 TIM2 已经 GPIOA 端口的 APB 总线时钟在程序其他地方已经打开了,所以程序这 里没打开时钟的代码,而我直接用人家的代码没有任何反应,后来才发现这点赶紧把 GPIO, NVIC,TIM2 的初始化代码补全,然后就正常了。

MWC 的端口扫描的基本原理是触发 TIM2 中断后进入中断,然后来一个 for 循环循环判断 四次(因为有四路输入),看是哪个通道产生的中断,判断出以后用一个 switch 语句把捕 捉到的高电平(或低电平)时间赋给变量 val,然后根据 state->state 标记位判断是高电位时 间计数还是低电平时间计数,分别赋给 state->rise 和 state->fall。当然,要获取一个 rise 一 个 fall 是两次进入中断函数完成的。然后他判断这两个计数大小,相减或者求相减的补数得 到高电平时间。这是一个非常巧妙的方式。

但是一开始的时候整个过程非常占用 CPU 时间,以至于 PWM 输入功能一打开,CPU 只执 行 PWM 输入功能,其他的都不执行。然后我就想找关闭 PWM 输入功能的语句。试了好久, 关 GPIO 时钟,关中断向量,关 TIM2,都没用。没办法,从初始化函数开始一部分加一部分 的关闭尝试,当关闭 TIM2 时钟是发现中断关闭了。这就好说了,我用任务时钟基的标记位 Control_counter == 1 时打开 TIM2 时钟,然后当 TIM2 中断执行 16 次(每个高电平至少需要

两次中断读取,4 个高电平就 8 次,保守一些让中断执行 16 次)后关闭 TIM2 时钟,这样就 实现了每 2ms 读取一次 PWM 输入的功能。把程序烧进去以后一切就都正常了。

上图是程序运行后通道 1 输入 PWM 后的结果,可以看到检测到了值而且在变化。我用另一 个 stm32 产生了 50Hz(舵机标准信号)的 PWM,脉宽从 0%变到 90%(飞控 PWM 输入计数 应该从 0 变到 18000,满值是 20000)。可以看到,图上读数从 19000 变到 1200 左右,说 明 PWM 输入起作用了。由于在 0%和 100%附近 PWM 信号会失真,所以最大超过 18000 最 小未达到 0 也是可以理解的,当然也有可能是没有显示出来的缘故,向上位机输出的频率是 20Hz,而扫描的频率是 500Hz。

然后我一次把 PWM 信号线插入通道 2 3 4,也读出了数据,说明四个通道都没问题。

上图是上位机读到的通道 1 的捕捉值变化,纵坐标是 200 代表 20000,可以看到 PWM 输入 很好的跟随了另一个 stm32 的 PWM 输出(从 0 变到 18000 再从 18000 变到 0),但是偶尔 会出现噪声。如

但是这不是最致命的,PWM 跟随期间有一段时间会出现下面的情况

噪声很严重,推测是上升沿和下降沿判断出问题了,看来需要对于这个过程多一些判断,避 免出现上面的过程。

2013 年 2 月 9 日 12:44:54

读取多路 PWM 没进展中,各种噪声各种紊乱。。。。 读取函数重新改了,改得类似原

来 8051F 开发的 PCA 函数了(break 语句卡了好久)。但

是读取值向上偏移 2000,去学校用示波器试试,现在不知道是产生 PWM 的 stm32 缘故还 是读取的缘故。

只能读出一个通道,是因为 TIM_GetCapture 函数分 TIM_GetCapture1,TIM_GetCapture2, TIM_GetCapture3,TIM_GetCapture4,四个通道。

关闭看门狗中断,提高 TIM2 中断优先级

循环变量不要用全局,污染变量。

实在不行还是用 PPM 吧

2013 年 2 月 11 日 12:19:28

PWM 输入搞不定,暂且用上升沿下降沿切换这样读取吧。。。以后再说


大四轴四旋翼制作思路算法过程(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:城管中队作风整顿自查报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: