找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32单片机电机控制系统程序 L9110H、PWM、矩阵键盘、DHT11、红外对射式测速

[复制链接]
ID:1002550 发表于 2022-5-11 12:58 | 显示全部楼层 |阅读模式
STM32F103C6T6电机控制系统:L9110H、PWM、矩阵键盘、DHT11、红外对射式测速

Altium Designer画的PCB图如下:(51hei附件中可下载工程文件)
51hei.png

单片机源程序如下:
  1. #include "stm32f10x.h" // Device header
  2. #include "Delay.h"
  3. #include "OLED.h"
  4. #include "MatrixKey.h"
  5. #include "Infrared.h"
  6. #include "Timer.h"
  7. #include "Motor.h"
  8. #include "PWM.h"
  9. #include "DHT11.h"

  10. unsigned char KeyNum=0,x=50,tempH,humiH;
  11. uint16_t count=0,Speed=0,countdown=0;
  12. unsigned int i,time,flag,flag2=0;

  13. float pid_p=3,pid_i=2,pid_d=1;
  14. unsigned int lastError=0;
  15. unsigned char pid_val_mid;//pid_val_mid脉冲宽度
  16. long int sumError=0;//sum偏差和

  17. unsigned int PID(void);
  18. void Speedcount(void);
  19. void Buzzer(void);
  20. int main(void)
  21. {
  22. //        NVIC_Configuration();
  23.         Buzzer_Init();        
  24.         OLED_Init();
  25.         CountSensor_Init();
  26.         Timer_Init();
  27.         DHT11_Init();
  28.         Motor_Init();
  29.         while(1)
  30.         {
  31.                
  32.         if(flag==1)
  33.         {
  34.                 Speedcount();
  35.         }
  36.         
  37.         
  38.         DHT11_Read_Data(&tempH,&humiH);
  39.         OLED_ShowString(1, 1, "Tem:");
  40.         OLED_ShowNum(2,1,tempH,2);
  41.         OLED_ShowString(1, 7, "PWM:");
  42.         OLED_ShowNum(2,7,x,2);
  43.         OLED_ShowString(3, 1, "Speed:");
  44.         OLED_ShowNum(4,1,countdown,4);
  45.         OLED_ShowString(3, 8, "KeyNum:");

  46.         if(tempH>=30&&tempH<=35)
  47.         {
  48.                 x=70;
  49.         }
  50.         else if(tempH>=35)
  51.         {
  52.                 x=100;
  53.                 Buzzer();
  54.         }
  55.         else if(tempH<30)
  56.         {
  57.                 x=50;
  58.         }
  59.         
  60.         Motor_SetSpeed(x);
  61. //        PID();
  62.         }
  63. }
  64. void TIM3_IRQHandler(void)
  65. {
  66.         
  67. if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) //1s
  68. {
  69.         TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
  70.         time++;
  71.         flag=1;
  72.         flag2=1;
  73. }
  74. }
  75. void Speedcount(void)
  76. {

  77.         count=CountSensor_Get();
  78.         countdown=count-Speed;
  79.         Delay_ms(20);
  80.         Speed=CountSensor_Get();
  81. //        GPIO_ResetBits(GPIOC,GPIO_Pin_13);
  82.         flag=0;
  83. }

  84. void Buzzer(void)
  85. {
  86.         GPIO_ResetBits(GPIOC,GPIO_Pin_15);
  87.         flag2=0;
  88. }
复制代码

Keil代码下载:
电机控制代码.7z (1.53 MB, 下载次数: 53)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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