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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6377|回復: 9
收起左側

STM32雙路避障小車制作 附源程序仿真電路圖

  [復制鏈接]
ID:644357 發表于 2020-11-17 20:21 | 顯示全部樓層 |閱讀模式
材料清單:
    1供電:12V航模電池,12V~5V轉電壓模塊,開關*1
    2控制:STM32C8T6最小系統板,紅外避障模塊*2
    3驅動:L298N驅動模塊*2
    4對象:電機*4的小車
注:紅色部分不可缺。


放實物圖
   

32避障小車實物圖

32避障小車實物圖


線路連接圖

  

線路原理圖

線路原理圖


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png

(避障模塊沒有放進去因為是低電平觸發,兩個避障模塊接B0,B1口)


STM32單片機源程序文件:
  1. #include "ALLhander.h"

  2. int main(void)
  3. {        

  4.          
  5.          
  6.     LED_Config();
  7.           Motor_enable_Init();
  8.           Motor_PWM_control_GPIO_Config();
  9.       Tim3_mode_Config(T_Period,T_PSC,200);
  10.           Total_NVIC_interrupt_config();
  11.          
  12.           Obstacle_avoidance();

  13.    while(1)
  14.          {
  15. //                 
  16.                    straight();
  17.                  
  18.        Systick_Delay_ms(1000);
  19.       }
  20. }
