亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
上位機控制步進電機細分脈沖數不正確,keil上存在的單片機程序問題
[打印本頁]
作者:
西柚大白菜
時間:
2018-4-21 10:41
標題:
上位機控制步進電機細分脈沖數不正確,keil上存在的單片機程序問題
以下代碼有部分定義未用到,請大家幫我看看為什么按照比例乘以對應的細分后的單位脈沖,得到的角度不是自己設定的,也就是最終的脈沖數不正確,無法精確控制角度,是什么原因呀。
#include <reg52.h>
sbit led=P0;
//--------定義使用的IO口---------//
sbit PWM=P1^0; //脈沖輸出
sbit key_run=P1^4; //啟動
sbit led_run=P0^0; //運行led指示燈
sbit led_d=P0^3; //數據是否相同檢測
sbit led1=P0^4; //接收串口數據測試燈
//-------定義全局變量--------//
unsigned char pwm_duty=0,adc=0;
unsigned char receiveData=0;
void Turn_the_Setting_Angle(unsigned int dat);
void TimeConfig();
void delay(unsigned int c);//延時函數
void main(void)
{
TimeConfig();
led_d=0;
led1=0;
while(1)
{
if(adc==1) //P0.4口測試數據led/接收數據閃爍
{
led1=1;
adc=0;
}
Turn_the_Setting_Angle((unsigned int)(receiveData));//來自串口發來的數據
receiveData=0;
delay(1000);
led1=0;
}
}
void TimeConfig()
{
EA = 0;
//***********串口時鐘設置************//
TCLK=1;//串口設置時鐘為定時器2
RCLK=1;
TH2=0xFF; //9600bps 11.0592MHz的時鐘頻率
TL2=0xDB;
RCAP2H=0xFF; //方式1和方式3的波特率=fosc/(32*(65535-(RCAP2H,RCAP2L))
RCAP2L=0xDB;
SCON=0x50;//SM0? SM1? SM2? REN? TB8 RB8? TI RI
PCON &= 0x7F; //sMOD=0;
ET2=1;
ES=1;
EA = 1;
TR2=1;
}
//**************串口延時函數************//
void Usart() interrupt 4
{
adc=1;
receiveData=SBUF; //出去接收到的數據
if(receiveData==0x02)//判斷是否接收到相同數據
led_d=1;
else
led_d=0;
RI = 0; //清除接收中斷標志位
SBUF=receiveData; //將接收到的數據放入到發送寄存器
while(!TI); //等待發送數據完成
TI=0; //清除發送完成標志位
}
//********************讓電機轉到設定的角度***********************//
//***************************************************************//
//dat為設定角度
void Turn_the_Setting_Angle(unsigned int dat)
{
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
unsigned int Pulse_number; // Pulse_number為脈沖數
j=dat*i;
// j=dat/1.8; //200脈沖時對應的步距角1.8,無細分
// Pulse_number= (unsigned int)(j);
Pulse_number= (unsigned int)(j*1.412); //1.412為上位機發來的16進制數轉換為對應比例角度
while(Pulse_number)
{
PWM=0;
delay(20);
PWM=1;
delay(20);
Pulse_number=Pulse_number-1;
}
}
void delay(unsigned int x) //延時1ms
{
unsigned int i,j;
for(i=x;i>0;i--)
{
for(j=110;j>0;j--) ;
}
}
復制代碼
作者:
西柚大白菜
時間:
2018-4-23 10:12
以上原因總結為,串口為接收到設定的角度,在接受到設定角度的情況下是可以實現轉動固定角度的。
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1