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

[复制链接]
 楼主| lussby 发表于 2014-5-18 16:19 | 显示全部楼层
zyj9490 发表于 2014-5-18 15:45
主循环一次要多少时间啊?

这个还真不知道哦,除了中断就是在主循环里运行了,主循环目前由于是测试,只有计数PWM值的函数。
 楼主| lussby 发表于 2014-5-18 16:21 | 显示全部楼层
zyj9490 发表于 2014-5-18 15:38
加上中断时间呢,算浮点很费时间的.PWM的波多长周期啊

恩。不知道是不是计算的原因费时的原因,不过我要得到PWM值,应该一定要用占空比时间去除周期才能得到。我现在用示波器,目前给的测试PWM信号周期是800us。
jrcsh 发表于 2014-5-18 17:41 | 显示全部楼层
zyj9490 发表于 2014-5-17 13:22
如果中断周期小于函数处理的时间,用更好的中断触发捕捉机制也没用.如果处理函数的时间小于PWM的载波时间 ...

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

还函数的处理时间小于PWM 的截波周期,  这PWM是要上 MHz的周期么?
zyj9490 发表于 2014-5-18 17:56 | 显示全部楼层
jrcsh 发表于 2014-5-18 17:41
你怎么知道~~~~  楼主的中断周期小于函数的处理时间??

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

还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.
zyj9490 发表于 2014-5-18 17:56 | 显示全部楼层
jrcsh 发表于 2014-5-18 17:41
你怎么知道~~~~  楼主的中断周期小于函数的处理时间??

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

还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.
zyj9490 发表于 2014-5-18 17:59 | 显示全部楼层
lussby 发表于 2014-5-18 16:19
这个还真不知道哦,除了中断就是在主循环里运行了,主循环目前由于是测试,只有计数PWM值的函数。 ...

用一个端口来反转输出,用示波器来看.
jrcsh 发表于 2014-5-18 17:59 | 显示全部楼层
zyj9490 发表于 2014-5-18 17:56
还真有上M的PWM,TI的DSP的PWM模块就是上M.的,来提高PWM的精度.

还上 Mhz PWM   楼主自己都写出来了 800uS
zyj9490 发表于 2014-5-18 18:01 | 显示全部楼层
jrcsh 发表于 2014-5-18 17:59
还上 Mhz PWM   楼主自己都写出来了 800uS

这是M级频率吗?是K级频率吧,看清楚的,单位微秒.不是纳秒.
zyj9490 发表于 2014-5-18 18:04 | 显示全部楼层
lussby 发表于 2014-5-18 16:21
恩。不知道是不是计算的原因费时的原因,不过我要得到PWM值,应该一定要用占空比时间去除周期才能得到。 ...

从测得的时间看,PWM不算快,还是在代码优化下,尽量不要用浮点.
kunchong1991 发表于 2014-5-18 19:25 | 显示全部楼层
看了大家的讨论,挺有帮助
jrcsh 发表于 2014-5-18 23:35 | 显示全部楼层
zyj9490 发表于 2014-5-18 18:01
这是M级频率吗?是K级频率吧,看清楚的,单位微秒.不是纳秒.

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

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

 楼主| lussby 发表于 2014-5-19 09:01 | 显示全部楼层
zyj9490 发表于 2014-5-18 18:04
从测得的时间看,PWM不算快,还是在代码优化下,尽量不要用浮点.

恩,我现在想得到的是PWM的值,不用浮点型的好像没法得到这个PWM值。我也在考虑是不是这个浮点型计算太花时间的事,不过如果是因为计算时间太长的话,那我如果用外部中断测试高电平和周期后,还是一样要用到这浮点型计算的公式,如果是这个原因,估计我就麻烦了。:(
 楼主| 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系列单片机,对这款单片机设置不熟悉,我是用官网的例程修改了一下,怀疑是不是设置的采样周期太慢了,还是这款单片机本身就采样速度达不到我这里的要求。希望你能给我指点迷津,给点意见。这时我的程序

在此先谢谢了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lussby 发表于 2014-5-19 09:08 | 显示全部楼层
kunchong1991 发表于 2014-5-18 19:25
看了大家的讨论,挺有帮助

恩恩,是的。二姨家高手如云,在此真的深受教益。:):)
grasswolfs 发表于 2014-5-19 09:14 | 显示全部楼层
lussby 发表于 2014-5-19 09:01
恩,我现在想得到的是PWM的值,不用浮点型的好像没法得到这个PWM值。我也在考虑是不是这个浮点型计算太花 ...

改进算法,把浮点乘除改成数据移位,可以减少非常多的时间~不妨试试
 楼主| lussby 发表于 2014-5-19 10:25 | 显示全部楼层
grasswolfs 发表于 2014-5-19 09:14
改进算法,把浮点乘除改成数据移位,可以减少非常多的时间~不妨试试

恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢谢指点。
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语句比浮点运算快多了,无非是自己写程序麻烦一些
grasswolfs 发表于 2014-5-19 12:07 | 显示全部楼层
lussby 发表于 2014-5-19 10:25
恩恩,请问这个公式:(float)H_TIME/(H_TIME+L_TIME)*256前面能通过什么移位运算让其不带浮点呢?谢 ...

这个类似的浮点运算改用移位的方法之前我记得21ic上有个帖子是说如何成为优秀的软件工程师的一个帖子,ppt里面讲的很清楚,但是可惜我找不到了
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
zyj9490 发表于 2014-5-19 12:52 | 显示全部楼层
lussby 发表于 2014-5-19 09:07
恩,你好,我用的不是MHZ的PWM信号。不过用的是KHZ的感觉单片机测起来都有点吃力。。是否要用到更高速度 ...

按道理M051有能力捉到K级的方法,再细看下官方库的代码,目前的采样速率是由PWM的边沿决定的,还是优化下代码上下功夫,暂时不要想换MCU。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部