復制代碼
L298N配置文件
  1. #include "L298N_GPIO.h"
  2. #include "systick.h"


  3. void LED_Config(void)
  4. {
  5.         GPIO_InitTypeDef  GPIO_InitStruct;
  6.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  7.         
  8.         //LED指示燈
  9.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13;                                 
  10.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;                  
  11.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  12.         
  13.         GPIO_Init(GPIOC, &GPIO_InitStruct);                                                  
  14. }


  15. void Front_Motor_enzble_control(void)
  16. {
  17.         GPIO_InitTypeDef  GPIO_InitStructure;
  18.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  19.         GPIO_InitStructure.GPIO_Pin = Motor1_cw_Pin|Motor1_ccw_Pin|Motor2_cw_Pin|Motor2_ccw_Pin;
  20.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  21.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  22.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  23. }
  24. void Back_Motor_enzble_control(void)
  25. {
  26.         GPIO_InitTypeDef  GPIO_InitStructure;
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  28.         GPIO_InitStructure.GPIO_Pin = Motor3_cw_Pin|Motor3_ccw_Pin|Motor4_cw_Pin|Motor4_ccw_Pin;
  29.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_Out_PP;
  30.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  31.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  32. }

  33. void Motor_enable_Init(void)
  34. {
  35.         Front_Motor_enzble_control();
  36.         Back_Motor_enzble_control();
  37. }

  38. void Motor_PWM_control_GPIO_Config(void)
  39. {
  40.         GPIO_InitTypeDef  GPIO_InitStructure;
  41.         
  42.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  43.         //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  44.         //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
  45.         
  46.         GPIO_InitStructure.GPIO_Pin = Speed_control_Pin;
  47.         GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP;
  48.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  49.         
  50.         GPIO_Init(Speed_control_Port,&GPIO_InitStructure);
  51. }

  52. void Tim3_mode_Config(uint16_t period,uint16_t Prescaler,uint16_t Pulse)
  53. {
  54.                   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  55.            TIM_OCInitTypeDef TIM_OCInitStructure;
  56.          
  57.          
  58.          //開啟定時器3的時鐘
  59.          RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  60.          
  61.          //TIM3重映射
  62.          GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);
  63.          
  64.          // 自動重裝載寄存器的值,累計TIM_Period+1個頻率后產生一個更新或者中斷
  65.         TIM_TimeBaseStructure.TIM_Period = period;        
  66.          
  67.         // 驅動CNT計數器的時鐘 = Fck_int/(psc+1)
  68.         TIM_TimeBaseStructure.TIM_Prescaler = Prescaler;
  69.          
  70.          //時鐘分割
  71.         TIM_TimeBaseStructure.TIM_ClockDivision = 0;  
  72.          
  73. //        // 時鐘分頻因子 ,配置死區時間時需要用到
  74. //        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;               

  75.         // 計數器計數模式,設置為向上計數
  76.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;               
  77.         // 重復計數器的值,沒用到不用管
  78.         //TIM_TimeBaseStructure.TIM_RepetitionCounter=0;        
  79.         
  80.         // 初始化定時器
  81.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

  82.          
  83.          
  84.         // 配置為PWM模式1
  85.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
  86.         
  87.         // 輸出使能
  88.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  89.         // 互補輸出使能
  90.         //TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  91.         
  92.         
  93.         // 設置脈沖寬度 CRR的值,0-65535
  94.         TIM_OCInitStructure.TIM_Pulse = Pulse;
  95.         
  96.         // 輸出通道電平極性配置
  97.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  98.         // 互補輸出通道電平極性配置
  99.         //TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  100.         
  101.         // 輸出通道空閑電平極性配置
  102.         //TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
  103.         // 互補輸出通道空閑電平極性配置
  104.         //TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
  105.         
  106. //  TIM_OC1Init(TIM3, &TIM_OCInitStructure);        
  107. //        TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);


  108.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);
  109.         TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);
  110. //        TIM_OC3Init(TIM2, &TIM_OCInitStructure);
  111. //        TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
  112. //        TIM_OC4Init(TIM2, &TIM_OCInitStructure);
  113. //        TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
  114.         
  115.         TIM_Cmd(TIM3, ENABLE);        
  116.         // 主輸出使能,當使用的是通用定時器時,這句不需要
  117.         //TIM_CtrlPWMOutputs(ADVANCE_TIM, ENABLE);
  118. }

  119. //電機1
  120. void Motor1_CW(void)   
  121. {
  122.      GPIO_ResetBits(GPIOA,Motor1_ccw_Pin);
  123.      GPIO_SetBits(GPIOA,Motor1_cw_Pin);
  124. }
  125. void Motor1_CCW(void)  
  126. {
  127.      GPIO_ResetBits(GPIOA,Motor1_cw_Pin);
  128.      GPIO_SetBits(GPIOA,Motor1_ccw_Pin);
  129. }
  130. //電機2
  131. void Motor2_CW(void)   
  132. {
  133.      GPIO_ResetBits(GPIOA,Motor2_ccw_Pin);
  134.      GPIO_SetBits(GPIOA,Motor2_cw_Pin);
  135. }
  136. void Motor2_CCW(void)  
  137. {
  138.      GPIO_ResetBits(GPIOA,Motor2_cw_Pin);
  139.      GPIO_SetBits(GPIOA,Motor2_ccw_Pin);
  140. }
  141. //電機3
  142. void Motor3_CW(void)   
  143. {
  144.      GPIO_ResetBits(GPIOB,Motor3_ccw_Pin);
  145.      GPIO_SetBits(GPIOB,Motor3_cw_Pin);
  146. }
  147. void Motor3_CCW(void)  
  148. {
  149.      GPIO_ResetBits(GPIOB,Motor3_cw_Pin);
  150.      GPIO_SetBits(GPIOB,Motor3_ccw_Pin);
  151. }
  152. //電機4
  153. void Motor4_CW(void)   
  154. {
  155.      GPIO_ResetBits(GPIOB,Motor4_ccw_Pin);
  156.      GPIO_SetBits(GPIOB,Motor4_cw_Pin);
  157. }
  158. void Motor4_CCW(void)  
  159. {
  160.      GPIO_ResetBits(GPIOB,Motor4_cw_Pin);
  161.      GPIO_SetBits(GPIOB,Motor4_ccw_Pin);
  162. }


  163. void straight(void)
  164. {
  165.   
  166.   Motor1_CW();
  167.   Motor2_CW();
  168.   Motor3_CW();
  169.   Motor4_CW();
  170. }
  171. void Turn_left(void)
  172. {
  173.         
  174.         Motor1_CCW();
  175.         Motor2_CW();
  176.         Motor3_CCW();
  177.         Motor4_CW();
  178.         
  179. }
  180. void Turn_left_move(void)
  181. {
  182.         
  183.         Motor1_CCW();
  184.         Motor2_CW();
  185.         Motor3_CW();
  186.         Motor4_CCW();
  187.         
  188. }
  189. void Turn_right(void)
  190. {
  191.         
  192.         Motor1_CW();
  193.         Motor2_CCW();
  194.         Motor3_CW();
  195.         Motor4_CCW();
  196.         
  197. }
  198. void Turn_right_move(void)
  199. {
  200.         
  201.         Motor1_CW();
  202.         Motor2_CCW();
  203.         Motor3_CCW();
  204.         Motor4_CW();
  205.         
  206. }
  207. void Back(void)
  208. {
  209.         
  210.         Motor1_CCW();
  211.         Motor2_CCW();
  212.         Motor3_CCW();
  213.         Motor4_CCW();
  214. }
  215. void Stop_motor1(void)
  216. {
  217.     GPIO_ResetBits(GPIOA,Motor1_cw_Pin);
  218.         GPIO_ResetBits(GPIOA,Motor1_ccw_Pin);
  219. }
  220. void Stop_motor2(void)
  221. {
  222.     GPIO_ResetBits(GPIOA,Motor2_cw_Pin);
  223.         GPIO_ResetBits(GPIOA,Motor2_ccw_Pin);
  224. }
  225. void Stop_motor3(void)
  226. {
  227.     GPIO_ResetBits(GPIOB,Motor3_cw_Pin);
  228.         GPIO_ResetBits(GPIOB,Motor3_ccw_Pin);
  229.         Systick_Delay_ms(300);
  230. }
  231. void Stop_motor4(void)
  232. {
  233.     GPIO_ResetBits(GPIOB,Motor4_cw_Pin);
  234.         GPIO_ResetBits(GPIOB,Motor4_ccw_Pin);
  235. }
