版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36278071/article/details/81283768
单片机双通道PWM信号的解析再生成
背景
使用航模遥控器控制两个电机的转速,由于航模遥控器输出的PWM波占空比太低,并且可调范围很小,无法带动和控制大电机。因此我们需要对航模遥控器输出的PWM波形进行重整。51单片机只有两个外部中断和两个定时计数器,资源较少,所以我想到了一下几个办法。
设计方案
设计方案一(不可行)
中断 | 功能 |
---|---|
INT0 | 10ms计时单位 |
INT1 | 拆分为两个八位计数器高电平计时 |
不可行原因:
1.两个8位计数器每次最多计数0.27ms。
2.将INT1拆分后要使用到INT0的控制位对拆分出来的8位计数器进行控制,导致INT0无法使用。
设计方案二(不可行)
利用外部中断判断周期,计数器0,1分别控制输出进行反转。
不可行原因:
计数器0,1控制输出反转为冗余操作。方案三是方案二的改进版。
设计方案三(可行)
中断 | 功能 |
---|---|
INT0,INT1 | 分别判断两个周期,并且分别设置Timer0,1的计数值 |
Timer0,Timer1 | 两个计数器分别控制两个PWM波的高电平时间 |
注意事项:
需要注意的是INT0和INT1都是下降沿有效,所以我在INT0和INT1之前加了一个反相器。
代码设计
由于之前写的时候没注意汉字格式,为了防止乱码我就直接上图片了。
源代码请自行下载。(不想收积分但是又没钱开会员了只能祈求阁下赏两个积分让我下载个文件了)
主函数
主函数负责持续记录高电平的持续时间。
中断函数
外部中断负责检测周期开始并将计数值清零,填入计数器中高电平持续时间。
效果展示
接收机输出源PWM信号
进行再生成的PWM信号
源代码下载
不想收积分但是又没钱开会员了只能祈求阁下赏两个积分让我下载个文件吧。
单片机解析再生成双通道PWM信号