久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10208|回復: 6
打印 上一主題 下一主題
收起左側

小弟想通過調節電位器的阻值配合51單片機來控制步進電機轉動角度

[復制鏈接]
跳轉到指定樓層
樓主
ID:29221 發表于 2011-11-11 07:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

如題,想通過調節電位器的阻值配合ad0804芯片和單片機來空控制步進電機旋轉的角度。電路部分如下

左邊只用到電位器了2和4接上。
然后單片機的P1.0----P1.3口接步進電機驅動板,驅動板使用的是uln2003芯片,ad數據送到P2口。

通過別人指點和自己理解寫了下面的程序。不知道正確否,希望大家幫幫忙。我也知道應該盡力自己發現并解決問題,這次真不會。

 //use adc0804 and cs51 to control the motor 
*************************
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit adcs=P3^5;
sbit adrd=P3^0;
sbit adwr=P3^3;
     
/*sbit F1 = P1^0;
sbit F2 = P1^1;
sbit F3 = P1^2;
sbit F4 = P1^3;*/
unsigned char code tab[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6}; //反轉 A-AB-B-BC-C-CD-D-DA (即一個脈沖,轉 3.75 度)       
unsigned char code FFZ[8]={0xf6,0xf7,0xf3,0xfb,0xf9,0xfd,0xfc,0xfe};//正轉


void delay50us(uint i)
{
      uchar j;
 for(i=0;i>0;i--)
           for(j=6245;j>0;j--);
} 

 


void main()
{


   
   
  while(1)  
    {   
       
         uchar value,a,k,l,m,n,s,t,w,o,b,c;
         adcs=0;
         adwr=0;
         delay50us(2);
         adwr=1;
         adcs=1;
         delay50us(10);
         adcs=0;
         adrd=0;
         delay50us(1);
         value=P2;//000--255八位ad范圍0000 0000~~1111 1111
         adrd=1;
         adcs=1;
      
         k=value/3;//每增加3,步進電機走一拍
         l=value%3;//肯定小于3不用考慮
         n=k/8;//可以轉幾個八拍
         s=k%8;
         t=s/3;
  
         a=P2;//此行和下面兩行是用來判斷電位器變大還是變小
         delay50us(5);//延時
         b=P2;
        if((c-b)<0)  //如果電位器阻值變大
         {


             if(k>8)//不夠八拍或者超過八拍兩種情況
             a=1;
             else
             a=0;
             switch(a)
            {
                       case 0:
                      for(m=0;m<k-1;m++) 
                          {
                                   P1=tab[m];
                                   delay50us(50);
    
                          }  
                          break;

                       case 1:
        
                         while(n--)
                              {
                                   for(o=0;m<8;o++) 
                                       {
                                            P1=tab[o];
                                           delay50us(5);
                                       }
                                }
                      for(w=0;w<t-1;w++) 
                          {
                                 P1=tab[w];
                                 delay50us(50);
    
                          } 
        
                          break;

             }
   

          

        }

        else if((c-b)>0) //如果電位器阻值變小
       
          { 
                if(k>8)
                a=1;
                else
                a=0;
                  switch(a)
                      {
                           case 0:
                           for(m=0;m<k-1;m++) 
                               {
                                     P1=ffz[m];
                                     delay50us(50);
    
                                 }  
                                  break;

                           case 1:
        
                            while(n--)
                                  {
                                          for(o=0;m<8;o++) 
                                             {
                                                  P1=ffz[o];
                                                  delay50us(5);
                                  }
                       }
                        for(w=0;w<t-1;w++) 
                             {
                                    P1=ffz[w];
                                     delay50us(50);
    
                               } 
        
                               break;

                      }
   

             }         

      }

 

 }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:29221 發表于 2011-11-11 19:24 | 只看該作者

大家提提意見吧

回復

使用道具 舉報

板凳
ID:20559 發表于 2011-11-12 16:39 | 只看該作者
1,AD0804 是需要驅動程序的,你先寫好驅動程序,控制AD采集電阻值,這是一個uchar型的。每次讀取這個值就是你程序中的C值 2,需要修正你的采集值精度 3,學會封裝函數 4,你要控制轉的角度應該是一個相對角度吧。這個你要做一個比例。例如電阻是是10K,對應AD采樣為256,調節到1K,就是256/10,AD采樣值這個取實際采樣值AD_NUM2.然后用之前的測試AD值和當前的AD_NUM2比較,然后按照你的程序中的意圖實現你的功能。 5,AD0804精度太低了,這個出來效果應該不太好。不過可以實現簡單的功能。
回復

使用道具 舉報

地板
ID:29221 發表于 2011-11-12 17:20 | 只看該作者

非常感謝你 ,我自己難以發現不足,按照您說的,我好好研究研究。

回復

使用道具 舉報

5#
ID:192615 發表于 2017-5-7 15:12 | 只看該作者

可惜沒有電路圖!
回復

使用道具 舉報

6#
ID:197750 發表于 2017-5-7 15:22 | 只看該作者
這個貌似不太懂
回復

使用道具 舉報

7#
ID:326699 發表于 2018-5-16 10:37 | 只看該作者
樓主方便發一下完整的,電路嗎,我也真在做電機的角度控制,可以交流下嗎,等你留言
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久国内精品 | 国产精品不卡 | 99pao成人国产永久免费视频 | 久久成人久久 | 免费日韩av | 久久精品视频在线观看 | 91就要激情 | 精品九九久久 | 激情五月婷婷综合 | 91精品国产欧美一区二区 | 一区二区三区免费 | 欧美成人aaa级毛片在线视频 | 日韩精品在线视频 | 久久精品亚洲国产 | 国产综合久久 | 在线成人av | 国产成人高清成人av片在线看 | 欧美日韩不卡 | 一本色道精品久久一区二区三区 | 精品久久久久久久久久久 | www.成人久久| 中文字幕亚洲精品 | 国产精品久久久久久久久久久久午夜片 | 在线免费观看欧美 | 亚洲毛片在线观看 | 欧美黄色片在线观看 | 一区日韩| 国产我和子的乱视频网站 | 四虎首页 | 盗摄精品av一区二区三区 | 一区二区视频在线观看 | 国产精品1区2区 | 国产精品不卡一区 | 国产98在线 | 免费, | 国产精品成人国产乱一区 | 欧美成人一级视频 | 97中文视频 | 国产乱码精品一区二区三区忘忧草 | www.操com| 久久久精品综合 | 国产免费自拍 |