deal,电机

来源:互联网 发布:淘宝发布食品类宝贝 编辑:程序博客网 时间:2024/05/16 19:40

deal.c

#include "deal.h"u8 arduino_speed=0;int arduino_angle=0;u8 arduino_judge=0;/////-+uint8_t arduino_temp[10];int8_t arduino_TEMP[10]={42,44,52,44,43,44,48,44};u8 arduino_counter=0;u8 douhao_pro(u8 *buf,u8 cx){                   u8 *p=buf;    while(cx)    {                //if(*buf=='*'||*buf<' ')return 0XFF;//Óöµ½'*'»òÕß·Ç·¨×Ö·û,Ôò²»´æÔÚµÚcx¸ö¶ººÅ        if(*buf==',')cx--;        buf++;    }    return buf-p;    }void arduino_Analysis(u8 *buf){                u8 posx;    u8 i=0;       char str[5]={0};             //printf("////123\r\n");    posx=douhao_pro(buf,1);                                 if(posx!=0XFF)    {        while(*(posx+buf)!=44)        {             str[i++]=*(posx+buf);             posx++;        }        i=0;        arduino_speed=atoi(str);        memset(str,0,5);        } //   //printf("value_1:%d\r\n",value_1);///////////////////////////-+ºÅ     posx=douhao_pro(buf,2);                                    if(posx!=0XFF)    {        while(*(posx+buf)!=',')        {             str[i++]=*(posx+buf);             posx++;        }        i=0;            arduino_judge=atoi(str);        memset(str,0,5);        } //  // printf("value_2:%d\r\n",value_2);      posx=douhao_pro(buf,3);                                   if(posx!=0XFF)    {        while(*(posx+buf)!=',')        {             str[i++]=*(posx+buf);             posx++;        }        i=0;        arduino_angle=atoi(str);         memset(str,0,5);       } }void USART3_IRQHandler(void)           //´®¿Ú2È«¾ÖÖжϷþÎñº¯Êý{      if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжÏÓÐЧ,Èô½ÓÊÕÊý¾Ý¼Ä´æÆ÷Âú     {         arduino_temp[arduino_counter] = USART_ReceiveData(USART3);   //½ÓÊÕÊý¾Ý         if(arduino_counter == 0 && arduino_temp[0]!=42) return;    //arduino_counter == 0&&temp[0]=42 ÊÇ¶ÔµÄ       arduino_counter++;                        if(arduino_counter==10) //½ÓÊÕµ½n¸öÊý¾Ý             {                         arduino_counter=0; //ÖØи³Öµ£¬×¼±¸ÏÂÒ»Ö¡Êý¾ÝµÄ½ÓÊÕ                        memcpy(arduino_TEMP,arduino_temp,10);                  arduino_Analysis(arduino_TEMP);////////////////////////////arduino½âÎö             }    }}

deal.h

#ifndef __DEAL_H#define __DEAL_H    #include "stdlib.h"#include "string.h"#include "stm32f10x.h"u8 douhao_pro(u8 *buf,u8 cx);void arduino_Analysis(u8 *buf);extern u8 arduino_speed;extern int arduino_angle;#endif```main.c

include “stm32f10x.h”

include “delay.h”

include “sys.h”

include “usart.h”

include “time.h”

include “stm32f10x_it.h”

include “adc.h”

include “stdlib.h”

include “iwdg.h”

include “stdio.h”

include “string.h”

//#include “lcd.h”

include “windspeed.h”

include “deal.h”

include “5110.h”

__IO int value_1 = 0;////´¬Ç°ÃæµÄ¶æ Öµ¾ÍÊǽǶÈ-90µ½90¶È
__IO int value_2 = 5;////////5 µµÊÇÍ£
__IO int value_3 = 0; // º½ÏòÇл»
__IO int value_4 = 0; // º½¼£Çл»
///////value_5=1 ´¬ÉÏ¿ØÖÆ value_5 = 0 °¶ÉÏ¿ØÖÆ
__IO int value_5 = 1; //´¬ÉÏÊÖ¶¯Çл» 1 ´¬ÉÏģʽ 0 °¶ÉÏģʽ

int16_t adxc4_zhongzhi=3110; ////////////////Ç° È˹¤²Ù¶æµÄÖÐÖµ
int current=0,former=0,sendvalue=0,orgin=0,DuoJiao=0;
extern unsigned char sign;
char buffer[30]={0x68,0x2c,0};
extern uint8_t TEMP[40];////
int angle;
u16 adcx,adcx4,adcx7;//////
char i=0;
float temperate=0;
float delta=0;///ÐèҪתµÄ½Ç¶ÈÖµ

