OpenEdv-开源电子网

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

关于影响NRF的数据传输速率的香瓜因素的探索问题

[复制链接]

16

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2019-7-9
在线时间
52 小时
发表于 2019-8-9 11:16:17 | 显示全部楼层 |阅读模式
5金钱
关于NRF的速度的问题。一块板子上生成可调占空比的PWM波,再用AD模块读出数据,传送到另一块板子上,在其他地方不改变,而只改变PWM的频率,比如我将80khz该改成了90khz,这时接收板在串口调试助手上看,明显接收的速度变慢了,为什么我改PWM的频率会影响到NRF的传输速率呢?

Talk is cheap, show me the code.
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-8-9 11:20:29 | 显示全部楼层
你是用NRF传你读到的AD数据?那你改变数据产出的速度了,数据传输速度不会跟着变吗?代码是你自己写的吗?
回复

使用道具 举报

4

主题

231

帖子

0

精华

高级会员

Rank: 4

积分
755
金钱
755
注册时间
2018-12-7
在线时间
131 小时
发表于 2019-8-9 11:24:54 | 显示全部楼层
一般都是获取数据 写入RF寄存器 然后发送。你数据读取到才能写入 才能发送。或许是数据读取太慢。
回复

使用道具 举报

16

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2019-7-9
在线时间
52 小时
 楼主| 发表于 2019-8-9 11:25:47 | 显示全部楼层
15937417823 发表于 2019-8-9 11:20
你是用NRF传你读到的AD数据?那你改变数据产出的速度了,数据传输速度不会跟着变吗?代码是你自己写的吗?

是的,就需要的几个模块,然后照着例程改下,再凑到一起的。为什么改变了我的数据产出速度?我在主程序中,每次直接AD读取数据不就好了吗,和PWM的频率有什么关系呢?
Talk is cheap, show me the code.
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-8-9 11:28:56 | 显示全部楼层
那你就要搞清楚你的PWM是用来做什么的。
回复

使用道具 举报

16

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2019-7-9
在线时间
52 小时
 楼主| 发表于 2019-8-9 11:38:17 | 显示全部楼层
15937417823 发表于 2019-8-9 11:28
那你就要搞清楚你的PWM是用来做什么的。

PWM通过调节占空比来改变电压值的呀。那我的AD读取功能,还需要等PWM稳定之类的才可以读取吗?AD不是有自己的时钟来判断采样时间的吗,采样时间到了,直接转换不就行了吗,还是没怎么搞清楚和PWM频率之间的关系。
Talk is cheap, show me the code.
回复

使用道具 举报

16

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2019-7-9
在线时间
52 小时
 楼主| 发表于 2019-8-9 11:40:26 | 显示全部楼层
chenchen1 发表于 2019-8-9 11:24
一般都是获取数据 写入RF寄存器 然后发送。你数据读取到才能写入 才能发送。或许是数据读取太慢。

会是哪些因素影响到我的读取速率呢,我现在在40+V的电压下,80khz的PWM的串口(接收端)读取速度就很慢,改成90khz就挺正常的了,还有把电压降到30V,速度也变快了(还是80khz)。
Talk is cheap, show me the code.
回复

使用道具 举报

8

主题

182

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2017-3-8
在线时间
114 小时
发表于 2019-8-9 11:41:32 | 显示全部楼层
你看一下你那个timer除了生成PWM还有什么其他在里面
回复

使用道具 举报

16

主题

61

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2019-7-9
在线时间
52 小时
 楼主| 发表于 2019-8-9 11:43:47 | 显示全部楼层
15937417823 发表于 2019-8-9 11:41
你看一下你那个timer除了生成PWM还有什么其他在里面

没有了,只是生成了一个互补的PWM波。
void TIM1_PWM_Init(u16 arr,u16 psc,u16 crr)
{  
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        TIM_BDTRInitTypeDef TIM_BDTRInitStruct;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//

       
        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         80K
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
       
       
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
        TIM_OCInitStructure.TIM_OutputNState= TIM_OutputNState_Enable;          
        TIM_OCInitStructure.TIM_Pulse =crr; //设置待装入捕获比较寄存器的脉冲值 //初始占空比为1/10
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
       
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
       
        TIM_ARRPreloadConfig(TIM1, ENABLE); //使能TIMx在ARR上的预装载寄存器
       
       
  TIM_CtrlPWMOutputs(TIM1,ENABLE);        //MOE 主输出使能       

        TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //CH1预装载使能         
       
       
        TIM_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Enable;
        TIM_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Enable;
        TIM_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_1;
        //输出比较信号死区时间配置,具体如何设置可参考 BDTR:UTG[7:0]的描述
        //这里配置的死区时间为152ns
        TIM_BDTRInitStruct.TIM_DeadTime = 11;
        TIM_BDTRInitStruct.TIM_Break = TIM_Break_Enable;
        //当BKIN引脚检测到高电平的时候,输出比较信号被禁止,就好像刹车一样
        TIM_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
        TIM_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
       
        TIM_BDTRConfig(TIM1, &TIM_BDTRInitStruct);
       
        TIM_Cmd(TIM1, ENABLE);  //使能TIM1
       
        TIM_CtrlPWMOutputs(TIM1, ENABLE);//主输出使能,当时用的是通用定时器的时候,这句不需要
   
}
Talk is cheap, show me the code.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-5 12:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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