OpenEdv-开源电子网

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

STM32 如何实现1HZ频率 1us脉宽 PWM

[复制链接]

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
发表于 2016-7-18 11:54:45 | 显示全部楼层 |阅读模式
1金钱
STM32 如何实现1HZ频率 1us脉宽可调   PWM

最佳答案

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

主从定时器啊 用一个一秒到定时器打开一个1us宽的副定时器
笑哥
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

49

主题

341

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5271
金钱
5271
注册时间
2012-8-25
在线时间
1025 小时
发表于 2016-7-18 11:54:46 | 显示全部楼层
主从定时器啊 用一个一秒到定时器打开一个1us宽的副定时器
回复

使用道具 举报

13

主题

448

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1755
金钱
1755
注册时间
2015-2-7
在线时间
369 小时
发表于 2016-7-18 12:26:17 | 显示全部楼层
1us脉宽?还是1us单位的脉宽?1us的脉宽也太小了把
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 13:13:57 | 显示全部楼层
电子之旅 发表于 2016-7-18 12:26
1us脉宽?还是1us单位的脉宽?1us的脉宽也太小了把

说方法
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 13:24:24 | 显示全部楼层

说点正经的,说说如何能实现,好不。
笑哥
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2016-7-18 13:56:56 | 显示全部楼层
Y-Hanxiao 发表于 2016-7-18 13:24
说点正经的,说说如何能实现,好不。

PWM教程里就可以了。改下参数就好。软硬件又不是做不到。
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 14:30:55 | 显示全部楼层
mack13013 发表于 2016-7-18 13:56
PWM教程里就可以了。改下参数就好。软硬件又不是做不到。

可以吗?16位定时器,按1US精度,也就能产生65536us=65ms周期的PWM。如何产生1s的周期?
笑哥
回复

使用道具 举报

58

主题

6296

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11601
金钱
11601
注册时间
2014-4-1
在线时间
1326 小时
发表于 2016-7-18 15:17:51 | 显示全部楼层

16位定时器比较麻烦。
话说有几个32位定时器。


回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 15:30:39 | 显示全部楼层
xuande 发表于 2016-7-18 15:17
16位定时器比较麻烦。
话说有几个32位定时器。

硬件已经定型了,改不了 了
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 15:36:08 | 显示全部楼层
gotofly21 发表于 2016-7-18 15:07
主从定时器啊 用一个一秒到定时器打开一个1us宽的副定时器

貌似可行,能说的具体点吗?咋么控制PWM脉宽?不用比较器了?或者给个相关的文档,连接,程序,或者告诉咋么查相关知识 感谢
笑哥
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2016-7-18 17:08:13 | 显示全部楼层
Y-Hanxiao 发表于 2016-7-18 14:30
可以吗?16位定时器,按1US精度,也就能产生65536us=65ms周期的PWM。如何产生1s的周期?

可以定时器级联。也可以用F4,F4跟F1管脚兼容,有32位定时器。。。

我以为LZ用的F4
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 17:27:49 | 显示全部楼层
mack13013 发表于 2016-7-18 17:08
可以定时器级联。也可以用F4,F4跟F1管脚兼容,有32位定时器。。。

我以为LZ用的F4

我用的F1。。。定时器级联,我看了看,感觉一般定时还行,PWM咋么操作啊?求教
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 17:29:19 | 显示全部楼层
mack13013 发表于 2016-7-18 17:08
可以定时器级联。也可以用F4,F4跟F1管脚兼容,有32位定时器。。。

我以为LZ用的F4

能不换芯片的前提的话,不换。。F2,F3,F4我看了看  都有32位的,哎,做之前没想周全。。。。
笑哥
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-18 17:40:23 | 显示全部楼层
我想说的是 这个功能用8个脚的51单片机 STC15F104也能实现……   
回复

使用道具 举报

10

主题

254

帖子

0

精华

高级会员

Rank: 4

积分
594
金钱
594
注册时间
2015-10-17
在线时间
145 小时
发表于 2016-7-18 19:03:10 | 显示全部楼层
建议使用脉冲输出模式,这个用32位定时器,也能做,但是1us的脉冲在1HZ的PWM波里误差可能会很大。
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 19:55:58 | 显示全部楼层
HER107 发表于 2016-7-18 17:40
我想说的是 这个功能用8个脚的51单片机 STC15F104也能实现……

说说 具体的啊
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-18 19:56:54 | 显示全部楼层
原_子_哥门徒 发表于 2016-7-18 19:03
建议使用脉冲输出模式,这个用32位定时器,也能做,但是1us的脉冲在1HZ的PWM波里误差可能会很大。

