OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
12
返回列表 发新帖
楼主: PearlH

使用Toggle移相,怎么改变占空比

[复制链接]

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-16 19:59:30 | 显示全部楼层
本帖最后由 edmund1234 于 2018-9-16 20:04 编辑
PearlH 发表于 2018-9-16 19:44
有两个问题请教一下大神。
1.buffer数组通过两个标志位控制传入的是前一半还是后一半占空比,我们之前程 ...

DMA是循环模式, 所以没办法定义buffer的前半段是前还是后, 如果说以t=0为参考点, 那前半段是前
假定的buffer是   u16 buffer[12]

        if (DMA1->ISR & DMA_ISR_HTIF2){
                //进入此处表示DMA已经把buffer[0..5]转送到TIM, 正在转送buffer[6..11]
                //所以可以更新buffer[0..5]
                DMA1->IFCR &= DMA_IFCR_CHTIF2;                // 清零DMA_HTIF2
               
                buffer[2]=mbRatio++;   // 更新你要的占空比
                buffer[5]=mbRatio++;        // 更新你要的占空比        
        }
        if (DMA1->ISR & DMA_ISR_TCIF2){
                //进入此处表示DMA已经把buffer[6..11]转送到TIM, 正在转送buffer[0..5]
                //所以可以更新buffer[6..11]
                DMA1->IFCR &= DMA_IFCR_CTCIF2;
               
                buffer[8]=mbRatio++;
                buffer[11]=mbRatio++;               
        }
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-6
在线时间
22 小时
 楼主| 发表于 2018-9-16 21:28:26 | 显示全部楼层
edmund1234 发表于 2018-9-16 19:59
DMA是循环模式, 所以没办法定义buffer的前半段是前还是后, 如果说以t=0为参考点, 那前半段是前
假定的 ...

大神,我想写的是buffer[4];
Ch1_buf[0] = (u16)(0.1 * 0x1000)-1;//更改移相角度 0.25*360
        Ch3_buf[0] = (u16)(0.1 * 0x1000)-1;//更改移相角度 0.75*360
                               
                                if(DMA1->ISR & DMA_ISR_HTIF2)//buffer[0,1]转送到TIM
                                {
                                        DMA1->IFCR &= DMA_IFCR_CHTIF2;//清零DMA_HTIF2
                                        Ch1_buf[1]=200;//更新你要的占空比
                                       
                                }
                               
                                if(DMA1->ISR &= DMA_ISR_TCIF2)//更新buffer[2,3]
                                {
                                        Ch1_buf[3]=500;//更新你要的占空比
                                }
        setMBRatio(60, 20);//更改占空比
占空比还是没有改变,是应该写在哪个中断里面?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-16 21:48:32 | 显示全部楼层
PearlH 发表于 2018-9-16 21:28
大神,我想写的是buffer[4];
Ch1_buf[0] = (u16)(0.1 * 0x1000)-1;//更改移相角度 0.25*360
        Ch ...

如果你的buffer只是4的话, 没必要用DMA更新, 你直接调用setMBRaion改占空比不就完了么?
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-6
在线时间
22 小时
 楼主| 发表于 2018-9-17 11:46:45 | 显示全部楼层
edmund1234 发表于 2018-9-16 21:48
如果你的buffer只是4的话, 没必要用DMA更新, 你直接调用setMBRaion改占空比不就完了么?

就是一个周期两个脉冲那个图,更新占空比应该在哪里更新呢?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-17 12:09:27 | 显示全部楼层
PearlH 发表于 2018-9-17 11:46
就是一个周期两个脉冲那个图,更新占空比应该在哪里更新呢?

那张图只不过多了两个互补的输出, 跟之前的没分别, 一样的是调用setMBRatio设占空比
回复

使用道具 举报

3

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2018-7-6
在线时间
22 小时
 楼主| 发表于 2018-9-17 19:54:44 | 显示全部楼层
本帖最后由 PearlH 于 2018-9-17 21:20 编辑
edmund1234 发表于 2018-9-17 12:09
那张图只不过多了两个互补的输出, 跟之前的没分别, 一样的是调用setMBRatio设占空比

在哪里改变占空比可以让一个周期有两个脉冲呀?我改变占空比的位置可能不对,就所有的波都变成我后设置的那个占空比了Ch1_buf[0] = (u16)(0.1 * 0x1000)-1;为什么移相角度要这样算呢?
回复

使用道具 举报

3

主题

1907

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4106
金钱
4106
注册时间
2018-8-14
在线时间
696 小时
发表于 2018-9-18 15:52:40 | 显示全部楼层
PearlH 发表于 2018-9-17 19:54
在哪里改变占空比可以让一个周期有两个脉冲呀?我改变占空比的位置可能不对,就所有的波都变成我后设置的 ...

我不明白, 都帮你做到这一步了, 这问题你还需要再问

我本来建议你是把buffer的长度定在4, 因这样更新时就只用更新占空比, buffer[0/2]是固定不用更新的, 你坚持用2, 用2也可以
周期是T, 你要在要把一个周期变为2个周期所以t=T/2
有了这个t加上你想要的相移, 就计算出buffer[0]的值, 占空比的值你也有了
每次更新是把 buffer[0]=(buffer[0]+t)%T; 占空用setMBRatio(根据buffer[0]的值)的计算方法。

你的作业差不多可以说是我帮你做的, 而你没在这里学到什么
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 02:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表