历史上的今天
返回首页

历史上的今天

今天是:2024年08月25日(星期日)

正在发生

2021年08月25日 | 51单片机-舵机与按键

2021-08-25 来源:eefocus

1.按键控制舵机桨


为了再次领悟舵机的运用,我们使用按键控制舵机桨在我们想要的位置上停留。


K8负责控制舵机桨往一个方向不停旋转,K16则控制相反方向旋转。按键模式为支持连按。然后数码管显示高电平持续的时间,如果数码管显示5,则高电平在20ms周期里持续的时间为0.5ms,如果显示的是20,那就是持续2ms的高电平时间。


#include  

#include //详见第六章第8讲

#include    //详见第八章第11讲

sbit PWMOUT = P1^7;  //舵机信号线引脚

  

u16 highval=15; 

void main()

{   

    u8 key;

    LED_Init();//初始化LED硬件模块

    KEY_Init();//初始化按键模块

    EA = 1;    //闭合总中断开关

    TIM0_Init(100,9); //定时0.1ms,9是微调使定时精度更高

    TIM1_Init(1000,0);//定时1ms,用来刷新数码管显示,定时精度要求不高可不微调

  

    ShowNumber(highval);

    while(1)

    {      

        key=KEY_Scan(1,500);//支持连按 

        if(key==8)

        {

            highval++;

            if(highval>25)highval=25;//高电平持续时间不能超过2.5ms

            ShowNumber(highval);

        }

  

        if(key==16)

        {

            highval--;

            if(highval<5)highval=5;//高电平持续时间不能低于0.5ms

            ShowNumber(highval);

        }     

    }   

}

   

void TIM0_IRQHandler() interrupt 1

    static u8 pwm=0;

    TH0 = T0RH;  //重新加载重载值

    TL0 = T0RL;

     

    pwm++;

    if(pwm>=200)pwm=0;//pwm在0~199之间间隔0.1ms变化,周期为20ms

  

    if(pwm    else PWMOUT=0; 

}

  

void TIM1_IRQHandler() interrupt 3

    TH1 = T1RH;  //重新加载重载值

    TL1 = T1RL;

    SEG_Scan();

}


2.呼吸灯思想与舵机


呼吸灯的程序思想如果用在舵机控制上,那么舵机桨就是从0度的位置转到180度的位置又从180度处转回0度处如此循环往复,现在我们动手改写一下呼吸灯的程序使其能融入舵机的控制中。


#include  

#include //详见第六章第8讲

#include    //详见第八章第11讲

sbit PWMOUT = P1^7;  //舵机信号线引脚

 

u16 highval=5; 

void main()

{   

    u8 key;

    LED_Init();//初始化LED硬件模块

    KEY_Init();//初始化按键模块

    EA = 1;    //闭合总中断开关

    TIM0_Init(100,9);  //定时0.1ms,9是微调使定时精度更高

    TIM1_Init(50000,0);//定时50ms,定时精度要求不高可不微调

    while(1);

}

  

void TIM0_IRQHandler() interrupt 1

    static u8 pwm=0;

    TH0 = T0RH;  //重新加载重载值

    TL0 = T0RL;

    

    pwm++;

    if(pwm>=200)pwm=0;//pwm在0~199之间间隔0.1ms变化,周期为20ms

 

    if(pwm    else PWMOUT=0; 

}

 

void TIM1_IRQHandler() interrupt 3

    static u8 dir;

    TH1 = T1RH;  //重新加载重载值

    TL1 = T1RL;

       

    //控制highval只能在5~24之间变化

    if(dir==1)highval--;//占空比逐渐减少,舵机桨往0度的位置走动

    if(highval<5)dir=0;

 

    if(dir==0)highval++; //占空比逐渐增加,舵机桨往180度的位置走动

    if(highval>=24)dir=1;//测试发现,24已经是舵机浆的尽头,无需写25

}


本章的舵机知识内容比较少,主要是简单入门使用舵机,后期的教程我们再用其他模块配合舵机一起实战。


推荐阅读

史海拾趣

COMPUTAR公司的发展小趣事

随着摄影和摄像技术的不断发展,市场对镜头性能的要求也越来越高。为了满足这一需求,CBC株式会社于1985年成功研制出第一款非球面高速镜头。这款镜头采用了先进的非球面设计,有效减少了像差和畸变,提高了成像质量。非球面高速镜头的诞生,不仅为CBC赢得了更多的市场份额,也为整个光学行业树立了新的技术标杆。

GWP Group公司的发展小趣事