就感觉PWM 模式  可能精度还高点   还有 硬件 就是F103  16定时器。。。
笑哥
回复

使用道具 举报

36

主题

249

帖子

0

精华

高级会员

Rank: 4

积分
680
金钱
680
注册时间
2015-12-13
在线时间
243 小时
发表于 2016-7-18 20:46:39 | 显示全部楼层

用定时器 定时一秒中断一次,然后在中断内控制IO口输出脉冲!!!不就是一秒一个脉冲咯?也就是1HZ…… 至于脉宽,软件精确延时1US不是什么难题。。调节的话更改延时时间就可以了!
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2016-7-19 14:49:48 | 显示全部楼层
Y-Hanxiao 发表于 2016-7-18 17:27
我用的F1。。。定时器级联,我看了看,感觉一般定时还行,PWM咋么操作啊?求教

干脆你就设置一个1us的PWM输出给一个输入捕获,捕获里面计数,根据计数反转某个引脚就可以了。
硬件上仅仅只需要连接单片机的两个引脚,不需要怎么改动。

定时器级联的话,原子的例程好像没讲这个例子,设置方法的话,中文参考手册定时器一章的定时器同步一节应该有资料。
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2016-7-19 14:56:56 | 显示全部楼层
本帖最后由 mack13013 于 2016-7-19 15:00 编辑
mack13013 发表于 2016-7-19 14:49
干脆你就设置一个1us的PWM输出给一个输入捕获,捕获里面计数,根据计数反转某个引脚就可以了。
硬件上仅 ...

我擦,没考虑清楚。

没法用1us进行输入捕获,因为进入中断的速度太频繁了。

那可以看看定时器的单脉冲输出模式输出一个1us,软件定时1s,
或者用一个定时器输出比如50ms,然后输入捕获计数,计数到1s之后启动另一个定时器进行单脉冲模式输出1us,估计这样精度会高一些,进入中断也不至于太频繁。就是外设用的太多了。

定时器同步一节了还有一个定时器用作另一个定时器的预分频什么的,但是这样做得在外部添加逻辑芯片进行与或非什么的组合,还不如F1换F4。
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-19 16:50:09 | 显示全部楼层
[mw_shl_code=c,true]void TIM1_Init(uint16_t period, uint16_t prescaler)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //ê±Öóê1Äü
        //¶¨ê±Æ÷TIM43õê¼»ˉ
        TIM_TimeBaseStructure.TIM_Period = period; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ       
        TIM_TimeBaseStructure.TIM_Prescaler = prescaler; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòéϼÆêyÄ£ê½
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
        TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //ê1ÄüÖ¸¶¨μÄTIM4ÖD¶Ï,ÔêDí¸üDÂÖD¶Ï
        //ÖD¶ÏóÅÏè¼¶NVICéèÖÃ
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1ÖD¶Ï
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;  //ÏèÕ¼óÅÏè¼¶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //′óóÅÏè¼¶3¼¶
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQí¨μà±»ê1Äü
        NVIC_Init(&NVIC_InitStructure);  //3õê¼»ˉNVIC¼Ä′æÆ÷
        TIM_Cmd(TIM1, ENABLE);  //ê1ÄüTIMx                       
}

void TIM1_UP_IRQHandler(void)
{
    static long a;
        if(TIM_GetITStatus(TIM1, TIM_IT_Update))
        {
        a++;
        if(a == 1000000)
            a=0;
        if(a<b)
            led=1;
        else
            led=0;
                TIM_ClearITPendingBit(TIM1, TIM_IT_Update);  //&#199;&#229;3yTIMx&#184;üD&#194;&#214;D&#182;&#207;±ê&#214;&#190;
        }
}

