单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 47|回复: 0
收起左侧

模拟刹车系统程序+PCB电路图,stm32单片机主控

[复制链接]
15773896335 发表于 2019-7-13 22:27 | 显示全部楼层 |阅读模式
模拟刹车系统,stm32主控,带iic模式oled屏,驱动一个电机,模拟汽车运动,实践表明,很稳定。需要自己下载去打板,资料很详细,程序、pcb、模块资料等等一应俱全。

1、采用STM32的原因是因为驱动简单,自带ADC,pwm输出,功耗也低。
2、L9110是电机驱动芯片,供电之后,给正反转引脚加pwm或者高低电平就行,而且隔离了控制端与电机端,能对控制端起到保护作用。
3、AO3401是PMOS管,在电路里面用了两个,构成防反接电路。
4、四线制swd下载方式,请自行百度,不再赘述。
5、为什么单独开了个串口不用,是因为在调试程序的过程中可以用他来返回调试信息,能更快的填好程序。
6、XL-1509-5V是开关电源芯片,选用他的原因是,它价格低,,使用简单,保证一个电感和电容即可稳定输出5V电源。
7、OLED是四线制iic通讯方式,程序简单,驱动快速,能显示中英文,字符等等,不管是在功能上还是接线方式上都比1602和12864简单。


Altium Designer画的STM32模拟刹车系统电路原理图和PCB图如下:(51hei附件中可下载工程文件)
0.png 0.png 0.png

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "bsp_usart.h"
  3. #include "bsp_adc.h"
  4. #include "bsp_pwm_output.h"
  5. #include "TIM2.h"
  6. #include "UltrasonicWave.h"
  7. #include "bsp_systick.h"
  8. #include "OLED_I2C.h"
  9. #include "bsp_i2c_gpio.h"
  10. #include "bsp_buzz.h"


  11. void KaiJi_Init(void);
  12. void  OLED_deal(void);
  13. extern float UltrasonicWave_Distance;
  14. extern uint8_t modeflage;
  15. /**
  16.   * @brief  主函数
  17.   * @param  无
  18.   * @retval 无
  19.   */
  20. int main(void)
  21. {               
  22.     SystemInit();
  23.                 USART_Config();
  24.                 GENERAL_TIM_Init();
  25.                 ADCx_Init();
  26.                 NVIC_Configuration();
  27.                 TIM2_Configuration();
  28.                 UltrasonicWave_Configuration();
  29.           i2c_Init();//I2C总线的GPIO初始化
  30.            OLED_Init();//oled初始化
  31.           Buzz_GPIO_Config();
  32.           KaiJi_Init();
  33.         printf("\r\n ---智能刹车系统----\r\n");
  34.        
  35.         while (1)
  36.         {       
  37.                
  38. //                KaiJi_Init();
  39.                
  40.                 OLED_deal();
  41.                 ADC_deal();
  42.                 UltrasonicWave_StartMeasure();
  43.                 ZDSC_Init();
  44.                 SHACHE_Init();
  45.           Buzz_serve();
  46.          
  47.         }
  48. }
  49. /*********************************************END OF FILE**********************/
  50. //开机显示函数
  51. void KaiJi_Init(void)
  52. {
  53.         int i;
  54.         for(i=3;i<7;i++){OLED_ShowCN((i-1)*16,0,i);}
  55.   OLED_ShowStr(12,3,(unsigned char*)"Name:",2);
  56.         for(i=0;i<3;i++){OLED_ShowCN((i+4)*16,3,i);}
  57.         OLED_ShowStr(12,6,(unsigned char*)"Date:",2);
  58.         OLED_ShowStr(52,6,(unsigned char*)"2019/4/15",2);
  59.         Systick_delay_ms(2500);
  60.         OLED_CLS();
  61. }


  62. void  OLED_deal(void)
  63. {
  64.         int i;
  65. char j=10;
  66.         for(i=7;i<13;i++){OLED_ShowCN((i-6)*16,0,i);}
  67.           //定义三个数组,作为传感器值缓冲
  68.                 char buffer1[5]={0},buffer2[5]={0};
  69.                 //用sprintf函数将测量值转换为字符形式
  70.           sprintf(buffer1,"%.2f",UltrasonicWave_Distance);
  71.                 sprintf(buffer2,"%d",(TIM_GetCapture2(TIM1))/90);
  72. //                printf("%s\r\n%d\r\n",buffer2,(7200-TIM_GetCapture2(TIM1))/72);
  73. //                printf("\r\n%d\r\n",TIM_GetCapture2(TIM1));
  74.                 if(modeflage==1)
  75.                 {
  76.                
  77.                 //distance from  the car in front 简称DFCF,表示离前车的距离
  78.                 OLED_ShowStr(0,2,(unsigned char*)"DFCF:",2);
  79.                 //显示温度测量值
  80.                 OLED_ShowStr(40,2,buffer1,2);
  81.                 //显示单位cm
  82.                 OLED_ShowStr(72,2,(unsigned char*)"CM  ",2);
  83.                 //显示运行模式,具体作用函数在ZDSC_Init();里面:
  84.                 OLED_ShowStr(0,4,(unsigned char*)"MODE:",2);
  85.                 OLED_ShowStr(72,4,"      ",2);

  86.                 //显示速度
  87.                 OLED_ShowStr(0,6,(unsigned char*)"SPEED:",2);
  88.                 //显示模拟速度量0->80
  89.                 if(TIM_GetCapture2(TIM1)<720)
  90.                   {
  91.                         OLED_ShowStr(48,6,buffer2,2);
  92.                   OLED_ShowStr(56,6,"         ",2);
  93.                   }
  94.                 else
  95.                         {
  96.                          OLED_ShowStr(48,6,buffer2,2);
  97.                          OLED_ShowStr(64,6,"        ",2);
  98.                    }
  99.                 }
  100.                 if(modeflage==0)
  101.                 {
  102.                 //显示        警告信息
  103.     OLED_ShowStr(0,2,"   ",2);
  104.                 OLED_ShowStr(24,2,(unsigned char*)"Warning!!!",2);
  105.                 //显示即将撞车
  106.           OLED_ShowStr(0,4,"   ",2);
  107.                 OLED_ShowStr(20,4,(unsigned char*)"Crash Soon!",2);       
  108.           //显示紧急制动
  109.                 OLED_ShowStr(0,6,(unsigned char*)"EmergencyBraking",2);
  110.                 }
  111. }
复制代码
0.png
所有资料51hei提供下载:
刹车系统pcb+程序.7z (7.39 MB, 下载次数: 2)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51Hei单片机16群 联系QQ:125739409;技术交流QQ群7344883

Powered by 单片机教程网

快速回复 返回顶部 返回列表