大神们有单片机接收航模遥控器接收机的程序吗?
求助如题,有吗? 捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。STC单片机估计做不到用硬件直接捕获。
那你只能开启一个时钟计数,去计算一个上升沿外部中断和一个下降沿外部中断的时间差。
接收机输出的信号是周期20ms,高电平0.5-2.5ms 的PWM信号 这个用C8A8K系列或STC8A4K系列很容易,用4路PCA捕捉高电平时间(上升沿、下降沿捕捉),我的四轴飞控就是这样做的,非常好。 https://www.amobbs.com/forum.php?mod=viewthread&tid=959357&highlight=%E5%9B%BA%E5%AE%9A%E7%BF%BC%E9%A3%9E%E6%9C%BA 有的话,我也跟着收点 cpholr1 发表于 2018-5-27 22:09
捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。
STC单片机估计做不到用硬件直接捕获。
硬件直接捕获是很高级的功能吗 modbus 发表于 2018-5-28 11:36
硬件直接捕获是很高级的功能吗
算是。
低端单片机(51 AVR)没有这个功能。
MSP430、STM32等16位/32位单片机往上就有了。
本帖最后由 ayumi8 于 2018-5-28 13:33 编辑
萝莉3航模遥控器开源的 原理源代码都有的自己搜吧
ayumi8 发表于 2018-5-28 12:23
萝莉3航模遥控器开源的 原理源代码都有的自己搜吧
这头像是滨崎步啊 cpholr1 发表于 2018-5-27 22:09
捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。
STC单片机估计做不到用硬件直接捕获。
我现在是使用STC的外部中断检测上升沿下降沿触发,上升沿触发时启动定时器,下降沿触发时关闭定时器,通过定时器走过的时间来判断,但是程序一直有问题,所以很无奈 本帖最后由 xrb2936 于 2018-5-30 09:26 编辑
用支持 SBUS输出的接收机最简单,那就是个串口格式,随便啥MCU都可以搞定,通道数量还多 cpholr1 发表于 2018-5-27 22:09
捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。
STC单片机估计做不到用硬件直接捕获。
STC单片机估计做不到用硬件直接捕获?
2005年量产的STC12C5410AD系列就有4路PCA(可编程计数器阵列),可以捕捉4路脉冲。
之后STC带PCA的MCU就多了,STC12C5A60S2、STC15W408AS、STC15W4K60S4系列、STC8A8K64S4A12系列、STC8A4K64S4A12系列,等等,都带PCA,捕捉功能是PCA功能之一。 sanmaodeai 发表于 2018-5-29 20:01
我现在是使用STC的外部中断检测上升沿下降沿触发,上升沿触发时启动定时器,下降沿触发时关闭定时器,通 ...
/**************************************************************************************************
函数名:
功能:
作者: 数码人科技/唐荣永/15070964452
时间: 2018-4-5
备注:
/***************************************************************************************************/
void Timer2Init(void) //微秒@12.000MHz
{
AUXR &= 0xFB; //定时器时钟12T模式
T2L = 0x0; //设置定时初值
T2H = 0x0; //设置定时初值
AUXR &= 0xEF; //定时器2开始计时
}
/**************************************************************************************************
函数名:
功能:
作者: 数码人科技/唐荣永/15070964452
时间: 2018-4-5
备注:
/***************************************************************************************************/
void INT0_Init( void )
{
IT0 = 0; //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
EX0 = 1; //使能INT0中断
EA = 1 ;
}
/**************************************************************************************************
函数名:
功能:
作者: 数码人科技/唐荣永/15070964452
时间: 2018-4-5
备注:
/***************************************************************************************************/
void exint0() interrupt 0 //INT0中断入口
{
if( INT0 == 1 ) { AUXR &= 0xEF;;PWM_ALL_1 = T2H*255 + T2L ;T2H = T2L = 0 ; AUXR |= 0x10; }
else { PWM_H_1 = T2H*255 + T2L ;}
}
有的片子没有T2,就用T0 tangrongyong90 发表于 2018-11-17 08:55
/************************************************************************************************* ...
好的,我尝试下 cpholr1 发表于 2018-5-27 22:09
捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。
STC单片机估计做不到用硬件直接捕获。
我就是用STC的MCU直接捕捉PPM信号,比如STC8A8K64S4Q12,4路PCA硬件捕捉4个PPM信号(油门、航向、横滚、俯仰),还可以用定时器0和1硬件捕捉2路PPM。
飞控可以输出8路15位PWM直接输出控制的PPM或PWM信号,比如可以做4轴、6轴、8轴的多旋翼,也可以做固定翼的。 cpholr1 发表于 2018-5-28 11:52
算是。
低端单片机(51 AVR)没有这个功能。
上世纪90年代我就用8031硬件捕捉PPM信号了(定时器0和1测量外部高电平时间是常用的功能),为什么你说没这个功能?AVR也有的。STC也有好多型号有这个功能,比如2005年供货的STC12C5410AD,后来的ATC12C5608AD等等,带4路PCA,捕捉4个脉冲,2个定时器还可以捕捉2路PPM。 小李非刀 发表于 2020-9-21 16:31
上世纪90年代我就用8031硬件捕捉PPM信号了(定时器0和1测量外部高电平时间是常用的功能),为什么你说没 ...
你好,在吗?能否深入交流下? cpholr1 发表于 2018-5-28 11:52
算是。
低端单片机(51 AVR)没有这个功能。
表示很老的avr一样有输入捕捉定时器啊,arduino用的mega328都有,虽然只有16位定时器支持,也就是只有1个在引脚8 cpholr1 发表于 2018-5-27 22:09
捕获高电平时间。。。如果是STM32,用个硬件PWM输入捕获即可。
STC单片机估计做不到用硬件直接捕获。
STC 15的单片机有PCA功能快速捕获,内部是硬件计时捕获的。挺准的。
页:
[1]