以下代码有部分定义未用到,请大家帮我看看为什么按照比例乘以对应的细分后的单位脉冲,得到的角度不是自己设定的,也就是最终的脉冲数不正确,无法精确控制角度,是什么原因呀。
- #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--) ;
- }
- }
复制代码
|