打印

请问有什么方法能够让单片机获取到占空比一起在变化(PWM值一直在变换)的PWM值

[复制链接]
5912|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lussby|  楼主 | 2014-5-17 08:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大家一个问题,我现在想通过一个单片机不断地获取到PWM的值,先前做过一个实验,用了新唐的单片机通过PWM捕捉的方式,读取到了PWM的占空比时间以及周期。然后通过计算把PWM的值输出来,这样的方法是可行的,但是如果PWM的值是固定的那还好,如果PWM的值一直在变化,我发现我从单片机读回来的数中间有一些已经漏了,比如我输出的PWM值是从256到1逐渐连续变化的,也就是从256,255,254,253……1,这样一直到0.可是我发现单片机读出来的数是不连续的,而是间断的。读回来的数是256,240,226,……。很不连续的一段数,求大家能否给一个方案,能够让我实时读取到PWM的值的方法,在此先谢谢每一位出言献策的朋友。

相关帖子

沙发
zyj9490| | 2014-5-17 09:08 | 只看该作者
只能说明采样速率不够,跟不上变化,采用中断处理吗?还是查询方式,最好用边沿中断,处理必须在一个占空比时间处理完成,包括输出.

使用特权

评论回复
板凳
dirtwillfly| | 2014-5-17 09:18 | 只看该作者
楼上正解。这个情况最好想办法增加采样速度

使用特权

评论回复
地板
lussby|  楼主 | 2014-5-17 10:21 | 只看该作者
zyj9490 发表于 2014-5-17 09:08
只能说明采样速率不够,跟不上变化,采用中断处理吗?还是查询方式,最好用边沿中断,处理必须在一个占空比时间 ...

你好,我的处理方式是使用捕捉中断的,如果外部有电平变化,则会进入捕捉中断读取PWM高低电平的时间,我发现不连续的值也是有一定规律性的,这是一个PWM不断加1再从256不断减1的过程,读出来的数据是这样的。感觉中间漏掉的PWM值大概都是10多个。数据如下:
PWM3 = 66
PWM3 = 76
PWM3 = 86
PWM3 = 96
PWM3 = 106
PWM3 = 117
PWM3 = 127
PWM3 = 138
PWM3 = 149
PWM3 = 159
PWM3 = 170
PWM3 = 180
PWM3 = 191
PWM3 = 202
PWM3 = 212
PWM3 = 223
PWM3 = 233
PWM3 = 244
PWM3 = 254
PWM3 = 253
PWM3 = 242
PWM3 = 232
PWM3 = 221
PWM3 = 211
PWM3 = 200
PWM3 = 190
PWM3 = 179
PWM3 = 169
PWM3 = 158
PWM3 = 148
PWM3 = 137
PWM3 = 127
PWM3 = 116
PWM3 = 106
从目前来看应该真的是PWM周期太快,PWM捕捉反应不过来。请问我能有什么方法吗?先谢谢了。另外,你所说的采用中断处理,意思是不是通过一个外部中断检测外部高低电平变化,然后用一个定时器来计数的方式读取PWM值呢?

使用特权

评论回复
5
lussby|  楼主 | 2014-5-17 10:26 | 只看该作者
dirtwillfly 发表于 2014-5-17 09:18
楼上正解。这个情况最好想办法增加采样速度

恩恩,我再看看是不是我捕捉那里频率设置得不够快。谢谢您的提示。

使用特权

评论回复
6
jrcsh| | 2014-5-17 10:54 | 只看该作者
为毛不用定时器

使用特权

评论回复
7
zyj9490| | 2014-5-17 11:51 | 只看该作者
lussby 发表于 2014-5-17 10:21
你好,我的处理方式是使用捕捉中断的,如果外部有电平变化,则会进入捕捉中断读取PWM高低电平的时间,我 ...

应是如你分析这样,处理时间太长,已发生了多次中断了,才反应过来,可以用放慢PWM波的变化速率,看看能准确,这要从糸统层面上看MCU及PWM的载波能不能配合得起来,请问PWM的频率多少,加快处理,都在中断里做,行不行呢

