做块PPM编码板玩模拟器
程序写的很糟糕大神请略过 自己闲暇时意淫的小玩意大家凑合着看看就行
用延时函数写的精度不高 但玩模拟器足矣 我在FMS 上测试通过
高电平1MS~2MS 低电平固定 0.1MS周期20MS6通道
在此感谢 蛋糕大神的指点
老规矩上图贴代码
#include <STC15W408AS.h> //STC12C5A60S2 专用头
#include "STC15W-ADC.h" //STC15W4K-ADC 硬件ADC模数转换
#define uintunsigned int
#define uchar unsigned char
//sbit PPM_OUT = P5^5; //
sbit PPM_OUT = P2^5;
void PPW_Sent(void); // PPM波形产生
void delay_n_10us(uint n); //自己定义的延时n_10us函数
void Delay10us();//@12.000MHz
unsigned int ADC0,ADC1,ADC2,ADC3,ADC4,ADC5,ADC6,ADC7,ADC8,calc_rest; //数模转换变量
/*------------------------------------------------
延时函数
------------------------------------------------*/
void Delay(unsigned char s)
{
unsigned char i,j;
for(i=0; i<s; i++)
for(j=0; j<250; j++);
}
/*****************主程序************************/
main()
{
InitADC(); //ADC初始化
Delay(1); //延时一会
while(1)
{
//读取摇杆模拟量与ADC按键
ADC1=ADC(0)/10; //油门
ADC2=ADC(1)/10; //航向
ADC3=ADC(2)/10; //横滚
ADC4=ADC(3)/10; //俯仰
ADC5=ADC(7)/10; //
ADC6=ADC(5)/10; //
PPW_Sent();
}
{
PPW_Sent();
}
}
void Delay10us()//@12.000MHz
{
unsigned char i;
i = 25;
while (--i);
}
void delay_n_10us(uint n) //自己定义的延时n_10us函数
{
while(n)
{
Delay10us();
n=n-1;//每循环一次n减小1
}
}
//一个波形20ms,6个PPM波形,高电平每个波形最大1.4ms,最小0.6ms,低电平固定0.4ms
void PPW_Sent(void) // PPM波形产生
{
calc_rest=0;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道1
PPM_OUT=1;
delay_n_10us(100);//0.6ms
delay_n_10us(ADC1);//0~100
calc_rest+=ADC1;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道2
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC2);//1ms
calc_rest+=ADC2;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道3
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC3);//1ms
calc_rest+=ADC3;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道4
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC4);//1ms
calc_rest+=ADC4;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道5
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC5);//1ms
calc_rest+=ADC5;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
//通道6
PPM_OUT=1;
delay_n_10us(100);//1ms
delay_n_10us(ADC6);//1ms
calc_rest+=ADC6;
PPM_OUT=0;
delay_n_10us(10);//0.4ms
PPM_OUT=1;
delay_n_10us(1300-calc_rest);//
}
路过
顶一个
简易版。楼主试着加入失控的PPM信号
gceng04 发表于 2019-4-5 11:33
简易版。楼主试着加入失控的PPM信号
这个只是 简单的输出PPM用来玩模拟器的
不涉及 高频信号发射
玩模拟器也没有失控这个说法
要把库函数也共享出来
请问有包含库的文件或者最终的hex文件么,希望可以共享一下,不行也没关系
vcijj 发表于 2019-5-15 21:37
请问有包含库的文件或者最终的hex文件么,希望可以共享一下,不行也没关系
...
包含库?嘛玩意
源码都贴出来了
链接:https://pan.baidu.com/s/13p_vvmyQac5gLc-b2YPahg
提取码:ui8g
这里有全部的文件你自己下载研究把
读了楼主的程序,觉得很好,但有几个问题请教
1 calc-rest 是何变量
2 delay-n-10μs(10);//0.4ms ?
3delay-n-10μs(100);//0.6ms ?是否笔误? 着急,没看明白 zjs500217 发表于 2019-8-5 12:17
读了楼主的程序,觉得很好,但有几个问题请教
1 calc-rest 是何变量
2 delay-n-10μs(10);//0.4ms ?
1 calc-rest 是何变量
calc-rest是嗯怎么解释尼
程序开始是calc-rest=0;//用一个变量来统计每个通道高电平时间
calc_rest+=ADC1;//这里就是把每个通道的高电平时间赋值给calc_rest
2 delay-n-10μs(10);//0.4ms ?
3delay-n-10μs(100);//0.6ms ?是否笔误?
注释不是特别准确//0.4MS//0.6MS都不对
void delay_n_10us(uint n) //自己定义的延时n_10us函数注意看这条延时函数执行一次延时10U微妙
delay-n-10μs(10);//0.4ms ?这里实际延时要看括号里的参数(10)那就是10*10=100US
刚开始是参考舵机驱动原理把高低电平时间固定了后期又修改了参数 注释没改
您好有线路图吗 ZHANGYI 发表于 2020-5-13 22:32 static/image/common/back.gif
您好有线路图吗
单片机用得STC15W408AS
P1.0 通道1
P1.1 通道2
P1.2 通道3
P1.3 通道4
P1.4 通道5
P1.5 通道6
P1.6通道7
P1.7通道8
我用的是sop16
封装的只接了1/4通道
这也是一个很实用的工具 感谢楼主分享
这个属于遥控嘛?
黑礁 发表于 2020-5-13 23:10
单片机用得STC15W408AS
P1.0 通道1
P1.1 通道2
谢谢,初学者,有完整的线路图吗 请问这东西的用途是什么?是不是连接遥控和电脑,然后可以玩模拟器了? 本帖最后由 zjs500217 于 2020-6-2 18:10 编辑
ldy7474 发表于 2019-8-11 15:16
1 calc-rest 是何变量
calc-rest是嗯怎么解释尼
程序开始是calc-rest=0;//用一个变量来统计每个通道 ...
谢谢解答 现在好像明白了,如果加个高频头就可以做个遥控器了。忘记密码了,好长时间进不去,今天进去了才回复。 ZHANGYI 发表于 2020-5-23 19:30 static/image/common/back.gif
谢谢,初学者,有完整的线路图吗
简单画了个示意图你凑合着看看吧
我的模拟器是直接飞线没弄什么电路图
zuse1021 发表于 2020-5-23 21:40 static/image/common/back.gif
请问这东西的用途是什么?是不是连接遥控和电脑,然后可以玩模拟器了?
额…这个相当于不带高频头的遥控器当然这个遥控器没有微调通道正反混控什么的只写了最基本的通道输出PPM用来玩模拟器
PPM输出端还是要接加密狗才能链接电脑玩模拟器
页:
[1]
2