切换到宽版
  • 1063阅读
  • 13回复

[C51]不包邮地区自己写个舵机测试程序 [复制链接]

上一主题 下一主题
离线彭鹏
 
发帖
248
M币
17
专家
3
粉丝
8
作为不包邮地区,舵机测试仪9.8一个,邮费15,很不爽。
刚好手里有不少51单片机,写个最简单的测试程序,功能也简单:按下按键180°、松开按键0°。编了个大概,各位大神方便的话帮我审审。出差在外,回家再搭硬件验证了。

代码如下,P2^0为按键、P2^1为输出。0.5ms~2.5ms两个极端。

8楼更新更简单直白的测试通过的程序。

#include "reg51.h"

sbit P20 = P2^0;
sbit P21 = P2^1;

unsigned char count=0;

void Delay500us()        //@11.0592MHz
{
    unsigned char i, j;
    i = 6;
    j = 93;
    do
    {
        while (--j);
    }
    while (--i);
}
void main()
{
    while(1)
    {
        if(P20==0)
            {
                count=20;
                do
                    {
                        Delay500us();
                    }
                    while(count--);
            if(P20==0)
                {
                    P21=1;
                    count=5;
                    do
                    {
                        Delay500us();
                    }
                    while(count--);
                    P21=0;
                    count=35;
                    do
                    {
                        Delay500us();
                    }
                    while(count--);        
                }
            }
        else
            {
                P21=1;
                count=1;
                do
                {
                    Delay500us();
                }
                while(count--);
                P21=0;
                count=39;
                do
                {
                    Delay500us();
                }    
                while(count--);
            }
    }
}
[ 此帖被彭鹏在2018-06-10 21:33重新编辑 ]
离线zeze10000

发帖
2742
M币
10792
专家
31
粉丝
66
只看该作者 1楼 发表于: 06-07
应该有个旋钮控制角度才对
离线devcang

发帖
17368
M币
7851
专家
19
粉丝
92
只看该作者 2楼 发表于: 06-07
回 zeze10000 的帖子
zeze10000:应该有个旋钮控制角度才对 (2018-06-07 19:10) 回 zeze10000 的帖子

也认同


旋钮+AD+舵机  

离线ldy4747
发帖
326
M币
976
专家
8
粉丝
29
只看该作者 3楼 发表于: 06-08
用电位器控制舵机的程序:
#include<reg51.h>

sfr P5=0xC8; //声明P5引脚寄存器
sfr P1ASF=0x9D;    //声明 P1口模拟功能寄存器
sfr ADC_RES=0xBD;  //声明 ADC转换结果寄存器
sfr ADC_CONTR=0xBC;//声明 ADC控制寄存器

sbit OUT=P5^5;//定义一个输出引脚

unsigned int L; //定义一个数据
unsigned int adc;          //AD转换计算

void Delay10us()                //@12.000MHz
{
        unsigned char i;

        i = 27;
        while (--i);
}

void delay_n_10us(unsigned int n)//延时n个10us的函数
{
        while(n)        
        {
                Delay10us();
                n=n-1;//每循环一次n减小1
        }
}


void main()
{
        L=150;//1.5ms高电平,舵机摆到中间
        P1ASF=0x80;  //设置P1.7引脚为模拟功能
        
        while(1)
        {
                OUT=1;
                delay_n_10us(L);//输出高电平
                OUT=0;
                delay_n_10us(1900);//19ms左右低电平
                
                ADC_CONTR=0x88+7;  //开始P1.7引脚转换
                delay_n_10us(5);   //等待50us,AD转换完成
                adc=ADC_RES;  //读取转换结果
                
                L=adc; //转动旋钮,adc的值0~255变化
                //L的变化范围是100~200,所以进行一下限制
                if(L>200)L=200; //高电平时间不能超过2ms
                if(L<100)L=100; //高电平时间不能低于1ms
        }
}

内容来自Android手机客户端

离线彭鹏
发帖
248
M币
17
专家
3
粉丝
8
只看该作者 4楼 发表于: 06-09
回 zeze10000 的帖子
zeze10000:应该有个旋钮控制角度才对 (2018-06-07 19:10) 回 zeze10000 的帖子

水平不够,想的是最简单的功能。
离线彭鹏
发帖
248
M币
17
专家
3
粉丝
8
只看该作者 5楼 发表于: 06-09
回 devcang 的帖子
devcang:也认同
旋钮+AD+舵机  
....... (2018-06-07 21:37) 回 devcang 的帖子

没想那么多,只想到最简单的开关了。
离线彭鹏
发帖
248
M币
17
专家
3
粉丝
8
只看该作者 6楼 发表于: 06-09
回 ldy4747 的帖子
ldy4747:用电位器控制舵机的程序:
#include<reg51.h>
sfr P5=0xC8; //声明P5引脚寄存器
sfr P1ASF=0x9D;    //声明 P1口模拟功能寄存器
....... (2018-06-08 19:22) 回 ldy4747 的帖子

抛砖引玉,终于用最简陋的程序吸引出高手了,且等我搭好硬件尝试一番。
离线ldy4747
发帖
326
M币
976
专家
8
粉丝
29
只看该作者 7楼 发表于: 06-09
硬件用的STC15W408AS    舵机信号线接P5.5    电位器接P1.7

内容来自Android手机客户端

离线彭鹏
发帖
248
M币
17
专家
3
粉丝
8
只看该作者 8楼 发表于: 06-10
低级错误,输出未上拉电阻,没有示波器,各种折腾程序,最终在stc89c52rc上弄出来个简单直白的程序,简单到不相信程序能有问题,直白到接好上拉电阻就好了。


#include "reg51.h"

sbit KEY = P3^5;
sbit OUT = P2^2;

void Delay1ms()        //@12.000MHz
{
    unsigned char i, j;

    i = 2;
    j = 239;
    do
    {
        while (--j);
    } while (--i);
}
void main()
{
    while(1)
    {
              if(KEY==0)
                {
                              OUT=1;
                                      Delay1ms();
                              OUT=0;
                                      Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                                     Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                }
            
        else
                {
                            OUT=1;
                                      Delay1ms();
                            Delay1ms();
                                OUT=0;
                                     Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                                      Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
                            Delay1ms();
              }
    }
}
离线彭鹏
发帖
248
M币
17
专家
3
粉丝
8
只看该作者 9楼 发表于: 06-10
回 ldy4747 的帖子
ldy4747:硬件用的STC15W408AS    舵机信号线接P5.5    电位器接P1.7
 (2018-06-09 15:04) 回 ldy4747 的帖子

手头只有STC89C52RC和STC15F104E(还是A版)……
谢谢你的程序,很值得我学习和借鉴。