5iMX宗旨:分享遥控模型兴趣爱好

5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

简单的用单片机控制舵机的实验,给初学者做个参考(10月21日加个4通的模拟波形图)

查看数: 6283 | 评论数: 26 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2012-10-12 23:21

正文摘要:

本帖最后由 铁皮 于 2012-10-21 20:05 编辑 N年没发贴了,先上程序,这是可以直接编译后写入单片机的程序,不要笑话,程序还有很大优化的余地,喜欢的自已优吧 ORG 0000H LJMP MAIN ORG 000BH  ; ...

回复

gaoye42693 发表于 2013-5-10 17:44
好贴~学习学习~

欢迎继续阅读楼主其他信息

gyro 发表于 2013-5-10 12:17
kingM 发表于 2013-5-9 22:55
老夫前两年写过一个汇编的STC的51小系统,可以接收红外遥控,同时可以控制主电机,以及好几路PWM舵机。
...

方便给代码参考一下不?
个人感觉51的12mhz下,可以实现pwm控制,但是精度完全做不到。更别说还要处理红外的中断。

kingM 发表于 2013-5-9 22:55
gyro 发表于 2012-10-22 10:54
用C51,C语言写的程序,舵机玩死了也就只能做到4位步进。。。折腾死我了。。。
读取红外遥控信号,解码,然 ...

老夫前两年写过一个汇编的STC的51小系统,可以接收红外遥控,同时可以控制主电机,以及好几路PWM舵机。
关键是安排好各种时序,不能用常见的教科书式写法,
老夫的小把戏是用“载波计数式”算法来解调红外遥控信号,即设置38Khz的中断,以此中断为基准进行遥控脉宽的计数,根据计数进行红外信号的解码。
而PWM则是设置统一的短时间中断,以此中断计数,在计数的基础上可以实现多路的PWM控制。


晨曦问 发表于 2013-5-9 20:48



老师,请问为什么p1.7必须有那个电阻,什么意思,可以详细介绍下吗?

gameboyw2 发表于 2013-5-7 20:46
留名回访
铜河 发表于 2012-10-23 11:38
又见汇编。顶强人~~~~~~~
曾经也用汇编写51程序,发现过一年回来就看不懂。所以后来换ICC来写AVR程序,移植性好多了。
2051在12M时钟下,只要安排得当,输出分辨率1uS的8通道是没问题的。
gyro 发表于 2012-10-23 10:47
2.5ms对于c51这种12T的芯片,真没啥可干的。。。

真是落后了。。。得换1T的芯片了
铁皮 发表于 2012-10-23 10:05
gyro 发表于 2012-10-23 09:46
没错,目前我就只会循环延时法。结果11.095mhz的情况下,实际测量一个++就高达2us了。加上判断,本来1000 ...

我认为这种程序中最重要的是保证输出的脉冲宽度和周期的准确性,其它的事都可以在空闲的时候再做,所以决定宽度和周期的定时器中断为最高优先级。以4通来说,我是将20MS平分给4个通道,每个通道5MS的时间,一个通道中高电平时间最长是2.5MS,也就是说至少还有2.5MS的纯空闲时间可以干其它事,足够了。8通道时就紧张点,每个通道只得2.5MS,只能在定时器计数期间的0.5MS-2.5MS之间干其它事,应该也足够了,不够就任由中断打断也没多大影响。
gyro 发表于 2012-10-23 09:46
铁皮 发表于 2012-10-23 09:15
能做到4位应该就能做到8位啊,一个通道用一个存储器就是8位了,可能是C程序太臃余,不太好精确的计算时间 ...

没错,目前我就只会循环延时法。结果11.095mhz的情况下,实际测量一个++就高达2us了。加上判断,本来1000us的信号宽度,就没剩下几个。。。
计时器用在红外接收上了。

铁皮 发表于 2012-10-23 09:15
gyro 发表于 2012-10-22 10:54
用C51,C语言写的程序,舵机玩死了也就只能做到4位步进。。。折腾死我了。。。
读取红外遥控信号,解码,然 ...

能做到4位应该就能做到8位啊,一个通道用一个存储器就是8位了,可能是C程序太臃余,不太好精确的计算时间吧
3dbuild 发表于 2012-10-23 00:17

可以用HC-11 433无线串口,使用方便,支持3~5V宽电压使用,自己写加密通讯协议。还可以同时使用N个组网,通讯协议和485一样
铁皮 发表于 2012-10-22 10:56
谁能提供个单片机之间无线通信的好办法,最好是加密的,不会相互干扰
gyro 发表于 2012-10-22 10:54
用C51,C语言写的程序,舵机玩死了也就只能做到4位步进。。。折腾死我了。。。
读取红外遥控信号,解码,然后控制舵机完成一个动作。就这点,折腾死我。。唉
羊是黑色 发表于 2012-10-21 23:43
不错用汇编写功底深厚啊
e71 发表于 2012-10-19 19:05
这帖子要留个名备查。
DESON 发表于 2012-10-15 21:41
太强大了
狐狸 发表于 2012-10-15 18:26
分辨率10微秒的
狐狸 发表于 2012-10-15 18:23
pic单片机也可以,还可用PICBASIC PRO编程,与C一样简单:
12f509中的舵机测试程序:
INPUT GPIO.0
INPUT GPIO.1
INPUT GPIO.2
OUTPUT GPIO.5
B1 VAR BYTE
B2 VAR BYTE
B3 VAR BYTE
B1=0
B2=0
B3=150
LOW GPIO.5
MAIN:
IF GPIO.1=0 THEN B1=B1+1
IF B1=5 THEN B3=B3+1
IF B1=5 THEN B1=0
IF B3>=200 THEN B3=200
IF GPIO.2=0 THEN SUBGER
IF GPIO.0=0 THEN B3=150
PAUSE 18
PULSOUT GPIO.5,B3
GOTO MAIN
SUBGER:
IF GPIO.2=1 THEN MAIN
B2=B2+1
IF B2=5 THEN B3=B3-1
IF B2=5 THEN B2=0
IF B3<=100 THEN B3=100
PAUSE 18
PULSOUT GPIO.5,B3
GOTO SUBGER
seanshuai 发表于 2012-10-14 21:15
高手云集呀
关闭

【站内推荐】上一条 /1 下一条

快速回复 返回顶部 返回列表