|
|
楼主 |
发表于 2016-12-30 09:28:19
|
显示全部楼层
本帖最后由 田不辣 于 2016-12-30 09:39 编辑
程序思路:
红外线编码原则:
0、引导码:(也可以叫设备识别码,避免误操作其他设备。)在此主要是告诉接收机检测到该引导码要开始解读信息码。
暂时构想为101,与后面编码区分开。总共1.5 MS。
1、编码原则:因为只是两路控制,并且是开关控制,因此只需要2段调制信息即可,一段控制马达,一段控制舵机。
1.1、马达控制:正转0110,反转0101,不转0011。针对4位信息,每位信息花费500us,总共2000US=2MS。
2.2、舵机控制:舵量正0110,舵量负0101,舵量零0011。同上。总共2000US=2MS。
2、结束码(在此不考虑,主要用于后期升级摇杆控制使用)
总发射周期:1.5+2+2=5.5MS,因为是理论,需要后期验证,如果接收机容易误操作,将发送2次编码减少接收机误读。视情况而定。
发射端:
1、红外线发射函数
void TX_IR()
{
ir=0; //发射一个38KHz方波红外信号
Delay13us();
ir=1;
Delay13us();
}
2、因为舵机每20ms必须接收一次指令信息,所以打开定时器0,每18-19ms中断一次。定时器0主要负责打开定时器2。(STC很多单片机都只有定时器0和定时器2,没有定时器1)
AUXR=0x10;//打开定时器2
3、定时器2主要职责:每50ms中断一次,告诉红外线转换一次发射状态。5.5MS的信息发送完成后,关闭定时器2,等待下次工作。
其他:
4、主程序基本啥事不做,最多就是检测一下低压。
5、运用单片机的内部电压检测,低压时蜂鸣器报警。(不能显示实时电压,但是能检测到设置的报警电压达到临界值时发送提示信息)
6、蜂鸣器主要是报警、按键提示用。
接收端:
1、运用外部中断,收到红外线接收管的低电平信号后触发内部中断0,开始解码。
2、码制记录:内部中断0,主要用于解码需要的计时信息,因为发送长度是5.5MS,0.5MS一个小片段,因此在0.48-0.49ms时中断一次,检测红外线接收管的电平信息。
3、信息存放:不会存在单片机里,所以只能定义一个数组来放置读码的信息。
4、解码:根据数组相应位数来读码解码。
5、执行:L9110:需要两根IO脚控制,一脚是马达正转信号,一脚是马达反转信号。
舵机控制:根据萝丽的舵机控制仪来写即可。
6、灯光控制:根据舵机控制仪的分离出来输出高低电平(萝丽课的电子开关部分)。
下面是接收机的电路图。
|
-
| |