打印

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

[复制链接]
楼主: lussby
手机看帖
扫描二维码
随时随地手机跟帖
21
lussby|  楼主 | 2014-5-18 16:19 | 只看该作者 回帖奖励 |倒序浏览
zyj9490 发表于 2014-5-18 15:45
主循环一次要多少时间啊?

这个还真不知道哦,除了中断就是在主循环里运行了,主循环目前由于是测试,只有计数PWM值的函数。

使用特权

评论回复
22
lussby|  楼主 | 2014-5-18 16:21 | 只看该作者
zyj9490 发表于 2014-5-18 15:38
加上中断时间呢,算浮点很费时间的.PWM的波多长周期啊

恩。不知道是不是计算的原因费时的原因,不过我要得到PWM值,应该一定要用占空比时间去除周期才能得到。我现在用示波器,目前给的测试PWM信号周期是800us。

使用特权

评论回复
23
jrcsh| | 2014-5-18 17:41 | 只看该作者
zyj9490 发表于 2014-5-17 13:22
如果中断周期小于函数处理的时间,用更好的中断触发捕捉机制也没用.如果处理函数的时间小于PWM的载波时间 ...

你怎么知道~~~~  楼主的中断周期小于函数的处理时间??

还函数的处理时间小于PWM 的截波周期,  这PWM是要上 MHz的周期么?

使用特权

评论回复
24
zyj9490| | 2014-5-18 17:56 | 只看该作者
jrcsh 发表于 2014-5-18 17:41
你怎么知道~~~~  楼主的中断周期小于函数的处理时间??

还函数的处理时间小于PWM 的截波周期,  这PWM是 ...

还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.

使用特权

评论回复
25
zyj9490| | 2014-5-18 17:56 | 只看该作者
jrcsh 发表于 2014-5-18 17:41
你怎么知道~~~~  楼主的中断周期小于函数的处理时间??

还函数的处理时间小于PWM 的截波周期,  这PWM是 ...

还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.

使用特权

评论回复
26
zyj9490| | 2014-5-18 17:59 | 只看该作者
lussby 发表于 2014-5-18 16:19
这个还真不知道哦,除了中断就是在主循环里运行了,主循环目前由于是测试,只有计数PWM值的函数。 ...

用一个端口来反转输出,用示波器来看.

使用特权

评论回复
27
jrcsh| | 2014-5-18 17:59 | 只看该作者
zyj9490 发表于 2014-5-18 17:56
还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.

还上 Mhz PWM   楼主自己都写出来了 800uS

使用特权

评论回复
28
zyj9490| | 2014-5-18 18:01 | 只看该作者
jrcsh 发表于 2014-5-18 17:59
还上 Mhz PWM   楼主自己都写出来了 800uS

这是M级频率吗?是K级频率吧,看清楚的,单位微秒.不是纳秒.

使用特权

评论回复
29
zyj9490| | 2014-5-18 18:04 | 只看该作者
lussby 发表于 2014-5-18 16:21
恩。不知道是不是计算的原因费时的原因,不过我要得到PWM值,应该一定要用占空比时间去除周期才能得到。 ...

从测得的时间看,PWM不算快,还是在代码优化下,尽量不要用浮点.

使用特权

评论回复
30
kunchong1991| | 2014-5-18 19:25 | 只看该作者
看了大家的讨论,挺有帮助

使用特权

评论回复
31
jrcsh| | 2014-5-18 23:35 | 只看该作者
zyj9490 发表于 2014-5-18 18:01
这是M级频率吗?是K级频率吧,看清楚的,单位微秒.不是纳秒.

你现在知道,楼主用的是 K级的PWM 了 !!!!  

zyj9490 发表于 2014-5-17 13:22
如果中断周期小于函数处理的时间,用更好的中断触发捕捉机制也没用.如果处理函数的时间小于PWM的载波时间 ...

使用特权