define dianweiqi_zhongzhi 2500

int jiaozhun_zhongzhi=0;
int adcx1_chazhi=0;//////adc1²îÖµ
int adcx4_chazhi=0;//////adc4²îÖµ
u8 jiaozhun_dian_flag=1;////////////////////
u8 time_adc_flag=0;
int err=0;
int err1=0;////У׼Îó²î
int err_duo=0;///Ç° ¶æµÄÎó²î
int err_qianhou_duo=0;////
u8 ad_time_flag=0;
u8 c=0;

extern uint8_t arduino_TEMP[10];
u8 douhao(u8 *buf,u8 cx);
void str_Analysis(u8 *buf);
void judge(int16_t temp);
float WS_speed;
u16 WD_direction;
//int sss=-5;
int main(void)
{
u8 i;
u8 lcd_buff[10]={0};////////lcd5110´òÓ¡¸¨Öúº¯Êý
delay_init();
NVIC_Configuration();
USART1_Config();
USART2_Config();
LED_Init();
USART3_Config();
UART4_Config();
UART5_Config();
IWDG_Init(6,625); // 3s¿´ÃŹ·Ê±¼ä
Adc_Init();///
TIM1_PWM_Init();////
TIM_SetCompare4(TIM1,49);
///////////¶æ»ú³õʼ»¯
Motor_Init(10, 10, 2);////
TIM2_TIM3_PWM(1000,2); /////
TIM4_Init(999,7199);//////¶¨Ê±0.1s ·çËÙÒÇ
//TIM4_Init(999,719);/////////////¶¨Ê±²É¼¯adÖµ100*720/72000000
//LCD_Init();
//mini_display();
LCD5110_Init_IO();
LCD_init();////5110
LCD_clear();//5110ÇåÆÁ
while(1)
{
if(jiaozhun_dian_flag==0)/////////////µ¥Æ¬»úµôµçºó´ÓÐÂУ׼
{

                        TIM_SetCompare4(TIM1,49);                        adcx=Get_Adc_Average1(ADC_Channel_1,50);                    sprintf(lcd_buff,"%d",dianweiqi_zhongzhi);                    LCD_write_english_string(0,0,"zz_adcx1:");                    LCD_write_english_string(54,0,lcd_buff);                    sprintf(lcd_buff,"%d",adcx);                    LCD_write_english_string(0,1,"adcx1:");                    LCD_write_english_string(36,1,lcd_buff);                     // printf("adcx=%d\r\n",adcx);                        //jiaozhun_zhongzhi=dianweiqi_zhongzhi;                        // printf("jiaozhun_zhongzhi=%d\r\n",jiaozhun_zhongzhi);                        err1=adcx-dianweiqi_zhongzhi;                        // printf("err1=%d\r\n",err1);                                 if(err1<-5)//////5   ¶æÏòÓÒת                    {                                GPIO_SetBits(GPIOA,GPIO_Pin_5);                                 TIM2_TIM3_PWM(500,50);/////2000¸öÂö³å 500ÊÇ0.5ms                    }                    else if(err1>5)////-5                    {                            GPIO_ResetBits(GPIOA,GPIO_Pin_5);////////¶æÏò×óת                            TIM2_TIM3_PWM(500,50);                     }                      else                     {                        jiaozhun_dian_flag=1;                    }                               }            else            {                ////////lcd5110                 //dianweiqi_zhongzhi                     sprintf(lcd_buff,"%d",dianweiqi_zhongzhi);                     LCD_write_english_string(0,0,"zz_adcx1:");                     LCD_write_english_string(54,0,lcd_buff);                    ///////////////////////////////////////////////////                     sprintf(lcd_buff,"%d",adcx);                     LCD_write_english_string(0,1,"adcx1:");                     LCD_write_english_string(36,1,lcd_buff);                 //LCD_write_number(54,0,dianweiqi_zhongzhi%10);                 //LCD_write_number(48,0,(dianweiqi_zhongzhi/10)%10);                 //LCD_write_number(42,0,(dianweiqi_zhongzhi/100)%10);                // LCD_write_number(36,0,(dianweiqi_zhongzhi/1000)%10);                    //          for(i=0;i<10;i++)                    //          printf("aaa=%d\r\n",arduino_TEMP[i]);                WS_speed=windspeed_Analysis();//////////////·çËÙ                    //WS_speed=112.1;              //printf("WS_speed=%.1fm/s\r\n",WS_speed);                sprintf(lcd_buff,"%.1f",WS_speed);                    LCD_write_english_string(0,2,"fengsu:");                    LCD_write_english_string(42,2,lcd_buff);                WD_direction=winddirection_Analysis();///////·çÏò                        sprintf(lcd_buff,"%d",WD_direction);                    LCD_write_english_string(0,3,"fengxg:");                    LCD_write_english_string(42,3,lcd_buff);               // printf("WD_direction=%d\r\n",WD_direction);                    str_Analysis(TEMP); ////////////////////////////////////////×Ö·ûÊý×é½âÎö                            if(value_3==1||value_4==2)                        {                            value_1=(int16_t)delta;    //º½Ïò,º½¼£Ä£Ê½¶æ»ú¿ØÖÆ                            //printf("value_1=%d\r\n",value_1);                        }                    // printf("value_3=%d\r\n",value_3);                    // printf("value_4=%d\r\n",value_4);       //////////////////////////////////////                                            if(value_5==1)                             //´¬ÉÏÊÖ¶¯¿ØÖÆ̨¿ØÖÆ             {                          USART_Cmd(USART3, ENABLE);                               //ʹÄÜ USART3                          arduino_Analysis(arduino_TEMP);////////////////////////////arduino½âÎö                      //printf("arduino_speed=%d\r\n",arduino_speed);                 // printf("arduino_angle=%d\r\n",arduino_angle);                            DuoJiao=arduino_angle;/////×ó                          value_1=DuoJiao;                 ////////////////////////////////////////////////value_1                 if(value_1>=0)             {                 //memset(lcd_buff,0,10);                 LCD_write_english_string(36,4,"+");                 LCD_write_number(48,4,value_1%10);                 LCD_write_number(42,4,(value_1/10)%10);                 //sprintf(lcd_buff,"%d",value_1);                // LCD_write_english_string(0,4,"fengxg:");                // LCD_write_english_string(48,4,lcd_buff);                // memset(lcd_buff,0,10);                // LCD_ShowNum(240,280,value_1,2,24);     }             else             {                   LCD_write_english_string(36,4,"-");                  LCD_write_number(48,4,abs(value_1)%10);                  LCD_write_number(42,4,(abs(value_1)/10)%10);                  //sprintf(lcd_buff,"%d",abs(value_1));                // LCD_write_english_string(0,4,"fengxg:");                 // LCD_write_english_string(48,4,lcd_buff);                 // memset(lcd_buff,0,10);                  //LCD_ShowString(230,280,200,24,24,"-");                 // LCD_ShowNum(240,280,abs(value_1),2,24);     }                              //////¶æ»ú±£»¤                             if(value_1>=70)                                     value_1=70;                             if(value_1<=-70)                                     value_1=-70;                                                   value_2=arduino_speed;                             LCD_write_number(0,4,value_2);//////////////////////////////////////////////value_2                             printf("value_2=:%d\r\n ",value_2);//front_angle                             ///////////////////////ÉÏÐÐ                                     if(arduino_speed==1)                             {                                 TIM_SetCompare4(TIM1,100);//////×î´óËÙ¶È   ÉÏ        4µµ                                }                                else if(arduino_speed==2)                                {                                    TIM_SetCompare4(TIM1,88);///////         ÉÏ         3µµ                                }                                else if(arduino_speed==3)                                {                                    TIM_SetCompare4(TIM1,76);///////         ÉÏ         2µµ                                }                                else if(arduino_speed==4)                                {                                    TIM_SetCompare4(TIM1,64);///////         ÉÏ         1µµ                                }                                else if(arduino_speed==5)                                {                                    TIM_SetCompare4(TIM1,49);///////////////     ÖмäÍ£                                }                                else if(arduino_speed==6)                                {                                    TIM_SetCompare4(TIM1,32);///////          Ï       1µµ                                }                                    else if(arduino_speed==7)                                {                                    TIM_SetCompare4(TIM1,21);///////          Ï       2µµ                                }                                    else if(arduino_speed==8)                                {                                    TIM_SetCompare4(TIM1,10);///////          Ï       3µµ                                }                                else if(arduino_speed==9)                             {                                 TIM_SetCompare4(TIM1,1);//////×î´óËÙ¶È     Ï       4µµ                                }                                else                                 {                                        TIM_SetCompare4(TIM1,49);///////////////ÖмäÍ£                                 }          }                else  ////  value_5=0                {                     USART_Cmd(USART3, DISABLE);                               //¹Ø±Õ USART3                     //value_2=5;                    ///////////////////////ÉÏÐÐ                     if(value_2==1)                     {                         TIM_SetCompare4(TIM1,100);//////×î´óËÙ¶È   ÉÏ        4µµ                        }                        else if(value_2==2)                        {                            TIM_SetCompare4(TIM1,88);///////         ÉÏ         3µµ                        }                        else if(value_2==3)                        {                            TIM_SetCompare4(TIM1,76);///////         ÉÏ         2µµ                        }                        else if(value_2==4)                        {                            TIM_SetCompare4(TIM1,64);///////         ÉÏ         1µµ                        }                        else if(value_2==5)                        {                            TIM_SetCompare4(TIM1,49);///////////////     ÖмäÍ£                        }                        else if(value_2==6)                        {                            TIM_SetCompare4(TIM1,32);///////          Ï       1µµ                        }                            else if(value_2==7)                        {                            TIM_SetCompare4(TIM1,21);///////          Ï       2µµ                        }                            else if(value_2==8)                        {                            TIM_SetCompare4(TIM1,10);///////          Ï       3µµ                        }                        else if(value_2==9)                     {                         TIM_SetCompare4(TIM1,1);//////×î´óËÙ¶È     Ï       4µµ                        }                        else                         {                                TIM_SetCompare4(TIM1,49);///////////////ÖмäÍ£                         }                    }            adcx=Get_Adc_Average1(ADC_Channel_1,100);            adcx1_chazhi=adcx-dianweiqi_zhongzhi;                angle=(adcx1_chazhi*90)/1185;              judge(value_1);////////////value_1ÆÚÍûµÄ½Ç¶ÈÖµangleÊÇʵ¼ÊµÄ½Ç¶ÈÖµ      ///////////////////·¢Ë͵½max°å×ÓµÄÊý¾Ý                sprintf(buffer+2,"%.1f,%d,%d,%.1f,%d,",(float)angle,value_1,value_2,WS_speed,WD_direction);                for(i=0;i<30;i++)                        {                               USART_SendData(USART2, buffer[i]);                                 while(USART_GetFlagStatus(USART2, USART_FLAG_TC) != SET);   //·¢ËͶæ»ú½Ç¶ÈÖµ                        }           }                IWDG_Feed();//ι¹·   }

}

u8 douhao(u8 *buf,u8 cx)
{
u8 *p=buf;
while(cx)
{
if(buf==’‘||buf<’ ‘)return 0XFF;//Óöµ½’‘»òÕß·Ç·¨×Ö·û,Ôò²»´æÔÚµÚcx¸ö¶ººÅ
if(*buf==’,’)cx–;
buf++;
}
return buf-p;
}
void str_Analysis(u8 *buf)
{
u8 posx;
u8 i=0;
char str[10]={0};

posx=douhao(buf,1);                             if(posx!=0XFF){while(*(posx+buf)!=','){   str[i++]=*(posx+buf);   posx++;}i=0;value_1=atoi(str);

memset(str,0,10);
}
//printf(“value_1:%d\r\n”,value_1);

 posx=douhao(buf,2);                                if(posx!=0XFF){while(*(posx+buf)!=','){   str[i++]=*(posx+buf);   posx++;}i=0;    value_2=atoi(str);memset(str,0,10);   } // printf("value_2:%d\r\n",value_2); posx=douhao(buf,3);                                if(posx!=0XFF){while(*(posx+buf)!=','){   str[i++]=*(posx+buf);   posx++;}i=0;value_3=atoi(str);memset(str,0,10);   } // printf("value_3:%d\r\n",value_3);posx=douhao(buf,4);                             if(posx!=0XFF){while(*(posx+buf)!=','){   str[i++]=*(posx+buf);   posx++;}i=0;value_4=atoi(str);memset(str,0,10);   }  //printf("value_4:%d\r\n",value_4);posx=douhao(buf,5);                             if(posx!=0XFF){while(*(posx+buf)!=','){   str[i++]=*(posx+buf);   posx++;}i=0;value_5=atoi(str);memset(str,0,10);   }  //printf("value_5:%d\r\n",value_5);posx=douhao(buf,6);                             if(posx!=0XFF){                                                   delta=atof(buf+posx);  } //printf("delta:%f\r\n",delta);// printf("%s",buf);

}

void judge(int16_t temp)
{
int32_t err_kuoda=0;
int16_t err_angle=0;
int16_t err_angle_fan=0;
err=temp-angle;
//printf(“angle=%d\r\n”,angle);
//printf(“temp=%d\r\n”,temp);
err_kuoda=err*14;
//printf(“err=%d\r\n”,err);
// printf(“err_kuoda=%d\r\n”,err_kuoda);
//if(err_kuoda>0)
//{
if(err_kuoda>=800&&err_kuoda<900)////50 du
{
err_angle=50;
// GPIO_SetBits(GPIOA,GPIO_Pin_5);
// TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms

        }        else  if(err_kuoda>=650&&err_kuoda<800)/////40 du        {            err_angle=40;             //GPIO_SetBits(GPIOA,GPIO_Pin_5);              // TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else if(err_kuoda>=520&&err_kuoda<650)/////30 du        {                err_angle=30;                //GPIO_SetBits(GPIOA,GPIO_Pin_5);                   //TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else if(err_kuoda>=390&&err_kuoda<520)/////20 du        {                err_angle=20;                //GPIO_SetBits(GPIOA,GPIO_Pin_5);                   //TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else if(err_kuoda>=260&&err_kuoda<390)/////10 du        {                err_angle=10;                //GPIO_SetBits(GPIOA,GPIO_Pin_5);                   //TIM2_TIM3_PWM(500,400);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else if(err_kuoda>=130&&err_kuoda<260)/////5 du        {                err_angle=5;            //  GPIO_SetBits(GPIOA,GPIO_Pin_5);                 //TIM2_TIM3_PWM(500,200);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else if(err_kuoda>=13)        {                err_angle=1;            //  GPIO_SetBit            //GPIO_SetBits(GPIOA,GPIO_Pin_5);           //  TIM2_TIM3_PWM(500,40);/////2000¸öÂö³å 500ÊÇ0.5ms        }        else         {            err_angle=0;  }    switch(err_angle)        {            case 50:  GPIO_SetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms          case 40:  GPIO_SetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 30:  GPIO_SetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 20:  GPIO_SetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 10:  GPIO_SetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms          case 5:   GPIO_SetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,200); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 1:   GPIO_SetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,40); break;/////2000¸öÂö³å 500ÊÇ0.5ms            default:break;  }     if(err_kuoda<=-780)//////////50du    {        err_angle_fan=50;    //  GPIO_ResetBits(GPIOA,GPIO_Pin_5);    //  TIM2_TIM3_PWM(500,2000); }    else if(err_kuoda>-780&&err_kuoda<-650)/////-40du    {        err_angle_fan=40;    //  GPIO_ResetBits(GPIOA,GPIO_Pin_5);    //  TIM2_TIM3_PWM(500,1600);}    else if(err_kuoda>=-650&&err_kuoda<-520)/////-30du    {        err_angle_fan=30;        ///TIM2_TIM3_PWM(500,1200);}    else if(err_kuoda>=-520&&err_kuoda<-390)/////-20du    {        err_angle_fan=20;        //GPIO_ResetBits(GPIOA,GPIO_Pin_5);        //TIM2_TIM3_PWM(500,800);}    else if(err_kuoda>=-390&&err_kuoda<-260)/////-10du    {        err_angle_fan=10;        //GPIO_ResetBits(GPIOA,GPIO_Pin_5);        ///TIM2_TIM3_PWM(500,400);}else if(err_kuoda>=-260&&err_kuoda<-130)/////-5du    {        err_angle_fan=5;        //GPIO_ResetBits(GPIOA,GPIO_Pin_5);        //TIM2_TIM3_PWM(500,200);}    else if(err_kuoda<=-13)////    {            err_angle_fan=1;            //GPIO_ResetBits(GPIOA,GPIO_Pin_5);            //TIM2_TIM3_PWM(500,40);     }    else    {        err_angle_fan=0;}    switch(err_angle_fan)        {            case 50:  GPIO_ResetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms          case 40:  GPIO_ResetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 30:  GPIO_ResetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 20:  GPIO_ResetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 10:  GPIO_ResetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,400); break;/////2000¸öÂö³å 500ÊÇ0.5ms          case 5:   GPIO_ResetBits(GPIOA,GPIO_Pin_5);    TIM2_TIM3_PWM(500,200); break;/////2000¸öÂö³å 500ÊÇ0.5ms            case 1:   GPIO_ResetBits(GPIOA,GPIO_Pin_5);  TIM2_TIM3_PWM(500,40); break;/////2000¸öÂö³å 500ÊÇ0.5ms            default:break;  }

}

“`

0 0
原创粉丝点击