欢迎交流学习
电路原理图如下:
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "lcd.h"
- #include "usart.h"
- #include "adc.h"
- #include "pid.h"
- #include "pid2.h"
- #include "timer.h"
- #include "math.h"
- int main(void)
- {
- u16 adcLihgt = 0,len = 0;
- u16 adcHeat = 0, value = 0,value2 = 0;
- float Speed = 0,Speed2 = 0;
- PID_init();
- PID2_init();
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
-
-
- //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- //LED_Init(); //LED端口初始化
- Adc_Init(); //ADC初始化
- TIM1_PWM_Init(999,71); //不分频。PWM频率=72000000/9000=8Khz
- uart_init(115200); //串口初始化为115200
- TIM_SetCompare1(TIM1,150);
- TIM_SetCompare4(TIM1,250);
- while(1)
- {
-
- adcLihgt = Get_Adc_Average(ADC_Channel_6,10);
- adcHeat = Get_Adc_Average(ADC_Channel_5,10);
- Speed = PID_realize((float)adcLihgt);
- Speed2 = PID2_realize((float)adcHeat);
- TIM_SetCompare1(TIM1,(int)(Speed+0.5));//Speed
- TIM_SetCompare4(TIM1,(int)(Speed2+0.5));
- if(USART_RX_STA&0x8000)
- {
- len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
- value = USART_RX_BUF[5];
- value = value<<8;
- value = value|USART_RX_BUF[4];
- if (value < 15532)
- aim = (float)(358.3*pow(value,0.32)+0.5);
- value2 = USART_RX_BUF[1];
- value2 = value2<<8;
- value2 = value2|USART_RX_BUF[0];
- if (value2 < 15532)
- aim2 = (float)(110*pow(value2,0.7)+0.5);
- USART_RX_STA=0;
- }
-
- printf("n2.val=%d\xff\xff\xff" ,(int)(pow(adcHeat/110,1.43)+2.5));//温度
- printf("n3.val=%d\xff\xff\xff" ,(int)pow(adcLihgt/358.3,3.125));//光照度 pow(adcLihgt/358.3,3.125)
-
- }
- }
复制代码
所有资料51hei提供下载:
电子系统制作.7z
(228.45 KB, 下载次数: 88)
|