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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2401|回復: 1
收起左側

上位機控制步進電機細分脈沖數不正確,keil上存在的單片機程序問題

[復制鏈接]
ID:304677 發表于 2018-4-21 10:41 | 顯示全部樓層 |閱讀模式
以下代碼有部分定義未用到,請大家幫我看看為什么按照比例乘以對應的細分后的單位脈沖,得到的角度不是自己設定的,也就是最終的脈沖數不正確,無法精確控制角度,是什么原因呀。
  1. #include <reg52.h>

  2. sbit led=P0;

  3. //--------定義使用的IO口---------//
  4. sbit PWM=P1^0;       //脈沖輸出                  
  5. sbit key_run=P1^4;   //啟動            
  6. sbit led_run=P0^0;   //運行led指示燈
  7. sbit led_d=P0^3;     //數據是否相同檢測     
  8. sbit led1=P0^4;      //接收串口數據測試燈   
  9. //-------定義全局變量--------//                  

  10. unsigned char pwm_duty=0,adc=0;
  11. unsigned char receiveData=0;                     
  12. void Turn_the_Setting_Angle(unsigned int dat);
  13. void TimeConfig();
  14. void delay(unsigned int c);//延時函數        
  15. void main(void)
  16.       {
  17.                  TimeConfig();
  18.                  led_d=0;
  19.                  led1=0;
  20.             while(1)
  21.             {
  22.                         
  23.               if(adc==1)        //P0.4口測試數據led/接收數據閃爍      
  24.                           {
  25.                                   led1=1;
  26.                                  adc=0;
  27.                           }
  28.                           Turn_the_Setting_Angle((unsigned int)(receiveData));//來自串口發來的數據
  29.                           receiveData=0;
  30.                           delay(1000);
  31.                           led1=0;

  32.             }
  33.         }

  34.            void TimeConfig()
  35.            {
  36.            EA = 0;
  37.           //***********串口時鐘設置************//
  38.            TCLK=1;//串口設置時鐘為定時器2
  39.            RCLK=1;
  40.            TH2=0xFF; //9600bps 11.0592MHz的時鐘頻率
  41.            TL2=0xDB;
  42.            RCAP2H=0xFF; //方式1和方式3的波特率=fosc/(32*(65535-(RCAP2H,RCAP2L))
  43.            RCAP2L=0xDB;
  44.            SCON=0x50;//SM0? SM1? SM2? REN? TB8 RB8? TI RI
  45.            PCON &= 0x7F; //sMOD=0;
  46.                ET2=1;
  47.            ES=1;
  48.                EA = 1;
  49.                 TR2=1;
  50.           }         
  51.           //**************串口延時函數************//
  52.                void Usart() interrupt 4
  53.             {
  54.                         adc=1;
  55.                  receiveData=SBUF;     //出去接收到的數據
  56.                    if(receiveData==0x02)//判斷是否接收到相同數據
  57.                      led_d=1;
  58.                     else
  59.                      led_d=0;
  60.                          RI = 0;              //清除接收中斷標志位
  61.                  SBUF=receiveData;    //將接收到的數據放入到發送寄存器
  62.                  while(!TI);                  //等待發送數據完成
  63.                  TI=0;                              //清除發送完成標志位
  64.             }         
  65. //********************讓電機轉到設定的角度***********************//
  66. //***************************************************************//
  67.            //dat為設定角度
  68.            void Turn_the_Setting_Angle(unsigned int dat)
  69.               {
  70.                 float i=2.222,j;              //  細分開關配置                      800/360=2.222         200/360=0.555          1600/360=4.44  3200/360=8.888  6400/360=17.778
  71.                 unsigned int Pulse_number;  // Pulse_number為脈沖數
  72.                 j=dat*i;                                 
  73. //                                j=dat/1.8;          //200脈沖時對應的步距角1.8,無細分
  74. //                  Pulse_number= (unsigned int)(j);
  75.                                 Pulse_number= (unsigned int)(j*1.412);         //1.412為上位機發來的16進制數轉換為對應比例角度
  76.                         while(Pulse_number)
  77.                              {
  78.                                 PWM=0;
  79.                                 delay(20);
  80.                                 PWM=1;      
  81.                                 delay(20);
  82.                                 Pulse_number=Pulse_number-1;
  83.                              }
  84.               }


  85.              void delay(unsigned int x)        //延時1ms
  86.               {
  87.                     unsigned int i,j;
  88.                     for(i=x;i>0;i--)
  89.                      {
  90.                        for(j=110;j>0;j--) ;
  91.                      }
  92.               }
復制代碼



評分

參與人數 1黑幣 +1 收起 理由
LZM123 + 1 贊一個!

查看全部評分

回復

使用道具 舉報

ID:304677 發表于 2018-4-23 10:12 | 顯示全部樓層
以上原因總結為,串口為接收到設定的角度,在接受到設定角度的情況下是可以實現轉動固定角度的。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 8x国产精品视频一区二区 | 国产日韩欧美另类 | 久久久www成人免费无遮挡大片 | 99热在这里只有精品 | 久久国产精品-国产精品 | 欧美日韩中文字幕在线 | 欧美综合国产精品久久丁香 | 91精品国产综合久久久动漫日韩 | 亚洲高清在线 | 亚洲综合色视频在线观看 | 欧美精品区| av在线影院| 日日摸夜夜爽人人添av | 久久精品无码一区二区三区 | 人人玩人人干 | 国产精品一区二区三区在线 | 欧美v在线观看 | a免费观看| 日本a网站 | 天天影视网天天综合色在线播放 | 亚洲精品国产电影 | 九九热精品免费 | 国产精品99久久久久久久vr | 麻豆精品国产91久久久久久 | 久久久国产精品一区 | 国产成人综合在线 | 国产一级在线观看 | 国产在线观看一区二区 | 欧美一级二级在线观看 | 亚洲国产欧美在线人成 | 玖玖综合网 | 一区二区三区欧美在线 | 三级黄视频在线观看 | 国产精品成人一区二区 | 日日艹夜夜艹 | 亚洲成人一区 | 国产网站久久 | 国产精品一区二区三区在线播放 | 欧美一区二区 | 久久久久久国产精品久久 | 日韩欧美精品一区 |