随着技术的不断进步和市场需求的扩大,CBC株式会社开始寻求更广阔的发展空间。1960年,CBC香港公司成立,这标志着CBC的镜头产品开始走向国际市场。香港作为当时亚洲的金融中心和贸易枢纽,为CBC提供了宝贵的国际资源和市场机遇。通过香港公司的努力,CBC的镜头产品逐渐在国际市场上获得认可。

Allegro公司的发展小趣事

COMPUTAR公司的前身是日本CBC株式会社,成立于1925年,总部设立在繁华的东京。自创立之初,CBC便致力于光学技术的研究与应用,为后续的镜头制造奠定了坚实的基础。在随后的几十年里,CBC不断积累技术经验,逐步在光学领域建立起自己的声誉。

Excelight Communications Inc公司的发展小趣事

随着5G技术的兴起,光通信行业迎来了新的发展机遇。Excelight紧跟时代步伐,投入大量资源进行技术研发。在李明和团队的共同努力下,公司成功研发出了一款具有自主知识产权的高速光通信芯片,这一成果不仅填补了国内空白,还使Excelight在国际市场上占据了有利地位。

技术突破后,Excelight的产品性能得到了显著提升,同时也带动了整个产业链的升级。公司开始与更多的国内外企业建立合作关系,共同推动光通信行业的发展。

B&K Precision公司的发展小趣事

随着电子行业的不断发展,B&K Precision始终保持着创新的步伐。公司不断推出具有创新性和竞争力的新产品,如数字电流表、三路输出直流清洁电源等,满足了市场对于高精度、高可靠性测试仪器的需求。这些产品的推出不仅提升了公司的市场份额,也进一步巩固了公司在电子行业中的地位。

Everett Charles Technologies (ECT)公司的发展小趣事

1965年,Everett Charles Technologies (ECT) 公司正式成立,标志着其在电子测试系统硬件与软件领域的起点。ECT的创始人凭借对电子技术的深刻理解和市场需求的敏锐洞察,成功开发出了一系列符合工业标准的产品,包括POGO探针、ValuGrid测试治具等。这些产品的推出,不仅奠定了ECT在电子测试领域的基础,也为公司的后续发展提供了强大的动力。

问答坊 | AI 解惑

一点建议

来这个论坛的人不乏有刚接触单片机的。 但是,在单片机学习的过程中,因为很多人都是初学,有时候问别人跟问自己也没什么区别。 有时候一点东西想不通,就有可能影响我们的兴趣,毕竟是初学。难度很大。 建议:单片机高手,拿出一些完整的成功的 ...…

查看全部问答>

DC-DC布线中如何减小地弹噪声

布线中除环路最小化原则外,还有一个环路的变化最小化原则,这个原则对于减小DC-DC的地弹意义重大。 ADI对此有一篇文章专门对此进行了详细的说明。非常值得EE们参考。…

查看全部问答>

windml中如何修改root界面

windDemo程序启动后是wind river的logo,如果我想修改成自定义的logo应该怎么做?…

查看全部问答>

求救!!`GLIBC_2.4' not found

编译内核时出错: scripts/kallsyms: /lib/tls/libc.so.6: version `GLIBC_2.4\' not found (required by scripts/kallsyms) make: *** [.tmp_kallsyms1.S] Error 1 请球高手解答!!谢谢…

查看全部问答>

对IDE和SATA的I/O端口比较了解的高手看看

  最近要把原来写过的IDE接口的硬盘读写程序改成SATA的,用到1F0~1F7和3F6~3F7这些I/O映射地址对硬盘控制芯片的寄存器进行寻址,现在我需要知道用SATA接口时,这些I/O地址应该是什么,只要知道对SATA操作的I/O端口地址就能解决所有问题了,请 ...…

查看全部问答>

急驱动器开发高级工程师

高级软件工程师 职责: 系统底层软件的开发; 参与系统需求分析和设计; 职位要求: 1.要求本科以上的计算机相关专业,有丰富开发经验; 2.三年以上的软件开发经验,良好的软件编程习惯; 3.具有两年以上的系统内核程序的开发经验,熟 ...…

查看全部问答>

急需数控机床系统开发??

我公司需要开发套数控机床系统,请问有没有知道这方面知识的朋友?可以加我QQ:913410767,我回电话给你…

查看全部问答>

s3c2440 800x600 如何提速控件显示速度

本人初学wince,请教大虾们一个问题。 本人使用的是S3c2440,wince5.0,800x600的LCD。 因为屏幕过大,wince的显示看起来已经较慢。 因为客户的要求,开发软件需要保持与pc机版本的界面一致。导致程序中需要在一个界面上绘制上百个控件,可以看 ...…

查看全部问答>

基于继电器的温度加热控制器

基于继电器的温度加热控制器…

查看全部问答>