void main(void)
{
    TIM1_Init(49999,1439);
    led_init();
    while(1);
}[/mw_shl_code]
用定时器模拟PWM,1us中断一次;改b值就可以控制占空比。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-20 12:57:29 | 显示全部楼层
wszdxmh 发表于 2016-7-19 16:50
[mw_shl_code=c,true]void TIM1_Init(uint16_t period, uint16_t prescaler)
{
  TIM_TimeBaseInitTypeDe ...

你试过吗?速度达不到,我测试这样置0置1  最快就能到2us,到不了1us。
笑哥
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-20 14:22:42 | 显示全部楼层
Y-Hanxiao 发表于 2016-7-20 12:57
你试过吗?速度达不到,我测试这样置0置1  最快就能到2us,到不了1us。

我都是用硬件PWM做的,但是你这个用硬件PWM做不了,所以就写一软件模拟。引脚最高响应频率是50MHz,所以是达不到1us这么高的。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2016-7-20 14:29:32 | 显示全部楼层
wszdxmh 发表于 2016-7-20 14:22
我都是用硬件PWM做的,但是你这个用硬件PWM做不了,所以就写一软件模拟。引脚最高响应频率是50MHz,所以 ...

达不到要求 还写。。。
笑哥
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-20 14:57:16 | 显示全部楼层
Y-Hanxiao 发表于 2016-7-20 14:29
达不到要求 还写。。。

写的时候没想到这个问题。你后面问了我才想起来。你想用STM32实现基本上是没戏了。用其他芯片吧。GPIO外设都是挂APB这个低时钟系统总线上的。
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-7-20 15:42:49 来自手机 | 显示全部楼层
wszdxmh 发表于 2016-7-20 14:57
写的时候没想到这个问题。你后面问了我才想起来。你想用STM32实现基本上是没戏了。用其他芯片吧。GPIO外 ...

8楼说的定时器级联可以做的啊
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-20 20:13:27 | 显示全部楼层
K.O.Carnivist 发表于 2016-7-20 15:42
8楼说的定时器级联可以做的啊

IO口最快频率50MHz,也就是翻转电平最快要2us。你级联定时器还能把GPIO的响应速度提高?求教
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-7-21 05:34:02 来自手机 | 显示全部楼层
wszdxmh 发表于 2016-7-20 20:13
IO口最快频率50MHz,也就是翻转电平最快要2us。你级联定时器还能把GPIO的响应速度提高?求教

50MHz是20ns……

关于定时器中断里翻IO,我倒是觉得既然楼主的协议需要1us的宽度,有理由认为周期抖动应该控制在0.Xus以内吧,这用中断的话进入中断的时间不确定性就显得太大了。
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-21 09:14:34 | 显示全部楼层
K.O.Carnivist 发表于 2016-7-21 05:34
50MHz是20ns……

关于定时器中断里翻IO,我倒是觉得既然楼主的协议需要1us的宽度,有理由认为周期抖动 ...

算少一个0 .......
1us一个中断为什么不行?他也是用了一个1us的,计数到1s不行?为什么还要用一个1s的?
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2016-7-21 10:50:55 | 显示全部楼层
wszdxmh 发表于 2016-7-21 09:14
算少一个0 .......
1us一个中断为什么不行?他也是用了一个1us的,计数到1s不行?为什么还要用一个1s的 ...

F1单片机1us只有几十个系统周期,进出一次中断什么都不干就耗掉二十几个周期,代价太大了。

实际上可以设置定时器步长1us,周期1000us进一次中断,然后按您上面的写法每1000次中断开启一次PWM输出(脉宽1us),下一次进中断再关闭PWM输出,这样一个定时器就够了。
缺点是进中断还是挺频繁的、不能出现被其他中断卡住进不去的情况。
淘汰人的从来是工具而不是年龄
嵌入式的冷知识屋 blog.csdn.net/k_o_carnivist
回复

使用道具 举报

25

主题

281

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2504
金钱
2504
注册时间
2015-8-17
在线时间
383 小时
发表于 2016-7-21 11:43:34 | 显示全部楼层
K.O.Carnivist 发表于 2016-7-21 10:50
F1单片机1us只有几十个系统周期,进出一次中断什么都不干就耗掉二十几个周期,代价太大了。

实际上可 ...

还是没理解,要达到要求1us可调,怎么样也要有一个定时器能1us进一次中断吧,那干嘛还要多开一个定时器?
做事的原则:
1.每个问题重复三遍、研究三遍后再提问,直接得到答案的人什么都没学会。
2.做事要有始有终,感谢那些帮助自己解决问题的人,把解决的方法总结起来。
回复

使用道具 举报

15

主题

74

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
414
金钱
414
注册时间
2016-2-24
在线时间
155 小时
发表于 2017-5-28 22:45:51 | 显示全部楼层
遇到了和楼主一样的问题,不知道楼主是怎么解决的!求教!!
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-5-29 02:10:38 | 显示全部楼层
本帖最后由 mack13013 于 2017-5-29 02:19 编辑

建议LZ选用带32位定时器的MCU来做。至于说硬件无法改变了,其实F4和F1很多都是管脚兼容的,直接换就可以了。

LZ要做的东西,我们的设备刚好也在用,完全可以做到1s周期下占空从1us到1s可调。

其实这个东西用CPLD或者FPGA做最方便了。



呃,没注意到以前回复过,而且不要用stm32。

说下我们的设备吧,频率从小于1Hz到最高14MHz可调,占空比的话,能保证最小高电平周期约150ns。
LZ的要求是完全满足了的。至于LZ说要换其他硬件方案,但是不使用STM32的话,CPLD或者FPGA就可以了,对于CPLD或者FPGA来说,完全就是小儿科。
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2017-5-31 11:32:18 | 显示全部楼层
mack13013 发表于 2017-5-29 02:10
建议LZ选用带32位定时器的MCU来做。至于说硬件无法改变了,其实F4和F1很多都是管脚兼容的,直接换就可以了 ...

恩恩  准备换F4了      如果用CPLD或者FPGA 给个推荐的芯片吧    对这个 不了解。
笑哥
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-5-31 16:15:22 | 显示全部楼层
Y-Hanxiao 发表于 2017-5-31 11:32
恩恩  准备换F4了      如果用CPLD或者FPGA 给个推荐的芯片吧    对这个 不了解。

CPLD或者FPGA的话,如果仅仅是产生这样一个信号,而不有其他要求,那选型也非常简单:选最便宜的。
回复

使用道具 举报

3

主题

238

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1366
金钱
1366
注册时间
2016-5-26
在线时间
1698 小时
发表于 2017-5-31 22:47:55 来自手机 | 显示全部楼层
Y-Hanxiao 发表于 2017-5-31 11:32
恩恩  准备换F4了      如果用CPLD或者FPGA 给个推荐的芯片吧    对这个 不了解。

如果只是楼主位的需求还不想用定时器级联的话,
换F4或CPLD我觉得不如外挂一片F031、042什么的,加上原来的F1估计还更便宜,
而且以前的程序和开发工具都不用换……
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2017-6-1 14:22:34 | 显示全部楼层
mack13013 发表于 2017-5-31 16:15
CPLD或者FPGA的话,如果仅仅是产生这样一个信号,而不有其他要求,那选型也非常简单:选最便宜的。

不止一路,又要同步,又要延时,而且这些参数大部分都是需要可设置的。
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2017-6-1 14:30:42 | 显示全部楼层
全然向你 发表于 2017-5-28 22:45
遇到了和楼主一样的问题,不知道楼主是怎么解决的!求教!!

当时订单急,先应付了,没解决,先准备换F4,可F4的32位定时器还不是高级定时器,我这要求挺多的。之前想过用定时器级连,没调试成功。现在还在想咋么做。
笑哥
回复

使用道具 举报

28

主题

91

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
268
金钱
268
注册时间
2015-11-28
在线时间
52 小时
 楼主| 发表于 2017-6-1 14:31:45 | 显示全部楼层
K.O.Carnivist 发表于 2017-5-31 22:47
如果只是楼主位的需求还不想用定时器级联的话,
换F4或CPLD我觉得不如外挂一片F031、042什么的,加上原 ...

F031是啥
笑哥
回复

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8062
金钱
8062
注册时间
2014-8-13
在线时间
1597 小时
发表于 2017-6-2 04:39:50 | 显示全部楼层
本帖最后由 mack13013 于 2017-6-2 04:45 编辑
Y-Hanxiao 发表于 2017-6-1 14:22
不止一路,又要同步,又要延时,而且这些参数大部分都是需要可设置的。

几十路应该都不成问题,实在不行,档次稍微提升一下,比如Cyclone IV, QFP封装的EP4CE6E22C8N,这个可能能提供上百路信号吧(估计就是受限于IO数量了,内部资源是够用了,最后还是要看编译结果,最好后仿真看一下),
至于同步以及同步+延时,这个都是没问题的。像是SPI或者IIC或者UART的时序,都是可以用FPGA模仿出来的,玩的就是同步+延时。

他的同步+延时可以是外部触发(比如某个IO),也可以是内部寄存器触发(相当于单片机里某个内存变量变化)。

速度嘛,一般Cyclone IV用的是50MHz晶振,再经过PLL倍频,是可以输出200MHz信号的,这个就看你布线的质量了。(可以配置为LVDS输出,布线要容易一些,输出也稳定)

至于参数设置也没什么问题,串行的SPI,IIC,UART或者直接并行IO,喜欢什么样的通讯都可以实现。只是这个实现比较底层了,要从时序模拟起来,不像单片机,USART直接就是个外设,FPGA里,你要实现这个外设,然后再用它。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-18 16:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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