标题: 基于51单片机的帆板控制系统仿真及源码与实物制作 [打印本页]

作者: w402333815    时间: 2017-7-24 11:32
标题: 基于51单片机的帆板控制系统仿真及源码与实物制作
最近由于要参加电子设计大赛,想拿点东西练练手,随便玩玩,花了一天时间做个帆板控制系统,虽然做的一般,但也是个经验,有兴趣的可以看看,有程序,仿真,实物图都在此,全套资料可下载参考:

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载):


下面是一个帆板的参考论文:


单片机源程序如下:
  1. #include"main.h"
  2. uint V_0832 =0,key_value;
  3. uint i=0,angle_test=48,angle=48;
  4. uint tab[4]={0};          //定义数组,以保存设置角度值
  5. /***************电机相关定义**********************/
  6. sbit en1=P3^7; /* L298的Input 1 */
  7. sbit s1=P3^5; /* L298的Input 1 */
  8. sbit s2=P3^6; /* L298的Input 2 */
  9. uchar t=0; /* 中断计数器 */
  10. uchar m1=90; /* 电机1速度值 */
  11. uchar tmp1; /* 电机当前速度值 */
  12. /***************电机结束*********************/
  13. void Init_interrupt()
  14. {
  15.         TMOD=0x12; /* 设定T0的工作模式为2 */
  16.         TH0=0x9B; /* 装入定时器的初值155 0.1ms*/
  17.         TL0=0x9B;
  18.         TH1=(65536-155)/256;
  19.         TL1=(65536-155)%256;
  20.         EA=1; /* 开中断 */
  21.         ET1=1;
  22.         ET0=1; /* 定时器0允许中断 */
  23.         TR0=1; /* 启动定时器0 */
  24.         TR1=1;
  25. }
  26. void main()
  27. {        
  28.         Init_interrupt();
  29.         init_1602();
  30.         s1=1;                //电机设置
  31.           s2=0;
  32.         while(1)
  33.         {        
  34. //                V_0832 = (uint)(ad0832read(1,0)*1.3);
  35.                 V_0832 = (uint)(Get_AD_Result()*1.41);        
  36.                 write_sfm3(1,10,V_0832);
  37.                 key_value=key16();
  38.                 if(key_value < 10)                                                                                        //如果输入的键值是数字键
  39.                 {
  40.                         tab[i]=key_value;
  41.                         angle_test=angle_test*10+tab[i];
  42.                         i++;                                                                                //每输入一位密码,位数自增1.
  43.                         if(i == 4)                                                                //密码输入位数控制在6位
  44.                         {
  45.                                 i = 0;
  46.                                 angle_test=0;
  47.                         }                                                                                
  48.                 }
  49.                 angle=angle_test;
  50.                 write_sfm3(2,10,angle);
  51.                
  52.         }
  53. }
  54. void timer0() interrupt 1 /* T0中断服务程序 0.1ms一次中断*/
  55. {
  56.         if(t==0) /* 1个PWM周期完成后才会接受新数值 */
  57.                 {
  58.                 tmp1=m1;
  59.                 }
  60.         if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号 */
  61.         t++;
  62.         if(t>=100) t=0; /* 1个PWM信号由100次中断产生   100HZ */
  63. }
  64. void timer1() interrupt 3 /* T0中断服务程序 0.1ms一次中断*/
  65. {
  66.         TH1=(65536-155)/256;
  67.         TL1=(65536-155)%256;
  68.         if(V_0832<angle-2)
  69.                 {
  70. ……………………

  71. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
电赛测试.zip (1.56 MB, 下载次数: 112)



作者: acd19024    时间: 2019-5-29 14:26
我想问adxl345可以用那个替换

作者: !@#¥1    时间: 2019-6-17 17:56
你好。关于帆板控制系统的资料我下载不了,你能不能分享给我一下。十分感谢
作者: 1234567890...    时间: 2021-5-15 08:16
大赞,I LIKE
作者: momo_kk    时间: 2021-5-16 17:52
角度传感器用的是mpu6050吧





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1