找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2523|回复: 0
打印 上一主题 下一主题
收起左侧

stm8单片机智能车载空气净化器的原理图和PCB源程序设计

[复制链接]
跳转到指定楼层
#
ID:744308 发表于 2020-5-5 09:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
(1)开机后,紫灯持续显示2分钟后,风扇在高速模式下运行。空气质量传感器预热结束,开始检测空气质量。(实际测3.5分钟)
(2)当空气质量传感器检测到空气质量差时,指示灯仍然显示紫色,并持续30秒。
(3)检测空气质量,如检测结果仍然是差,则仍然执行第2步步骤。如检测到空气质量为良(或优)指示灯显示绿色,并持续20秒。
(4)检测气质量,如检测结果为差指示灯显示为紫色,并从第2步开始向下执行;如检测结果为良,则从第3步开始向下执行;检测结果为优,则指示灯显示蓝色。
(5)当空气质量传感器检测到差,步骤从第2步到第5步依次循环执行。

单片机源程序如下:
  1. #define __MAIN_C

  2. /* Includes ------------------------------------------------------------------*/
  3. #include "stm8s.h"
  4. #include "system.h"
  5. #include "sensor.h"
  6. #include "Key.h"
  7. #include "Speed_Control.h"
  8. #include "Filter.h"
  9. #include "EEPROM.h"
  10. /* Private defines -----------------------------------------------------------*/
  11. /* Private function prototypes -----------------------------------------------*/
  12. void CLK_Configuration(void);
  13. void GPIO_Configuration(void);
  14. void TIM4_Configuration(void);
  15. void TIM2_Configuration(void);
  16. void AD_Configuration(void);
  17. void FLASH_Configuration(void);
  18. /* Private functions ---------------------------------------------------------*/
  19. //u8 wData[10]={8,2,3,4,5,6,7,8,9,10};
  20. //u8 rData[10];

  21. void main(void)
  22. {
  23.   CLK_Configuration();
  24.   
  25.   GPIO_Configuration();
  26.   
  27.   Check_Manufature();
  28.   
  29.   TIM4_Configuration();  //定时时钟基准
  30.   
  31.   TIM2_Configuration();  //风扇PWM
  32.   
  33.   AD_Configuration();
  34.   
  35.   Parameter_Init();
  36.   
  37.   PIN_GAS_POWER(on); //传感器电源一直给
  38.   
  39.   /* Infinite loop */
  40.   while (1)
  41.   {
  42.     if(Manufature != 0)
  43.     {
  44.       Process_Manufature();
  45.     }
  46.     else
  47.     {
  48.       Process_Key();
  49.    
  50.       Process_LED();
  51.       
  52.       Process_Speed_Control();
  53.       
  54.       Process_AD();
  55.       
  56.       Process_RealAirQuality();
  57.       
  58.       Process_Anion();
  59.       
  60.       Process_Filter();
  61.     }
  62.   }
  63. }

  64. //------------------------------------------
  65. //系统时钟配置
  66. void CLK_Configuration(void)
  67. {
  68.     CLK->CKDIVR = 0x00; //16MHz
  69.     //CLK->PCKENR1 |= 0x10; //Peripheral Clock-TIM4
  70. }

  71. //------------------------------------------
  72. //输入输出配置
  73. void GPIO_Configuration(void)
  74. {
  75.   //PC7:NEGA1 PD3:NEGA2
  76.   GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_OUT_PP_LOW_SLOW);
  77.   GPIO_Init(GPIOD,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);
  78.   
  79.   //PC6:TriLED_1  PC5:TriLED_2  PC3:TriLED_3
  80.   GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_LOW_SLOW);
  81.   GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_SLOW);
  82.   GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);
  83.   
  84.   //PD2:KEY_FILTER_RESET  PC4:KEY_SPEED
  85.   GPIO_Init(GPIOD,GPIO_PIN_2,GPIO_MODE_IN_FL_NO_IT);
  86.   GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_IN_FL_NO_IT);
  87.   
  88.   //PB4:EE_SCL  PB5:EE_SDA
  89.   GPIO_Init(GPIOB,GPIO_PIN_4,GPIO_MODE_OUT_OD_HIZ_SLOW);
  90.   GPIO_Init(GPIOB,GPIO_PIN_5,GPIO_MODE_OUT_OD_HIZ_SLOW);
  91.   
  92.   //PA2:GAS_POWER
  93.   GPIO_Init(GPIOA,GPIO_PIN_2,GPIO_MODE_OUT_PP_HIGH_SLOW); //低电平有效
  94. }

  95. //------------------------------------------
  96. //------------------------------------------
  97. //100us时钟基准
  98. void TIM4_Configuration(void)
  99. {
  100.   //TIM4_TimeBaseInit(0x04, 100);  // Time base configuration
  101.   TIM4->PSCR = 0x04; //16
  102.   TIM4->ARR = (100-1);  //100
  103.   
  104.   TIM4_ARRPreloadConfig(ENABLE);
  105.    
  106.   TIM4_ClearFlag(TIM4_FLAG_UPDATE);  // Clear TIM4 update flag
  107.   
  108.   TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE); //Enable update interrupt
  109.   
  110.   enableInterrupts();  // enable interrupts

  111.   TIM4_Cmd(ENABLE);  // Enable TIM4
  112. }
  113. //------------------------------------------
  114. //PWM_Vfan风扇电压控制  PWM模式 10kHz载频
  115. void TIM2_Configuration(void)
  116. {
  117.   TIM2_DeInit();
  118.   
  119.   TIM2_TimeBaseInit(TIM2_PRESCALER_16,99); //载频10kHz
  120.   
  121.   //PWM1模式,输出使能,初始化占空比0%,有效电平为高电平
  122.   TIM2_OC1Init(TIM2_OCMODE_PWM1,TIM2_OUTPUTSTATE_ENABLE,0,TIM2_OCPOLARITY_HIGH);
  123.   
  124.   TIM2_OC1PreloadConfig(ENABLE);
  125.   
  126.   TIM2_ARRPreloadConfig(ENABLE);
  127.   
  128.   TIM2_Cmd(ENABLE); //TIM2 enable counter
  129. }
  130. //------------------------------------------
  131. //AD配置
  132. void AD_Configuration(void)
  133. {
  134.   /*
  135.   ADC1->TDRL = 0x60;  //disable schmitt trigger
  136.   ADC1->CR1 |= 0x40;  //f(adc)=f(master)/8
  137.   ADC1->CR2 |= 0x08;   //数据右对齐
  138.   //ADC1->CSR = 6;      //通道选择,初始化为AD_Vfan-AIN6
  139.   ADC1->CSR = 5;    //通道选择,GAS-AIN5
  140.   ADC1->CR1 |= ADC1_CR1_ADON; //start AD conversion
  141.   ADC1->CR1 |= ADC1_CR1_ADON; //启动转换必须第二次使用写指令来置位寄存器的位
  142.   */
  143.   
  144.   ADC1_DeInit();
  145.   
  146.   //单次采样,通道6,数据右对齐
  147.   ADC1_ConversionConfig(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_6,ADC1_ALIGN_RIGHT);
  148.   
  149.   //f(adc)=f(master)/8
  150.   ADC1_PrescalerConfig(ADC1_PRESSEL_FCPU_D8);
  151.   
  152.   //disable schmitt trigger
  153.   //ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_ALL,DISABLE);
  154.   //ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_CHANNEL5,DISABLE);
  155.   //ADC1_SchmittTriggerConfig(ADC1_SCHMITTTRIG_CHANNEL6,DISABLE);
  156.   
  157.   //Enable the ADC1 peripheral
  158.   ADC1->CR1 |= ADC1_CR1_ADON;
  159.   
  160.   AD_Start();
  161.   //ADC1_StartConversion(); //初始化AD启动需要写两次ADC1->CR1,以后只写一次就可以了
  162. }
  163. //------------------------------------------
  164. //FLASH配置-EEPROM
  165. void FLASH_Configuration(void)
  166. {
  167.   //Define FLASH programming time
  168.   FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);

  169.   //FLASH_Unlock(FLASH_MEMTYPE_PROG);
  170.   //Wait until Flash Program area unlocked flag is set
  171.   //while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET)
  172.   //{}

  173.   //Unlock flash data eeprom memory
  174.   FLASH_Unlock(FLASH_MEMTYPE_DATA);
  175.   //Wait until Data EEPROM area unlocked flag is set
  176.   //while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
  177.   //{}
  178. }

  179. #ifdef USE_FULL_ASSERT

  180. /**
  181.   * @brief  Reports the name of the source file and the source line number
  182.   *   where the assert_param error has occurred.
  183.   * @param file: pointer to the source file name
  184.   * @param line: assert_param error line source number
  185.   * @retval : None
  186.   */
  187. void assert_failed(u8* file, u32 line)
  188. {
  189.   /* User can add his own implementation to report the file name and line number,
  190.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  191.   /* Infinite loop */
  192.   while (1)
  193.   {
  194.   }
  195. }
  196. #endif

  197. /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
复制代码

所有资料51hei提供下载:
STM8S_StdPeriph_Template.rar (448.15 KB, 下载次数: 54)
原理图和PCB源文件.rar (652.5 KB, 下载次数: 70)
AP1301车载空气净化器修改后-20130811更新.doc (2.99 MB, 下载次数: 54)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏6 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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