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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32黑線循跡智能小車的代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:297748 發表于 2018-12-9 22:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機源程序如下:
  1. #include "motor.h"
  2. #include "Math.h"
  3. #include "delay.h"
  4. #include "stm32f10x.h"                  // Device header

  5. signed short sPWMR,sPWML,dPWM;

  6. //GPIO配置函數
  7. /*void MotorGPIO_Configuration(void)
  8. {               
  9.         GPIO_InitTypeDef GPIO_InitStructure;
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE);         //使能PA,PB端口時鐘
  11.         
  12.         GPIO_InitStructure.GPIO_Pin = LEFT_MOTOR_GO;         //左電機方向控制
  13.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  15.         GPIO_Init(LEFT_MOTOR_GO_GPIO, &GPIO_InitStructure);   
  16.         
  17.         GPIO_InitStructure.GPIO_Pin = LEFT_MOTOR_PWM;        
  18.         GPIO_Init(LEFT_MOTOR_PWM_GPIO, &GPIO_InitStructure);
  19.         
  20.         
  21.          GPIO_InitStructure.GPIO_Pin = RIGHT_MOTOR_PWM;        
  22.         GPIO_Init(RIGHT_MOTOR_PWM_GPIO, &GPIO_InitStructure);
  23.         
  24.         GPIO_InitStructure.GPIO_Pin = RIGHT_MOTOR_GO;
  25.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  26.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 
  27.         GPIO_Init(RIGHT_MOTOR_GPIO, &GPIO_InitStructure);
  28.         
  29. }

  30. void run()     //前進
  31. {
  32.         RIGHT_MOTOR_GO_SET;
  33.         RIGHT_MOTOR_PWM_RESET;//PB9
  34.         
  35.         LEFT_MOTOR_GO_SET;
  36.         LEFT_MOTOR_PWM_RESET;//PB8
  37.         
  38.         
  39. }
  40. */

  41. void TIM4_PWM_Init(unsigned short arr,unsigned short psc)
  42. {
  43.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  44.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  45.   GPIO_InitTypeDef GPIO_InitStructure;
  46.         
  47.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//
  48.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB , ENABLE);  //使能GPIO外設時鐘使能   
  49.         
  50.   GPIO_InitStructure.GPIO_Pin = LEFT_MOTOR_GO;         //左電機方向控制 PB7
  51.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  52.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;         
  53.         GPIO_Init(LEFT_MOTOR_GO_GPIO, &GPIO_InitStructure);  
  54.         
  55.         GPIO_InitStructure.GPIO_Pin = LEFT_MOTOR_PWM;         //左電機PWM控制 PB8
  56.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  57.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;            //復用推挽輸出
  58.         GPIO_Init(LEFT_MOTOR_PWM_GPIO, &GPIO_InitStructure);  
  59.                
  60.         
  61.   GPIO_InitStructure.GPIO_Pin = RIGHT_MOTOR_GO;       //右電機方向控制  PA4
  62.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  63.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 
  64.         GPIO_Init(RIGHT_MOTOR_GPIO, &GPIO_InitStructure);
  65.         
  66.         
  67.         GPIO_InitStructure.GPIO_Pin = RIGHT_MOTOR_PWM;       //右電機PWM控制  PB9
  68.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  69.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;            //復用推挽輸出
  70.         GPIO_Init(RIGHT_MOTOR_PWM_GPIO, &GPIO_InitStructure);  
  71.         
  72.         TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值         80K
  73.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值  不分頻
  74.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
  75.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  76.         TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
  77.         
  78.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //選擇定時器模式:TIM脈沖寬度調制模式2
  79.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  80.         TIM_OCInitStructure.TIM_Pulse = 0; //設置待裝入捕獲比較寄存器的脈沖值
  81.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  82.         TIM_OC3Init(TIM4, &TIM_OCInitStructure);  //根據TIM_OCInitStruct中指定的參數初始化外設TIMx
  83.         TIM_OC4Init(TIM4, &TIM_OCInitStructure);  //根據TIM_OCInitStruct中指定的參數初始化外設TIMx
  84.         
  85.         TIM_CtrlPWMOutputs(TIM4,ENABLE);        //MOE 主輸出使能        
  86.   
  87.         TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);  //CH1預裝載使能         
  88.         TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);  //CH1預裝載使能
  89.         
  90.   TIM_ARRPreloadConfig(TIM4, ENABLE); //使能TIMx在ARR上的預裝載寄存器
  91.          TIM_Cmd(TIM4, ENABLE);  //使能TIM1   
  92. }

  93. void SetMotorSpeed(unsigned char ucChannel,signed char cSpeed)
  94. {
  95. //                static short sMotorSpeed = 0;
  96.                 short sPWM;
  97. //          float fDir = 1;
  98.         
  99.                 if (cSpeed>=100) cSpeed = 100;
  100.           if (cSpeed<=-100) cSpeed = -100;
  101.         
  102.            sPWM = 7201 - fabs(cSpeed)*72;
  103.         switch(ucChannel)
  104.         {
  105.                 case 0://右輪
  106.                         TIM_SetCompare3(TIM4,sPWM);
  107.                         if (cSpeed>0)
  108.                                 RIGHT_MOTOR_GO_RESET;
  109.                         else if(cSpeed<0)
  110.                                 RIGHT_MOTOR_GO_SET;               
  111.                         break;
  112.                 case 1://左輪
  113.                   TIM_SetCompare4(TIM4,sPWM);
  114.                         if (cSpeed>0)
  115.                                 LEFT_MOTOR_GO_SET;
  116.                         else if (cSpeed<0)
  117.                                 LEFT_MOTOR_GO_RESET;
  118.                         break;                        
  119.         }
  120. }

  121. //----------------------------------運動函數--------------------------------
  122. void ZYSTM32_run(signed char speed,int time)  //前進函數
  123. {
  124.                   signed char f_speed = - speed;
  125.             SetMotorSpeed(1,f_speed);//左輪  //為負數
  126.                         SetMotorSpeed(0,speed);//右輪   //為正數
  127.                         delay_ms(time);                 //時間為毫秒

  128. }

  129. void ZYSTM32_brake(int time) //剎車函數
  130. {
  131.           SetMotorSpeed(1,0);//左輪   //為0
  132.           SetMotorSpeed(0,0);//右輪   //為0
  133.           RIGHT_MOTOR_GO_RESET;
  134.           LEFT_MOTOR_GO_RESET;
  135.                 delay_ms(time);             //時間為毫秒  
  136. }

  137. void ZYSTM32_Left(signed char speed,int time) //左轉函數
  138. {
  139.           SetMotorSpeed(1,0);//左輪     //左輪不動
  140.           SetMotorSpeed(0,speed);        //右輪為正
  141.                 delay_ms(time);                 //時間為毫秒  

  142. }
  143. void ZYSTM32_Spin_Left(signed char speed,int time) //左旋轉函數
  144. {
  145.           SetMotorSpeed(1,speed);//左輪     //左輪為正
  146.           SetMotorSpeed(0,speed);            //右輪為正
  147.                 delay_ms(time);                    //時間為毫秒  

  148. }
  149. void ZYSTM32_Right(signed char speed,int time)  //右轉函數
  150. {
  151.           signed char f_speed = - speed;
  152.           SetMotorSpeed(1,f_speed);//左輪     //左輪為負
  153.           SetMotorSpeed(0,0);                 //右輪為0
  154.                 delay_ms(time);                   //時間為毫秒  

  155. }
  156. void ZYSTM32_Spin_Right(signed char speed,int time) //右旋轉函數
  157. {
  158.           signed char f_speed = - speed;
  159.           SetMotorSpeed(1,f_speed);//左輪     //左輪為負
  160.           SetMotorSpeed(0,f_speed);            //右輪為負
  161.                 delay_ms(time);                    //時間為毫秒  

  162. }
  163. void ZYSTM32_back(signed char speed,int time) //后退函數
  164. {
  165.           signed char f_speed = - speed;
  166.           SetMotorSpeed(1,speed);//左輪   //為正數
  167.           SetMotorSpeed(0,f_speed);//右輪 //為負數
  168.                 delay_ms(time);                 //時間為毫秒  

  169. }
