赞
踩
硬件
用到的单片机资源
程序结构
硬件使用
舵机
采用50Hz的PWM信号控制
电调
采用71.4hz的PWM信号控制,高电平宽度为1.0到2.0ms,电调上电需要自检,自检的方法就是给高电平宽度为1ms持续3s左右,当电机发出急促的哔哔哔声音就自己成功,可以开始控制
程序
遥控端
左边摇杆控制油门
右边摇杆控制转向及高度
#include "STC15F2K60S2.H" #include "stdio.h" #include "intrins.h" #include "nrf_24l01.h" #define uint unsigned int #define uchar unsigned char #define ADC_POWER 0xE0 //ADC电源控制位 #define ADC_FLAG 0x10 //ADC完成标志 #define ADC_START 0x08 //ADC起始控制位 #define ADC_SPEEDLL 0x00 //540个时钟 uchar rx_buf[TX_PLOAD_WIDTH]; uchar tx_buf[TX_PLOAD_WIDTH]; unsigned char sta; uchar dat0; uchar dat1; uchar dat2; uint num; uint num0; uint num1; uint num2; uint k; sbit S1=P2^3; sbit S2=P2^4; void Delay100ms(void); void delayms(int ms); void uartInit(void); void UARTSend(char ucData); void UART_PutString(unsigned char *s); uchar GetADCResult(unsigned char ch); void InitADC(); void main(void) { unsigned int lock_key=0; P0M0=0X00;P0M1=0X00; P1M0=0X00;P1M1=0X00; P2M0=0X00;P2M1=0X00; P3M0=0X00;P3M1=0X00; P4M0=0X00;P4M1=0X00; uartInit(); Delay100ms(); init_nrf24l01_io(); InitADC(); UART_PutString("READY!\r\n"); ifnnrf_rx_mode();//初始化 接收模式 while(1) { if(S1==0) { delayms(1); if(S1!=0) { k=1; } } if(S2==0) { delayms(1); if(S2!=0) { k=2; } } num=GetADCResult(0);//num数值0-255 num0=num/51; num=GetADCResult(2); if(num<190) { num1=num/85; } if(190<num&&num<210)num1=3; if(num>210) { num1=(num-210)/15+3; } num=GetADCResult(3); if(num<160) { num2=num/80; } if(160<num&&num<185)num2=3; if(num>185) { num2=(num-185)/23+3; } IRQ=1; SPI_RW_Reg(WRITE_REG+STATUS,0xff); tx_buf[0]=num0;//油门数据 //if(k==1) //{ tx_buf[1]=num1;//转向数据 //} //if(k==2) //{ tx_buf[2]=num2;//上下数据 //} ifnnrf_tx_mode(); while(IRQ); sta=SPI_Read(STATUS); SPI_RW_Reg(WRITE_REG+STATUS,0xff); if(sta&STA_MARK_TX) { delayms(1); } else { ifnnrf_CLERN_ALL(); } lock_key=1; } if(lock_key) { lock_key=0; ifnnrf_rx_mode(); IRQ=1; while(IRQ==0); _delay_us(400); } } /*************************串口初始化******************************************/ void uartInit(void) { SCON = 0x50; //8位数据,可变波特率 AUXR |= 0x40; //定时器1时钟为Fosc,即1T AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设定定时器1为16位自动重装方式 TL1 = 0xE0; //设定定时初值 TH1 = 0xFE; //设定定时初值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 EA = 1; ES=1; } /*******************************数据发送**************************************/ void UARTSend(char ucData) { SBUF=ucData; while(TI==0); TI=0; } /******************************字符串发送*************************************/ void UART_PutString(unsi
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。