评论回复
32
lussby|  楼主 | 2014-5-19 09:01 | 只看该作者
zyj9490 发表于 2014-5-18 18:04
从测得的时间看,PWM不算快,还是在代码优化下,尽量不要用浮点.

恩,我现在想得到的是PWM的值,不用浮点型的好像没法得到这个PWM值。我也在考虑是不是这个浮点型计算太花时间的事,不过如果是因为计算时间太长的话,那我如果用外部中断测试高电平和周期后,还是一样要用到这浮点型计算的公式,如果是这个原因,估计我就麻烦了。:(

使用特权

评论回复
33
lussby|  楼主 | 2014-5-19 09:07 | 只看该作者
jrcsh 发表于 2014-5-18 23:35
你现在知道,楼主用的是 K级的PWM 了 !!!!  

zyj9490 发表于 2014-5-17 13:22

恩,你好,我用的不是MHZ的PWM信号。不过用的是KHZ的感觉单片机测起来都有点吃力。。是否要用到更高速度一点的单片机呢?现在我在想会不会是我PWM捕捉的初始化那里周期设置得有问题,因为第一次使用新唐M051系列单片机,对这款单片机设置不熟悉,我是用官网的例程修改了一下,怀疑是不是设置的采样周期太慢了,还是这款单片机本身就采样速度达不到我这里的要求。希望你能给我指点迷津,给点意见。这时我的程序 PWM捕捉.rar (2.7 MB)

在此先谢谢了

使用特权

评论回复
34
lussby|  楼主 | 2014-5-19 09:08 | 只看该作者
kunchong1991 发表于 2014-5-18 19:25
看了大家的讨论,挺有帮助

恩恩,是的。二姨家高手如云,在此真的深受教益。:):)

使用特权

评论回复
35
grasswolfs| | 2014-5-19 09:14 | 只看该作者
lussby 发表于 2014-5-19 09:01
恩,我现在想得到的是PWM的值,不用浮点型的好像没法得到这个PWM值。我也在考虑是不是这个浮点型计算太花 ...

改进算法,把浮点乘除改成数据移位,可以减少非常多的时间~不妨试试

使用特权

评论回复
36
lussby|  楼主 | 2014-5-19 10:25 | 只看该作者
grasswolfs 发表于 2014-5-19 09:14
改进算法,把浮点乘除改成数据移位,可以减少非常多的时间~不妨试试

恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢谢指点。

使用特权

评论回复
37
grasswolfs| | 2014-5-19 12:03 | 只看该作者
lussby 发表于 2014-5-19 10:25
恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢 ...

最笨的办法,查表法或者case语句,判断H_TIME+L_TIME为一个最近的2的n次方,然后256本身就是左移,2的n次方是右移,应该可以的,case语句比浮点运算快多了,无非是自己写程序麻烦一些

使用特权

评论回复
38
grasswolfs| | 2014-5-19 12:07 | 只看该作者
lussby 发表于 2014-5-19 10:25
恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢 ...

这个类似的浮点运算改用移位的方法之前我记得21ic上有个帖子是说如何成为优秀的软件工程师的一个帖子,ppt里面讲的很清楚,但是可惜我找不到了

使用特权

评论回复
39
grasswolfs| | 2014-5-19 12:11 | 只看该作者
lussby 发表于 2014-5-19 10:25
恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢 ...

精度要求越高,程序就越复杂,随便找个一个供参考http://59.64.80.152/vod/65653/content/002006001/default.htm

使用特权

评论回复
40
zyj9490| | 2014-5-19 12:52 | 只看该作者
lussby 发表于 2014-5-19 09:07
恩,你好,我用的不是MHZ的PWM信号。不过用的是KHZ的感觉单片机测起来都有点吃力。。是否要用到更高速度 ...

按道理M051有能力捉到K级的方法,再细看下官方库的代码,目前的采样速率是由PWM的边沿决定的,还是优化下代码上下功夫,暂时不要想换MCU。

使用特权

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

本版积分规则