OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8018|回复: 35

各位大佬,我用单片机发了两路方波,让他们有相同的相位差,但是在输出的时候,每隔一分钟都会有一个抖动产生,这是为什么?

[复制链接]

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
发表于 2022-4-13 21:49:28 | 显示全部楼层 |阅读模式
1金钱

`P1F8EI[D3FCG}X)5WFIW09.png

最佳答案

查看完整内容[请看2#楼]

大致看了下,没看出问题。要不再检查下供电吧,或者检查板子上是否有其它设备影响了单片机。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-13 21:49:29 | 显示全部楼层
jinghua 发表于 2022-4-22 14:36
好了  大佬  帮忙看看

大致看了下,没看出问题。要不再检查下供电吧,或者检查板子上是否有其它设备影响了单片机。
专治疑难杂症
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-14 23:41:34 | 显示全部楼层
帮顶
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-15 09:16:59 | 显示全部楼层
用示波器看,打开“波形保持”功能,看两路信号是否有变化,若确实有变化,那就说明产生方波的程序或电路有问题。
专治疑难杂症
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-15 20:06:16 | 显示全部楼层
LcwSwust 发表于 2022-4-15 09:16
用示波器看,打开“波形保持”功能,看两路信号是否有变化,若确实有变化,那就说明产生方波的程序或电路有 ...

有变化,大佬知道 在哪里出现的问题吗
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-16 10:11:35 | 显示全部楼层
jinghua 发表于 2022-4-15 20:06
有变化,大佬知道 在哪里出现的问题吗

多半是程序有问题
专治疑难杂症
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-16 15:59:29 | 显示全部楼层
LcwSwust 发表于 2022-4-16 10:11
多半是程序有问题

[img][/img]
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-16 16:01:20 | 显示全部楼层
LcwSwust 发表于 2022-4-16 10:11
多半是程序有问题

void TIM3_Fangbo_Init(u16 arr, u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        TIM_TimeBaseStructure.TIM_Period = arr;
        TIM_TimeBaseStructure.TIM_Prescaler = psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);

        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);

        TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_Cmd(TIM3, ENABLE);
}
大佬们 我就这一点程序  可以帮忙看看嘛
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-16 16:07:58 | 显示全部楼层
jinghua 发表于 2022-4-16 16:01
void TIM3_Fangbo_Init(u16 arr, u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;

没有main?程序没干别的?
建议这样试一下:不用定时器、PWM,而是在main主循环中直接对IO口置高置低产生波形。
专治疑难杂症
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-16 16:40:31 | 显示全部楼层
LcwSwust 发表于 2022-4-16 16:07
没有main?程序没干别的?
建议这样试一下:不用定时器、PWM,而是在main主循环中直接对IO口置高置低产生 ...

int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        TIM3_Fangbo_Init(999,71);
        TIM4_CMP_Init(999,71);
        TIM_SetCompare1(TIM3,0);
        TIM_SetCompare2(TIM3,500);
        TIM_SetCompare1(TIM4,750);
}

有主程序   我去看看
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-16 16:45:09 | 显示全部楼层
LcwSwust 发表于 2022-4-16 16:07
没有main?程序没干别的?
建议这样试一下:不用定时器、PWM,而是在main主循环中直接对IO口置高置低产生 ...

如果不用定时器的话,输出波形的频率很难保证
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-16 17:04:32 | 显示全部楼层
jinghua 发表于 2022-4-16 16:40
int main(void)
{
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

你这主程序不对啊,最后应当有个while(1);千万别忘了.
int main(void)
{
......
while(1);//死在这
}
专治疑难杂症
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-16 17:06:57 | 显示全部楼层
看来不加while(1)是新人常犯的错误:
http://www.openedv.com/forum.php?mod=viewthread&tid=335087
专治疑难杂症
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-16 17:56:09 | 显示全部楼层
LcwSwust 发表于 2022-4-16 17:06
看来不加while(1)是新人常犯的错误:
http://www.openedv.com/forum.php?mod=viewthread&tid=335087

我加了while(1)循环也还是 会出现尖峰
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-17 23:18:35 | 显示全部楼层
jinghua 发表于 2022-4-16 17:56
我加了while(1)循环也还是 会出现尖峰

一样的波形?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-18 13:21:51 | 显示全部楼层

对 一样有尖峰
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-18 13:24:33 | 显示全部楼层

一样有这种尖峰
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-18 13:25:48 | 显示全部楼层
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-18 19:04:30 | 显示全部楼层
我又用  一个 方波 然后tong过一个三头转接  分出两路方波   发现还是 有尖峰    是不是在程序运行时 输出的方波有断点
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-18 23:57:15 | 显示全部楼层
jinghua 发表于 2022-4-18 19:04
我又用  一个 方波 然后tong过一个三头转接  分出两路方波   发现还是 有尖峰    是不是在程序运行时 输出 ...

你这玩意靠谱不啊,搞个真示波器看看
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-19 16:52:01 | 显示全部楼层
正点原子 发表于 2022-4-18 23:57
你这玩意靠谱不啊,搞个真示波器看看

示波器上看不出来  相差太小了  我这是 锁相放大器上的相位差
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-19 17:18:57 | 显示全部楼层
jinghua 发表于 2022-4-18 19:04
我又用  一个 方波 然后tong过一个三头转接  分出两路方波   发现还是 有尖峰    是不是在程序运行时 输出 ...

也就是说锁相放大器的两路输入并联接到一路信号,得到的相位差存在波动?
那就不是信号源的问题而是锁相放大器的问题了。
要不你再找个信号发生器试一下。
或用NE555产生方波再加RC电路产生移相。
专治疑难杂症
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-19 21:01:13 | 显示全部楼层
LcwSwust 发表于 2022-4-19 17:18
也就是说锁相放大器的两路输入并联接到一路信号,得到的相位差存在波动?
那就不是信号源的问题而是锁相 ...

已经用信号发生器试过了,然后也换过战舰板子试过,结果是信号发生器调好45度相位差,输进锁相放大器中,相位差基本稳定在45度没有尖峰产生
把程序烧进战舰板子   会有尖峰  
排除了 各种  
就是程序问题
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-4-22 09:19:23 | 显示全部楼层
jinghua 发表于 2022-4-19 21:01
已经用信号发生器试过了,然后也换过战舰板子试过,结果是信号发生器调好45度相位差,输进锁相放大器中, ...

把程序的完整工程发来看看
专治疑难杂症
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2022-4-21
在线时间
19 小时
发表于 2022-4-22 10:21:34 来自手机 | 显示全部楼层
楼主大概是想要实现两路有相位差的PWN吧,但你做的是占空比不一样的两路方波 应该要用DAC来实现吧。
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-22 14:31:46 | 显示全部楼层
13760162819 发表于 2022-4-22 10:21
楼主大概是想要实现两路有相位差的PWN吧,但你做的是占空比不一样的两路方波 应该要用DAC来实现吧。

没有 我做的就是 占空比 50%的
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-22 14:34:26 | 显示全部楼层
LcwSwust 发表于 2022-4-22 09:19
把程序的完整工程发来看看

好的 我上传一下
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-22 14:35:53 | 显示全部楼层
相位差可调方波

产生两路相位差可调的方波.rar

4.36 MB, 下载次数: 2

回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-22 14:36:24 | 显示全部楼层
LcwSwust 发表于 2022-4-22 09:19
把程序的完整工程发来看看

好了  大佬  帮忙看看  
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-22 15:59:19 | 显示全部楼层
LcwSwust 发表于 2022-4-22 14:56
大致看了下,没看出问题。要不再检查下供电吧,或者检查板子上是否有其它设备影响了单片机。

嗯嗯   麻烦大佬了
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2022-4-21
在线时间
19 小时
发表于 2022-4-22 20:16:17 | 显示全部楼层
TIM3_Fangbo_Init(999,71);      //这个是指72分频,1000 时钟周期的定时器
        TIM4_CMP_Init(999,71);
        TIM_SetCompare1(TIM3,0);
        TIM_SetCompare2(TIM3,500);  //这里是指时钟计数器到500的时候,比较输出会翻转电平,所以不同的数值会形成不同的占空比。
        TIM_SetCompare1(TIM4,750);

这是不同占空比,

这是不同占空比,

这个才是有相位差

这个才是有相位差
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-23 09:03:53 | 显示全部楼层
13760162819 发表于 2022-4-22 20:16
TIM3_Fangbo_Init(999,71);      //这个是指72分频,1000 时钟周期的定时器
        TIM4_CMP_Init(999,71 ...

大佬  我设置的都是 输出比较模式   只会翻转电平   还会有占空比 改变吗  我不太理解   大佬  可以 详细说说嘛
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2022-4-21
在线时间
19 小时
发表于 2022-4-23 09:55:28 来自手机 | 显示全部楼层
你这大概是设置的1K方波吧,1K的方波周期是1000微秒,在这1000微秒内,如果一开始输出是高电平,那么到了第500微秒的时候,输出就会变成低电平,然后到了第1000微秒的时候又恢复到高电平,如此循环下去。所以你设置500的比较输出就是有500微秒是高电平,500微秒是低电平,如果你设置是750则有750微秒是高电平,250微秒是低电平
回复

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2022-4-21
在线时间
19 小时
发表于 2022-4-23 10:04:36 来自手机 | 显示全部楼层
而相位差则是指高电平的起始位置不同,同样以刚才1K500微秒的方波来说,假设按你的想法是要45度相位差,A方波从0到499微秒是高电平,500到1000微秒的时候是低电平,而相差45度的方波是0到124微秒是低电平,125微秒到749微秒是高电平,750微秒到1000微秒是低电平。
回复

使用道具 举报

4

主题

71

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
443
金钱
443
注册时间
2022-1-6
在线时间
55 小时
 楼主| 发表于 2022-4-23 10:58:27 | 显示全部楼层
13760162819 发表于 2022-4-23 10:04
而相位差则是指高电平的起始位置不同,同样以刚才1K500微秒的方波来说,假设按你的想法是要45度相位差,A方 ...

这个我用示波器测出来两个方波是500HZ频率  
我设置成输出比较模式  他只会在我设置的地方进行  电平翻转  
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8463
金钱
8463
注册时间
2020-5-11
在线时间
3904 小时
发表于 2022-6-17 09:02:19 | 显示全部楼层
解决了?找到原因了?
专治疑难杂症
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 15:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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