zhou220 发表于 2024-11-1 21:46:08

小白求问,如何把接收的方波,变成我需要时长的方波


接收的方波我只能接收不能修改的
接收的方波一个高电平时间时50us, 35us, 17us, 18us ,时间不固定,个数也不固定。

我想把它变成固定45us一个高电平。
主要就是时间和个数不固定,所以没有好的方案

王昱顺 发表于 2024-11-2 15:56:45

zhou220 发表于 2024-11-2 15:45
就是输入一个脉冲,就输出一个45μs脉冲。
输入的脉冲它的时间不是固定的(是我读取其他单片机得来的), ...

如果这两个之间没有严格的时序关系的话,倒是可以搞。
通过捕获输入脉冲的上升沿,增加内部程序的脉冲计数。
同时,内部判断计数不为零就发送一个45us的脉冲,可以用定时器产生这个。发送后脉冲数量减一,然后再进行判断,直到数量为0就不发了。
如此循环往复

DebugLab 发表于 2024-11-1 23:17:56

什么是固定的?你希望输入输出有什么关系?表达不清楚。
是每输入一个脉冲,就输出一个45μs脉冲
还是输入的方波周期和占空比不固定,需要计算占空比,然后再输出固定频率的PWM

angalp 发表于 2024-11-2 00:28:31

没明白是要整个什么功能

晓飛飛 发表于 2024-11-2 01:33:56

你要的这个功能,可以理解为单稳触发器模式的脉冲宽度整型,用555定时器之类的硬件芯片非常容易实现,不过非要用单片机的话,请看下面的方法:
1,配置外部中断为边沿中断,开启上升沿和下降沿,
2,在外部中断中识别到上升沿时,控制输出引脚电平为高,启动一个45us的定时器,打开定时器中断,这里45us可能需要根据实测微调
3,在定时器中断中关闭定时器,并且控制输出引脚为低
注意,需要确保方波上升沿的间隔要大于45us,否则输出会粘连成一个宽脉冲,可以通过阻塞外部中断的方式解决粘连,方法是在启动定时器的同时,关闭外部中断,并且在定时器中断中启动外部中断

晓飛飛 发表于 2024-11-2 01:51:06

例如,两个间隔20us的20us窄脉冲直接展宽到45us,
如果不阻塞第二个窄脉冲,会出现输出脉冲宽度覆盖叠加,最终得到一个85us的加宽脉冲,
如果阻塞掉第二个窄脉冲,最终得到一个45us的标准脉冲,

因此,这个脉冲展宽的宽度45us,一定要小于脉冲上升沿之间的最小间隔,如果输入信号出现的时机是随机的,只要上升沿间隔小于45us,必然会粘连。
是否采用阻塞机制,看实际需求吧,这是输入信号的问题,不是方案问题。

wlhet 发表于 2024-11-2 08:13:57

看看👀

zhou220 发表于 2024-11-2 15:37:33

DebugLab 发表于 2024-11-1 23:17
什么是固定的?你希望输入输出有什么关系?表达不清楚。
是每输入一个脉冲,就输出一个45μs脉冲
还是输入 ...

输入一个脉冲,就输出一个45μs脉冲

zhou220 发表于 2024-11-2 15:45:28

本帖最后由 zhou220 于 2024-11-2 15:49 编辑

晓飛飛 发表于 2024-11-2 01:51
例如,两个间隔20us的20us窄脉冲直接展宽到45us,
如果不阻塞第二个窄脉冲,会出现输出脉冲宽度覆盖叠加, ...
就是输入一个脉冲,就输出一个45μs脉冲。
输入的脉冲它的时间不是固定的(是我读取其他单片机得来的),可能80us, 也可能17us,而我只输出45us的。
输入几个我就输出几个45us的脉冲

DebugLab 发表于 2024-11-2 16:03:40

zhou220 发表于 2024-11-2 15:37
输入一个脉冲,就输出一个45μs脉冲

外部中断就行
页: [1] 2
查看完整版本: 小白求问,如何把接收的方波,变成我需要时长的方波