復制代碼
中斷服務函數
  1. void Left_spinner_IRQHandler(void)
  2. {
  3.         if(EXTI_GetITStatus(EXTI_Line1) !=RESET)
  4.         {
  5.         Back();
  6.         Systick_Delay_ms(300);
  7.         Turn_right();
  8.         Systick_Delay_ms(200);
  9.         straight();
  10.         EXTI_ClearITPendingBit(EXTI_Line1);
  11.         }

  12. }
  13. void right_spinner_IRQHandler(void)
  14. {
  15.         if(EXTI_GetITStatus(EXTI_Line0) !=RESET)
  16.         {
  17.         Back();
  18.         Systick_Delay_ms(300);
  19.         Turn_left();
  20.         Systick_Delay_ms(200);
  21.         straight();
  22.         EXTI_ClearITPendingBit(EXTI_Line0);
  23.         }
  24.         
  25. }
復制代碼
帖主的水平可能并沒有那么高,但是我愿與大家共同分享,一起進步,歡迎吐槽打擾
下面包含所有文件:
基于STM32的雙路避障小車仿真圖源程序.7z (328.65 KB, 下載次數: 151)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:328014 發表于 2020-11-18 05:05 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:644292 發表于 2020-11-18 12:04 來自手機 | 顯示全部樓層
比賽用的?幾秒跑完?
回復

使用道具 舉報

ID:644357 發表于 2020-11-18 14:57 來自手機 | 顯示全部樓層
51hei團團 發表于 2020-11-18 05:05
好資料,51黑有你更精彩!!!

謝謝管理員完善我的帖子
回復

使用道具 舉報

ID:644357 發表于 2020-11-19 11:24 | 顯示全部樓層
小制作 發表于 2020-11-18 12:04
比賽用的?幾秒跑完?

并不是比賽,自己做著玩的
回復

使用道具 舉報

ID:846386 發表于 2020-11-22 11:36 | 顯示全部樓層
繼續完善,加油干
回復

使用道具 舉報

ID:644357 發表于 2020-11-24 10:18 來自手機 | 顯示全部樓層
kiccleaf 發表于 2020-11-22 11:36
繼續完善,加油干

后期會加入一個oled顯示屏,和一個4+  通道的pwm采集,用來捕獲天地飛的遙控信號,
回復

使用道具 舉報

ID:945217 發表于 2021-6-26 18:18 | 顯示全部樓層
能加上超聲波模塊避障嗎?
回復

使用道具 舉報

ID:644357 發表于 2023-5-5 09:16 | 顯示全部樓層
hrh123 發表于 2021-6-26 18:18
能加上超聲波模塊避障嗎?

這個沒法在仿真里加,水平有限
回復

使用道具 舉報

ID:644357 發表于 2023-5-5 09:17 | 顯示全部樓層
小制作 發表于 2020-11-18 12:04
比賽用的?幾秒跑完?

自己愛好搞得,沒錢只能仿真
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产黄色大片在线免费观看 | 黄色一级大片在线观看 | 91香蕉视频在线观看 | 久久99精品久久久久久 | 日韩精品极品视频在线观看免费 | 欧美性生活网 | 日日碰狠狠躁久久躁96avv | 波多野结衣在线观看一区二区三区 | 欧美中国少妇xxx性高请视频 | 81精品国产乱码久久久久久 | 99热在线观看精品 | 欧美一区二区三区视频在线观看 | 毛片免费观看 | 日韩一区二区三区视频 | 日韩一区二区精品 | 成人在线观看免费视频 | 亚洲精品视频网站在线观看 | 不卡视频一区二区三区 | 伊人色综合久久天天五月婷 | 日韩av在线一区二区 | 日韩三级精品 | 国产成人午夜精品影院游乐网 | 亚洲一区二区在线播放 | 一级毛片免费看 | 在线午夜 | 激情网站在线 | 性视频一区| 国产精品1 | 久久蜜桃精品 | 日本高清不卡视频 | 色综合中文 | 日韩精品久久一区二区三区 | 国产一区视频在线 | 国产日产精品一区二区三区四区 | 中文在线一区二区 | 成人h动漫精品一区二区器材 | 亚洲a视频 | 午夜在线免费观看 | 精品久久国产视频 | 1000部精品久久久久久久久 | 日韩中文字幕在线观看 |