復制代碼

所有資料51hei提供下載:
4、ZYSTM32-A0 智能小車黑線循跡實驗.rar (330.42 KB, 下載次數: 111)


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

使用道具 舉報

沙發
ID:1 發表于 2018-12-10 03:28 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復

使用道具 舉報

板凳
ID:855317 發表于 2020-12-6 12:40 | 只看該作者
原理圖
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线精品一区二区 | 三级国产三级在线 | 日韩高清一区二区 | 欧美日韩高清在线一区 | 九九综合 | 久久精品免费观看 | 日韩av在线不卡 | 国产精品美女久久久久久久网站 | 欧美精品一区二区在线观看 | 日本不卡在线视频 | 亚洲一区二区三区高清 | 免费中文字幕日韩欧美 | 手机日韩| 成人三级av | 日韩成人精品一区二区三区 | 国产一级片一区二区 | 久久久99精品免费观看 | 91丨国产| 国产亚洲成av人片在线观看桃 | 亚洲国产精品激情在线观看 | 一级做a | 国产福利资源 | 成人免费淫片aa视频免费 | 视频一区二区国产 | 欧美视频在线播放 | 国产午夜精品久久久 | 亚洲精品一区二三区不卡 | 伊人91在线 | 国产精品一区在线观看 | 精品1区2区 | 日韩成人影院 | 成人性生交大片免费看r链接 | 日韩第一区| 成人影院免费视频 | 亚洲精彩视频在线观看 | 精品久久久久久久久久久 | 国产乱码久久久久久 | 97精品久久 | 精品一级电影 | 在线视频中文字幕 | 狠狠婷婷综合久久久久久妖精 |