使用特权

评论回复
8
zyj9490| | 2014-5-17 13:22 | 只看该作者
jrcsh 发表于 2014-5-17 10:54
为毛不用定时器

如果中断周期小于函数处理的时间,用更好的中断触发捕捉机制也没用.如果处理函数的时间小于PWM的载波时间还是可以改进的,先保存时间触,后处理,

使用特权

评论回复
9
Electronicapple| | 2014-5-17 13:41 | 只看该作者
可以用CPLD做处理,边沿触发。

使用特权

评论回复
10
shalixi| | 2014-5-17 14:05 | 只看该作者
用中断,而且中断处理时间要小于最小中断间隔,就是PWM的最小的高或低的电平宽度。

使用特权

评论回复
11
youluo235| | 2014-5-17 16:23 | 只看该作者
处理的时间不能太久,采用速度提高自然能解决问题。频率有多大

使用特权

评论回复
12
zyj9490| | 2014-5-17 18:40 | 只看该作者
PWM波的频率有必要这么高吗?如TI的DSP的PWM本身是很高的频率没办法测它的占空比,只能用转换成直流电压,再测它的占空比,这是间接的方法,如果占空比变化不要那么快,也可以,抽取一二个周期,来算占空比.

使用特权

评论回复
13
lzq2007622583| | 2014-5-17 21:45 | 只看该作者

使用特权

评论回复
14
ZG11211| | 2014-5-17 22:27 | 只看该作者
在设计初期,就应该将生产和测试都考虑进去,否则你的设计很完美,但是生产不出来或者不能协调好下面的流程,那将是一个悲剧,当然,苹果公司例外。

使用特权

评论回复
15
lussby|  楼主 | 2014-5-18 14:07 | 只看该作者
Electronicapple 发表于 2014-5-17 13:41
可以用CPLD做处理,边沿触发。

谢谢你的回答,不过我对CPLD一无所知。这个方法目前应该超出我的能力范围了。见笑了。

使用特权

评论回复
16
lussby|  楼主 | 2014-5-18 14:10 | 只看该作者
zyj9490 发表于 2014-5-17 11:51
应是如你分析这样,处理时间太长,已发生了多次中断了,才反应过来,可以用放慢PWM波的变化速率,看看能准确, ...

恩,我再试着把输入的PWM周期调大一些看看。

使用特权

评论回复
17
lussby|  楼主 | 2014-5-18 14:14 | 只看该作者
zyj9490 发表于 2014-5-17 11:51
应是如你分析这样,处理时间太长,已发生了多次中断了,才反应过来,可以用放慢PWM波的变化速率,看看能准确, ...

另外,我计算PWM的值是放在主函数while(1)里面计算的,计算公式是:PWM = (float)H_TIME/(H_TIME+L_TIME)*256.其中H_TIME是指高电平持续时间,L_TIME是指低电平持续时间。While(1)里面目前只有这个计算,应该反应速度会比中断快的。所以不存在这里漏掉才对。

使用特权

评论回复
18
lussby|  楼主 | 2014-5-18 14:32 | 只看该作者
shalixi 发表于 2014-5-17 14:05
用中断,而且中断处理时间要小于最小中断间隔,就是PWM的最小的高或低的电平宽度。 ...

恩,谢谢回答,我刚才用示波器测了一下,PWM的周期是800us。感觉这个周期不放快。

使用特权

评论回复
19
zyj9490| | 2014-5-18 15:38 | 只看该作者
lussby 发表于 2014-5-18 14:14
另外,我计算PWM的值是放在主函数while(1)里面计算的,计算公式是WM = (float)H_TIME/(H_TIME+L_TIM ...

加上中断时间呢,算浮点很费时间的.PWM的波多长周期啊

使用特权

评论回复
20
zyj9490| | 2014-5-18 15:45 | 只看该作者
lussby 发表于 2014-5-18 14:32
恩,谢谢回答,我刚才用示波器测了一下,PWM的周期是800us。感觉这个周期不放快。 ...

主循环一次要多少时间啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

144

帖子

1

粉丝