找回密码
 立即注册
查看: 1200|回复: 16

使用Ai8051U实现4路1MHz可控数量脉冲输出,工控领域

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-9-29 21:17:39 | 显示全部楼层 |阅读模式
请注意,本方案目前未经实际验证,待国庆节后验证一下


    之前,使用过 32G12K128 控制过外部的伺服控制器,但总是面临一个问题,脉冲速度慢了影响速度不行,改变伺服控制器端的虚拟齿轮比又会导致精度下降一些。虽然说也能用,但总归不是两全其美的感觉。
    后来,想过使用pwm的重复计数器,但是发现这并不能做到四路输出完全的周期和数量可控。而使用pwm单脉冲模式则是通过频繁进入中断进行重载功能,显然是不大能完成高速可控的脉冲输出。
    而我看论坛上常见的实现方式则是通过直接使用定时器进行输出,但是这样就有点浪费定时器资源的感觉,并且输出端口固定是那几个。
所以我这里给出一种理论上可行的方案:使用串口DMA完成可控脉冲数量输出。
    首先我们需要了解到,高速输出下,发出去的脉冲只需要符合差不多是方波即可,并不需要严格的平均间隔控制,所以呢。我们通过使用串口协议的方式,完成近似的方波输出。
我们来看一帧串口数据包含哪些部分。
Screenshot_2024-09-29-21-19-28-808_mark.via.png

首先是不可控的部分,串口空闲状态为高电平,并且起始位为1位低电平,停止位为1位高电平。可控的部分则是中间的8位数据电平。
这里将起始位和停止位一起计入,数据为0x00时的二进制数据则为
0000000001
那么,如果将这个数据为进行一定的变化,比如下面这个表
串口数据 等效二进制编码 等效脉冲个数
0xff        0111111111         1个脉冲
0xfd       0101111111         2个脉冲
0xf5       0101011111         3个脉冲
0xd5      0101010111         4个脉冲
0x55      1010101010         5个脉冲
    这样,拥有了从1~5的脉冲生成能力,即可通过给xdata区域填入合适的数据,即可实现可控的脉冲数量高速输出。
    并且,高速的脉冲输出并不需要每次输出就变化一次脉冲的周期,而仅仅是需要不算很高速度的变化以完成线性加减速或者s形加减速。所以,我们可以让串口dma填入指定数量的数据,从而完成一批数据的发送。
    那么,这一批脉冲的周期又该如何控制呢?得益于8051u单片机新增的dma_itv寄存器,可以控制dma每次发送或者接受数据的间隔(最大65535个系统时钟),这样以40mhz主频来看,串口开到1mhz到1khz都毫无压力,并且,小于1k的情况,还可以通过拉开dma发送之间的延时,并且发送一个脉冲(0xff),来继续降低速度。
    最重要的是,每个串口的itv寄存器都是独立可调的。这样,所有穿扣扣可以共用一个定时器2,从而完成低占用。并且串口也是可以随便分配的,比如用一个串口,那就三轴高速输出。并且使用高速输出的串口的输入仍然可用。同时,串口可以切换的引脚也很多。
    如果并非同时输出脉冲,可以输出完成一串脉冲后切换引脚进行其他脉冲输出。
    从执行特点来讲就是两个电机被物理互锁了,一个动另一个就不能动了。
这部分想法我会在国庆节后进行验证,因为现在回家了,没带电脑。
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:7
  • 最近打卡:2025-04-01 23:18:33

15

主题

139

回帖

977

积分

高级会员

积分
977
发表于 2024-9-29 22:01:49 | 显示全部楼层
说句题外话,UART串口数据是LSB在前。
即0xAA加上起始位停止位是0010101011,不是0101010101。

点评

这确实是我的疏忽了,不过从理论上来讲,这个方式是可以输出高速脉冲的 我马上修改一下  详情 回复 发表于 2024-9-29 22:30
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-9-29 22:30:12 | 显示全部楼层
hea*** 发表于 2024-9-29 22:01
说句题外话,UART串口数据是LSB在前。
即0xAA加上起始位停止位是0010101011,不是0101010101。 ...

这确实是我的疏忽了,不过从理论上来讲,这个方式是可以输出高速脉冲的
我马上修改一下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-30 01:15:56 | 显示全部楼层
对于脉冲输出的应用,还是使用PWM相对来说更实用一些,主要是输出频率或者说周期比较稳定,串口输出脉冲则有宽有窄,一定程度上限制了应用。

点评

pwm脉冲输出最大频率, 等同于pwm周期, 做不到大高. 目前 stc的 PCA 模块, 输出脉冲频率, 也做不到大高. 唯一只有定时器翻转输出, 可以做到高输出脉冲频率. 利用串行输出, 也算是一种新思路, 除了 串行口, SPI或许  详情 回复 发表于 2024-10-1 10:26
这个也算是一种思路吧。 具体还是要看测试效果,而且pwm不同周期的输出不能太快了,中断会比较频繁  详情 回复 发表于 2024-9-30 01:19
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:458
  • 最近打卡:2025-05-01 07:48:22
已绑定手机
已实名认证

110

主题

2219

回帖

5452

积分

版主

积分
5452
发表于 2024-9-30 01:19:06 | 显示全部楼层
晓*** 发表于 2024-9-30 01:15
对于脉冲输出的应用,还是使用PWM相对来说更实用一些,主要是输出频率或者说周期比较稳定,串口输出脉冲则 ...

这个也算是一种思路吧。
具体还是要看测试效果,而且pwm不同周期的输出不能太快了,中断会比较频繁
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-9-30 06:42:24 | 显示全部楼层
图样图森破,

点评

此句精辟,敢问出自何处?  详情 回复 发表于 2024-9-30 11:34
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:394
  • 最近打卡:2025-05-01 03:26:07

16

主题

702

回帖

2470

积分

金牌会员

积分
2470
发表于 2024-9-30 07:37:44 | 显示全部楼层
楼主的想法很好,我以前就用过SPI输出脉冲的应用,但是用pwm可能更好一些
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:238
  • 最近打卡:2025-05-01 13:11:43

22

主题

283

回帖

901

积分

高级会员

积分
901
发表于 2024-9-30 08:08:46 来自手机 | 显示全部楼层
REMOVEUNUSED
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:342
  • 最近打卡:2025-04-30 08:26:34
已绑定手机

6

主题

202

回帖

810

积分

高级会员

积分
810
发表于 2024-9-30 08:30:37 | 显示全部楼层
期待楼主验证想法!!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-30 11:34:30 | 显示全部楼层

此句精辟,敢问出自何处?
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 02:47 , Processed in 0.132660 second(s), 118 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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